本文将介绍mysql的MHA(Master High Availability)方案,官方文档地址:https://github.com/yoshinorim/mha4mysql-manager/wiki/Installation
MHA架构由三台mysql服务器(一主两从)和一台manager节点组成,当主库发生故障时,manager能自动从众多从库中选择一台slave log最新的从库转变成主库,然后将其它所有节点重新指向新的主库。将丢失数据的概率降至最低。
写库故障发生前:
写库故障发生后:
本次实验采用4台虚拟机,操作系统版本Centos6.10,mysql版本5.7.25
manager 10.40.16.60 管理 管理集群
node1 10.40.16.61 主库 提供写服务
node2 10.40.16.62 从库 提供读服务
node3 10.40.16.63 从库 提供读服务
还须预留1个vip,现在不用配置,这里先提一下,后面的安装步骤用得到
10.40.16.71 写vip
其中node1是主库,node2和node3是从库。具体的复制搭建这里就省略,要是这都不会,那么该文章对你就没意思了。
注明:集群中使用的复制账号为repl,密码是'123456'
node1(10.40.16.61)
(root@localhost)[test1]> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000003
Position: 1067
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
node2(10.40.16.62)
(root@localhost)[test1]> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.40.16.61
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 1067
Relay_Log_File: slave-relay-bin.000002
Relay_Log_Pos: 1233
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
node3(10.40.16.63)
(root@localhost)[test1]> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.40.16.61
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 1067
Relay_Log_File: slave-relay-bin.000002
Relay_Log_Pos: 1233
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
MHA Manager和MHA Node的rpm下载地址
https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
rpm -ivh epel-release-latest-6.noarch.rpm
编辑文件/etc/yum.repos.d/epel.repo
将该文件的第三行取消注释,第四行添加注释,如下所示
每个数据库节点(node1&node2&node3)
yum install -y perl-DBD-MySQL
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm
node包在/usr/bin下面生成4个文件
save_binary_logs:保存和复制master的二进制日志
apply_diff_relay_logs:识别差异的relay log并将差异的event应用到其它slave中
filter_mysqlbinlog:去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
purge_relay_logs:消除中继日志(不会堵塞SQL线程)
管理节点(manager)