1.MHA架构

1.1MHA介绍

  1. MHA(Master High Availability)是一套比较成熟的 MySQL 高可用方案,也是一款优秀的故障切换和 主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在30秒之内自动完成数据库的故障切 换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的 高可用。MHA还支持在线快速将Master切换到其他主机,通常只需0.5-2秒。<br /> 目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器。<br />![](https://cdn.nlark.com/yuque/0/2021/jpeg/12678011/1614747716543-d044f6d3-50dd-464f-a6ef-155fb7afea92.jpeg#align=left&display=inline&height=1046&margin=%5Bobject%20Object%5D&originHeight=1046&originWidth=1414&size=0&status=done&style=none&width=1414)

1.2MHA节点介绍

  1. MHA由两部分组成,分别为**MHA Manager(管理节点)和MHA Node(数据节点)**。<br /> **MHA Manager**:可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台 slave节点上。负责检测master是否宕机、控制故障转移、检查MySQL复制状况等。<br /> **MHA Node**:运行在每台MySQL服务器上,不管是Master角色,还是Slave角色,都称为Node,是 被监控管理的对象节点,负责保存和复制master的二进制日志、识别差异的中继日志事件并将其 差异的事件应用于其他的slave、清除中继日志。

1.3MHA故障处理机制

  1. 把宕机master的binlog保存下来
  2. 根据binlog位置点找到最新的slave
  3. 用最新slave的relay log修复其它slave
  4. 将保存下来的binlog在最新的slave上恢复
  5. 将最新的slave提升为master
  6. 将其它slave重新指向新提升的master,并开启主从复制

    1.4MHA优点

  7. 自动故障转移快

  8. 主库崩溃不存在数据一致性问题
  9. 性能优秀,支持半同步复制和异步复制
  10. 一个Manager监控节点可以监控多个集群

2.MHA主备切换

2.1主备切换策略

  1. 主备切换是指将备库变为主库,主库变为备库,有**可靠性优先**和**可用性优先**两种策略。<br /> **可靠性优先**:主备切换过程一般由专门的HA高可用组件完成,但是切换过程中会存在短时间不可用,因为在切换过程中某一时刻主库A和从库B都处于只读状态。<br /> **可用性优先**:不等主从同步完成,直接把业务请求切换至从库B,并且让从库B可读写,这样几乎不存在不可用时间,但可能会数据不一致。<br /> 选择:主备切换采用可用性优先策略,可能会导致数据不一致,所以大多数情况下,优先选择可靠性优先策略。在满足数据可靠性的前提下,MySQL的可用性依赖于同步延时的大小,同步延时越小,可用性就越高。

3.MHA集群搭建

3.1基本环境

操作系统:CentOS Linux release 7.5.1804
MYSQL版本:5.7.28
主机信息:

角色 ip 功能
Monitor Host 10.211.55.3 响应读写请求
Master 10.211.55.6 监控复制组
Candidate Master 10.211.55.4 响应读请求
Slave 10.211.55.5 响应读请求

3.2下载与安装

1.设置免登陆,在10.211.55.6上执行生成密钥发送到其他机器

  1. $ ssh-keygen -t rsa
  2. $ ssh-copy-id 10.211.55.3
  3. $ ssh-copy-id 10.211.55.4
  4. $ ssh-copy-id 10.211.55.5

2.下载manager包和node包,上传到服务器并安装,见官方文档
下载地址:官方下载地址
1)在10.211.55.6上安装mha4mysql-manager-0.58-0.el7.centos.noarch.rpm 和 mha4mysql-node-0.58-0.el7.centos.noarch.rpm包
2)在其他master和slave节点上都安装mha4mysql-node-0.58-0.el7.centos.noarch.rpm包
3.下载后安装,具体安装步骤见
官方文档:安装步骤
下面是来自官方文档安装步骤的粘贴:

  1. ## Install dependent Perl modules
  2. # yum install perl-DBD-MySQL
  3. # yum install perl-Config-Tiny
  4. # yum install perl-Log-Dispatch
  5. # yum install perl-Parallel-ForkManager
  6. ## Install MHA Node, since MHA Manager uses some modules provided by MHA Node.
  7. # rpm -ivh mha4mysql-node-X.Y-0.noarch.rpm
  8. ## Finally you can install MHA Manager
  9. # rpm -ivh mha4mysql-manager-X.Y-0.noarch.rpm

3.3修改配置

  1. [root@manager ~]# mkdir /data/masterha
  2. [root@manager ~]# mkdir /data/masterha/app
  3. [root@manager ~]# mkdir /etc/masterha
  4. [root@manager ~]# vim /etc/masterha/app.cnf
  5. # 添加下面内容
  6. [server default]
  7. manager_log=/data/masterha/app/manager.log
  8. manager_workdir=/data/masterha/app
  9. # 监控用户
  10. user=root密码
  11. # 监控用户
  12. password=root
  13. ping_interval=1
  14. remote_workdir=/data/masterha/app
  15. # 复制用户
  16. repl_password=root
  17. # 复制用户密码
  18. repl_user=root
  19. # ssh登录用户
  20. ssh_user=root
  21. [server1]
  22. hostname=10.211.55.3
  23. port=3306
  24. [server2]
  25. # 候选master
  26. candidate_master=1
  27. hostname=10.211.55.4
  28. port=3306
  29. [server3]
  30. hostname=10.211.55.5
  31. port=3306

3.3安装成功验证

  1. # 测试后端主机的SSH连接
  2. masterha_check_ssh --conf=/etc/masterha/app.cnf
  3. # 测试后端主机的集群
  4. masterha_check_repl --conf=/etc/masterha/app.cnf
  5. # 测试运行HMA程序
  6. masterha_manager --conf=/etc/masterha/app.cnf
  7. # 查看HMA集群的状态
  8. masterha_check_status --conf=/etc/masterha/app.cnf

3.4后台启动

  1. nohup masterha_manager --conf=/etc/masterha/app.cnf &

4.安装过程中常见问题

问题1:

  1. [root@10 soft]# yum install perl-Log-Dispatch
  2. 已加载插件:fastestmirror, langpacks
  3. Loading mirror speeds from cached hostfile
  4. * base: ftp.sjtu.edu.cn
  5. * extras: ftp.sjtu.edu.cn
  6. * updates: ftp.sjtu.edu.cn
  7. 没有可用软件包 perl-Log-Dispatch
  8. 错误:无须任何处理

解决办法: 安装perl即可,通过下面命令安装perl

  1. yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
  2. ## 安装perl成功后继续安装perl-Log-Dispatch,其他包同理
  3. yum install perl-Log-Dispatch

问题2:

  1. [/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln364] None of slaves can be master. Check failover configuration file or log-bin settings in my.cnf

解决办法: 原因是slave节点的/etc/my.cnf中没有添加log-bin配置,加上即可

问题3:

  1. [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln359] Slave configurations is not valid.

解决办法: 修改slave的/etc/my.cnf配置为 read_only=off

问题4: 执行 start slave;报错

  1. The server is not configured as slave; fix in config file or with CHANGE MASTER TO

解决办法: 设置主从信息

  1. change master to master_host='10.211.55.6',master_port=3306,master_user='root',master_password='root',master_log_file='mysql-bin.000001',master_log_pos=4677;

文章来源:https://blog.csdn.net/qq_17864929/article/details/114282614