一、MySQL组复制实现高可用原理
MySQL组复制(Group Replication)是MySQL提供的一种高可用性和高扩展性的解决方案,它通过以下机制来实现数据库的高可用性:
1.数据强一致性:
组复制基于Paxos分布式一致性算法,确保数据在所有参与节点间的一致性和原子性。当一个事务在一个节点上提交成功后,只有当大多数节点确认该事务(称为多数派同意),事务才会被提交。这样即使有个别节点发生故障,数据的一致性仍然能得到保障。
2 自动故障转移
在组复制中,如果当前的主节点(Primary节点)发生故障,组内的其他节点会自动进行选举,选出一个新的主节点来接管服务,这个过程对应用透明,确保了服务的连续性。这个机制依赖于Paxos算法中的领导者选举过程,确保在任何时刻都只有一个主节点在处理写请求。
3 故障检测:
组复制内置了心跳机制和健康检查,能够及时检测到节点的加入、离开或故障。当检测到节点不可达时,会触发重新配置和可能的主节点切换,以维持服务的稳定运行
4 冲突解决:
在分布式系统中,可能会出现并发写入导致的数据冲突,组复制通过冲突检测和解决机制确保数据的一致性。如果两个事务在不同节点上几乎同时提交并且冲突,那么其中一个事务会被标记为失败,需要重新执行。
5 灵活的节点管理
组复制允许动态添加或移除节点,这意味着可以根据需要增加读副本以提高读取性能,或者在需要时移除节点进行维护,而不会中断服务。
6 透明的数据管理:
当一个新的节点加入组时,它可以自动从其他节点同步数据,实现快速的数据恢复和加入组的过程。综上所述,MySQL组复制通过一系列机制实现了高可用性,确保了在节点故障、网络分割等情况下数据库服务的连续性和数据的一致性,为用户提供了一个高度可靠的数据存储解决方案。
二、MySQL组复制主要步骤(单主模式官方推荐一主两从)
1.设置三台MySQL服务器3306端口能互通
2 配置文件的配置
2.1 主节点[mysqld]下方加入Replication、Multi-threaded Replication、Group Replication setting
2.2 从节点一和从节点二的配置与主节点的配置基本相同,只需要修改report_host server_id loose-group_replication_local_address
3.主库启动组复制
3.1 执行show plugins检查插件是否加载成功
3.2 初始化组复制(只在node1上执行)
set global group_replication_bootstrap_group=on;
start group_replication;
set global group_replication_bootstrap_group=off;
通过perfomance_schema.replication_group_members查看集群的节点信息。主要有member_id,member_host,member_port,member_state,member_role字段
3.3 创建复制用户
create user 'rpl_user'@'%' identified by 'rpl_passpass';
grant replication slave on *.*to 'rpl_user';
grant backup_admin on *.*to 'rpl_user';
3.4 配置恢复通道
change master to master_user='rpl_user', master_password='rpl_passpass' for channel 'group_replication_recovery';
4.添加节点从库一和二
添加节点只需两步:配置恢复通道和启动组复制
在节点从库一和二执行下面两条语句
change master to master_user='rpl_user', master_password='rpl_passpass' for channel 'group_replication_recovery';
start group_replication;
添加完毕后通过perfomance_schema.replication_group_members查看集群的节点信息。主要有member_id,member_host,member_port,member_state,member_role字段
分别在节点从库一和二执行执行查询主库表数据的语句看是否能读取到数据。
三、单主模式和多主模式
在多主模式下所有节点都是主节点(Primary)
1、单主模式和多主模式的区别:本质区别是多主模式会开启冲突检测。另外还有下面几个区别
部署方式,多主模式需额外设置以下两个参数
group_replication_single_primary_mode = OFF
group_replication_enforce_update_everywhere_checks = ON
2、read_only的设置
对于单主模式,组复制会自动将Secondary节点的super_read_only和read_only设置为ON
3、自增主键
在MySQL中自增主键的生成受两个参数的影响:auto_increment_offset(初始值)和auto_increment_increment(步长)。两个参数默认值均为1
多主模式下这两个参数则分别取自 server_id和group_replication_auto_increment_increment(默认为7)。在多主模式下server_id为1和8、2和9的会发生冲突
4、组复制的限制
乐观事务模型、验证阶段不会考虑间隙锁(gap lock)、表锁(lock table)和GET_LOCK操作
单主模式和多主模式的在线切换
在MySQL 8.0.13之前不支持在线调整集群模式。如果要调整,只能重启整个组复制。
#单主模式切换为多主模式
select group_replication_switch_to_multi_primary_mode();
#多主模式切换为单主模式
select group_replication_switch_to_single_primary_mode(member_uuid);
在执行这两个命令时,会同步修改group_replication_single_primary_mode和group_replication_enforce_update_everywhere_checks这两个参数的值,并持久化到mysqld-auto.cnf
可以通过以下命令查看切换进度
select event_name, work_completed, work_estimated from perfomance_schema.events_stages_current where event_name like "%stage/group_rpl%"\G
四、监控组复制
下面6个表用来监控组复制
replication_group_members replication_group_member_stats
replication_connetction_status replication_applier_status
replication_applier_status_by_coordinator replication_applier_status_by_worker
五、单主模式下使用keepalived+VIP虚拟IP+检查主节点脚本来实现应用无缝连接主库。
参考链接
mysql mgr模式 java连接 mysql mgr配置_mob6454cc788ee7的技术博客_51CTO博客