一、配置MHA
1.1配置关键程序软连接
ln -s /application/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
ln -s /application/mysql/bin/mysql /usr/bin/mysql
1.2配置各节点互信
db01:
rm -rf /root/.ssh
ssh-keygen
cd /root/.ssh
mv id_rsa.pub authorized_keys
scp -r /root/.ssh 10.0.0.52:/root
scp -r /root/.ssh 10.0.0.53:/root
(如果这个方法不行就用mo1管理机的ssh连接脚本来做,先生成ssh-Keygen在用脚本)
各节点验证
db01:
ssh 10.0.0.51 date
ssh 10.0.0.52 date
ssh 10.0.0.53 date
db02:
ssh 10.0.0.51 date
ssh 10.0.0.52 date
ssh 10.0.0.53 date
db03:
ssh 10.0.0.51 date
ssh 10.0.0.52 date
ssh 10.0.0.53 date
1.3安装软件
下载mha软件
mha官网:https://code.google.com/archive/p/mysql-master-ha/
github下载地址:https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads
所有节点安装Node软件依赖包
yum install perl-DBD-MySQL -y
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
在db01主库中创建mha需要的用户
grant all privileges on *.* to mha@'10.0.0.%' identified by 'mha';
Manager软件安装(db03)
yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm
1.4配置文件准备(db03)
创建配置文件目录
mkdir -p /etc/mha
创建日志目录
mkdir -p /var/log/mha/app1
编辑mha配置文件
cat > /etc/mha/app1.cnf< [server default] manager_log=/var/log/mha/app1/manager manager_workdir=/var/log/mha/app1 master_binlog_dir=/data/binlog user=mha password=mha ping_interval=2 repl_password=123 repl_user=repl ssh_user=root [server1] hostname=10.0.0.51 port=3306 [server2] hostname=10.0.0.52 candidate_master=1 port=3306 [server3] hostname=10.0.0.53 port=3306 EOF 1.5状态检查(db03) masterha_check_ssh --conf=/etc/mha/app1.cnf masterha_check_repl --conf=/etc/mha/app1.cnf 1.6开启MHA(db03): 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 & 1.7查看MHA状态 [root@db03 ~]# masterha_check_status --conf=/etc/mha/app1.cnf 二、MHA的vip功能 参数: master_ip_failover_script=/usr/local/bin/master_ip_failover 注意:/usr/local/bin/master_ip_failover,必须事先准备好 修改脚本内容 vi /usr/local/bin/master_ip_failover my $vip = '10.0.0.55/24'; my $key = '1'; my $ssh_start_vip = "/sbin/ifconfig eth0:$key $vip"; my $ssh_stop_vip = "/sbin/ifconfig eth0:$key down"; 更改manager配置文件: vi /etc/mha/app1.cnf 添加: master_ip_failover_script=/usr/local/bin/master_ip_failover 注意: [root@db03 ~]# dos2unix /usr/local/bin/master_ip_failover dos2unix: converting file /usr/local/bin/master_ip_failover to Unix format ... [root@db03 ~]# chmod +x /usr/local/bin/master_ip_failover 主库上,手工生成第一个vip地址 手工在主库上绑定vip,注意一定要和配置文件中的ethN一致,我的是eth0:1(1是key指定的值) ifconfig eth0:1 10.0.0.55/24 卸载心跳ip [root@db02 ~]# ifconfig eth0:1 down 重启mha masterha_stop --conf=/etc/mha/app1.cnf 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 & 三、邮箱提醒功能 1.参数: report_script=/usr/local/bin/send 2.准备邮件脚本 send_report (1)准备发邮件的脚本(上传 email_2019-最新.zip中的脚本,到/usr/local/bin/中) (2)将准备好的脚本添加到mha配置文件中,让其调用 3.修改manager配置文件,调用邮件脚本 vi /etc/mha/app1.cnf report_script=/usr/local/bin/send (3)停止MHA masterha_stop --conf=/etc/mha/app1.cnf (4)开启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 & (5)关闭主库,看警告邮件 故障修复: 1.恢复故障节点 (1)实例宕掉 /etc/init.d/mysqld start (2)主机损坏,有可能数据也损坏了 备份并恢复故障节点。 2.恢复主从环境 看日志文件: CHANGE MASTER TO MASTER_HOST='10.0.0.52', MASTER_PORT=3306, MASTER_AUTO_POSITION=1, MASTER_USER='repl', MASTER_PASSWORD='123'; start slave ; 3.恢复manager 3.1修好的故障节点配置信息,加入到配置文件 [server1] hostname=10.0.0.51 port=3306 3.2启动manager 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 & 3.4.14 binlog server(db03) 参数: binlogserver配置: 找一台额外的机器,必须要有5.6以上的版本,支持gtid并开启,我们直接用的第二个slave(db03) vim /etc/mha/app1.cnf [binlog1] no_master=1 hostname=10.0.0.53 master_binlog_dir=/data/mysql/binlog 创建必要目录 mkdir -p /data/mysql/binlog chown -R mysql.mysql /data/* 修改完成后,将主库binlog拉过来(从000001开始拉,之后的binlog会自动按顺序过来) 拉取主库binlog日志 cd /data/mysql/binlog -----》必须进入到自己创建好的目录 mysqlbinlog -R --host=10.0.0.52 --user=mha --password=mha --raw --stop-never mysql-bin.000001 & 注意: 拉取日志的起点,需要按照目前从库的已经获取到的二进制日志点为起点 重启MHA masterha_stop --conf=/etc/mha/app1.cnf 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 &