MHA高可用
一、工作原理

MHA工作原理总结为以下几条:
(1) 从宕机崩溃的 master 保存二进制日志事件(binlog events);
(2) 识别含有最新更新的 slave ;
(3) 应用差异的中继日志(relay log) 到其他 slave ;
(4) 应用从 master 保存的二进制日志事件(binlog events);
(5) 通过Manager控制器提升一个 slave 为新 master ;
(6) 使用其他的 slave 连接新的 master 进行复制。
二、实现过程
MHA 对 MYSQL 复制环境有特殊要求,例如各节点都要开启二进制日志及中继日志,各从节点必须显示启用其read-only属性,并关闭relay_log_purge功能等,这里对配置做事先说明。
机器名称 IP配置 服务角色 备注
Manager 10.0.0.44 Manager控制器用于监控管理
Master 10.0.0.41 数据库主服务器开启bin-log relay-log 关闭relay_log_purge
Slave1 10.0.0.42 数据库从服务器开启bin-log relay-log 关闭relay_log_purge
Slave2 10.0.0.43 数据库从服务器开启bin-log relay-log 关闭relay_log_purge
首先IP41到43为主从配置
yum -y install mariadb mariadb-server
主配置如下
vim /etc/my.cnf
[mysqld]
server-id =1//复制集群中的各节点的id均必须唯一
log-bin = master-log //开启二进制日志
relay-log = relay-log //开启中继日志
skip_name_resolve //关闭名称解析(非必须)

俩台从配置如下
vim /etc/my.cnf
[mysqld] server-id = 2 //复制集群中的各节点的id均必须唯一; relay-log = relay-log //开启中继日志 log-bin = master-log //开启二进制日志 read_only = ON //启用只读属性 relay_log_purge = 0 //是否自动清空不再需要中继日志 skip_name_resolve //关闭名称解析(非必须) log_slave_updates = 1 //使得更新的数据写进二进制日志中
第二台从服务器
[mysqld] server-id = 3 //复制集群中的各节点的id均必须唯一; relay-log = relay-log //开启中继日志 log-bin = master-log //开启二进制日志 read_only = ON //启用只读属性 relay_log_purge = 0 //是否自动清空不再需要中继日志 skip_name_resolve //关闭名称解析(非必须) log_slave_updates = 1 //使得更新的数据写进二进制日志中
主服务器上授权账号
grant all on *.* to 'he'@'10.0.%.%' identified by '123';
show master status;

从服务器上
change master to master_host='10.0.0.42',
-> master_user='slave',
-> master_password='he',
-> master_log_file='mysql-bin.000003',
-> master_log_pos=245;
show slave status\G;

以上一主俩从配置完成
一下为第四台机器配置MHA高可用
在所有 Mysql 节点授权拥有管理权限的用户可在本地网络中有其他节点上远程访问。 当然, 此时仅需要且只能在 master 节点运行类似如下 SQL 语句即可,为MHA专门创建一个管理用户, 方便以后使用, 三个节点自动同步:。
grant all on *.* to xiao@'10.0.%.%' identified by '123';
flush privileges;
接下来生成免密交互 体态都要互通
ssh-keygen -t rsa
ssh-copy-id IP(其他三台的IP地址)
其他三台服务器也同样如此;
安装 MHA 包
四个节点都需安装:mha4mysql-node-0.56-0.el6.norch.rpm
Manager 节点另需要安装:mha4mysql-manager-0.56-0.el6.noarch.rpm

拉取完包之后YUM本地安装即可;
Manager节点需要安装:
yum -y localinstall mha4mysql-manager-0.56-0.el6.noarch.rpm
yum -y localinstall mha4mysql-node-0.56-0.el6.noarch.rpm
其他三台则是:
yum -y localinstall mha4mysql-node-0.56-0.el6.noarch.rpm
定义 MHA 管理配置文件
Manager节点:
mkdir /etc/mha_master vim /etc/mha_master/mha.cnf
[server default] //适用于server1,2,3个server的配置 user=xiao //mha管理用户 password=123 //mha管理密码 manager_workdir=/etc/mha_master/app1 //mha_master自己的工作路径 manager_log=/etc/mha_master/manager.log // mha_master自己的日志文件 remote_workdir=/mydata/mha_master/app1 //每个远程主机的工作目录在何处 ssh_user=root // 基于ssh的密钥认证 repl_user=he //数据库用户名 repl_password=123 //数据库密码 ping_interval=1 //ping间隔时长 [server1] //节点1 hostname=10.0.0.42 //节点1主机地址 ssh_port=22 //节点1的ssh端口 candidate_master=1 //将来可不可以成为master候选节点/主节点 [server2] hostname=10.0.0.43 //节点2 ssh_port=22 candidate_master=1 [server3] hostname=10.0.0.44 //节点3 ssh_port=22 candidate_master=1
对四个节点进行检测
1)检测各节点间 ssh 互信通信配置是否 ok
我们在 Manager 机器上输入下述命令来检测:
masterha_check_ssh -conf=/etc/mha_master/mha.cnf

2)检查管理的MySQL复制集群的连接配置参数是否OK
因此,我们需要在master节点上再次执行以下操作:grant replication slave,replication client on *.* to 'he'@'10.0.%.%' identified by '123';
flush privileges;
masterha_check_repl -conf=/etc/mha_master/mha.cnf
在 manager 节点上执行以下命令来启动 MHA:
nohup masterha_manager -conf=/etc/mha_master/mha.cnf &> /etc/mha_master/manager.log &

启动成功以后,我们来查看一下 节点的状态:
masterha_check_status -conf=/etc/mha_master/mha.cnf
结果为:
mha (pid:7598) is running(0:PING_OK), master:10.0.0.42
测试 MHA 故障转移
在 master 节点关闭 mariadb 服务,模拟主节点数据崩溃
systemctl stop mariadb
rm -rf /var/lib/mysql/*
查看slave2主从同步



浙公网安备 33010602011771号