文章目录
1.MHA架构
1.1MHA介绍
MHA(Master High Availability)是一套比较成熟的 MySQL 高可用方案,也是一款优秀的故障切换和 主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在30秒之内自动完成数据库的故障切 换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的 高可用。MHA还支持在线快速将Master切换到其他主机,通常只需0.5-2秒。
目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器。
1.2MHA节点介绍
MHA由两部分组成,分别为MHA Manager(管理节点)和MHA Node(数据节点)。
MHA Manager:可以单独部署在一*立的机器上管理多个master-slave集群,也可以部署在一台 slave节点上。负责检测master是否宕机、控制故障转移、检查MySQL复制状况等。
MHA Node:运行在每台MySQL服务器上,不管是Master角色,还是Slave角色,都称为Node,是 被监控管理的对象节点,负责保存和复制master的二进制日志、识别差异的中继日志事件并将其 差异的事件应用于其他的slave、清除中继日志。
1.3MHA故障处理机制
- 把宕机master的binlog保存下来
- 根据binlog位置点找到最新的slave
- 用最新slave的relay log修复其它slave
- 将保存下来的binlog在最新的slave上恢复
- 将最新的slave提升为master
- 将其它slave重新指向新提升的master,并开启主从复制
1.4MHA优点
- 自动故障转移快
- 主库崩溃不存在数据一致性问题
- 性能优秀,支持半同步复制和异步复制
- 一个Manager监控节点可以监控多个集群
2.MHA主备切换
2.1主备切换策略
主备切换是指将备库变为主库,主库变为备库,有可靠性优先和可用性优先两种策略。
可靠性优先:主备切换过程一般由专门的HA高可用组件完成,但是切换过程中会存在短时间不可用,因为在切换过程中某一时刻主库A和从库B都处于只读状态。
可用性优先:不等主从同步完成,直接把业务请求切换至从库B,并且让从库B可读写,这样几乎不存在不可用时间,但可能会数据不一致。
选择:主备切换采用可用性优先策略,可能会导致数据不一致,所以大多数情况下,优先选择可靠性优先策略。在满足数据可靠性的前提下,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上执行生成密钥发送到其他机器
$ ssh-keygen -t rsa
$ ssh-copy-id 10.211.55.3
$ ssh-copy-id 10.211.55.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.下载后安装,具体安装步骤见
官方文档:安装步骤
下面是来自官方文档安装步骤的粘贴:
## Install dependent Perl modules
# yum install perl-DBD-MySQL
# yum install perl-Config-Tiny
# yum install perl-Log-Dispatch
# yum install perl-Parallel-ForkManager
## Install MHA Node, since MHA Manager uses some modules provided by MHA Node.
# rpm -ivh mha4mysql-node-X.Y-0.noarch.rpm
## Finally you can install MHA Manager
# rpm -ivh mha4mysql-manager-X.Y-0.noarch.rpm
3.3修改配置
[root@manager ~]# mkdir /data/masterha
[root@manager ~]# mkdir /data/masterha/app
[root@manager ~]# mkdir /etc/masterha
[root@manager ~]# vim /etc/masterha/app.cnf
# 添加下面内容
[server default]
manager_log=/data/masterha/app/manager.log
manager_workdir=/data/masterha/app
# 监控用户
user=root密码
# 监控用户
password=root
ping_interval=1
remote_workdir=/data/masterha/app
# 复制用户
repl_password=root
# 复制用户密码
repl_user=root
# ssh登录用户
ssh_user=root
[server1]
hostname=10.211.55.3
port=3306
[server2]
# 候选master
candidate_master=1
hostname=10.211.55.4
port=3306
[server3]
hostname=10.211.55.5
port=3306
3.3安装成功验证
# 测试后端主机的SSH连接
masterha_check_ssh --conf=/etc/masterha/app.cnf
# 测试后端主机的集群
masterha_check_repl --conf=/etc/masterha/app.cnf
# 测试运行HMA程序
masterha_manager --conf=/etc/masterha/app.cnf
# 查看HMA集群的状态
masterha_check_status --conf=/etc/masterha/app.cnf
3.4后台启动
nohup masterha_manager --conf=/etc/masterha/app.cnf &
4.安装过程中常见问题
问题1:
[root@10 soft]# yum install perl-Log-Dispatch
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp.sjtu.edu.cn
* extras: ftp.sjtu.edu.cn
* updates: ftp.sjtu.edu.cn
没有可用软件包 perl-Log-Dispatch。
错误:无须任何处理
解决办法: 安装perl即可,通过下面命令安装perl
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
## 安装perl成功后继续安装perl-Log-Dispatch,其他包同理
yum install perl-Log-Dispatch
问题2:
[/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:
[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;报错
The server is not configured as slave; fix in config file or with CHANGE MASTER TO
解决办法: 设置主从信息
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;