1.MHA架构
1.1MHA介绍
MHA(Master High Availability)是一套比较成熟的 MySQL 高可用方案,也是一款优秀的故障切换和 主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在30秒之内自动完成数据库的故障切 换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的 高可用。MHA还支持在线快速将Master切换到其他主机,通常只需0.5-2秒。<br /> 目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器。<br />
1.2MHA节点介绍
MHA由两部分组成,分别为**MHA Manager(管理节点)和MHA Node(数据节点)**。<br /> **MHA Manager**:可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台 slave节点上。负责检测master是否宕机、控制故障转移、检查MySQL复制状况等。<br /> **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主备切换策略
主备切换是指将备库变为主库,主库变为备库,有**可靠性优先**和**可用性优先**两种策略。<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上执行生成密钥发送到其他机器
$ 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.logmanager_workdir=/data/masterha/app# 监控用户user=root密码# 监控用户password=rootping_interval=1remote_workdir=/data/masterha/app# 复制用户repl_password=root# 复制用户密码repl_user=root# ssh登录用户ssh_user=root[server1]hostname=10.211.55.3port=3306[server2]# 候选mastercandidate_master=1hostname=10.211.55.4port=3306[server3]hostname=10.211.55.5port=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, langpacksLoading 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;
文章来源:https://blog.csdn.net/qq_17864929/article/details/114282614
