MHA高可用搭建(四台服务器上确保ssh可以相互连通)
MySql集群搭建在mysql专栏在上一节
以下操作只能验证故障转移,Master恢复后需要手动改变主从
#ssh检查机器是否连通
ssh 192.168.0.199
exit
ssh 192.168.0.165
exit
ssh 192.168.0.142
exit
-
在四台服务器上分别执行下面命令,生成公钥和秘钥,连续回车生成的是默认的
ssh-keygen -t rsa
-
在三台服务器上分别执行下面命令,将公钥拷贝到MHA服务器上
ssh-copy-id 192.168.0.126
-
检查MHA上是否包含三个公钥,执行后可以看到三个ssh-rsa
cat /root/.ssh/authorized_keys
-
执行下面命令,将MHA Manager的公钥添加到authorized_keys文件中(此时应该包含4个公钥)
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
-
从MHA Manager服务器执行下面命令,向其他三台MySQL服务器分发公钥信息。
scp /root/.ssh/authorized_keys root@192.168.0.199:/root/.ssh/authorized_keys scp /root/.ssh/authorized_keys root@192.168.0.165:/root/.ssh/authorized_keys scp /root/.ssh/authorized_keys root@192.168.0.142:/root/.ssh/authorized_keys
-
MHA下载
MySQL5.7对应的MHA版本是0.5.8,所以在GitHub上找到对应的rpm包进行下载,MHA manager和
node的安装包需要分别下载:
https://github.com/yoshinorim/mha4mysql-manager/releases/tag/v0.58
https://github.com/yoshinorim/mha4mysql-node/releases/tag/v0.58
三台Mysql需要安装node
MHA-Manager服务器需要安装manager和node
-
MHA-node安装
在四台机器上安装mha4mysql-node,又因为MHA的Node依赖于perl-DBD-MySQL,所以要先安装perl-DBD-MySQL。
1. yum install perl-DBD-MySQL -y 2. rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm(注:这是上面github下载的安装包)
-
MHA-Manager安装
在MHA服务器上安装Manager和node,MHA的manager又依赖了perl-Confifig-Tiny、perl-Log-Dispatch、perl-Parallel-ForkManager,也分别进行安装。
#安装依赖 1. wget http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 2. rpm -ivh epel-release-latest-7.noarch.rpm 3. yum install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager -y #安装node rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm #安装Manager rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
注:若perl-Log-Dispatch和perl-Parallel-ForkManager这两个被依赖包在yum仓库找不到,在安装epel-release-latest-7.noarch.rpm。在使用时,可能会出现下面异常:Cannot retrieve metalink for repository: epel/x86_64。可以尝试使用/etc/yum.repos.d/epel.repo,然后注释掉metalink,取消注释baseurl。
-
创建MHA监控实例日志文件
#目录说明 #/var/log (CentOS目录) # /mha (MHA监控根目录) # /app1 (MHA监控实例根目录) # /manager.log (MHA监控实例日志文件) mkdir -p /var/log/mha/app1 touch /var/log/mha/app1/manager.log
-
创建监控全局配置文件
vim /etc/masterha_default.cnf [server default] #主库用户名,在master mysql的主库执行下列命令建一个新用户 #create user 'mha'@'%' identified by 'root'; #grant all on *.* to mha@'%' identified by 'root'; #flush privileges; user=mha password=root port=3306 #ssh登录账号 ssh_user=root #从库复制账号和密码 repl_user=root repl_password=root port=3306 #ping次数 ping_interval=1 #二次检查的主机 secondary_check_script=masterha_secondary_check -s 192.168.0.199 -s 192.168.0.165 -s 192.168.0.142
-
添加监控实例配置文件
mkdir -p /etc/mha vim /etc/mha/app1.cnf [server default] #MHA监控实例根目录 manager_workdir=/var/log/mha/app1 #MHA监控实例日志文件 manager_log=/var/log/mha/app1/manager.log #[serverx] 服务器编号 #hostname 主机名 #candidate_master 可以做主库 #master_binlog_dir binlog日志文件目录 [server1] hostname=192.168.0.199 candidate_master=1 master_binlog_dir="/var/lib/mysql" [server2] hostname=192.168.0.165 candidate_master=1 master_binlog_dir="/var/lib/mysql" [server3] hostname=192.168.0.142 candidate_master=1 master_binlog_dir="/var/lib/mysql"
-
MHA检测(在MHA-Manager服务器上执行)
#执行ssh通信检测 masterha_check_ssh --conf=/etc/mha/app1.cnf #检测MySQL主从复制 masterha_check_repl --conf=/etc/mha/app1.cnf #出现 MySQL Replication Health is OK 则说明集群没问题
-
启动MHA-Manager
#启动MHA nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 & #查看监控状态命令: masterha_check_status --conf=/etc/mha/app1.cnf #查看监控日志 tail -f /var/log/mha/app1/manager.log
-
故障转移测试:
在MHA-Manager查看日志:
tail -200f /var/log/mha/app1/manager.log
关闭Master MySQL服务器服务,模拟主节点崩溃(最好先确定下来主从同步没问题再继续测试故障转移)
systemctl stop mysqld
查看MHA日志,可以看到哪台slave切换成了master
show master status;