Shell简单实现MHA架构的MySql集群

MHA是一个非常优秀的实现数据库高可用的解决方案,起初学习过程中,比较感兴趣,就通过Shell去简单模拟实现了这个过程。

脚本实现的功能:

运行初始化脚本实现:

1.通过手动填写使用的代理端manager和数据库端( 默认1个master,2个slave )主机名和IP;自动化部署Ansible,让Manager成为中控机,数据库端的master,slave为受控机

2.在受控机上自动化安装mysql5.7版本,修改初始化密码为123!@#Qq

3.可指定master主机,备份主库使恢复到从库,完成1主2从,半复制模式

4.将manager的3306端口到master的3306的双向端口映射

5.由manager持续性监控master的状态,如果通信都出故障了,通过gtid辅助选举目前数据更新最快的slave数据库;进行master更新以及所有剩下的slave指向新的master

6.监控原来宕机的master状态,如果恢复了,能够自动加入到集群,成为slave服务器

模拟实现具体过程:

bin/setup.sh 进行初始化并启动服务;

bin/stop_mymha.sh 进行服务关闭;

logs/change.log 记录每次master状态改变情况

注意: 附件tar包解压释放到/usr/local/下,启动路径为/usr/local/mymha/bin/setup.sh

1.准备四台无数据库的节点,实验环境为4台Centos 7.5;

        1台 Manager       【作为后续的ansible中控机,也是访问的代理机】

        3台 Mysql数据库 【1台 Master,2台Slave】

  注意:需要提前在Manager上配置好对所有数据库服务器的ssh免密

2.手动修改conf/mha.conf的定制的配置文档,其中manager和数据库主机的主机名和IP地址(脚本识别是Eth0

3.抓取其配置文件中的IP和hostname信息,并指定master主机,出master和manager外都作为slave主机,并存入arr数组,方便调用

4.通过数组生成Ansible的主机清单,生成配置文件

5.通过packages目录下预准备的Mysql7.5相关安装包,对master和slave进行批量安装,并修改初始密码为123!@#Qq

6.预准备主和从库的my.cnf模板,对应开启server-id,指定日志文件名,半复制模式,开启gtid,在master数据库服务器上注册从服务器需要的同步账户repluser并授权

7.备份主库的数据库(备份指定--master-data --set-gtid-purged=ON),后续恢复的数据库可以识别日志偏移量和gtid的特性;将备份的数据库传回manager节点,下发到从库并还原,通过预准备的my.cnf模板和备份的数据库文件中偏移量完成主从架构

8.设置manager节点上的iptables,完成3306端口的双向映射,客户机访问manager实现访问到数据库服务

9.开启我们监控任务,模拟检测master状态,通过ping命令,每次完成5次1秒测试,如果100%丢包,认为该master节点宕机。激活选举任务,通过抓取gtid来辅助判定slave数据库的通过情况,通过排序来选举出最快的选手成为我们新的master

10.重新完成类似前面初始化的过程,给master和slave重新更新一下my.cnf文件,让剩余的slave重新指向新的master节点

11.上述完成后激活监控宕机的master的生命情况,如果5次ping都没丢包,认为宕机的master恢复正常,立刻完成由原有master角色到新master的slave角色

12.继续循环监控Master的状态...

测试: 手动在Master注册授权一个测试账号,登录时指定数据库为Manager节点

附件: 打包文件为实现过程,实现过程比较粗糙,还有很多可以改进的地方,只是自己感兴趣,就简单实现了一下。成长路上抛砖引玉,多交流!

https://share.weiyun.com/vhzuOEKThttps://share.weiyun.com/vhzuOEKT

注意: 附件tar包解压释放到/usr/local/下,启动路径为/usr/local/mymha/bin/setup.sh

​​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值