搭建 MySQL MHA
搭建MySQL MHAMHA :为了解决的了是故障切换、数据尽可能的保存以及所有节点日志的一致性实验思路环境环境 一定要干净,防火墙和增强功能都要提前关掉1数据库安装2一主两从 主从复制3MHA搭建2故障模拟1主库失效2备选主库成为主库3原故障主库恢复重新加入到MHA成为从库实验环境准备四台服务器最好里面三个已经做好一主两从的配置了不会主从的可以看看这个MySQL 主从复制与 Nginx 升级实践记录-CSDN博客我的四台IP为192.168.64.主11备112备213manager16配置好后可以跟着做④ 在 Master、Slave1、Slave2 节点上都创建两个软链接ln -s /usr/local/mysql/bin/mysql /usr/sbin/ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/两个从库要设置只读模式set global read_only1;测试主从复制成功没有先看一下两遍的数据库主的从的主的新建一个abc看从库过来了下面安装mha软件四台机器都要安装首先安装 epel 源yum install epel-release --nogpgcheck -y然后就是这段直接敲yum install -y perl-DBD-MySQL \perl-Config-Tiny \perl-Log-Dispatch \perl-Parallel-ForkManager \perl-ExtUtils-CBuilder \perl-ExtUtils-MakeMaker \perl-CPAN好像有点bug不耽误用安装 MHA 软件包先在所有服务器上必须先安装 node 组件在所有服务器上必须先安装 node 组件最后在 MHA-manager 节点上安装 manager 组件因为 manager 依赖 node 组件。去网上找node包和manager包tar zxvf mha4mysql-node-0.57.tar.gzcd mha4mysql-node-0.57perl Makefile.PLmake make install在 MHA manager 节点上安装 manager 组件cd /opttar zxvf mha4mysql-manager-0.57.tar.gzcd mha4mysql-manager-0.57perl Makefile.PLmake make installmanager 组件安装后在/usr/local/bin 下面会生成几个工具主要包括以下几个masterha_check_ssh 检查 MHA 的 SSH 配置状况masterha_check_repl 检查 MySQL 复制状况masterha_manger 启动 manager的脚本masterha_check_status 检测当前 MHA 运行状态masterha_master_monitor 检测 master 是否宕机masterha_master_switch 控制故障转移自动或者 手动masterha_conf_host 添加或删除配置的 server 信息masterha_stop 关闭managernode 组件安装后也会在/usr/local/bin 下面会生成几个脚本这些工具通常由MHAManager 的脚本触发无需人为操作主要如下save_binary_logs 保存和复制 master 的二进制日志apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的slavefilter_mysqlbinlog 去除不必要的 ROLLBACK 事件MHA 已不再使用这个工具purge_relay_logs 清除中继日志不会阻塞 SQL 线程Manager主机忘改名了改个名hostnamectl set-hostname Manager在 manager 节点上配置到所有数据库节点的无密码认证ssh-keygen -t rsa #一路按回车键ssh-copy-id 192.168.64.11ssh-copy-id 192.168.64.12ssh-copy-id 192.168.64.132在 master 上配置到数据库节点 slave1 和 slave2 的无密码认证ssh-keygen -t rsassh-copy-id 192.168.64.12ssh-copy-id 192.168.64.133在 slave1 上配置到数据库节点 master 和 slave2 的无密码认证ssh-keygen -t rsassh-copy-id 192.168.64.11ssh-copy-id 192.168.64.134在 slave2 上配置到数据库节点 master 和 slave1 的无密码认证ssh-keygen -t rsassh-copy-id 192.168.64.11ssh-copy-id 192.168.64.12这个不截图了流程和manager一样在 manager 节点上复制相关脚本到/usr/local/bin 目录cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/binmaster_ip_failover #自动切换时 VIP 管理的脚本master_ip_online_change #在线切换时 vip 的管理power_manager #故障发生后关闭主机的脚本send_report #因故障切换后发送报警的脚本复制上述的自动切换时 VIP 管理的脚本到 /usr/local/bin 目录这里使用master_ip_failover脚本来管理 VIP 和故障切换cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin修改内容如下删除原有内容直接复制并修改vip相关参数vim /usr/local/bin/master_ip_failover#!/usr/bin/env perluse strict;use warnings FATAL all;use Getopt::Long;my ($command, $ssh_user, $orig_master_host, $orig_master_ip,$orig_master_port, $new_master_host, $new_master_ip,$new_master_port);my $vip 192.168.10.200;my $ifdev ens33;my $key 1;my $ssh_start_vip /sbin/ifconfig $ifdev:$key $vip;my $ssh_stop_vip /sbin/ifconfig $ifdev:$key down;GetOptions(commands \$command,ssh_users \$ssh_user,orig_master_hosts \$orig_master_host,orig_master_ips \$orig_master_ip,orig_master_porti \$orig_master_port,new_master_hosts \$new_master_host,new_master_ips \$new_master_ip,new_master_porti \$new_master_port,);exit main();sub main {if ($command eq stop || $command eq stopssh) {print Disabling VIP on old master: $orig_master_host\n;stop_vip();return 0;}elsif ($command eq start) {print Enabling VIP $vip on new master: $new_master_host\n;start_vip();return 0;}elsif ($command eq status) {print Checking the Status of the script.. OK\n;return 0;}else {usage();return 1;}}sub start_vip {system(ssh, $ssh_user\$new_master_host, $ssh_start_vip) 0or die Failed to start VIP\n;}sub stop_vip {system(ssh, $ssh_user\$orig_master_host, $ssh_stop_vip) 0or die Failed to stop VIP\n;}sub usage {print Usage: master_ip_failover --commandstart|stop|stopssh|status . --orig_master_hosthost --orig_master_ipip . --orig_master_portport --new_master_hosthost . --new_master_ipip --new_master_portport\n;}创建 MHA 软件目录并拷贝配置文件这里使用app1.cnf配置文件来管理 mysql 节点服务器mkdir /etc/masterhacp /opt/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterhavim /etc/masterha/app1.cnf[server default]manager_log/var/log/masterha/app1/manager.logmanager_workdir/var/log/masterha/app1master_binlog_dir/usr/local/mysql/datamaster_ip_failover_script/usr/local/bin/master_ip_failovermaster_ip_online_change_script/usr/local/bin/master_ip_online_changepassword123456ping_interval1remote_workdir/tmprepl_password123456repl_usermyslavesecondary_check_script/usr/local/bin/masterha_secondary_check -s 192.168.64.12 -s 192.168.64.13shutdown_scriptssh_userrootusermha[server1]hostname192.168.64.11port3306[server2]hostname192.168.64.12port3306[server3]hostname192.168.64.13port3306candidate_master1check_repl_delay0一次配置需要在Master节点上手动开启虚拟IP要先安装yum install -y net-toolsifconfig enp0s1:1 192.168.64.200 netmask 255.255.255.0 upmanager节点上测试ssh在 manager 节点上测试 ssh 无密码认证如果正常最后会输出 successfully如下所示。masterha_check_ssh -conf/etc/masterha/app1.cnf创建下用户三台都要mysql -uroot -p123456 EOFCREATE USER IF NOT EXISTS mha192.168.64.16’ IDENTIFIED BY 123456;GRANT ALL PRIVILEGES ON *.* TO mha192.168.64.%’ WITH GRANT OPTION;FLUSH PRIVILEGES;EOF验证mysql -uroot -p123456 -e SELECT Host,User FROM mysql.user WHERE Usermha;把 /etc/my.cnf 里的 [client] default-character-setutf8 去掉manager节点上测试mysql主从连接在 manager 节点上测试 mysql 主从连接情况最后出现 MySQL ReplicationHealth is OK 字样说明正常。如下所示。masterha_check_repl -conf/etc/masterha/app1.cnf在manager节点上启动MHAnohup masterha_manager --conf/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover /dev/null /var/log/masterha/app1/manager.log 21 查看MHA状态masterha_check_status --conf/etc/masterha/app1.cnf查看MHA日志cat /var/log/masterha/app1/manager.log | grep current master查看master VIP查看master 的 VIP 地址 192.168.10.200 是否存在这个 VIP 地址不会因为manager 节点停止 MHA 服务而消失。ifconfig若要关闭manager服务//若要关闭 manager 服务可以使用如下命令。masterha_stop --conf/etc/masterha/app1.cnf或者可以直接采用 kill 进程 ID 的方式关闭。MHA 模拟故障在 manager 节点上监控观察日志记录tail -f /var/log/masterha/app1/manager.log在 Master 节点 master 上停止mysql服务systemctl stop mysqld正常自动切换一次后MHA 进程会退出。HMA 会自动修改 app1.cnf 文件内容将宕机的master 节点删除。查看 slave2 是否接管 VIP接管成功实验成功后面做故障修复1修复mysqlsystemctl restart mysqld2修复主从#在现主库服务器 Mysql2slave1上 查看二进制文件和同步点show master status;#在原主库服务器 mysql1 执行同步操作-- 在原主库服务器 mysql1 执行同步操作CHANGE MASTER TOMASTER_HOST192.168.64.13,MASTER_USERmyslave,MASTER_PASSWORD123456,MASTER_LOG_FILEmaster-bin.000008,MASTER_LOG_POS1717;3在 manager 节点上修改配置文件app1.cnf再把这个记录添加进去因为它检测掉失效时候会自动消失vi /etc/masterha/app1.cnf......secondary_check_script/usr/local/bin/masterha_secondary_check -s 192.168.64.11 -s 192.168.64.134在 manager 节点上启动 MHAnohup masterha_manager --conf/etc/masterha/app1.cnf --remove_dead_master_conf --ignore_last_failover /dev/null/var/log/masterha/app1/manager.log 21