MHA基础架构规划和实施
主库宕机处理过程
1. 监控节点 (通过配置文件获取所有节点信息)
系统,网络,SSH连接性
主从状态,重点是主库
2. 选主
(1) 如果判断从库(position或者GTID),数据有差异,最接近于Master的slave,成为备选主
(2) 如果判断从库(position或者GTID),数据一致,按照配置文件顺序,选主.
(3) 如果设定有权重(candidate_master=1),按照权重强制指定备选主.
1. 默认情况下如果一个slave落后master 100M的relay logs的话,即使有权重,也会失效.
2. 如果check_repl_delay=0的化,即使落后很多日志,也强制选择其为备选主
3. 数据补偿
(1) 当SSH能连接,从库对比主库GTID 或者position号,立即将二进制日志保存至各个从节点并且应用(save_binary_logs )
(2) 当SSH不能连接, 对比从库之间的relaylog的差异(apply_diff_relay_logs)
4. Failover
将备选主进行身份切换,对外提供服务
其余从库和新主库确认新的主从关系
5. 应用透明(VIP)
6. 故障切换通知(send_reprt)
7. 二次数据补偿(binlog_server)
8. 自愈自治(待开发...)
Manager工具包主要包括以下几个工具:
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信息
Node工具包主要包括以下几个工具:
这些工具通常由MHA Manager的脚本触发,无需人为操作
save_binary_logs 保存和复制master的二进制日志
apply_diff_relay_logs 识别差异的中继日志事件并将其差异的事件应用于其他的
purge_relay_logs 清除中继日志(不会阻塞SQL线程)
1.1规划
主库
db01 node
从库
db02 node
db03 node manager
1.2 准备环境(1主2从GTID,详情见mysql GTID复制详情)
1.3 配置关键程序软连接(所有节点)
ln -s /usr/local/database/mysql/bin/mysqlbinlog /usr/bin/mysqlbinlog
ln -s /usr/local/database/mysql/bin/mysql /usr/bin/mysql
1.4 配置各节点互信(密钥对)
later01:
rm -rf /root/.ssh
ssh-keygen
cd /root/.ssh/
mv id_rsa.pub authorized_keys
scp -r /root/.ssh/ 139.129.93.203:/root
scp -r /root/.ssh/ 39.101.204.8:/root
验证:
ssh 139.129.93.203 date
ssh 39.101.204.8 date
ssh 39.101.199.159 date
later03:
rm -rf /root/.ssh/*
ssh-keygen
cd /root/.ssh/
mv id_rsa.pub authorized_keys
scp -r /root/.ssh/ 39.101.199.159:/root
scp -r /root/.ssh/ 139.129.93.203:/root
验证:
ssh 139.129.93.203 date
ssh 39.101.204.8 date
ssh 39.101.199.159 date
later02:
rm -rf /root/.ssh
ssh-keygen
cd /root/.ssh/
mv id_rsa.pub authorized_keys
scp -r /root/.ssh/ 39.101.199.159:/root
scp -r /root/.ssh/ 39.101.204.8:/root
验证:
ssh 139.129.93.203 date
ssh 39.101.204.8 date
ssh 39.101.199.159 date
1.5安装软件
yum install perl-DBD-MySQL -y
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
在db01主库中创建mha需要的用户
grant all privileges on *.* to mha@'%' identified by 'mha';
1.6 Manage软件的安装(db03)
yum install -y perl-Config-Tiny
yum install -y epel-release
yum install -y perl-Log-Dispatch
yum install -y perl-Parallel-ForkManager
yum install -y perl-Time-HiRes
rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm
创建配置文件目录[db03]
mkdir -p /etc/mha
创建日志目录
mkdir -p /var/log/mha/app1
编辑mha配置文件vim /etc/mha/app1.cnf
cat >/etc/mha/app1.cnf <<EOF
[server default]
manager_log=/var/log/mha/app1/manager #日志信息
manager_workdir=/var/log/mha/app1 #工作目录
master_binlog_dir=/binlog/3306 #主库binlog位置点信息
user=mha
password=mha
ping_interval=2
repl_password=123
repl_user=repl
ssh_user=root
[server1]
hostname=39.101.199.159
port=3306
[server2]
hostname=139.129.93.203
port=3306
[server3]
hostname=39.101.204.8
port=3306
EOF
1.7 状态检查(db03)
masterha_check_ssh --conf=/etc/mha/app1.cnf --ssh互信检查
masterha_check_repl --conf=/etc/mha/app1.cnf --主从检查
出现报错?
[error][/usr/share/perl5/vendor_perl/MHA/ServerManager.pm, ln492] Server 39.101.204.8(39.101.204.8:3306) is dead, but must be alive! Check server settings.
解决?
检查该从库是否启动? 已启动
检查该从库状态是否正常?正常
难道是因为从库和manage节点是一台服务器引起的?
查资料:检查防火墙是否关闭
1. systemctl status firewalld 为关闭状态
2.检查selinux
getenforce 为永久关闭状态
因为这个是买的阿里云服务器:所以需要检查阿里云云服务安全组:
发现没有对外开放3306端口
通过设置开放3306端口解决此问题.
1.8 开启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 &
1.9 查看MHA的状态
masterha_check_status --conf=/etc/mha/app1.cnf
[root@later03/usr/local/bin]# masterha_check_status --conf=/etc/mha/app1.cnf
app1 (pid:26779) is running(0:PING_OK), master:39.101.199.159