• MHA实现Mysql高可用集群


    MHA简介:
    MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的高可用。

    MHA组成:
    该软件由两部分组成:MHA Manager(管理节点)和MHA Node(数据节点)。MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。MHA Node运行在每台MySQL服务器上,MHA Manager会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

    Manager工具包主要包括以下几个工具:

    masterha_check_ssh              检查MHA的SSH配置状况
    masterha_check_repl             检查MySQL复制状况
    masterha_manger                 启动MHA
    masterha_check_status           检测当前MHA运行状态
    masterha_master_monitor         检测master是否宕机
    masterha_master_switch          控制故障转移(自动或者手动)
    masterha_conf_host              添加或删除配置的server信息

    Node工具包(这些工具通常由MHA Manager的脚本触发,无需人为操作)主要包括以下几个工具:

    save_binary_logs                保存和复制master的二进制日志
    apply_diff_relay_logs           识别差异的中继日志事件并将其差异的事件应用于其他的slave
    filter_mysqlbinlog              去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
    purge_relay_logs                清除中继日志(不会阻塞SQL线程)

    MHA工作原理:

    在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用MySQL 5.5的半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性。


    目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,因为至少需要三台服务器,出于机器成本的考虑,淘宝也在该基础上进行了改造,目前淘宝TMHA已经支持一主一从。我们自己使用其实也可以使用1主1从,但是master主机宕机后无法切换,以及无法补全binlog。master的mysqld进程crash后,还是可以切换成功,以及补全binlog的。

    官方介绍:https://code.google.com/p/mysql-master-ha/

    下图展示了如何通过MHA Manager管理多组主从复制。结构如下:


    一、实验环境准备


    系统版本

    1 [root@vin ~]# cat /etc/redhat-release 
    2 CentOS Linux release 7.3.1611 (Core)

    内核参数

    1 [root@vin ~]# uname -r
    2 3.10.0-514.el7.x86_64

    主机配置参数:准备四台干净的虚拟机node{1,2,3,4}

    角色                   ip地址               主机名          server_id                类型
    MHA-Manager            172.18.253.73       node1            -                      监控复制组
    Master               172.18.250.27       node2            1                      写入
    Candicate master       172.18.253.160      node3            2                      读
    Slave           172.18.254.15       node4            3

    实现互相能够解析主机名:

    1 [root@vin ~]# cat /etc/hosts
    2 172.18.253.73  node1
    3 172.18.250.27  node2
    4 172.18.253.160 node3
    5 172.18.254.15  node4

    实现四台主机间的两两互相无密钥通信:

    1 [root@vin ~]# ssh-keygen -t rsa -P ''
    2 [root@vin ~]# ssh-copy-id -i ./id_rsa.pub node1:
    3 [root@vin ~]# for i in {2..4};do scp id_rsa{,.pub} authorized_keys root@node$i:/root/.ssh/;done


    二、实现主从复制集群


    Master配置:
    修改配置文件

    1 [root@vin ~]# cat /etc/my.cnf.d/server.cnf
    2 [server]
    3 server_id = 1
    4 log_bin = master-log
    5 relay_log = relay-log
    6 
    7 innodb_file_per_table = ON
    8 skip_name_resolve = ON
    9 max_connections = 5000

    创建具有复制功能的用户与用于Manager节点管理的用户;

     1 [root@vin ~]# mysql
     2 MariaDB [(none)]> show master statusG;
     3 *************************** 1. row ***************************
     4             File: master-log.000003
     5         Position: 245
     6     Binlog_Do_DB:
     7 Binlog_Ignore_DB:
     8 MariaDB [(none)]> grant replication slave,replication client on *.* to 'vinsent'@'172.18.%.%' identified by 'vinsent';
     9 MariaDB [(none)]> grant ALL  on *.* to 'MhaAdmin'@'172.18.%.%' identified by 'MhaPass';
    10 MariaDB [(none)]> flush privileges;

    说明:我们应该先查看主节点正在使用的日志文件及对应的POSITION,再创建用户,以便于从节点能够同步拥有这些用户;创建Manager节点用于管理的用户时需要注意的是,用户名中的主机范围必须能够囊括其他节点的地址。

    Slave{1,2}配置:

    两个从节点的配置相同;修改配置文件,以支持主从复制功能

     1 [root@vin ~]# cat /etc/my.cnf.d/server.cnf
     2 [server]
     3 server_id = 2
     4 log_bin = master-log
     5 relay_log = relay-log
     6 
     7 relay_log_purge = OFF
     8 read_only = ON
     9 
    10 innodb_file_per_table = ON
    11 skip_name_resolve = ON
    12 max_connections = 5000

    连接至主节点,实现同步;

     1 [root@vin ~]# mysql
     2 MariaDB [(none)]> change master to master_host='172.18.250.27',master_user='vinsent',master_password='vinsent',master_log_file='master-log.000003',master_log_pos=245;
     3 MariaDB [(none)]> start slave;
     4 MariaDB [(none)]> show slave statusG;
     5 *************************** 1. row ***************************
     6                Slave_IO_State: Waiting for master to send event
     7                   Master_Host: 172.18.250.27
     8                   Master_User: vinsent
     9                   Master_Port: 3306
    10                 Connect_Retry: 60
    11               Master_Log_File: master-log.000003
    12           Read_Master_Log_Pos: 637
    13                Relay_Log_File: relay-log.000002
    14                 Relay_Log_Pos: 922
    15         Relay_Master_Log_File: master-log.000003
    16              Slave_IO_Running: Yes
    17             Slave_SQL_Running: Yes
    18               Replicate_Do_DB:
    19           Replicate_Ignore_DB:
    20            Replicate_Do_Table:
    21        Replicate_Ignore_Table:
    22       Replicate_Wild_Do_Table:
    23   Replicate_Wild_Ignore_Table:
    24                    Last_Errno: 0
    25                    Last_Error:
    26                  Skip_Counter: 0
    27           Exec_Master_Log_Pos: 637
    28               Relay_Log_Space: 1210
    29               Until_Condition: None
    30                Until_Log_File:
    31                 Until_Log_Pos: 0
    32            Master_SSL_Allowed: No
    33            Master_SSL_CA_File:
    34            Master_SSL_CA_Path:
    35               Master_SSL_Cert:
    36             Master_SSL_Cipher:
    37                Master_SSL_Key:
    38         Seconds_Behind_Master: 0
    39 Master_SSL_Verify_Server_Cert: No
    40                 Last_IO_Errno: 0
    41                 Last_IO_Error:
    42                Last_SQL_Errno: 0
    43                Last_SQL_Error:
    44   Replicate_Ignore_Server_Ids:
    45              Master_Server_Id: 1

    说明:查看从节点状态,确保"Slave_IO_Running","Slave_SQL_Running"的值为"YES",即从节点正常工作,并且"Last_IO_Errno","Last_SQL_Errno"中没有错误信息提示,出现错误,一般就是连接性错误,这说明要么用户创建的有问题,要么主从节点的数据不同步,请确保两者数据一致。

    测试一下从节点是否将主节点的数据同步至本地:

     1 MariaDB [(none)]> select user from mysql.user;
     2 +----------+
     3 | user     |
     4 +----------+
     5 | root     |
     6 | MhaAdmin |
     7 | vinsent  |
     8 | root     |
     9 |          |
    10 | root     |
    11 |          |
    12 | root     |
    13 +----------+
    View Code


    三、安装MHA包


    除了源码包,MHA官方也提供了rpm格式的程序包,其下载地址为http://code.google.com/p/mysql-master/wiki/Downloads?tm=2。CentOS 7 系统可直接使用适用于el6的程序包,另外,MHA Manager和MHA NODe程序包的版本并不强制要求一致。

    Manager节点:

    1 [root@vin ~]# ls
    2 mha4mysql-manager-0.56-0.el6.noarch.rpm  mha4mysql-node-0.56-0.el6.noarch.rpm
    3 [root@vin ~]# yum install /root/*.rpm       # 使用yum安装可执行解决依赖性,前提是你的yum源配置正确

    Master && SLave{1,2}节点:

    1 [root@vin ~]# ls
    2 mha4mysql-node-0.56-0.el6.noarch.rpm
    3 [root@vin ~]# yum install /root/*.rpm


    四、初始化MHA


    MHA的配置文件符合ini风格,可定义一个默认的配置文件用于存放一些公共的基础配置,该文件放置于/etc/且命名为masterha_default.cnf,也可以所有的Master/Slave集群共享一个全局配置。如果仅仅监控一致集群,可直接通过application的配置来提供各服务器的默认配置信息,而每个application的配置文件路径为自定义,例如:
    Manager节点:

     1 [root@vin ~]# mkdir /etc/masterha/
     2 [root@vin ~]# vim /etc/masterha/app1.cnf
     3 [server default]
     4 user=MhaAdmin
     5 password=MhaPass
     6 manager_workdir=/data/masterha/app1
     7 manager_log=/data/masterha/manager.log
     8 remote_workdir=/data/masterha/app1             # 远程主机的工作目录
     9 ssh_user=root                                  # ssh连接的用户名;由于实现了ssh无密钥登录,这里就不用再指定密码了
    10 #ssh_password=
    11 repl_user=vinsent                              # 从节点连接至主节点同步的用户名及密码;因为如果主节点故障,将有新的主节点产生
    12 repl_password=vinsent
    13 ping_interval=1                                # 监控每台服务器是否健康时延,单位s
    14 
    15 [server1]
    16 hostname=172.18.250.27
    17 candidate_master=1                             # 是否会成为未来的主节点,这里他就是默认得主节点
    18 
    19 [server2]
    20 hostname=172.18.253.160
    21 candidate_master=1                             
    22 
    23 [server3]
    24 hostname=172.18.254.15
    25 candidate_master=1

    检测各节点之间ssh可用性

    1 [root@vin ~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf
    2 ...
    3 - [info] All SSH connection tests passed successfully.   # 出现该提示,则说明ssh可用

    检测管理的mysql主从复制集群的连接配置参数是否满足

    1 [root@vin ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf
    2 ...
    3 Mon Nov 13 22:11:30 2017 - [info] Slaves settings check done.
    4 Mon Nov 13 22:11:30 2017 - [info]
    5 172.18.250.27(172.18.250.27:3306) (current master)
    6  +--172.18.253.160(172.18.253.160:3306)
    7  +--172.18.254.15(172.18.254.15:3306)
    8 ...
    9 MySQL Replication Health is OK.

    启动MHA

    1 [root@vin ~]# masterha_manager --conf=/etc/masterha/app1.cnf
    2 Mon Nov 13 22:16:17 2017 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.     # 没有默认配置文件出现的警告信息,可忽略
    3 Mon Nov 13 22:16:17 2017 - [info] Reading application default configuration from /etc/masterha/app1.cnf..
    4 Mon Nov 13 22:16:17 2017 - [info] Reading server configuration from /etc/masterha/app1.cnf..

       说明:MHA默认是工作在前台的,要想将它防止至后台运行,可使用下面的命令:
         [root@vin ~]# nohup masterha_manager --conf=/etc/masterha/app1.cnf > /data/masterha/app1/managerha/manager.log 2&>1 &

    成功启动之后,查看一下Master节点的状态

    1 [root@vin ~]# masterha_check_status --conf=/etc/masterha/app1.cnf
    2 app1 (pid:4090) is running(0:PING_OK), master:172.18.250.27

      说明:如果未成功启动,这里的命令将不能够正确执行;提示:"app1 is stopped(2:NOT_RUNNING)."


    五、配置keepalived


    设置为用户提供服务的地址为"172.18.14.55/16",通过keepalived实现VIP在Mysql复制集群中浮动。
    安装keepalived:
    在Mysql复制集群的所有主机上都安装配置keepalived

    1 [root@vin ~]# yum install keepalived -y

    修改keepalived配置文件实现keepalived集群:
    Master:

     1 [root@vin ~]# vim /etc/keepalived/keepalived.conf
     2 ! Configuration File for keepalived
     3 
     4 global_defs {
     5    notification_email {
     6      root@localhost
     7    }
     8    notification_email_from kadmin@localhost
     9    smtp_server 127.0.0.1
    10    smtp_connect_timeout 30
    11    router_id LVS_DEVEL
    12    route_mcast_group4 224.14.0.14
    13 }
    14 
    15 vrrp_script chk_mysql {
    16     script "killall -0 mysql"       # 监控mysql是否工作正常的脚本
    17     insterval 1               # 没秒探测一次
    18     weight -10                 # 如果出现异常,即mysql服务不可用,则将优先级下调10
    19 }    
    20 
    21 vrrp_instance VI_1 {
    22     state BACKUP
    23     interface ens33
    24     virtual_router_id 66
    25     priority 98               # 优先级
    26     advert_int 1
    27     authentication {
    28         auth_type PASS
    29         auth_pass 1111
    30     }
    31     virtual_ipaddress {
    32         172.18.14.55/16           # vip地址
    33     }
    34     track_script {
    35       chk_mysql               # 调用监控脚本
    36     }
    37 
    38 }

    复制该配置文件至其他Slave节点:

    1 [root@vin ~]# for i in {3,4};do scp /etc/keepalived/keepalived.conf root@node$i:/etc/keepalived/ ;done

      复制过去并不能直接使用,由于keepalived通过优先级机制来决定VIP工作在哪台主机,所以将两个从节点的优先级调节至比主节点上keepalived的优先级低,且互相不同。
      

      有心的人可能发现问题了,怎么没有修改VRRP实例的状态"state BACKUP";上面服务器的keepalived都设置为了BACKUP模式,在keepalived中2种模式,分别是master->backup模式和backup->backup模式。这  两种模式有很大区别。在master->backup模式下,一旦主节点宕机,虚拟ip会自动漂移到从节点,当主节点修复后,keepalived启动后,还会把虚拟ip抢占过来,即使设置了非抢占模式(nopreempt)抢占ip的动  作也会发生。在backup->backup模式下,当主节点故障后虚拟ip会自动漂移到从节点上,当原主节点恢复后,并不会抢占新主的虚拟ip,即使是优先级高于从库的优先级别,也不会发生抢占。为了减少ip漂移次      数,通常是把修复好的主库当做新的备库。

    六、故障出现


    模拟故障发生,我们手动"down"掉了主节点
    Master:

    1 [root@vin ~]# systemctl stop mariadb

    在MHA节点上查看MHA的状态

     1 [root@vin ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf
     2 ....
     3 Mon Nov 13 22:36:37 2017 - [info] MHA::MasterMonitor version 0.56.
     4 Mon Nov 13 22:36:37 2017 - [info] GTID failover mode = 0
     5 Mon Nov 13 22:36:37 2017 - [info] Dead Servers:                               # 指明故障的节点
     6 Mon Nov 13 22:36:37 2017 - [info]   172.18.250.27(172.18.250.27:3306)
     7 Mon Nov 13 22:36:37 2017 - [info] Alive Servers:
     8 Mon Nov 13 22:36:37 2017 - [info]   172.18.253.160(172.18.253.160:3306)
     9 Mon Nov 13 22:36:37 2017 - [info]   172.18.254.15(172.18.254.15:3306)
    10 Mon Nov 13 22:36:37 2017 - [info] Alive Slaves:
    11 Mon Nov 13 22:36:37 2017 - [info]   172.18.254.15(172.18.254.15:3306)         # 从节点由两个转为了一个,另为一个升级为主节点
    12 ....

    在从节点进行测试看主节点是否正确切换
    Slave1:

    1 MariaDB [(none)]> show slave status;          # 查看从节点状态为空,说明已非从节点
    2 Empty set (0.00 sec)
    3 
    4 MariaDB [(none)]> show master status;         # 再查看master状态,已正确切换
    5 +-------------------+----------+--------------+------------------+
    6 | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    7 +-------------------+----------+--------------+------------------+
    8 | master-log.000003 |      245 |              |                  |
    9 +-------------------+----------+--------------+------------------+

    Slave2:

    MariaDB [(none)]> show slave statusG;
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 172.18.253.160                     # 从节点"Slave2"已经将主节点指向了新的主节点
                      Master_User: vinsent
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: master-log.000003
    ...

    查看keepalived地址绑定情况:
    Master:

    1 [root@vin ~]# ip a | grep ens33
    2 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    3     inet 172.18.250.27/16 brd 172.18.255.255 scope global dynamic ens33


    Save1:

    1 [root@vin ~]# ip a | grep ens33
    2 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    3     inet 172.18.250.160/16 brd 172.18.255.255 scope global dynamic ens33
    4     inet 172.18.14.55/16 scope global secondary ens33             # 地址正确漂移至从节点Slave1

    Slave2:

    1 [root@vin ~]# ip a | grep ens33
    2 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    3     inet 172.18.254.15/16 brd 172.18.255.255 scope global dynamic ens33


    七、故障恢复


    为了满足集群要求,应当立即将故障的主节点修复上线。由于Mysql复制集群的主节点已然切换,那么故障的原主节点上线之后只能为从节点,所以应当修改其配置文件满足从节点的要求。
    Master:

    1 [root@vin ~]# vim /etc/my.cnf.d/server.cnf             # 添加如下两项
    2 [server]
    3 relay_log_purge = OFF
    4 read_only = ON

    启动服务,并连接Mysql;并连接至新的主节点做主从同步;这里值得注意的是:如果你的主节点是在运行过程中故障宕机来了,那么你要做的就不仅仅是修改配置,启动服务了。修改配置文件之后,应当对新主做一个完全备份,将新主节点的数据恢复至本机,然后在连接至新的主节点做复制同步(本实验没有太多的数据,故直接上线)。

     1 [root@vin ~]# systemctl start mariadb
     2 [root@vin ~]# mysql
     3 MariaDB [(none)]> change master to master_host='172.18.253.160',master_user='vinsent',master_password='vinsent',master_log_file='master-log.000003',master_log_pos=245;
     4 MariaDB [(none)]> start slave;
     5 MariaDB [(none)]> show slave statusG
     6 *************************** 1. row ***************************
     7                Slave_IO_State: Waiting for master to send event
     8                   Master_Host: 172.18.253.160
     9                   Master_User: vinsent
    10                   Master_Port: 3306
    11 ...

    切换至MHA上并查看集群状态

     1 [root@vin ~]# masterha_check_repl --conf=/etc/masterha/app1.cnf
     2 ...
     3 Mon Nov 13 22:54:53 2017 - [info] GTID failover mode = 0
     4 Mon Nov 13 22:54:53 2017 - [info] Dead Servers:
     5 Mon Nov 13 22:54:53 2017 - [info] Alive Servers:
     6 Mon Nov 13 22:54:53 2017 - [info]   172.18.250.27(172.18.250.27:3306)     # 由于没有在配置文件中指明谁是主,故这里只能看到所有工作的主机
     7 Mon Nov 13 22:54:53 2017 - [info]   172.18.253.160(172.18.253.160:3306)
     8 Mon Nov 13 22:54:53 2017 - [info]   172.18.254.15(172.18.254.15:3306)
     9 Mon Nov 13 22:54:53 2017 - [info] Alive Slaves:
    10 Mon Nov 13 22:54:53 2017 - [info]   172.18.250.27(172.18.250.27:3306)
    11 ...
    12 MySQL Replication Health is OK.

    启动MHA Manger监控,查看集群里面现在谁是master

    1 [root@vin ~]# masterha_check_status --conf=/etc/masterha/app1.cnf
    2 app1 is stopped(2:NOT_RUNNING).


    ???怎么回事,明明已经正确启动,为何此处显示为“stopped”;赶紧去官网一查发现:"Currently MHA Manager process does not run as a daemon. If failover completed successfully or the master process was killed by accident, the manager stops working. To run as a daemon, daemontool. or any external daemon program can be used. Here is an example to run from daemontools.",原来如此


    八、总结


    查日志观察切换过程分析MHA切换过程:

     1 [root@vin masterha]# cat manager.log
     2 Mon Nov 13 22:36:03 2017 - [info] MHA::MasterMonitor version 0.56.
     3 Mon Nov 13 22:36:04 2017 - [info] GTID failover mode = 0
     4 Mon Nov 13 22:36:04 2017 - [info] Dead Servers:
     5 Mon Nov 13 22:36:04 2017 - [info]   172.18.250.27(172.18.250.27:3306)
     6 Mon Nov 13 22:36:04 2017 - [info] Alive Servers:
     7 Mon Nov 13 22:36:04 2017 - [info]   172.18.253.160(172.18.253.160:3306)
     8 Mon Nov 13 22:36:04 2017 - [info]   172.18.254.15(172.18.254.15:3306)
     9 Mon Nov 13 22:36:04 2017 - [info] Alive Slaves:
    10 Mon Nov 13 22:36:04 2017 - [info]   172.18.254.15(172.18.254.15:3306)  Version=5.5.52-MariaDB (oldest major version between slaves) log-bin:enabled
    11 Mon Nov 13 22:36:04 2017 - [info]     Replicating from 172.18.253.160(172.18.253.160:3306)
    12 Mon Nov 13 22:36:04 2017 - [info]     Primary candidate for the new Master (candidate_master is set)
    13 Mon Nov 13 22:36:04 2017 - [info] Current Alive Master: 172.18.253.160(172.18.253.160:3306)
    14 Mon Nov 13 22:36:04 2017 - [info] Checking slave configurations..
    15 Mon Nov 13 22:36:04 2017 - [warning]  relay_log_purge=0 is not set on slave 172.18.254.15(172.18.254.15:3306).
    16 Mon Nov 13 22:36:04 2017 - [info] Checking replication filtering settings..
    17 Mon Nov 13 22:36:04 2017 - [info]  binlog_do_db= , binlog_ignore_db=
    18 Mon Nov 13 22:36:04 2017 - [info]  Replication filtering check ok.
    19 Mon Nov 13 22:36:04 2017 - [info] GTID (with auto-pos) is not supported
    20 Mon Nov 13 22:36:04 2017 - [info] Starting SSH connection tests..
    21 Mon Nov 13 22:36:05 2017 - [info] All SSH connection tests passed successfully.
    22 Mon Nov 13 22:36:05 2017 - [info] Checking MHA Node version..
    23 Mon Nov 13 22:36:06 2017 - [info]  Version check ok.
    24 Mon Nov 13 22:36:06 2017 - [error][/usr/share/perl5/vendor_perl/MHA/ServerManager.pm, ln492]  Server 172.18.250.27(172.18.250.27:3306) is dead, but must be alive! Check server settings.
    25 Mon Nov 13 22:36:06 2017 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln424] Error happened on checking configurations.  at /usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm line 399.
    26 Mon Nov 13 22:36:06 2017 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln523] Error happened on monitoring servers.
    27 Mon Nov 13 22:36:06 2017 - [info] Got exit code 1 (Not master dead).
    28 Mon Nov 13 22:36:13 2017 - [info] MHA::MasterMonitor version 0.56.
    29 Mon Nov 13 22:36:13 2017 - [info] GTID failover mode = 0
    30 Mon Nov 13 22:36:13 2017 - [info] Dead Servers:
    31 Mon Nov 13 22:36:13 2017 - [info]   172.18.250.27(172.18.250.27:3306)
    32 Mon Nov 13 22:36:13 2017 - [info] Alive Servers:
    33 Mon Nov 13 22:36:13 2017 - [info]   172.18.253.160(172.18.253.160:3306)
    34 Mon Nov 13 22:36:13 2017 - [info]   172.18.254.15(172.18.254.15:3306)
    35 Mon Nov 13 22:36:13 2017 - [info] Alive Slaves:
    36 Mon Nov 13 22:36:13 2017 - [info]   172.18.254.15(172.18.254.15:3306)  Version=5.5.52-MariaDB (oldest major version between slaves) log-bin:enabled
    37 Mon Nov 13 22:36:13 2017 - [info]     Replicating from 172.18.253.160(172.18.253.160:3306)
    38 Mon Nov 13 22:36:13 2017 - [info]     Primary candidate for the new Master (candidate_master is set)
    39 Mon Nov 13 22:36:13 2017 - [info] Current Alive Master: 172.18.253.160(172.18.253.160:3306)
    40 Mon Nov 13 22:36:13 2017 - [info] Checking slave configurations..
    41 Mon Nov 13 22:36:13 2017 - [warning]  relay_log_purge=0 is not set on slave 172.18.254.15(172.18.254.15:3306).
    42 Mon Nov 13 22:36:13 2017 - [info] Checking replication filtering settings..
    43 Mon Nov 13 22:36:13 2017 - [info]  binlog_do_db= , binlog_ignore_db=
    44 Mon Nov 13 22:36:13 2017 - [info]  Replication filtering check ok.
    45 Mon Nov 13 22:36:13 2017 - [info] GTID (with auto-pos) is not supported
    46 Mon Nov 13 22:36:13 2017 - [info] Starting SSH connection tests..
    47 Mon Nov 13 22:36:15 2017 - [info] All SSH connection tests passed successfully.
    48 Mon Nov 13 22:36:15 2017 - [info] Checking MHA Node version..
    49 Mon Nov 13 22:36:15 2017 - [info]  Version check ok.
    50 Mon Nov 13 22:36:15 2017 - [error][/usr/share/perl5/vendor_perl/MHA/ServerManager.pm, ln492]  Server 172.18.250.27(172.18.250.27:3306) is dead, but must be alive! Check server settings.
    51 Mon Nov 13 22:36:15 2017 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln424] Error happened on checking configurations.  at /usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm line 399.
    52 Mon Nov 13 22:36:15 2017 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln523] Error happened on monitoring servers.
    53 Mon Nov 13 22:36:15 2017 - [info] Got exit code 1 (Not master dead).

    从上面的输出可以看出整个MHA的切换过程,共包括以下的步骤:
      配置文件检查阶段,这个阶段会检查整个集群配置文件配置
      宕机的master处理,这个阶段包括虚拟ip摘除操作,主机关机操作(这个我这里还没有实现,需要研究)
      复制dead maste和最新slave相差的relay log,并保存到MHA Manger具体的目录下
      识别含有最新更新的slave
      应用从master保存的二进制日志事件(binlog events)
      提升一个slave为新的master进行复制
      使其他的slave连接新的master进行复制

    目前高可用方案可以一定程度上实现数据库的高可用,比如前面文章介绍的MMMheartbeat+drbdCluster等。还有percona的Galera Cluster等。这些高可用软件各有优劣。在进行高可用方案选择时,主要是看业务还有对数据一致性方面的要求。最后出于对数据库的高可用和数据一致性的要求,推荐使用MHA架构。

  • 相关阅读:
    iOS开发基础-UITableView基本属性
    iOS开发基础-UITableView控件简单介绍
    iOS开发基础-UIScrollView实现图片缩放
    iOS开发基础-UIScrollView基础
    iOS开发基础-序列帧动画之Tom猫
    iOS开发基础-KVC简单介绍
    iOS开发基础-九宫格坐标(6)
    iOS开发基础-九宫格坐标(5)
    iOS开发基础-九宫格坐标(4)
    iOS开发基础-九宫格坐标(3)之Xib
  • 原文地址:https://www.cnblogs.com/vinsent/p/7732247.html
Copyright © 2020-2023  润新知