乐趣区

关于数据库:赵强老师MySQL高可用架构MHA

MHA(Master HA)是一款开源的 MySQL 的高可用程序,它为 MySQL 主从复制架构提供了 automating master failover 性能。MHA 在监控到 master 节点故障时,会晋升其中领有最新数据的 slave 节点成为新的 master 节点,在此期间,MHA 会通过于其它从节点获取额定信息来防止一致性方面的问题。MHA 还提供了 master 节点的在线切换性能,即按需切换 master/slave 节点。
MHA 是由日本人 yoshinorim(原就任于 DeNA 现就职于 FaceBook)开发的比拟成熟的 MySQL 高可用计划。MHA 可能在 30 秒内实现故障切换,并能在故障切换中,最大可能的保证数据一致性。目前淘宝也正在开发类似产品 TMHA,目前已反对一主一从。

一、MHA 的组成

(一)MHA 中的角色

MHA 服务有两种角色,MHA Manager(治理节点) 和 MHA Node(数据节点):

  • MHA Manager:通常独自部署在一台独立机器上治理多个 master/slave 集群 (组),每个 master/slave 集群称作一个 application,用来治理兼顾整个集群。
  • MHA Node:运行在每台 MySQL 服务器上 (master/slave/manager),它通过监控具备解析和清理 logs 性能的脚本来放慢故障转移。次要是接管治理节点所收回指令的代理,代理须要运行在每一个 mysql 节点上。简略讲 node 就是用来收集从节点服务器上所生成的 bin-log。比照打算晋升为新的主节点之上的从节点的是否领有并实现操作,如果没有发给新主节点在本地利用后晋升为主节点。

(二)MHA 提供的工具

MHA 会提供诸多工具程序,其常见的如下所示:

  • Manager 节点

  • Node 节点(这些工具通常由 MHA Manager 的脚本触发,无需人为操作)

二、MHA 的工作原理

  • 从宕机解体的 master 保留二进制日志事件(binlog events);
  • 辨认含有最新更新的 slave;
  • 利用差别的中继日志 (relay log) 到其余 slave;
  • 利用从 master 保留的二进制日志事件 (binlog events);
  • 晋升一个 slave 为新 master;
  • 应用其余的 slave 连贯新的 master 进行复制。

三、部署 MHA

(一)筹备试验环境

  • 三台主机:mysql111、mysql112、mysql113
  • 操作系统:CentOS
  • 配置主机名(/etc/hosts)
  • 配置免明码登录
  • 每台主机装置 MySQL

(二)搭建主从环境

  • 每台 MySQL 开启 binlog,设置 server-id
vi /etc/my.cnf
log-bin=mysql-binlog
server-id=1(留神:每台 MySQL 设置不同的 server-id)show variables like '%log_bin%';
  • 在所有机器上, 创立主从复制的账号
create user 'repl'@'192.168.79.%' identified by 'Welcome_1';
grant replication slave on *.* to 'repl'@'192.168.79.%';
flush privileges;
  • 在所有机器上, 创立治理账号
create user 'myadmin'@'192.168.79.%' identified by 'Welcome_1';
grant all privileges on *.* to 'myadmin'@'192.168.79.%';
flush privileges;
  • 在主库和从库上,启用 GTID
set @@GLOBAL.ENFORCE_GTID_CONSISTENCY = ON;
set @@GLOBAL.GTID_MODE = OFF_PERMISSIVE;
set @@GLOBAL.GTID_MODE = ON_PERMISSIVE;
set @@GLOBAL.GTID_MODE = ON;

参数阐明:
GTID 是 MySQL 5.6 的新个性,其全称是 Global Transaction Identifier,可简化 MySQL 的主从切换以及 Failover。GTID 用于在 binlog 中惟一标识一个事务。当事务提交时,MySQL Server 在写 binlog 的时候,会先写一个非凡的 Binlog Event,类型为 GTID_Event,指定下一个事务的 GTID,而后再写事务的 Binlog。主从同步时 GTID_Event 和事务的 Binlog 都会传递到从库,从库在执行的时候也是用同样的 GTID 写 binlog,这样主从同步当前,就可通过 GTID 确定从库同步到的地位了。也就是说,无论是级联状况,还是一主多从状况,都能够通过 GTID 主动找点儿,而无需像之前那样通过 File_name 和 File_position 找点儿了。

  • 在从库上别离配置主从复制命令并开启主从同步
change master to master_host='mysql111',master_user='repl',\
master_password='Welcome_1',master_auto_position=1;

start slave;
  • 在从库上查看主从复制的状态
show slave status\G;

  • 测试主从复制

(三)装置 MHA

  • 所有节点装置 node 软件依赖包和 node 软件
yum -y install perl-DBD-MySQL 
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
  • 在 mysql111 上装置装置 manager 软件依赖包
yum install -y perl-Config-Tiny 
yum install -y epel-release 
yum install -y perl-Log-Dispatch 
yum install -y perl-Parallel-ForkManager 
yum install -y perl-Time-HiRes
  • 在 mysql111 上装置装置 manager 软件
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm

(四)创立 Manager 的配置文件

# 创立配置文件目录、日志目录
mkdir -p /etc/mha
mkdir -p /var/log/mha/log

#编辑 mha 配置文件 vi /etc/mha/mha.cnf
[server default]
manager_log=/var/log/mha/log/manager
manager_workdir=/var/log/mha/log
master_binlog_dir=/var/lib/mysql
user=myadmin
password=Welcome_1
ping_interval=2
repl_user=repl
repl_password=Welcome_1
ssh_user=root
[server1]
hostname=mysql111
port=3306
[server2]
hostname=mysql112
port=3306
[server3]
hostname=mysql113
port=3306

(五)查看状态,并开启 MHA

  • 查看互信
masterha_check_ssh --conf=/etc/mha/mha.cnf

  • 查看主从复制状态
masterha_check_repl --conf=/etc/mha/mha.cnf

  • 开启 MHA-manager
nohup masterha_manager --conf=/etc/mha/mha.cnf > /var/log/mha/log/manager.log < /dev/null 2>&1 &
  • 查看 MHA 状态
masterha_check_status --conf=/etc/mha/mha.cnf

  • 测试 HA 高可用的主动切换
 在 mysql111 上,执行 shutdown 操作
mysqladmin -uroot -pWelcome_1 shutdown

MHA 会主动进行主从切换。切换实现后,MHA 过程会主动进行运行。在 mysql112 和 mysql113 上察看,执行上面的语句:show slave status\G;

退出移动版