组中的成员之间,通过建立点对点的TCP连接与组中的其他成员进行通讯。这些连接仅用于组成员之间的内部通信和消息传递。用于建立TCP连接的地址信息由系统变量group_replication_local_address进行配置。
指示启用该系统变量的Server在执行START GROUP_REPLICATION语句时引导创建一个组,并充当种子成员。后续的其他Server如果要加入组(加入组的Server在这里称为joiner成员),则需要向创建组的成员请求加入组(接受连接请求的组成员在这里称为donor节点),创建组的成员在接收到joiner节点请求之后,会动态更改一些配置,以便将其添加到组中
有如下两种场景需要使用该系统变量来引导创建一个组:
如果组使用多主模式,则可以将无冲突的事务分散到不同的主要节点中,这样就能够一定程度上扩展写负载能力(通过多节点写来扩展一小部分IO *** 作,能够间接扩展一小部分写负载)。
由于组成员之间需要不断地相互交互消息以实现同步数据和相互告知组成员状态的目的。因此,相对于主从复制来说,预计会产生一些额外的负载,但具体多多少负载很难量化,因为它还取决于组的大小(即,组成员数量。例如:9个组成员对带宽需求大于3个成员,且内存和CPU消息也更大,因为成员数量越多,组中消息传递和处理工作就越复杂)。
可以,但是每个成员之间的网络连接必须可靠并具有良好的性能,低延迟、高带宽的网络连接是保证组复制高性能的必要条件,如果网络带宽存在瓶颈,可以参考"6.3 消息压缩" 中介绍的方法来降低组复制的带宽消耗。但是,如果网络连接存在丢包的问题,可能导致重新传输造成更高的端到端延迟,这个时候,吞吐量和延迟都将受到负面影响。注意:当任何组成员之间的网络往返时间(RTT)超过5秒时,可能会触发内置的故障检测机制而导致组成员被驱逐出组(实际是否被驱逐出组,需要看具体的配置)。
这取决于连接发生问题的原因。如果连接问题是暂时的,并且重新连接的速度足够快(即,发生问题的时间很短),以至于故障检测器没有发现或者未达到故障级别,那么组成员可能就不会被驱逐出组。如果发生问题的时间足够长,则故障检测器最终会发现问题并将故障成员驱逐出组。
从MySQL 8.0版本开始,可以使用两个系统变量进行调节,这就为发生问题的组成员增加了一个继续留在组中或被驱逐出组之后重新加入组的机会:
group_replication_autorejoin_tries:设置一个组成员被驱逐出组或者与组中多数成员失联达到超时时间之后,尝试自动重新加入组的次数。设置该系统变量为非0值时,成员会按照该系统变量设置的次数每隔5分钟进行一次自动重新加入组的尝试
如果一个成员被驱逐出组,并且耗尽了自动重新加入组的尝试次数都不能成功加入组,那么将会按照系统变量group_replication_exit_state_action指定的值执行退出 *** 作。之后,如果需要将其重新加入组,你需要手动执行加入组的步骤(或者使用自动化运维脚本)。
group_replication_member_expel_timeout 指定组复制组成员在产生怀疑之后,从组中排除怀疑失败的成员之前等待的时间(以秒为单位)。在产生怀疑之前的最初 5 秒检测时间不计入该时间。直到并包括 MySQL 8.0.20 在内,group_replication_member_expel_timeout 默认值均为 0,这意味着没有等待时间,并且在 5 秒钟的检测时间结束后,可疑成员应立即被驱逐。从 MySQL 8.0.21 开始,该值默认为 5,这意味着在 5 秒钟的检测时间后如果该节点还是不正常,那会在等 5 秒钟,如果可疑成员还是不正常,超过这个时间将被驱逐。为验证该参数对集群影响,我们通过实验模拟不同时长的网络延迟,然后调整group_replication_member_expel_timeout 值观察该参数值对集群驱逐故障节点的影响。
Slave上的 *** 作mysql>show slave status\G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 192.168.56.100
Master_User: repliform
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysqld-bin.000001
Read_Master_Log_Pos: 1458
Relay_Log_File: localhost-relay-bin.000003
Relay_Log_Pos: 4
Relay_Master_Log_File: mysqld-bin.000001
Slave_IO_Running: No
Slave_SQL_Running: Yes
mysql>stop slave
Query OK, 0 rows affected (0.01 sec)
清除复制设置
mysql>reset slave all
Query OK, 0 rows affected (0.07 sec)
mysql>show slave status\G
Empty set (0.00 sec)
删除复制用户
mysql>drop user repliform@'%'
mysql>flush privileges
2. Master上的 *** 作
删除复制用户
mysql>drop user repliform@'%'
mysql>flush privileges
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)