一、何为高可用?
高可用性说白了就是应用可以 持续不间断 的 提供服务的能力!
注:
高可用和负载均衡的概念有些初学者可能会混淆,在这也说说负载均衡:
负载均衡:指后端服务器没有状态,可以任意分配,它们之间是同时工作的,能够通过增加机器增加吞吐量、减小服务器压力。
高可用:指后端服务器有状态,一般来说是一主一备的结构,它们之间是一个工作而另一个不工作,在主服务器出故障后,备服务器去接管服务,从而达到持续不间断的提供服务。
二、MHA介绍
MHA使用perl语言编写的一个脚本管理管理工具,用于维持master主库的高可用性。
MHA包含两个部分:MHA Manager(管理节点)和MHA Node(数据节点)
MHA原理:
MHA用于维持 MySQL Replication 中 master 库的高可用性,最大的特点是可以修复多个slave上的差异日志,最终使所有slave保持数据一致,然后从中选取一个充当新的 master,并让其他 slave 指向它。
当master出现故障时,通过对比 slave 之间的 I/O thread 读取主库的 binlog 的 position 号,选取最接近的slave作为备胎(被选主库),其它从库通过与备胎对比,生成差异的中继日志,在备胎上运用从原来的 master 保存的 binlig,同时将备胎提升为master。最后在其他 slave 上运用相应的差异中继日志,并从新的 master 开始复制。
优点:
- 故障切换时,自动判断哪个从库与主库离的最近,并切换到上面
- 支持binlog server,提高 binlog 的传送效率
- 结合半同步功能,确保故障切换时数据不丢失
三、实验环境介绍
使用三台机器来完成本次MHA的搭建:
IP 主机名 系统版本 角色 节点
172.25.5.1 lxn1 RHEL7 master node node1
172.25.5.3 lxn3 RHEL7 slave1 node node2
172.25.5.4 lxn4 RHEL7 slave2 node+manager node3
四、MHA搭建
MHA下载:
https://github.com/yoshinorim/mha4mysql-manager
https://github.com/yoshinorim/mha4mysql-node
wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58.tar.gz
wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58.tar.gz
1、配置三台机器免密通信
所有节点都执行生成密钥操作
cd /root/.ssh/
ssh-keygen -t dsa -P '' -f id_dsa
cat id_dsa.pub >> authorized_keys
- 以主库示例,所有节点都要操作
在主库上接收slave上的密钥
scp 172.25.5.3:/root/.ssh/authorized_keys ./authorized_keys.3
scp 172.25.5.4:/root/.ssh/authorized_keys ./authorized_keys.4
在主库上执行合并密钥的命令
cat authorized_keys.3 >> authorized_keys
cat authorized_keys.4 >> authorized_keys
在主库上将合并后的密钥文件发给其他节点
scp authorized_keys 172.25.5.3:/root/.ssh/
scp authorized_keys 172.25.5.4:/root/.ssh/
- 完整命令截图(进供参考)
所有节点在/etc/hosts文件中写入本地解析:
172.25.5.1 lxn1 node1
172.25.5.3 lxn3 node2
172.25.5.4 lxn4 node3
测试
能够互相ssh且不要密码,即成功!
示例:
2、搭建主从环境
环境说明
本次实验搭建的是一主两从环境,使用的MySQL5.7版本,基于GTID+row模式
在所有服务器MySQL上执行以下操作
#创建主从复制帐号
create user 'gtid'@'172.25.5.%' identified by 'gtid123';
grant replication slave on *.* to &#