MySQL-MGR系列(1)
2024-05-31 本文已影响0人
开心的蛋黄派
MGR集群架构调优简介
一 配置文件说明
1. `plugin_load_add=group_replication.so`
- **说明**:加载Group Replication插件,使MySQL服务器支持组复制功能。
2. `binlog_transaction_dependency_tracking=WRITESET`
- **说明**:设置并行复制中事务依赖关系的追踪方式为WRITESET,以优化并行复制的性能。
3. `transaction_write_set_extraction = XXHASH64`
- **说明**:指定用于提取写集合的哈希算法为XXHASH64,这是组复制中用于确定事务依赖性和冲突检测的关键部分。
4. `loose-group_replication_group_name = '5dbabbe6-8050-49a0-9131-1de449167446'`
- **说明**:设置组复制的组名,确保集群中所有成员的该值相同,以标识它们属于同一个复制组。
5. `loose-group_replication_ip_whitelist = '127.0.0.1/32,192.168.6.0/24'`
- **说明**:定义允许连接到组复制的IP地址或子网白名单。
6. `loose-group_replication_local_address = '192.168.6.151:33081'`
- **说明**:指定当前服务器在组复制中使用的本地通信地址和端口。
7. `loose-group_replication_group_seeds = '192.168.6.151:33081,192.168.6.152:33081,192.168.6.153:33081'`
- **说明**:设置组复制的种子节点地址和端口,用于新成员加入时发现组。
8. `loose-group_replication_start_on_boot = OFF`
- **说明**:指定MySQL服务器在启动时是否自动启动组复制功能。
9. `loose-group_replication_bootstrap_group = OFF`
- **说明**:控制当前服务器是否可以创建新的组复制集群并作为初始的引导服务器。
10. `loose-group_replication_member_weight = 1`
- **说明**:设置当前组复制成员的权重,用于选举过程中的投票。
11. `loose-group_replication_single_primary_mode = ON`
- **说明**:启用单主模式,在此模式下,只有一个成员可以接受写操作。
12. `loose-group_replication_enforce_update_everywhere_checks = OFF`
- **说明**:在单主模式下,控制是否强制执行更新检测,以防止在非主节点上执行写操作。
13. `loose-group_replication_consistency = BEFORE_ON_PRIMARY_FAILOVER`
- **说明**:设置数据一致性约束,确保在故障转移后,新主节点会先应用完队列中的事务,然后再对外提供写入服务。
14. `loose-group_replication_flow_control_mode = "AUTO"`
- **说明**:控制组复制的流控模式,根据网络条件和系统性能自动调整。
15. `loose-group_replication_transaction_size_limit = 10M`
- **说明**:限制单个事务的大小,以避免大事务对复制性能的影响。
16. `loose-group_replication_communication_max_message_size = 10M`
- **说明**:设置组复制中消息的最大大小,以优化网络传输。
17. `loose-group_replication_compression_threshold = 3153600`
- **说明**:设置消息压缩的阈值,当消息大小超过此阈值时,将尝试压缩消息以减少网络带宽的使用。
18. `loose-group_replication_unreachable_majority_timeout = 0`
- **说明**:设置在无法联系到大多数成员时的超时时间。
19. `loose-group_replication_autorejoin_tries = 0`
- **说明**:设置在失去与组的连接后,当前成员自动重新加入组的尝试次数。
20. `loose-group_replication_exit_state_action = READ_ONLY`
- **说明**:设置在成员退出组复制时的动作,例如设置为只读模式,以防止数据的不一致。
请注意,`loose-`前缀表示这些选项是特定于Group Replication的,并可能在未来的MySQL版本中发生变化。建议参考最新的MySQL官方文档以获取最准确的信息。
二、整体过程
-
写节点接收并应用事务:
- 当一个写节点(在单主模式下是主节点,在多主模式下可以是任何一个节点)接收到一个事务时,它首先会在本地应用这个事务。
- 应用事务后,该节点会生成对应的binlog事件,并将这些事件缓存在binlog cache中。
- 根据这些binlog事件和相关信息(如主键),节点会生成一个writeset集合。这个writeset是事务中更改的数据行的唯一标识集合,用于后续的冲突检测和解决。
-
广播并推送writeset:
- 写节点会通过Group Replication的通信协议,将writeset广播给组内的其他成员进行验证。
- 这些writeset是顺序推送的,以确保所有节点以相同的顺序接收和应用更改。
-
验证与提交:
- 其他成员接收到writeset后,会进行验证。这包括检查writeset是否与本地数据存在冲突。
- 如果验证成功(即没有冲突),写节点会刷新其binlog日志,并将commit的结果返回给客户端,表示事务已成功提交。
-
写入relay log和应用事务:
- 其他成员在验证成功后,会将接收到的binlog事件写入本地的relay log中。
- 随后,这些成员会读取relay log中的事件,并将其加入应用队列。
- 当事件被应用到本地数据库后,这些更改也会被写入到本地的binlog中,以确保数据的持久性和一致性。
-
集群一致性:
- 通过上述流程,所有成员最终都会应用相同的事务和更改,从而确保整个集群的数据一致性。
- 在多主模式下,任何节点都可以作为写节点发起事务,因此需要更加复杂的冲突检测和解决机制来确保数据的一致性。