wiseMale 2020-05-11
MHA概念
(1) MHA通过masterha_manger脚本启动MHA的功能. (2) 在manager启动之前,会自动检查ssh互信(masterha_check_ssh)和主从状态(masterha_check_repl) (3) MHA-manager 通过 masterha_master_monitor脚本(每隔ping_interval秒) (4) masterha_master_monitor探测主库3次无心跳之后,就认为主库宕机了. (5) 进行选主过程 算法一: 读取配置文件中是否有强制选主的参数? candidate_master=1 #强制这台机器为主 check_repl_delay=0 #不管这台机器和主库相差多少数据,都忽略 算法二: 自动判断所有从库的日志量.将最接近主库数据的从库作为新主. 算法三: 按照配置文件先后顺序的进行选新主. (6) 数据补偿 判断主库SSH的连通性 情况一: SSH能连 调用 save_binary_logs脚本,立即保存缺失部分的binlog到各个从节点,恢复 情况二: SSH无法连接 调用 apply_diff_relay_logs 脚本,计算从库的relaylog的差异,恢复到2号从库 情况三:提供额外的binlog-server (7) 解除从库身份 (8) 剩余从库和新主库构建主从关系 (9) 应用透明 @@ (10) 故障节点自愈(待开发...)@@ (11) 故障提醒@
前提条件:
1.最少三台MySQL服务器,1主2从。
2.MHA管理端不能放在MySQL主服务器上。
3.MHA为一次性环境,故障处理完毕后需要手动调整
4.在搭建MHA之前,三台数据库需要同时有MHA管理用户和mysql复制用户
5.MHA可以同时管理多个不同的mysql集群,启动MHA管理端时指定不同的配置文件即可
开始搭建
1.搭建主从环境,所有节点都需要开启bin_log
2.创建MHA需要用到的软连接,源节点根据软件安装情况更改,目标节点必须在/usr/bin下
ln -s /application/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog ln -s /application/mysql/bin/mysql /usr/bin/mysql
3.所有主机进行免密认证
# ssh-keygen # ssh-copy-id #各节点验证,避免出现输入yes的情况
4.在主库创建MHA用户
mysql> grant all privileges on *.* to ‘%‘ identified by ‘mha‘;
5.所有节点安装节点软件包
#安装依赖 yum install perl-DBD-MySQL -y #安装节点包 rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
6.MHA管理节点安装管理软件
#安装依赖 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
7.创建MHA节点配置文件
#创建配置文件目录 mkdir -p /etc/mha #创建日志目录,可以同时管理多个节点 mkdir -p /var/log/mha/app1 #编辑mha配置文件,针对app1集群的配置 cat > /etc/mha/app1.cnf <<EOF [server default] #日志文件名称,程序运行日志,排错都在这里面看 manager_log=/var/log/mha/app1/manager #工作目录 manager_workdir=/var/log/mha/app1 #mysql数据库存放binlog位置,mha会监控这个日志 master_binlog_dir=/var/lib/mysql #mha管理用户名 user=mha #mha管理用户密码 password=mha #心跳检测间隔时间 ping_interval=2 #mysql复制用户密码 repl_password=123 #MySQL复制用户名 repl_user=repl #ssh用户 ssh_user=root #管理的mysql实例位置,故障选主时,从上至下顺序选主 [server1] hostname=192.168.2.3 port=3306 [server2] hostname=192.168.2.4 port=3306 [server3] hostname=192.168.2.5 port=3306 EOF
8.MHA管理端进行状态检查
#检查主机ssh状况 masterha_check_ssh --conf=/etc/mha/app1.cnf #出现下面状态代表ssh状态正常 #[info] All SSH connection tests passed successfully. #检查mysql复制状况 masterha_check_repl --conf=/etc/mha/app1.cnf #出现下面状态代表mysql复制状态正常 #MySQL Replication Health is OK.
9.检查顺利完成后,MHA节点开启管理端
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --ignore_last_failover &>> /var/log/mha/app1/manager.log & #--conf:指定配置文件 #--remove_dead_master_conf:mysql主库故障时,MHA自动从配置文件中移除坏掉的master #--ignore_last_failover:MHA切换主从后的8个小时内,如果mysql主库再次出现故障,MHA不会进行切换,加上ignore_last_failover,MHA不会管上一次切换是什么时候,只要mysql主库出现故障,就会切换
10.查看MHA状态
masterha_check_status --conf=/etc/mha/app1.cnf #出现如下状态代表正常 #app1 (pid:8050) is running(0:PING_OK), master:192.168.2.3
11.其他命令
masterha_manger 启动MHA masterha_check_ssh 检查MHA的SSH配置状况 masterha_check_repl 检查MySQL复制状况 masterha_master_monitor 检测master是否宕机 masterha_check_status 检测当前MHA运行状态 masterha_master_switch 控制故障转移(自动或者手动) masterha_conf_host 添加或删除配置的server信息
数据补偿
#找一台额外的机器也就是第四台机器,必须要有5.6以上的版本,支持gtid并开启 #在MHA管理端配置文件中加入 [binlog1] #不能参与选主 no_master=1 #binlog server地址 hostname=10.0.0.53 #存放binlog的位置,这个位置不能和mysql数据库存放binlog的位置一样 master_binlog_dir=/data/mysql/binlog ----------------------------------- #在binlog-server服务器上创建必要目录,跟MHA配置文件中binlog-server指定的位置一致 mkdir -p /data/mysql/binlog chown -R mysql.mysql /data/* #手动拉取主库binlog日志,这条命令放在后台以守护进程方式执行,会一直监控主库的binlog,实时拉取! cd /data/mysql/binlog -----》必须进入到自己创建好的目录 mysqlbinlog -R --host=10.0.0.51 --user=mha --password=mha --raw --stop-never mysql-bin.000001 & #注意:拉取日志的起点,需要按照目前主库正在使用的binlog为起点. #MHA完成故障切换后,拉取二进制日志的主机需要重新配置mysql主库地址