MHA高可用架构

本文详细介绍了MHA的部署步骤,包括主从架构搭建、ssh互信配置、在线及故障切换测试原理等,并分析了MHA的优点与局限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 


一、将 MHA 搭建完成,在主库上跑轻量级别的 tpcc 压测


1、搭建主从架构


(1) 主库做一次备份并应用,找到 binlog 复制的起点。然后备份传输到从库。从库复制备份,
启动数据库。

innobackupex --user=root --password=123456 --port=3306
--socket=/usr/local/mysql/data/mysql.sock --datadir=/usr/local/mysql/data
/backup
innobackupex --apply-log --redo-only --user=root --password=123456
/backup/2019-05-06_02-59-21
cat xtrabackup_binlog_info
mysqlbinlog.000003 147451071
scp -r /backup/2019-05-06_02-59-21/* root@172.16.11.11:/backup


(2) 主库创建备份永福,并授予权限。从库指向主库,并开启从库

create user backuper@'172.16.%' identified by 'backuper';
grant replication slave,replication client on *.* to backuper@'172.16.%';
change master to
master_host='172.16.22.22',master_port=3306,master_user='backuper',master_p
assword='backuper',master_log_file='mysqlbinlog.000003',master_log_pos=1474
51071,master_connect_retry=5;
start slave;


(3) 查看主库的从库锁对应的线程是否开启,查看从库的状态

mysql> show slave \G


2、配置主机名和 ssh 互信


3、安装 MHA,并在主库创建监控用户


(1) 在 slave 上安装 node 节点

yum install mha4mysql-node-0.54-0.el6.noarch.rpm


4、在管理节点配置 MHA


m

mkdir -p /etc/masterha
cat /etc/masterha/app1.cnf
[server default]
manager_workdir=/var/log/masterha/app1
manager_log=/var/log/masterha/app1/manager.log
master_binlog_dir=/usr/local/mysql/data
master_ip_failover_script=/usr/bin/master_ip_failover
master_ip_online_change_script=/usr/bin/master_ip_online_change
user=mha_monitor
password=mha_monitor
ping_interval=1
remote_workdir=/tmp
repl_user=backuper
repl_password=backuper
ssh_user=root
[server1]
hostname=172.16.22.22
#candidate_master=1
port=3306
[server2]
hostname=172.16.33.33
candidate_master=1
check_repl_delay=0
port=3306
[server3]
hostname=172.16.11.11
port=3306


5、在主库上配置漂移 IP

 

ifconfig eth0:1 172.16.55.55
ifconfig
Link encap:Ethernet HWaddr 00:0C:29:D2:93:C0
inet addr:172.16.22.22 Bcast:172.16.255.255 Mask:255.255.0.0
eth0:1 Link encap:Ethernet HWaddr 00:0C:29:D2:93:C0
inet addr:172.16.55.55 Bcast:172.16.255.255 Mask:255.255.0.0
6、在 manager 上编辑 2 个切换脚本内容,修改 vip 地址和
vip 设备名
chmod +x master_ip*
mv master_* /usr/bin


7、在主库上跑 tpcc 压测


 

./tpcc_start -h127.0.0.1 -p123456 -P3306 -w1 -c35 -r10 -l100 -i10


二、整理出 ssh 检查的过程原理


(1) 去 MHA 的配置文件读取参数信息和主从信息
(2) 开始 ssh 连接测试
(3) 从一台机器去免密登录另外两台主机,看是否能够登录。过程重复三次
(4) 直到所有的机器全部实现免密的测试完成,ssh 连接测试才成功

三、整理出 repl 检查的过程原理


(1)去 MHA 的配置文件读取参数信息和主从信息
(2)查找出死的服务器、活的服务器、不工作的从库,活着的主库
(3)检查从库的配置和复制过滤配置和开始 ssh 测试:是否设置只读和不清除中继日志,是否
只复制某个数据库或者不复制某个数据库
(4)登录主库,执行保存 binlog 命令、登录从库,执行生成差异中继日志的命令。执行完之后,清理测试的内容

(5) 经过以上几步,管理节点就已经知道 MHA 架构的结构了
(6) 检查健康复制和故障切换脚本的状态


三、进行一次在线切换测试,整理出在线切换的过程原理


1、在线切换


(1)手工停掉管理节点的监控

masterha_stop --conf=/etc/masterha/app1.cnf
masterha_check_status --conf=/etc/masterha/app1.cnf
app1 is stopped(2:NOT_RUNNING). (2)手工在线切换,使用 MHA 的自带的命令
Switching master to 172.16.33.33(172.16.33.33:3306) completed successfully. [root@Client mha]# masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=172.16.33.33 --new_master_port=3306
--orig_master_is_new_slave --running_updates_limit=10000


2、过程原理


(1) 检查当前活着的从库和从库的复制健康,找出新的 MHA 架构
(2) 检查要切换的新主是否有资格成为主库,并且在旧主上禁用漂移 IP
(3) 锁住旧主的所有的表拒绝任何用户的更新,并且得到新主和旧主之间 binlog 当前的差异(传输到新主上进行应用)
(4) 当新主应用完所有的中继日志之后,得到 binlog 的位置,将所有的从库指向新主,并开启漂移 IP。此时新主可以开始工作
(5) 开启并行不知,另外一个从库应用所有的中继日志(包含旧主的传输和新主的传输)。当全部应用完之后,就保持跟旧主之间数据的一致性
(6) 将旧主作为新的从库,指向新的主库

3、检验是否已经切换成功,新主是否已经成为新从


masterha_check_repl --conf=/etc/masterha/app1.cnf


四、进行一次故障切换测试,整理出故障切换的过程原理


1、设置故障,杀掉 mysqld 进程

 

nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master --ignore_last_failover < /dev/null >
/var/log/masterha/app1/manager.log 2>&1 &
masterha_check_status --conf=/etc/masterha/app1.cnf
app1 (pid:27332) is running(0:PING_OK), master:172.16.22.22


2、过程原理


(1)在宕掉的主库上保留 binlog,确定主库不可达后,读取配置文件,列出活着的从库。看提
升那个从库为新主,开始自动故障切换,禁用旧主的漂移 IP
(2)得到旧主和新主之间 binlog 的差异,传输到新主,新主应用完所有的中继日志,此时跟
旧主保持数据的一致性,启用漂移 IP.新主开始对外提供服务
(3)将新主和其他从库之间的差异中继日志传输到其他从库。从库应用完所有的中继日志之
后,就保持跟旧主一样的状态
(4)然后所有的从库重新指向新的主库


3、检验

 

[root@bakemaster ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:40:BE:7E
inet addr:172.16.33.33 Bcast:172.16.255.255 Mask:255.255.0.0
eth0:1 Link encap:Ethernet HWaddr 00:0C:29:40:BE:7E
inet addr:172.16.55.55 Bcast:172.16.55.255 Mask:255.255.255.0


五、将故障切换宕机的原主库重新加入到MHA 监测环境当中去


1、在 manager 上查看当时的 change master 信息,在旧主上执行 change master to 操作,重新设置为新主的从库

cat /var/log/masterha/app1/manager.log |grep -i "All other slaves should start" Mon May 6 05:19:21 2019 - [info] All other slaves should start replication
from here. Statement should be: CHANGE MASTER TO
MASTER_HOST='172.16.33.33', MASTER_PORT=3306, MASTER_LOG_FILE='mysqlbinlog.000005', MASTER_LOG_POS=154, MASTER_USER='backuper', MASTER_PASSWORD='xxx';


2、修复好的旧主并没有加入到 MHA 监控环境中

masterha_conf_host --command=add --conf=/etc/masterha/app1.cnf --hostname=172.16.22.22 --block=server1
--params="no_master=1;ignore_fail=1" Wrote server1 entry to /etc/masterha/app1.cnf .


3、检查复制环境
4、开启 mnanager 监控

nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master --ignore_last_failover < /dev/null >
/var/log/masterha/app1/manager.log 2>&1 &
[2] 27804
masterha_check_status --conf=/etc/masterha/app1.cnf
app1 (pid:27804) is running(0:PING_OK), master:172.16.33.33


六、MHA 有什么优点、有什么缺点(能|不能解决的问题)


1、优点


(1)由 Perl 语言开发的开源工具
(2)master 自动监控和故障转移
(3)不会导致主从数据不一致性,进行故障转移时更不易产生数据丢失,MHA 加强了数据的安全性
(4)同一个监控节点可以监控多个集群


2、缺点


(1) 必须配置 SSH 互信,存在一定的安全隐患
(2) 需要编写脚本或利用第三方工具来实现 VIP 的配置
(3)MHA 启动后只会对主数据库进行监控


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值