- MySQL是一个常用的关系型数据库,为了确保高可用性,需要采用相应的解决方案。以下是常用的MySQL高可用解决方案:
- 主从复制:主从复制是最基本的MySQL高可用解决方案,通过将数据从主服务器同步到一个或多个从服务器来提高数据库的可用性。当主服务器发生故障时,从服务器可以自动接管主服务器的工作。
- MySQL集群:MySQL集群是通过多个MySQL节点组成一个分布式系统,可以实现MySQL的高可用性和负载均衡。
- MySQL代理:MySQL代理是指在MySQL前端加入一个代理层,代理层负责MySQL的读写分离和负载均衡,同时还可以提供高可用性和容错性。
- MySQL加强版:MySQL加强版是基于MySQL二次开发的版本,提供了许多高可用性和性能优化的功能,例如Galera Cluster、Percona XtraDB Cluster等。
- 分布式数据库:分布式数据库是将数据分散在多个节点上,从而提高系统的可用性和可扩展性。例如TiDB、Shardingsphere等。
MHA:Master High Availability,对主节点进行监控,可实现自动故障转移至其它从节点;通过提升某一从节点为新的主节点,基于主从复制实现,还需要客户端配合实现,目前MHA主要支持
一主多从的架构,要搭建MHA,要求一个复制集群中必须最少有三台数据库服务器,一主二从,即一台充当master,一台充当备用master,另外一台充当从库,出于机器成本的考虑,淘宝进行了
改造,目前淘宝TMHA已经支持一主一从
Galera Cluster:wsrep(MySQL extended with the Write Set Replication)通过wsrep协议在全局实现复制;任何一节点都可读写,不需要主从复制,实现多主读写
GR(Group Replication):MySQL官方提供的组复制技术(MySQL 5.7.17引入的技术),基于原生复制技术Paxos算法,实现了多主更新,复制组由多个server成员构成,组中的每个server可独立
地执行事务,但所有读写事务只在冲突检测成功后才会提交
MHA
MHA(Master High Availability)是一个开源的 MySQL 高可用性解决方案,用于实现 MySQL 主从自动切换和故障检测。
MHA 的主要功能包括:
监控 MySQL 主库和从库的状态;
当主库出现故障时,自动将从库升级为新的主库,实现自动故障转移;
当主库恢复时,自动将其作为从库加入到新的主库中。
MHA 的配置主要分为以下三个部分:
主配置文件:包含全局参数和监控节点参数;
VIP 配置文件:包含 VIP 和故障切换命令;
MySQL 配置文件:包含 MySQL 实例的配置和启动命令。
MHA 的工作流程如下:
- MHA Manager 通过 SSH 协议连接到 MySQL 主库,并监控主库的运行状态;
- 当主库出现故障时,MHA Manager 会通过 SSH 协议连接到备库并升级其中一台为新的主库;
- 新的主库启动后,MHA Manager 会通知其他从库切换到新的主库上;
- 主库恢复后,MHA Manager 会将其重新加入到复制拓扑中,作为一个从库。
MHA 的优点包括:
- 简单易用,部署维护成本低;
- 支持基于 VIP 的故障切换;
- 支持多种监控方式,如 SSH、MHA Node、Nagios 等;
- 可扩展性好,可以支持多个 MySQL 实例同时运行。
MHA 的缺点包括:
- 依赖 SSH 协议,需要在所有节点上安装 SSH;
- 对 SSH 配置有要求,需要配置无密码 SSH 登录;
- 不能自动处理数据一致性问题,需要手动解决。
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信息
MHA自定义扩展:
secondary_check_script: 通过多条网络路由检测master的可用性
master_ip_ailover_script: 更新Application使用的masterip
shutdown_script: 强制关闭master节点
report_script: 发送报告
init_conf_load_script: 加载初始配置参数
master_ip_online_change_script:更新master节点ip地址
MHA配置文件:
global配置,为各application提供默认配置,默认文件路径 /etc/masterha_default.cnf
application配置:为每个主从复制集群
实现MHA高可用
1、安装MHA软件
#管理节点安装
wget https://github.com/yoshinorim/mha4mysql-node/releases/download/v0.58/mha4mysql-node-0.58.tar.gz
wget https://github.com/yoshinorim/mha4mysql-manager/releases/download/v0.58/mha4mysql-manager-0.58.tar.gz
mha4mysql-manager
mha4mysql-node
#被管理节点安装
mha4mysql-node
#安装依赖
yum install perl perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN
#编译安装管理节点
perl Makefile.PL
2、所有节点实现ssh-key无密码认证
[root@mha-manager ~]#ssh-keygen
[root@mha-manager ~]#ssh-copy-id 10.0.7.204
[root@mha-manager ~]#rsync -av .ssh 10.0.7.205:/root/
[root@mha-manager ~]#rsync -av .ssh 10.0.7.207:/root/
[root@mha-manager ~]#rsync -av .ssh 10.0.7.200:/root/
3、创建app1组的配置文件,并完成编辑
mkdir /data/mha
vim /data/mha/app1.cnf
[server default]
user=root #用于远程连接MySQL所有节点的用户,需要有管理员的权限
password=1234.com
manager_workdir=/data/mha/app1/
manager_log=/data/mha/app1/manager.log
remote_workdir=/data/mha/app1/
ssh_user=root #用于实现远程ssh基于KEY的连接,访问二进制日志
repl_user=repluser #主从复制的用户信息
repl_password=1234.com
ping_interval=1 #健康性检查的时间间隔
[server1]
hostname=10.0.7.200
candidate_master=1 #优先为新的master
[server2]
hostname=10.0.7.205
candidate_master=1
[server3]
hostname=10.0.7.207
4、检查mha的环境
masterha_check_ssh --conf=/data/mha/app1.cnf
报错:[error][/usr/local/share/perl5/MHA/Server.pm, ln398] 10.0.7.207(10.0.7.207:3306): User repluser does not exist or does not have REPLICATION SLAVE privilege! Other slaves can not start replication from this host.
解决方法:没有建repluser账户
报错:
解决:创建软链接 ln -s /usr/local/mysql/bin/mysqlbinlog /usr/local/bin/mysqlbinlog
报错:
解决:yum install -y perl-DBD-mysql
5、启动MHA
#开启MHA,默认是前台运行
nohup masterha_manager --conf=/data/mha/app1.cnf &> /dev/null
#查看状态
masterha_check_status --conf=/data/mha/app1.cnf
排错日志
tail /data/mha/app1/manager.log
6、测试master宕机,7.205成为了主