关于mha

    mha是一款开源的mysql的高可用程序,它为mysql主从复制架构提供了自动化主机故障转移功能。mha检测架构的所有节点,一但检测到主节点有故障时,会立即提升拥有最新数据的从节点成为新的主节点。除了故障时转移,mha也支持在线手动切换。当主节点需要下线维护,也可以实现。

实验环境

    master:192.168.32.111

    slave:192.168.32.112

    slave:192.168.32.104

    manager:192.168.32.105

实验前提

    1、节点内所有主机时间必须同步一致

    2、节点内所有主机可以实现域名解析(非必须项)

cat /etc/hosts
...
192.168.32.111  node1
192.168.32.112  node2
192.168.32.104  node3
192.168.32.105  node4

    3、节点内主机能通过ssh密钥访问

~]#ssh-keygen -t rsa -P ''
~]#cd .ssh
~]#ssh-copy-id -i ./id_rsa.pub     <===自己连接自己拷贝,生成authorized_keys文件
~]#ls .ssh/
authorized_keys  id_rsa  id_rsa.pub  known_hosts  <===把前三个文件复制给其余三台主机
~]#scp id_rsa{,.pub} authorized_keys  
~]#scp id_rsa{,.pub} authorized_keys 
~]#scp id_ra{,.pub} authorized_keys        <===测试主机间直接互连

  实验

    1、搭建mysql主从架构

        1.1主节点配置       

~]#vim /etc/my.cnf.d/server.cnf
[server]
skip_name_resolve = ON
innodb_file_per_table = ON
max_connection = 2000

log_bin = master-log
server_id = 1
relay_log=relay-log
~]#mysql
>GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'ma'@'192.168.32.%' IDENTIFIED BY 'centos'; <===创建从节点复制用户
> GRANT ALL ON *.* TO 'mha'@'192.168.32.%' IDENTIFIES BY 'centos';    <===创建manager用户

        1.2从节点配置,id号必须不同

]#vim /etc/my.cnf.d/server.cnf 
[server]
skip_name_resolve = ON
innodb_file_per_table = ON
max_connection = 2000

relay_log = relay-log
log_bin = master-log
server_id = 2
relay_log_purge = OFF
read_only = ON

        1.3在每台从节点上进入mysql改变工作模式,具体MASTER_LOG的文件和位置事先可以在主节点上查看:SHOW MASTER STATUS;

>CHANGE MASTER TO MASTER_HOST='192.168.32.111',MASTER_USER='ma',MASTER_PASSWORD='centos',MASTER_LOG_FILE='master-log.000001',MASTER_LOG_POS=245;

        1.4配置完后在从节点上SHOW SLAVE STATUS可以查看指向的主节点信息,并且可以查看帐号信息是否已经同步了。

    2、安装mha

        2.1在主节点上安装mha4mysql-node和mha4mysql-manager包。centos7可以直接使用e16的程序包,并且两个包版本并无强制要求一致。

~]#yum install ./mha4mysql-manager-0.56-0.el6.noarch.rpm -y
~]#yum install ./mha4mysql-node-0.56-0.el6.noarch.rpm -y

        2.2在所有从节点上安装mha4mysql-node包,安装方法同上。

    3、初始化mha

        3.1manager节点需要为每个监控的mysql集群提供一个专用的配置文件。我们知道mha不止可以监控一组master/slave,不同的集群可以共享一个全局配置,默认全局文件为/etc/masteha_default.cnf。如果只监控一组,也可以自定义配置文件里路径。

~]#mkdir /etc/masterha
~]#vim /etc/masterha/app1.cnf 
[server default]
user=mha
password=centos
manager_workdir=/data/masterha/app1
manager_log=/data/masterha/app1/manager.log
remote_workdir=/data/masterha/app1
ssh_user=root
ssh_port=22
repl_user=ma
repl_password=centos
ping_interval=1

[server1]
hostname=192.168.32.111
candidate_master=1

[server2]
hostname=192.168.32.112
candidate_master=1

[server3]
hostname=192.168.32.104
candidate_master=1

        3.2检测各节点互相ssh通信是否正常

~]# masterha_check_ssh --conf=/etc/masterha/app1.cnf
...
All SSH connection tests passed successfully.        <===出现这个代表成功

        3.3检测管理的mysql复制集群的连接配置参数是否正常

~]# masterha_check_repl --conf=/etc/masterha/app1.cnf 
...
Thu Nov 16 14:49:20 2017 - [info] Slaves settings check done.
Thu Nov 16 14:49:20 2017 - [info] 
192.168.32.111(192.168.32.111:3306) (current master)
 +--192.168.32.112(192.168.32.112:3306)
 +--192.168.32.104(192.168.32.104:3306)
...
MySQL Replication Health is OK.                    <===出现这个代表成功

       3.4启动mha,后台运行

~]#nohup masterha_manager --conf=/etc/masterha/app1.cnf &>/data/masterha/app1/manager.log &
]# masterha_check_status --conf=/etc/masterha/app1.cnf                                         
app1 (pid:24915) is running(0:PING_OK), master:192.168.32.112

        3.5故障排错

            1、检查ssh互相之前是否可以使用密钥无密码登录

            2、检查授权的两个帐号是否可以正常登录各个节点

    4、故障转移测试

        4.1在主节点关闭mysql服务,mha会自动挑选一个作为新的主节点,同时mha服务会中止。查看日志可以看到相关转移过程。

        4.2主节点恢复后可以继续作为新的主节点的从节点,需要重新change和start slave。注意此时配置文件/etc/my.cnf.d/server.cnf中需添加/relay_log_purge = OFF和read_only = ON两项。

        4.3再次启动mha后台运行即可

总结

    我们已经实现了mysql主节点高可用的解决方案,但是又引入了一个新的单点,mha。所以说在运维架构中并没有一劳永逸的事,到底要怎么去使用,具体情况还得在实际工作中部门开会来决定,并不是一个人就能拍板的。