MYSQL之MHA介绍与集群搭建

文章目录

1.MHA架构

1.1MHA介绍

    MHA(Master High Availability)是一套比较成熟的 MySQL 高可用方案,也是一款优秀的故障切换和 主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在30秒之内自动完成数据库的故障切 换操作,并且在进行故障切换的过程中,MHA能在最大程度上保证数据的一致性,以达到真正意义上的 高可用。MHA还支持在线快速将Master切换到其他主机,通常只需0.5-2秒。
    目前MHA主要支持一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器。
MYSQL之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故障处理机制

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

1.4MHA优点

  1. 自动故障转移快
  2. 主库崩溃不存在数据一致性问题
  3. 性能优秀,支持半同步复制和异步复制
  4. 一个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;

上一篇:2021-03-19


下一篇:mysqlhotcopy备份恢复