17.5.1 组复制 IP 地址允许列 table

组复制插件具有一个配置选项,用于确定可以从哪些主机接收传入的组通信系统连接。此选项称为group_replication_ip_whitelist。如果在服务器 s1 上设置此选项,则当服务器 s2 为了构建组通信而构建与 s1 的连接时,s1 首先接受允许列 table,然后再接受 s2 的连接。如果 s2 在允许列 table 中,则 s1 接受连接,否则 s1 拒绝 s2 的连接尝试。

如果未明确指定允许列 table,则组通信引擎(XCom)会自动扫描主机上的活动接口,并使用专用子网中的地址来标识那些活动接口。这些地址和 IPv4 的localhost IP 地址用于创建自动组复制允许列 table。因此,自动允许列 table 包括在以下范围内为主机找到的任何 IP 地址:

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
127.0.0.1 - localhost for IPv4

在错误日志中会添加一个条目,说明已为主机自动列出的地址。

专用地址的自动允许列 table 不能用于来自专用网络外部的服务器的连接,因此,即使该服务器在公用 IP 上具有接口,默认情况下也不允许来自外部主机的组复制连接。对于位于不同计算机上的服务器实例之间的组复制连接,必须提供公用 IP 地址并将其指定为显式允许列 table。如果为允许列 table 指定任何条目,则不会自动添加专用和localhost地址,因此,如果使用其中任何一个,则必须明确指定它们。

要手动指定允许列 table,请使用group_replication_ip_whitelist选项。如果服务器是复制组的活动成员,则无法在服务器上更改其许可列 table。如果该成员处于活动状态,则必须在更改允许列 table 之前发出STOP GROUP_REPLICATION语句,然后再发出START GROUP_REPLICATION语句。

在允许列 table 中,您可以指定以下任意组合:

  • IPv4 地址(例如198.51.100.44)

  • 具有 CIDRtable 示法的 IPv4 地址(例如192.0.2.21/24)

  • 主机名,来自 MySQL 5.7.21(例如example.org)

  • 带有 CIDRtable 示法的主机名,来自 MySQL 5.7.21(例如www.example.com/24)

MySQL 5.7 不支持 IPv6 地址和解析为 IPv6 地址的主机名。您可以将 CIDRtable 示法与主机名或 IP 地址结合使用,以允许列出具有特定网络前缀的 IP 地址块,但请确保指定子网中的所有 IP 地址都在您的控制之下。

您必须停止并重新启动成员上的组复制才能更改其允许列 table。逗号必须分隔允许列 table 中的每个条目。例如:

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,example.org,www.example.com/24";
mysql> START GROUP_REPLICATION;

允许列 table 必须包含在每个成员的group_replication_local_address系统变量中指定的 IP 地址或主机名。该地址与 MySQL 服务器 SQL 协议的主机和端口不同,并且未在服务器实例的bind_address系统变量中指定。

重新配置复制组时(例如,当选择新的主数据库或成员加入或离开时),组成员将在它们之间重新构建连接。如果组成员仅在重新配置后被不再属于复制组的服务器允许列 table,则它无法重新连接到复制组中不允许其列出的其余服务器。为了完全避免这种情况,请为作为复制组成员的所有服务器指定相同的允许列 table。

Note

例如,可以根据您的安全要求在不同的组成员上配置不同的允许列 table,以使不同的子网分开。如果需要配置不同的允许列 table 以满足您的安全要求,请确保复制组中的允许列 table 之间有足够的重叠,以最大程度地提高服务器在没有原始种子成员的情况下能够重新连接的可能性。

对于主机名,仅当另一台服务器发出连接请求时,才进行名称解析。无法解析的主机名不会用于允许列 table 验证,并且警告消息会写入错误日志。对已解析的主机名执行前向确认的反向 DNS(FCrDNS)验证。

Warning

主机名本质上不如允许列 table 中的 IP 地址安全。 FCrDNS 验证提供了良好的保护水平,但可能会受到某些类型的攻击的损害。仅在绝对必要时在允许列 table 中指定主机名,并确保所有用于名称解析的组件(例如 DNS 服务器)都在您的控制下。您也可以使用 hosts 文件在本地实现名称解析,以避免使用外部组件。