MGR 参数

文章详细介绍了MySQL组复制的相关配置选项,如transaction_write_set_extraction用于事务哈希编码,group_replication_group_name指定组名,loose-group_replication_start_on_boot控制启动时是否启动复制,以及各种参数对容错和高可用性的影响,如autorejoin_tries和exit_state_action等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

transaction_write_set_extraction

表示节点必须收集每个事务的写集(write set),并使用 XXHASH64 哈希算法将其编码为hash 值。
loose-group_replication_group_name用来告诉插件,有一个名为"aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"的组需要加入,或者 需要创建。

loose-group_replication_start_on_boot告诉插件,在启动MySQL实例时不要自动启动组复制功能。
loose-group_replication_local_address告诉插件,该实例使用 ipx:33081端口作为组中成员之间的通信地址。选项 groupreplicationlocal_address 配置的本地地址必须能和组中其他所有成员通信。
loose-group_replication_group_seeds 告诉插件,如果节点要加入该组,需要联系这些主机。这些是种子成员(seed members),当节点要连接该组时需要使用这些成员。在某节点要加入组时,需要联系其中的一个(种子),然后请求组重新配置成员列表,以允许在组中接受该节点。注意,不需要在该选项中列出组中的所有成员,只需要列出节点希望加入组时应该联系的服务器列表。
loose-group_replication_single_primary_mode和loose-group_replication_enforce_update_everywhere_checks :和单主/多主模式有关。配置设置为单主模式。
loose-group_replication_ip_whitelist  配置白名单

group_replication_allow_local_disjoint_gtids_join
允许服务器加入组,即使该服务器具有组中不存在的本地事务也是如此。在5.7.21版中已弃用,并计划在以后的版本中将其删除。

slave_pending_jobs_size_max

在多线程复制时,在队列中Pending的事件所占用的最大内存,默认为16M,如果内存富余,或者延迟较大时,可以适当调大;注意这个值要比主库的max_allowed_packet大

group_replication_autorejoin_tries

MySQL 8.0.16 版本在 MGR 插件上增加了一个新的特性,节点自动重新加入组复制功能
在某些场景下,比如网络抖动,在网络恢复后无需人为干预,节点自动重新加入组复制,这一特性提升了 MySQL MGR 的容错能力和高可用能力。8.0.16 引入,默认值3,最小值0,最大值2016,比如设置为3则表示会尝试3次重新加入组复制,重试的间隔为5分钟。需要设置参数 group_replication_exit_state_action

group_replication_exit_state_action
在MySQL 8.0.16中,group_replication_exit_state_action的默认值已更改为READ_ONLY
此参数在8.0.12推出,当一个服务器实例非故意离开群组时,允许用户配置群组复制的行为。
group_replication_exit_state_action具有以下两个值:
ABORT_SERVER:服务器自行关闭;
READ_ONLY: 服务器将自身切换到超级只读模式。
早期的group_replication_exit_state_action默认值设置为ABORT_SERVER,当成员无意中离开群组时,服务器会自行关闭。默认ABORT_SERVER的基本原理是阻止失败的服务器进行读写操作,因为所有连接都将被删除。但在收集了社区反馈后,我们重新审视了这个决定,并决定将MySQL_8.0中的READ_ONLY作为默认操作。

group_replication_member_expel_timeout

8.0.13 引入,默认值5,最小值0,最大值31536000  怀疑的超时时间。MGR 组成员在产生怀疑后等待的时间(秒),然后将怀疑失败的成员从组中驱逐出去。在怀疑产生前的最初5秒的检测周期不计入此时间。

测试结论:将 group_replication_unreachable_majority_timeout 设置为 N 秒,需要等到 N+5 秒后,节点才会变为 ERROR 状态并脱离集群。因此为了防止网络抖动而导致的节点脱离集群,建议调整这个值,不要使用默认值0,可以使用5。
对于 >=8.0.16 的 mysql 版本,可以使用 group_replication_autorejoin_tries 参数进一步提升 MySQL MGR 的容错能力和高可用能力。

group_replication_unreachable_majority_timeout

参考https://www.jianshu.com/p/935793aa51b0

group_replication_transaction_size_limit

默认143MB, 单个事务超过143MB集群断开, 最大2GB

灌数据的时候要分批进行,尽量不要有超过100MB的大事务

group_replication_compression_threshold

压缩使用LZ4算法,阈值缺省为1000000字节,只压缩大于该参数指定字节数的事务,设置为0将禁用压缩

group_replication_poll_spin_loops

组通信线程(Group Communication Thread,GCT)在加载组复制插件后循环运行。GCT从组插件接收消息,处理仲裁和故障检测相关任务,发送活动消息,并处理服务器和组之间的双向事务传输。当队列中没有消息时,GCT进入睡眠状态。通过在实际进入睡眠状态之前将等待时间设置为稍长,即进行主动等待,在某些情况下是有益的,因为GCT频繁休眠可能浪费可用的CPU时间。要强制GCT执行活动等待,使用group_replication_poll_spin_loops选项。此选项控制GCT在进入睡眠状态前尝试接收消息的次数,也可说是控制通信线程的贪婪程度,默认值为0。在网速很慢的环境中,适当配置该选项可以降低事务延迟。按官方文档的说法,该选项只是作为一种微调手段。

MGR 启用并行复制

如果设置了并行复制 slave_parallel_workers,那么这些参数也要被设置,用于确保所有的组成员按照相同的顺序执行并提交事务:
    slave_preserve_commit_order=1
    slave_parallel_type=LOGICAL_CLOCK

要部署 MySQL Group ReplicationMGR)的监控,需要结合多个工具和方法来实现全面的监控与管理。以下是一个详细的部署方案: ### 配置用户权限 在部署 MGR 监控之前,需要确保有适当的用户权限来进行监控操作。例如,在 Ceph 环境中创建一个用于 MGR 监控的用户 `openstack`,并赋予相应的权限: ```bash [root@cephsvr-128040 ceph]# ceph auth get-or-create mgr.openstack mon 'allow *' osd 'allow *' mds 'allow *' ``` 这将创建一个具有广泛权限的用户,适用于监控目的[^2]。 ### 使用 MySQL Shell 部署 MGR MySQL Shell 是一个高级客户端和代码编辑器,支持开发和管理 MySQL 服务器。可以使用 MySQL Shell 来配置和管理 MGR 集群。通过 MySQL Shell 的 AdminAPI 可以轻松地引导和管理组复制集群。 ```bash mysqlsh --uri root@localhost:3306 -e "dba.configureInstance()" ``` 此命令会检查当前实例是否适合加入 MGR 集群,并根据需要调整配置[^3]。 ### 配置 MGR 参数 为了优化性能和稳定性,需要对 MGR 的一些关键参数进行配置。例如,在不同地理位置的节点上设置不同的参数以适应网络延迟和其他因素。美东节点可以配置如下: ```ini loose-group_replication_communication_max_message_size = 10M loose-group_replication_compression_threshold = 1000000 ``` 而中国节点则可以配置流量控制相关的阈值: ```ini loose-group_replication_flow_control_applier_threshold = 25000 loose-group_replication_flow_control_certifier_threshold = 25000 ``` 这些参数有助于提高跨区域部署时的数据同步效率和稳定性[^1]。 ### 使用外部监控工具 除了 MySQL 自带的功能外,还可以利用外部监控工具如 Prometheus 和 Grafana 来实现更强大的监控能力。Prometheus 可以从 MySQL 实例中抓取指标数据,而 Grafana 则提供了可视化界面来展示这些数据。可以通过配置 MySQL Exporter 来暴露 MySQL 的各种指标给 Prometheus。 安装 MySQL Exporter: ```bash wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.13.0/mysqld_exporter-0.13.0.linux-amd64.tar.gz tar xvfz mysqld_exporter-0.13.0.linux-amd64.tar.gz cd mysqld_exporter-0.13.0.linux-amd64 ``` 启动 MySQL Exporter: ```bash ./mysqld_exporter --config.my-cnf=.my.cnf ``` 配置 `.my.cnf` 文件以连接到 MySQL 数据库: ```ini [client] user=exporter password=your_password host=localhost port=3306 ``` ### 编写自定义脚本 对于特定需求,也可以编写自定义脚本来收集和处理监控信息。Python 或其他语言都可以用来编写这样的脚本,定期执行并记录结果。 示例 Python 脚本: ```python import mysql.connector from mysql.connector import Error def check_mgr_status(): try: connection = mysql.connector.connect(host='localhost', database='mysql', user='exporter', password='your_password') if connection.is_connected(): cursor = connection.cursor() cursor.execute("SELECT * FROM performance_schema.replication_group_members") rows = cursor.fetchall() for row in rows: print(row) except Error as e: print("Error while connecting to MySQL", e) finally: if (connection.is_connected()): cursor.close() connection.close() check_mgr_status() ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值