MySQL之高可用MHA

1 MHA介绍

MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,该工具仅适用于MySQL Replication 环境,目的在于维持master主库的高可用性。MHA 是自动的 master 故障转移和 slave 提升的软件包,基于标准的MySQL复制(异步/半同步)。

MHA由两部分组成:MHA Manager(管理节点)和 MHA Node(数据节点)。

  • MHA Manager可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台slave节点上。
  • MHA Node运行在每台MySQL服务器上。

MHA Manager 会定时探测集群中的master节点,当master出现故障时,它可以自动将最新数据的slave提升为新的master,然后将所有其他的slave重新指向新的master。整个故障转移过程对应用程序完全透明。

在MHA自动故障切换过程中,MHA试图从宕机的主服务器上保存二进制日志,最大程度的保证数据的不丢失,但这并不总是可行的。例如,如果主服务器硬件故障或无法通过ssh访问,MHA没法保存二进制日志,只进行故障转移而丢失了最新的数据。使用半同步复制,可以大大降低数据丢失的风险。MHA可以与半同步复制结合起来。如果只有一个slave已经收到了最新的二进制日志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数据一致性

1.1 MHA工作原理
1.1.1 监控节点

通过 masterha_master_monitor 心跳检测脚本监控数据库节点,包括

  • SSH 连通性
  • 主从状态(主要是主库)

默认探测4次,每隔 ping_interval=2 秒探测一次,如果主库还没有心跳,则认为主库宕机,进入failover过程

1.1.2 选主策略
  • 如果设定有权重 candidate_master=1,按照权重强制指定备选主库

    • 默认情况如果slave落后master 100M的日志的话,即使有权重也会失效
    • check_repl_delay=0:不检查日志落后情况,强制选择
  • 如果判断从库(position或者GTID),数据有差异,最接近于Master的slave,成为备选主

  • 如果判断从库(position或者GTID),数据一致,按照配置文件顺序选主

1.1.3 数据补偿
  • 当SSH能连接,从库使用 save_binary_logs 脚本对比主库GTID 或者position号,立即将二进制日志保存至各个从节点并且应用

  • 当SSH不能连接,从库之间使用 apply_diff_relay_logs 对比relaylog差异进行补偿

1.1.4 Failover
  • 主从身份切换,所有从库取消和原有主库的复制关系,与新主库重新构建主从关系
  • manager 调用 masterha_conf_host 脚本将故障库踢出集群
  • MAH是一次性的高可用,Failover后manager会自动退出
1.2 MHA工具包介绍
1.2.1 Manager管理工具
`masterha_check_ssh`              检查MHA的SSH配置状况
`masterha_check_repl`             检查MySQL复制状况
`masterha_manger`                 启动MHA
`masterha_check_status`           检测当前MHA运行状态
`masterha_master_monitor`         检测master是否宕机
`masterha_master_switch`          控制故障转移(自动或者手动)
`masterha_conf_host`              添加或删除配置的server信息
1.2.2 Node数据节点工具
`save_binary_logs`                保存和复制master的二进制日志
`apply_diff_relay_logs`           识别差异的中继日志事件并将其差异的事件应用于其他的slave
`filter_mysqlbinlog`              去除不必要的ROLLBACK事件(MHA已不再使用这个工具)
`purge_relay_logs`                清除中继日志(不会阻塞SQL线程)

2 环境搭建

2.1 架构规划
主机 MySQL角色 MHA角色 server_id IP
db01 Master node 51 192.168.159.51
db02 Slave node 52 192.168.159.52
db03 Slave、manager node
manager
53 192.168.159.53
2.2 准备环境
2.2.1 主库
grant replication slave on *.* to repl@'192.168.159.%' identified by '123';
2.2.2 从库
change master to 
 master_host='192.168.159.51',
 master_user='repl',
 master_password='123' ,
 MASTER_AUTO_POSITION=1;
start slave;
2.3 配置关键程序软链接
# 这两个命令会被MHA调用,一定要放在指定目录下
ln -s /app/database/mysql/bin/mysqlbinlog	/usr/bin/mysqlbinlog
ln -s /app/database/mysql/bin/mysql			/usr/bin/mysql
2.4 配置各节点互信
# db01:
rm -rf /root/.ssh
ssh-keygen
cd /root/.ssh
mv id_rsa.pub authorized_keys
scp -r /root/.ssh 192.168.159.52:/root
scp -r /root/.ssh 192.168.159.53:/root

==========各节点验证==========
# db01:
ssh 192.168.159.51 date
ssh 192.168.159.52 date
ssh 192.168.159.53 date
# db02:
ssh 192.168.159.51 date
ssh 192.168.159.52 date
ssh 192.168.159.53 date
# db03:
ssh 192.168.159.51 date
ssh 192.168.159.52 date
ssh 192.168.159.53 date
2.5 安装软件

下载MHA软件

mha官网:https://code.google.com/archive/p/mysql-master-ha/
github下载地址:https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads

在所有节点上安装node依赖包及软件

yum install perl-DBD-MySQL -y
rpm -ivh mha4mysql-node-0.56-0.el6.noarch.rpm

在主库中创建MHA专用用户

db01 [(none)]>grant all privileges on *.* to mha@'192.168.159.%' identified by 'mha';

db02 [(none)]>select user,host from mysql.user;
+---------------+---------------+
| user          | host          |
+---------------+---------------+
| mha           | 192.168.159.% |
+---------------+---------------+

db03 [(none)]>select user,host from mysql.user;
+---------------+---------------+
| user          | host          |
+---------------+---------------+
| mha           | 192.168.159.% |
+---------------+---------------+

安装Manager软件(db03)

yum install -y perl-Config-Tiny epel-release perl-Log-Dispatch perl-Parallel-ForkManager perl-Time-HiRes
rpm -ivh mha4mysql-manager-0.56-0.el6.noarch.rpm
2.6 配置文件准备(db03)
# 创建配置文件目录
mkdir -p /etc/mha
# 创建日志目录
mkdir -p /var/log/mha/app1

# 编辑mha配置文件
cat > /etc/mha/app1.cnf << EOF
[server default]
# MHA日志文件
manager_log=/var/log/mha/app1/manager  
# MHA工作目录
manager_workdir=/var/log/mha/app1 
# 主库binlog位置点
master_binlog_dir=/data/binlog       
# MHA用户及密码
user=mha                                   
password=mha  
# MHA监控间隔
ping_interval=2
# 主从复制用户及密码
repl_password=123
repl_user=repl
# 互信用户
ssh_user=root    
# 节点信息
[server1]                                   
hostname=192.168.159.51
port=3306                                  
[server2]            
hostname=192.168.159.52
port=3306
[server3]
hostname=192.168.159.53
port=3306
EOF
2.7 状态检查(db03)

互信状态检查

[root@db03 ~]# masterha_check_ssh  --conf=/etc/mha/app1.cnf 
Sun Jul  5 15:21:28 2020 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Sun Jul  5 15:21:28 2020 - [info] Reading application default configuration from /etc/mha/app1.cnf..
Sun Jul  5 15:21:28 2020 - [info] Reading server configuration from /etc/mha/app1.cnf..
Sun Jul  5 15:21:28 2020 - [info] Starting SSH connection tests..
Sun Jul  5 15:21:29 2020 - [debug] 
Sun Jul  5 15:21:28 2020 - [debug]  Connecting via SSH from root@192.168.159.51(192.168.159.51:22) to root@192.168.159.52(192.168.159.52:22)..
Sun Jul  5 15:21:29 2020 - [debug]   ok.
Sun Jul  5 15:21:29 2020
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值