1、MySQL 高可用解决方案
![图片[1]-MySQL 高可用-MHA-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2022/11/image-137.png)
MMM: Multi-Master Replication Manager for MySQL,Mysql主主复制管理器是一套灵活的脚本程序,基于perl实现,用来对mysql replication进行监控和故障迁移,并能管理mysql MasterMaster复制的配置(同一时间只有一个节点是可写的)。
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可独立
地执行事务,但所有读写事务只在冲突检测成功后才会提交。
![图片[2]-MySQL 高可用-MHA-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2022/11/image-138.png)
这3个节点互相通信,每当有事件发生,都会向其他节点传播该事件,然后协商,如果大多数节点都同意这次的事件,那么该事件将通过,否则该事件将失败或回滚。这些节点可以是单主模型的(single-primary),也可以是多主模型的(multi-primary)。单主模型只有一个主节点可以接受写操作,主节点故障时可以自动选举主节点。多主模型下,所有节点都可以接受写操作,所以没有master-slave的概念。
2、MHA(Master High Availability)
2.1、MHA 工作原理和架构
![图片[3]-MySQL 高可用-MHA-李佳程的个人主页](http://www.lijiach.com/wp-content/uploads/2022/11/image-139.png)
MHA工作原理
- MHA利用 SELECT 1 As Value 指令判断master服务器的健康性,一旦master 宕机,MHA 从宕机崩溃
的master保存二进制日志事件(binlog events) - 识别含有最新更新的slave
- 应用差异的中继日志(relay log)到其他的slave
- 应用从master保存的二进制日志事件(binlog events)到所有slave节点
- 提升一个slave为新的master
- 使其他的slave连接新的master进行复制
- 故障服务器自动被剔除集群(masterha_conf_host),将配置信息去掉
- MHA是一次性的高可用性解决方案,Manager会自动退出
选举新的Master
- 如果设定权重(candidate_master=1),按照权重强制指定新主,但是默认情况下如果一个slave落后master 二进制日志超过100M的relay logs,即使有权重,也会失效,如果设置check_repl_delay=0,即使落后很多日志,也强制选择其为新主
- 如果从库数据之间有差异,最接近于Master的slave成为新主
- 如果所有从库数据都一致,按照配置文件顺序最前面的当新主
数据恢复
- 当主服务器的SSH还能连接,从库对比主库position 或者GTID号,将二进制日志保存至各个从节点并且应用(执行save_binary_logs 实现)
- 当主服务器的SSH不能连接,对比从库之间的relaylog的差异(执行apply_diff_relay_logs[实现])
- 为了尽可能的减少主库硬件损坏宕机造成的数据丢失,因此在配置MHA的同时建议配置成MySQL的半同步复制
MHA软件
MHA软件由两部分组成,Manager工具包和Node工具包
# 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信息
masterha_stop --conf=app1.cnf 停止MHA
masterha_secondary_check 两个或多个网络线路检查MySQL主服务器的可用
# Node工具包
save_binary_logs #保存和复制master的二进制日志
apply_diff_relay_logs #识别差异的中继日志事件并将其差异的事件应用于其他的slave
filter_mysqlbinlog #去除不必要的ROLLBACK事件(MHA已不再使用此工具)
purge_relay_logs #清除中继日志(不会阻塞SQL线程)
# 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配置 为每个主从复制集群