文章目录
MHA集群(MySQL服务高可用集群)
MHA简介
MHA(Maste High Availability)
- 由日本DeNA公司youshimaton开发
- 是一套优秀的实现MySQL高可用的解决方案
- 数据库的自动故障切换操作能做到在0~30秒之内完成
- MHA能确保在故障切换过程中最大限度保证数据的一致性,以达到真正意义的高可用
MHA组成
- MHA Manager(管理节点)
- 管理所有数据库服务器
- 可以单独部署在一台独立的机器上
- 也可以部署在某台数据库服务器上
- MHA Node(数据节点)
- 存储数据的MySQL服务器
- 运行咋每台MySQL服务器上
MHA工作过程
具体如下
- 由manager 定时探测集群中的master节点
- 当master故障时,manager自动将拥有最新数据的slave提升为新的master
拓扑结构
ip规划
IP地址 | 主从同步角色 | 集群角色 | 主机名 |
---|---|---|---|
192.168.4.3 | 客户端 | 无 | mysql |
192.168.4.51 | 主库 | 当前主库 | sql1 |
192.168.4.52 | 从库 | 备用主库 | sql2 |
192.168.4.53 | 从库 | 备用主库 | sql3 |
192.168.4.57 | 无 | 管理主机 | mgm57 |
192.168.4.100 | 无 | VIP地址 | 无 |
拓扑图:
VIP地址再那一台服务器上客户端就访问到哪一个数据库服务器
部署MHA集群
集群环境准备
本次实验所使用的环境为centos7.9,mysql5.7.35,mha0.58
1.安装依赖包
因为MHA这个软件使用perl语言编写的,所以需要perl环境
#在所有主机上安装系统自带的perl软件包
yum -y install perl-*
#接下来安装系统没有的依赖包
yum -y install epel-release perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager perl-Email-Date-Format perl-Mail-Sender perl-Mail-Sendmail perl-MIME-Types perl-MIME-Lite
#最好把这个命令执行两遍,因为其中的一些包,需要在安装了某些包之后才能安装
2.配置ssh密钥对认证登录
- 管理主机可以无密码连接所有数据库服务器
- 数据库服务器彼此之间无密码连接
#先配置57管理主机的密钥对
#192.168.4.57(管理主机)
ssh-keygen #使用最简单的无密码公钥,三下回车选择默认
ssh-copy-id root@192.168.4.51
ssh-copy-id root@192.168.4.52
ssh-copy-id root@192.168.4.53
测试57管理无密码登录
#数据库服务器彼此之间无密码连接
#192.168.4.51
ssh-keygen
ssh-copy-id root@192.168.4.52
ssh-copy-id root@192.168.4.53
#192.168.4.52
ssh-keygen
ssh-copy-id root@192.168.4.51
ssh-copy-id root@192.168.4.53
#192.168.4.53
ssh-keygen
ssh-copy-id root@192.168.4.51
ssh-copy-id root@192.168.4.52
测试
3.配置一主多从同步结构
配置主库51
vim /etc/my.cnf
[mysqld]
server_id=51
log-bin=master51
systemctl restart mysqld
mysql -uroot -p123456
grant replication slave on *.* to repluser@"%" identified by "123456";
show master status;
配置从库52、53
#192.168.4.52
vim /etc/my.cnf
[mysqld]
server_id=52
systemctl restart mysqld
mysql -uroot -p123456
change master to
master_host="192.168.4.51",
master_user="repluser",
master_password="123456",
master_log_file="master51.000002",
master_log_pos=441;
start slave;
show slave status \G;
#192.168.4.53
vim /etc/my.cnf
[mysqld]
server_id=53
systemctl restart mysqld
mysql -uroot -p123456
change master to
master_host="192.168.4.51",
master_user="repluser",
master_password="12