一、MHA架构简介
MHA最大特点是可以修复多个slave之间的差异日志,从而所有slave数据保持一致,然后选择一个和主库数据差异最下的充当新master,并将其它从库指向新的主库。选择新主库时时通过对比I/O thread读取主库的binlog中的position号。
MHA架构自动切换脚本需要不断的完善,各节点间要配置互相(存在安全隐患)
MHA架构下如果某节点宕机,MHA进程会停止,需重启
https://github.com/yoshinorim/mha4mysql-manager/releases/tag/v0.58
https://github.com/yoshinorim/mha4mysql-node/releases/tag/v0.58
二、安装配置
2.1 环境需求:
三个数据节点(56.11,56.12,56.13),一个虚拟IP(56.111),其中每个数据节点均需安装node工具,manager工具可以在其中一个从库节点或单独安装在一台服务器上
2.2 manager工具参数
masterha_check_ssh:检查MHA的SSH配置
masterha_check_repl:检查数据库主从复制功能
masterha_manager:启动MHA服务
masterha_check_status:检测当前MHA运行状态
masterha_master_monitor:检测master是否宕机
masterha_master_switch:控制故障转移(自动或手动)
masterha_conf_host:添加或删除配置的server信息
2.3 node工具参数
save_binary_logs:保存和复制master的二进制日志
apply_diff_relay_logs:识别差异的中继日志事件并应用于其他slave
filter_mysqlbinlog:去除不必要的ROLLBACK事件(MHA已不再使用该工具)
purge_relay_logs:清除中继日志(不会阻塞sql线程)
2.4 MHA架构搭建过程
2.4.1 配置互信(所有节点均需配置)
生成密钥文件:ssh-keygen -t dsa -P ‘’ -f id_dsa
id_dsa.pub为公钥,id_dsa为私钥,将公钥文件复制成authorized_keys文件:cat id_dsa.pub >> authorized_keys
主库接受各节点密钥文件(scp),将密钥文件内容添加到authorized_keys中
将主库的authorized_keys远程拷贝到其它节点的/root/.ssh/目录下
修改hosts文件,添加各节点的主机名
2.4.2 搭建一主多从环境
过程略
2.4.3 安装MHAL-node节点(三台数据库服务器均需安装)
yum install perl-DBD-MySQL
tar -xzvf mha4mysql-node-mha4mysql-node-0.58.tar.gz
cd mha4mysql-node-0.58
yum install -y perl-CPAN*
perl Makefile.PL
make && make install
2.4.4 安装配置MHA-manager管理节点
yum install -y perl-DBD-MySQL*
rpm -ivh perl-Params-Validate*
rpm -ivh perl-Config-Tiny-*
rpm -ivh perl-Log-Dispatch-*
rpm -ivh perl-Parallel-ForkManager-*
tar -xzvf mha4mysql-manager-0.58.tar.gz
perl Makefile.PL
make && make install
mkdir -p /usr/local/mha
mkdir -p /etc/mha
vi /etc/mha/mha.conf
cat /etc/mha/mha.conf
[server default]
user=sz
password=123456
manager_workdir=/usr/local/mha
manager_log=/usr/local/mha/manager.log
remote_workdir=/usr/local/mha --每一个MHA node生成日志文件的工作路径
ssh_user=root
repl_user=repl
repl_password=repl123
ping_interval=1 --MHA manager ping主库的时间间隔,当连续三次失败则认为主库宕机,单位为秒
master_ip_failover_script=/usr/local/scripts/master_ip_failover --failover切换脚本
master_ip_online_change_script=/usr/local/scripts/master_ip_online_change --在线切换脚本
[server1]
hostname=192.168.56.11
ssh_port=22
master_binlog_dir=/data/mysql --master上生成binlog的绝对路径
candidate_master=1 --值为1则优先成为主库
port=3306
[server2]
hostname=192.168.56.12
ssh_port=22
master_binlog_dir=/data/mysql
candidate_master=1
port=3306
[server3]
hostname=192.168.56.13
ssh_port=22
master_binlog_dir=/data/mysql
no_master=1 --默认值为1,该节点永远不会成为主库
port=3306
2.4.5 配置master_ip_failover脚本和master_ip_online_change脚本
https://www.modb.pro/doc/5260
chmod +x master_ip_failover
chmod +x master_ip_online_change
2.4.6 检测MHA配置
yum install -y perl-Time_HiRes
检测互信,结果都为OK则成功:/usr/local/bin/masterha_check_ssh --conf=/etc/mha/mha.conf
检测主从结构:master_check_repl --conf=/etc/mha/mha.conf
2.4.7 添加VIP
ip addr add 192.168.56.111 dev eth0
2.4.8 启动MHA服务
在管理节点执行MHA的启动:nohup masterha_manager --conf=/etc/mha/mha.conf > /tmp/mha_manager.log < /dev/null 2>&1 &
查看状态;masterha_check_status --conf=/etc/mha/mha.conf
2.4.9 如果是数据库故障关闭或宕机,自己切换主从后MHA进程会停止
在线切换主从:masterha_master_switch --conf=/etc/mha/mha.conf --master_state=alive --new_master_host=192.168.56.11 --orig_master_is_new_slave
参数说明:
–orig_master_is_new_slave:将原来的主库变为从节点
–master_state:当前主库的状态为alive
2.5 停止MHA服务:
masterha_stop