一文详解 MySQL 高可用之 DRBD( 四 )


  • WFConnection:等待和对等节点建立网络连接 。
  • WFReportParams:已经建立TCP连接,本节点等待从对等节点传来的第一个网络包 。
  • Connected:DRBD已经建立连接,数据镜像现在可用,节点处于正常状态 。
  • StartingSyncS:完全同步,有管理员发起的刚刚开始同步,未来可能的状态为SyncSource或PausedSyncS 。
  • StartingSyncT:完全同步,有管理员发起的刚刚开始同步,下一状态为WFSyncUUID 。
  • WFBitMapS:部分同步刚刚开始,下一步可能的状态为SyncSource或PausedSyncS 。
  • WFBitMapT:部分同步刚刚开始,下一步可能的状态为WFSyncUUID 。
  • WFSyncUUID:同步即将开始,下一步可能的状态为SyncTarget或PausedSyncT 。
  • SyncSource:以本节点为同步源的同步正在进行 。
  • SyncTarget:以本节点为同步目标的同步正在进行 。
  • PausedSyncS:以本地节点是一个持续同步的源,但是目前同步已经暂停,可能是因为另外一个同步正在进行或是使用命令(drbdadm pause-sync)暂停了同步 。
  • PausedSyncT:以本地节点为持续同步的目标,但是目前同步已经暂停,这可以是因为另外一个同步正在进行或是使用命令(drbdadm pause-sync)暂停了同步 。
  • VerifyS:以本地节点为验证源的线上设备验证正在执行 。
  • VerifyT:以本地节点为验证目标的线上设备验证正在执行 。
  • 测试MySQL数据同步
    1. 将MySQL数据目录设置为DRBD挂载点
    在my.cnf配置文件中修改设置:
    datadir = /mnt/2. 启动mysql服务
    # 停止mysql服务service mysql stop# 将数据目录拷贝到挂载点cp -r /data/* /mnt/# 将数据目录的属主改为MySQLchown -R mysql:mysql /mnt/# 启动mysql服务service mysql start3. 建立数据库表
    create database db1;use db1;create table t1 (a int);insert into t1 select 1;commit;4. 手工执行主从切换,验证数据同步
    (1)将node1降为从
    service mysql stopumount /mntdrbdadm secondary mysql(2)将node2升为主,并启动mysql服务
    drbdadm primary mysqlmount /dev/drbd0 /mntchown -R mysql:mysql /mntservice mysql start(3)验证数据同步
    mysql> select * from db1.t1;+------+| a |+------+| 1 |+------+1 row in set (0.00 sec)可以看到数据已经同步,在node2上已经有了新建的库表数据 。
    4.heartbeat+DRBD+mysql高可用方案
    前面的DRBD环境充其量只是一个容灾配置,还算不上高可用方案 。设想当主节点的MySQL数据库出现问题时,需要人为发现故障,并手工执行主从切换,这个过程不可避免的长时间停止服务 。要保证主服务器不间断服务,需要实现自动故障转移,与DRBD一起使用比较多的是Heartbeat 。顾名思义,Heartbeat像是在主从两个DRBD之间接了一条心跳线,当从节点接收不到主节点的心跳时接管服务 。Heartbeat双机热备软件来保证数据库服务的稳定性和连续性,数据一致性由DRBD来保证 。默认情况下只有一台MySQL实例在工作,当主MySQL服务器出现问题后,系统将自动切换到备机上继续提供服务 。这个方案的优点显而易见:安全性、稳定性、可用性高,出现故障自动切换;但缺点也彰明较著:只有一台服务器提供服务,成本相对较高,不方便扩展,可能会发生脑裂 。
    1. 配置
    实验环境的架构如图2所示 。
    一文详解 MySQL 高可用之 DRBD

    文章插图
    图2 DRBD+Heartbeat+MySQL 高可用架构
    前面已经完成了DRBD+mysql的安装部署,下面配置heartbeat 。heartbeat的安装参见“https://wxy0327.blog.csdn.net/article/details/81188814#%E4%BA%8C%E3%80%81%E5%AE%89%E8%A3%85Heartbeat”
    (1)编辑配置文件ha.cf
    node1上的ha.cf文件内容如下:
    [root@node1 ~]# cat /usr/local/heartbeat/etc/ha.d/ha.cf debugfile /var/log/ha-debuglogfile /var/log/ha-loglogfacility local0keepalive 1deadtime 30warntime 10initdead 120udpport 694bcast ens32ucast ens32 172.16.1.126auto_failback offnode node1node node2ping 172.16.1.254respawn hacluster /usr/local/heartbeat/libexec/heartbeat/ipfailapiauth ipfail gid=haclient uid=hacluster[root@node1 ~]#节点2上的/usr/local/heartbeat/etc/ha.d/ha.cf文件只有一个配置项与节点1不同 。
    ucast ens32 172.16.1.125(2)编辑认证文件authkeys
    节点1与节点2上的authkeys文件相同,内容如下:
    [root@node1 ~]# cat /usr/local/heartbeat/etc/ha.d/authkeysauth 11 crc(3)编辑资源配置文件haresources


    推荐阅读