一、group_replication_group_seeds
此系统变量的值可以在组复制运行时更改,但只有在停止并重新启动组成员上的组复制后,更改才会生效。
group_replication_group_seeds是加入成员可以连接到的组成员的列表,以获取所有当前组成员的详细信息。加入成员使用这些详细信息来选择并连接到组成员,以获得与组同步所需的数据。该列表由每个包含的种子成员的单个内部网络地址或主机名组成,如种子成员的group_replication_local_address系统变量中所配置(而不是种子成员的SQL客户端连接,如MySQL Server的主机名和端口系统变量所指定)。种子成员的地址指定为逗号分隔的列表,例如host1:port1、host2:port2。必须在方括号中指定IPv6地址。例如:
通常,
此列表由组的所有成员组成,但您可以选择组成员的子集作为种子。
列表必须至少包含一个有效的成员地址。启动组复制时会验证每个地址。如果列表中不包含任何有效的成员地址,则发出START GROUP_REPLICATION失败。
当服务器加入复制组时,它会尝试连接到其group_replication_group_seeds系统变量中列出的第一个种子成员。如果连接被拒绝,加入成员将尝试按顺序连接到列表中的每个其他种子成员。如果加入成员连接到种子成员,但没有因此添加到复制组(例如,因为种子成员的allowlist中没有加入成员的地址并关闭了连接),则加入成员将继续按顺序尝试列表中的其余种子成员;
加入成员必须使用种子成员在group_replication_group_seeds选项中播发的相同协议(IPv4或IPv6)与种子成员通信。为了获得组复制的IP地址权限,种子成员上的allowlist必须包括种子成员提供的协议的加入成员的IP地址,或者解析为该协议地址的主机名。如果该地址或主机名的协议与种子成员公布的协议不匹配,则除了加入成员的group_replication_local_address之外,还必须设置并允许使用该地址或该主机名。如果加入成员没有适当协议的允许地址,则拒绝其连接尝试。
2、group_replication_local_address
此系统变量的值可以在组复制运行时更改,但只有在停止并重新启动组成员上的组复制后,更改才会生效。
group_replication_local_address设置成员为来自其他成员的连接提供的网络地址,指定为host:port格式的字符串。该地址必须可由组的所有成员访问,因为组通信引擎用于组复制(XCom,一种Paxos变体),用于远程XCom实例之间的TCP通信。如果使用MySQL通信堆栈在成员之间建立组通信连接(group_replication_communication_stack=MySQL),则地址必须是MySQL Server正在侦听的IP地址和端口之一,由服务器的bind_address系统变量指定。
警告
不要使用此地址查询或管理成员上的数据库。这不是SQL客户端连接主机和端口。
组复制使用您在group_replication_local_address中指定的地址或主机名作为复制组中组成员的only标识符。只要主机名或IP地址都不同,您就可以对复制组的所有成员使用相同的端口;只要端口都不同,也可以对所有成员使用同一主机名或IP地址。group_replication_local_address的建议端口为33061。请注意,在发出START GROUP_REPLICATION语句并且集团通信系统(GCS)可用之前,不会验证您为此变量指定的值。
由group_replication_local_address配置的网络地址必须可由所有组成员解析。例如,如果每个服务器实例都在具有固定网络地址的不同计算机上,则可以使用该计算机的IP地址,例如10.0.0.1。如果使用主机名,则必须使用完全限定的名称,并确保该名称可通过DNS、正确配置的/etc/hosts文件或其他名称解析过程解析。从MySQL 8.0.14开始,可以使用IPv6地址(或解析为IPv6地址的主机名)以及IPv4地址。为了区分端口号,必须在方括号中指定IPv6地址,例如:
group_replication_local_address= "[2001:db8:85a3:8d3:1319:8a2e:370:7348]:33061"
如果指定为服务器实例的组复制本地地址的主机名解析为IPv4和IPv6地址,则IPv4地址始终用于组复制连接。
如果您使用XCom通信堆栈在成员之间建立组通信连接(group_replication_communication_stack=XCom),您为group_replication_local_address中的每个组成员指定的地址必须添加到复制组中其他服务器上的group_replification_ip_allowlist(来自MySQL 8.0.22)或group_replication _ip_whitelist(适用于MySQL 8.0.21及更早版本)系统变量的列表中。当XCom通信堆栈用于组时,allowlist用于控制对组的访问。当MySQL通信堆栈用于该组时,用户身份验证用于控制对该组的访问,并且不使用allowlist,如果设置了allowlist则会被忽略。请注意,如果组的任何种子成员在group_replication_group_seeds选项中列出IPv6地址,而该成员具有IPv4 group_replification_local_address,或者相反,则还必须为该成员设置并允许所需协议的备用地址(或解析为该协议地址的主机名)。
总结:
1、关于group_replication_local_address设置:
当group_replication_communication_stack=MySQL时,group_replication_local_address应该设置为MySQL Server正在侦听的IP地址和端口之一,
当group_replication_communication_stack=XCOM时,group_replication_local_address不能设置为MySQL Server正在侦听的IP地址和端口,例如你MySQL的实例端口是3306,你可以设置成33061;
2、group_replication_group_seeds建议设置为组内所有节点的group_replication_local_address参数指定的值,以逗号隔开;
3、安全起见,建议设置group_replification_ip_allowlist为组内成员ip;
4、group_replication_communication_stack=XCom保持默认即可!XCom,一种Paxos变体,可以mgr集群的一致性;