关于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。所以说在运维架构中并没有一劳永逸的事,到底要怎么去使用,具体情况还得在实际工作中部门开会来决定,并不是一个人就能拍板的。