225025 发表于 2019-1-7 08:15:02

drbd+heartbeat实现mysql主备并自动切换

一、阐述
1、DRBD:
DistributedReplicated Block Device(DRBD)是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。
数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回)。
  
工作原理:
在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵.因为数据同时存在于本地主机和远程主机上,切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了。
http://s3.运维网.com/wyfs02/M02/58/94/wKiom1S0oKXS3RnNAAGOw7O5S_o136.jpg
2、Heartbeat:
Heartbeat 项目是Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统。心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能。

工作原理:
heartbeat(Linux-HA)的工作原理:heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未收到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运 行在对方主机上的资源或者服务。
http://s3.运维网.com/wyfs02/M01/58/90/wKioL1S0oYSizjR8AAGEW4lVnL4597.jpg
3、MySQL:
MySQL是一个关系型数据库管理系统,由瑞典MySQLAB公司开发,目前属于Oracle公司。MySQL是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(RelationalDatabase Management System:关系数据库管理系统)应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。具体详情访问官方网站http://www.mysql.com/
二、安装部署
1、规划
  database1192.168.1.167
  database2192.168.1.168
  VIP192.168.1.171
  
2、修改主机名和域名解析
  # sshroot@192.168.1.167
  # vim/etc/hosts
  192.168.1.167database1
  192.168.1.168database2
  # vim /etc/sysconfig/network
  NETWORKING=yes
  HOSTNAME=database1
  
  # sshroot@192.168.1.168
  # vim/etc/hosts
  192.168.1.167database1
  192.168.1.168database2
  #hostname database2
  # vim /etc/sysconfig/network
  NETWORKING=yes
  HOSTNAME=database2
  
3、安装DRBD
  # cd /usr/local/src/
  # tar xf drbd-heartbeat-8.4.4-2.el6.tar.gz
  # rpm -ivh drbd-*.rpm
  
  # cd /usr/local/src/
  # tar xf drbd-heartbeat-8.4.4-2.el6.tar.gz
  # rpm -ivh drbd-*.rpm
  
  # 加载drbd模块,查看模块情况
  # modprobe drbd
  # lsmod | grep drbd
  drbd                  337142 0
  libcrc32c               12461 drbd
  
  # modprobe drbd
  # lsmod | grep drbd
  drbd                  3371420
  libcrc32c               12461 drbd
  
  # 查看第二块磁盘名称,这里是/dev/sdb
  #fdisk –l
  ……
  #fdisk –l
  ……
  
  # 分区
  # parted /dev/sdb
  (parted)mklabel gpt
  (parted)p
  (parted)mkpart
  Partitionname?[]? database
  Filesystem type??
  Start?0
  End? 100%
  Ignore/Cancel?I
  (parted)p
  (parted)q
  # database2如上操作
  
  # vim /etc/drbd.d/database.res
  resourcedb {
         protocol C;
         startup {
                 wfc-timeout 0;
                 degr-wfc-timeout 120;
         }
         disk {
                 on-io-error detach;
         }
         net {
                 after-sb-0pridiscard-zero-changes;
                 after-sb-1pri discard-secondary;
                 after-sb-2pri disconnect;
                 max-buffers 2048;
                 ko-count 4;
         }
         syncer {
                 rate 100M;
         }
         on database1 {
                 device /dev/drbd0;
                 disk /dev/sdb1;
                 address 192.168.1.167:7801;
                 meta-disk internal;
                       }
         on database2 {
                 device /dev/drbd0;
                 disk /dev/sdb1;
                 address 192.168.1.168:7801;
                 meta-disk internal;
         }
  }
  
  # scp -r /etc/drbd.d database2:/etc/
  
  # 初始化DRBD分区
  # drbdadm create-md db
  
  # drbdadm create-md db
  
  # 启动DRBD服务,两边一起启动
  # /etc/init.d/drbd start
  
  # /etc/init.d/drbd start
  
  # service drbd status
  drbddriver loaded OK; device status:
  version:8.4.4 (api:1/proto:86-101)
  GIT-hash:599f286440bd633d15d5ff985204aff4bccffadd build by root@Database2, 2013-11-2914:02:29
  m:rescs      ro                   ds                         pmounted fstype
  0:db   Connected Secondary/Secondary Inconsistent/InconsistentC
  
  #设置database1为主节点
  # drbdadm -- --overwrite-data-of-peer primary all
  # drbdadm primary db
  
  # 数据正在同步
  # service drbd status
  drbddriver loaded OK; device status:
  version:8.4.4 (api:1/proto:86-101)
  GIT-hash:599f286440bd633d15d5ff985204aff4bccffadd build by root@Database2, 2013-11-2914:02:29
  m:rescs         ro               ds                     pmounted fstype
  0:db   SyncSource Primary/Secondary UpToDate/InconsistentC
  ...    sync'ed:   7.8%               (4724/5116)M
  
  等待同步完成后…
  # 格式化并挂载drbd分区/dev/drbd0
  # mkfs.ext4 /dev/drbd0
  # mount /dev/drbd0 /mnt
  
  # drbd服务开机自启动
  # chkconfig drbd on
  # chkconfig drbd on
  
4、迁移MySQL
  # 默认已经安装了mysql-service,设置mysql的启动状态为关闭,即不自动启动
  # chkconfig mysql off
  # chkconfig mysql off
  
  # 迁移mysql数据库
  # cp -r /var/lib/mysql/* /mnt
  #umount /mnt
  
  #将/dev/drbd0挂载到原来的mysql数据目录
  #mount /dev/drbd0 /var/lib/mysql
  
  # 修改挂载后目录的属主属组,启动mysql
  #chown –R mysql.mysql mysql
  #/etc/init.d/mysql start
  
5、安装Heartbeat
  # tar fxvz heartbeat-3.0.4.el6.tar.gz
  # rpm -ivh *.rpm
  # tar fxvz heartbeat-3.0.4.el6.tar.gz
  # rpm -ivh *.rpm
  #cp /usr/share/doc/heartbeat-3.0.4/authkeys /usr/share/doc/heartbeat-3.0.4/ha.cf/usr/share/doc/heartbeat-3.0.4/haresources /etc/ha.d/
  
  # 注意ucast后面跟的心跳地址是对方的,需要更新的内核支持。换成bcast
  # grep -vE '^$|^#' /etc/ha.d/ha.cf
  logfile/var/log/ha-log
  logfacilitylocal0
  keepalive2
  deadtime15
  bcast   eth0            # Linux
  respawnroot /usr/lib64/heartbeat/ipfail
  apiauthipfail gid=root uid=root
  auto_failbackoff
  nodedatabase1
  nodedatabase2
  
  # 注意bcast后面跟的心跳地址是对方的
  # grep -vE '^$|^#' /etc/ha.d/ha.cf
  logfile/var/log/ha-log
  logfacilitylocal0
  keepalive2
  deadtime15
  bcast   eth0            # Linux
  respawnroot /usr/lib64/heartbeat/ipfail
  apiauthipfail gid=root uid=root
  auto_failbackoff
  nodedatabase1
  nodedatabase2
  
  # 编辑验证文件
  # vim /etc/ha.d/authkeys
  auth 1
  1 crc
  # chmod 600 /etc/ha.d/authkeys
  
  # vim /etc/ha.d/authkeys
  auth 1
  1 crc
  # chmod 600 /etc/ha.d/authkeys
  
  # 编辑集群资源文件
  # vim /etc/ha.d/haresources
  # 这个文件两个机器是一样的,除了主机名部分
  # grep -vE '^$|^#' /etc/ha.d/haresources
  database1192.168.1.171/24/eth0 drbddisk::db Filesystem::/dev/drbd0::/var/lib/mysql::ext4mysql
  # grep -vE '^$|^#' /etc/ha.d/haresources
  database2192.168.1.171/24/eth0 drbddisk::db Filesystem::/dev/drbd0::/var/lib/mysql::ext4mysql
  
  # 设置heartbeat自启动
  # chkconfig heartbeat on
  # chkconfig heartbeat on
  
  #启动heartbeat
  #/etc/init.d/heartbeat start
  #/etc/init.d/heartbeat start
  
  # 重启任一一台主机mysql将会漂移到新的IP之上
  
  # 删除/var/lib/heartbeat/下文件,新版本的heartbeat为集群环境提供了一些功能。
  # 如果不删除会在关闭heartbeat服务时hanged,无法关闭
  # rm -rf /var/lib/heartbeat/*
  # rm -rf /var/lib/heartbeat/*
  
  ERROR:should_drop_message: attempted replay attack ?
  
  可能原因:ha和ha2的uuid改变引起,可能ha2是通过VMware克隆复制方式产生的或hostname设置在安装heartbeat之后
  解决方案:让uuid重新生成,可以先卸载heartbeat,删除/var/lib/heartbeat目录(uuid文件就在这个目录下,该目录在卸载时不被删除,需手动删除,如果不手动删除,重新安装还会使用原来uuid)。
  

  交流群:374506612,提供源码和支持。



页: [1]
查看完整版本: drbd+heartbeat实现mysql主备并自动切换