组复制IP地址白名单
组复制插件具有一个配置选项,用于确定可以从哪些主机接受传入的组通信系统连接。此选项称为group_replication_ip_whitelist
。如果在服务器s1上设置此选项,则当服务器s2为了建立群组通信而与s1建立连接时,s1首先接受白名单,然后再从s2接受连接。如果s2在白名单中,则s1接受连接,否则s1拒绝s2的连接尝试。
如果未明确指定白名单,则组通信引擎(XCom)会自动扫描主机上的活动接口,并使用私有子网中的地址来标识这些接口。这些地址以及localhost
IPv4和(从MySQL 8.0.14开始)IPv6 的IP地址用于创建自动组复制白名单。因此,自动白名单包括在以下范围内为主机找到的任何IP地址:
IPv4 (as defined in RFC 1918) 10/8 prefix (10.0.0.0 - 10.255.255.255) - Class A 172.16/12 prefix (172.16.0.0 - 172.31.255.255) - Class B 192.168/16 prefix (192.168.0.0 - 192.168.255.255) - Class C IPv6 (as defined in RFC 4193 and RFC 5156) fc00:/7 prefix - unique-local addresses fe80::/10 prefix - link-local unicast addresses 127.0.0.1 - localhost for IPv4 ::1 - localhost for IPv6
条目将添加到错误日志中,说明已为主机自动列入白名单的地址。
专用地址的自动白名单不能用于来自专用网络外部的服务器的连接,因此,即使该服务器在公用IP上具有接口,默认情况下也不允许来自外部主机的组复制连接。对于位于不同计算机上的服务器实例之间的组复制连接,必须提供公用IP地址并将其指定为显式白名单。如果为白名单指定任何条目,localhost
则不会自动添加私有和地址,因此,如果使用其中任何一个,则必须明确指定它们。
要手动指定白名单,请使用group_replication_ip_whitelist
选项。作为复制组的活动成员的服务器上,您无法更改白名单。如果成员处于活动状态,则必须STOP GROUP_REPLICATION
在更改白名单之前发出声明,然后再发出START GROUP_REPLICATION
声明。
在白名单中,您可以指定以下任意组合:
- IPv4地址(例如,
198.51.100.44
) - 具有CIDR表示法的IPv4地址(例如,
192.0.2.21/24
) - 来自MySQL 8.0.14的IPv6地址(例如,
2001:db8:85a3:8d3:1319:8a2e:370:7348
) - 来自MySQL 8.0.14的具有CIDR表示法的IPv6地址(例如,
2001:db8:85a3:8d3::/64
) - 主机名(例如
example.org
) - 具有CIDR表示法的主机名(例如,
www.example.com/24
)
在MySQL 8.0.14之前,主机名只能解析为IPv4地址。从MySQL 8.0.14开始,主机名可以解析为IPv4地址和/或IPv6地址。如果主机名同时解析为IPv4和IPv6地址,则IPv4地址始终用于组复制连接。您可以将CIDR表示法与主机名或IP地址结合使用,以将具有特定网络前缀的IP地址块列入白名单,但请确保指定子网中的所有IP地址都在您的控制之下。
您必须停止并重新启动成员上的组复制才能更改其白名单。逗号必须分隔白名单中的每个条目。例如:
mysql>STOP GROUP_REPLICATION ; mysql>SET GLOBAL group_replication_ip_whitelist="192.0.2.21/24,198.51.100.44,203.0.113.0/24,2001:db8:85a3:8d3:1319:8a2e:370:7348,example.org,www.example.com/24"; mysql>START GROUP_REPLICATION ;
白名单必须包含每个成员的group_replication_local_address
系统变量中指定的IP地址或主机名。该地址与MySQL服务器SQL协议的主机和端口不同,并且未在bind_address
服务器实例的系统变量中指定。如果用作服务器实例的组复制本地地址的主机名同时解析为IPv4和IPv6地址,则组复制连接将首选IPv4地址。
要加入复制组,服务器需要在向其发出加入组请求的种子成员上列入白名单。通常,它是复制组的引导程序成员,但可以是group_replication_group_seeds
加入该组的服务器的配置中该选项列出的任何服务器。group_replication_group_seeds
当加入成员具有IPv4时,如果选项中列出了该组的任何种子成员,并带有IPv6地址group_replication_local_address
,或者相反,您还必须为种子成员提供的协议(或解析为该协议地址的主机名)的加入成员设置备用地址并将其列入白名单。这是因为服务器加入复制组时,必须使用种子成员在该group_replication_group_seeds
选项中发布的协议(即IPv4或IPv6)与种子成员进行初始联系。如果加入成员没有适当协议的白名单地址,则拒绝其连接尝试。有关管理混合的IPv4和IPv6复制组的更多信息,请参见“支持IPv6以及IPv6和IPv4混合组”。
重新配置复制组时(例如,当选择新的主副本或成员加入或离开时),组成员将在它们之间重新建立连接。如果组成员仅在重新配置后被不再属于复制组的服务器列入白名单,则它无法重新连接到复制组中未将其列入白名单的其余服务器。要完全避免这种情况,请为属于复制组的所有服务器指定相同的白名单。
注意例如,可以根据您的安全要求在不同的组成员上配置不同的白名单,以使不同的子网分开。如果需要配置不同的白名单以满足您的安全要求,请确保复制组中的白名单之间有足够的重叠,以最大程度地提高服务器在没有原始种子成员的情况下能够重新连接的可能性。
对于主机名,仅当另一台服务器发出连接请求时,才进行名称解析。无法解析的主机名不会用于白名单验证,并且警告消息会写入错误日志。对已解析的主机名执行前向确认的反向DNS(FCrDNS)验证。
警告主机名本质上不如白名单中的IP地址安全。FCrDNS验证提供了良好的保护级别,但可能会受到某些类型的攻击的损害。仅在绝对必要时在白名单中指定主机名,并确保所有用于名称解析的组件(例如DNS服务器)都在您的控制下。您也可以使用hosts文件在本地实现名称解析,以避免使用外部组件。