MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  グループレプリケーション IP アドレスの権限

18.5.1 グループレプリケーション IP アドレスの権限

Group Replication プラグインでは、受信グループ通信システム接続を受け入れることができるホストの許可リストを指定できます。 サーバー s1 で allowlist を指定した場合、グループ通信を行うためにサーバー s2 が s1 への接続を確立すると、s1 はまず allowlist をチェックしてから s2 からの接続を受け入れます。 s2 が許可リストにある場合、s1 は接続を受け入れます。そうでない場合、s1 は s2 による接続試行を拒否します。 MySQL 8.0.22 からは、システム変数 group_replication_ip_allowlist を使用して許可リストが指定され、MySQL 8.0.22 より前のリリースでは、システム変数 group_replication_ip_whitelist が使用されます。 新しいシステム変数は古いシステム変数と同じように機能しますが、用語のみが変更されています。

allowlist を明示的に指定しない場合、グループ通信エンジン (XCom) はホスト上のアクティブなインタフェースを自動的にスキャンし、プライベートサブネットワーク上のアドレスを持つインタフェースと、各インタフェースに構成されているサブネットマスクを識別します。 これらのアドレス、および IPv4 と (MySQL 8.0.14 の) IPv6 の localhost IP アドレスは、自動 Group Replication 許可リストの作成に使用されます。 したがって、自動許可リストには、適切なサブネットマスクが適用された後に次の範囲でホストに対して検出された 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_allowlist (MySQL 8.0.22) または group_replication_ip_whitelist システム変数を使用します。 サーバーがレプリケーショングループのアクティブメンバーである間は、そのサーバーの許可リストを変更できません。 メンバーがアクティブな場合は、許可リストを変更する前に STOP GROUP_REPLICATION を実行し、後で START GROUP_REPLICATION を実行する必要があります。

allowlist には、各メンバーの group_replication_local_address システム変数で指定された IP アドレスまたはホスト名が含まれている必要があります。 このアドレスは、MySQL サーバーの SQL プロトコルのホストおよびポートと同じではなく、サーバーインスタンスの bind_address システム変数で指定されていません。 サーバーインスタンスのグループレプリケーションのローカルアドレスとして使用されるホスト名が IPv4 アドレスと IPv6 アドレスの両方に解決される場合、グループレプリケーション接続には IPv4 アドレスが優先されます。

分散リカバリエンドポイントとして指定された IP アドレス、および分散リカバリ (デフォルト) に使用される場合はメンバー標準 SQL クライアント接続の IP アドレスを許可リストに追加する必要はありません。 allowlist は、メンバーごとに group_replication_local_address によって指定されたアドレスに対してのみ使用されます。 分散リカバリのためにアドレスを取得するには、参加メンバーは allowlist によって許可されたグループへの初期接続を持っている必要があります。

allowlist では、次の任意の組合せを指定できます:

  • 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 アドレスが制御下にあることを確認してください。

注記

IP アドレスが許可リストにないために IP アドレスからの接続試行が拒否された場合、拒否メッセージは常に IPv6 形式で IP アドレスを出力します。 IPv4 アドレスの前には、この形式 (IPV4-mapped IPv6 アドレス) の::ffff:が付きます。 許可リストで IPv4 アドレスを指定するためにこの形式を使用する必要はありません。標準の IPv4 形式を使用します。

許可リストを変更するには、メンバーのグループレプリケーションを停止して再起動する必要があります。 allowlist の各エントリはカンマで区切る必要があります。 例:

mysql> STOP GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_ip_allowlist="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_group_seeds オプションによってリストされた任意のサーバーを指定できます。 結合メンバーに IPv4 group_replication_local_address がある場合、またはその逆の場合に、グループのシードメンバーのいずれかが IPv6 アドレスとともに group_replication_group_seeds オプションにリストされている場合は、シードメンバーによって提供されるプロトコル (またはそのプロトコルのアドレスに解決されるホスト名) の結合メンバーの代替アドレスも設定して許可する必要があります。 これは、サーバーがレプリケーショングループに参加するときに、シードメンバーが group_replication_group_seeds オプションで通知するプロトコル (IPv4 か IPv6 かにかかわらず) を使用して、シードメンバーとの初期接続を行う必要があるためです。 参加メンバーに適切なプロトコルの許可されたアドレスがない場合、その接続試行は拒否されます。 IPv4 と IPv6 の混在レプリケーショングループの管理の詳細は、セクション18.4.5「IPv6 および IPv6 と IPv4 の混合グループのサポート」 を参照してください。

レプリケーショングループが再構成されると (たとえば、新しいプライマリが選択された場合、メンバーが参加または離脱した場合)、グループメンバーは自身の間の接続を再確立します。 再構成後にレプリケーショングループに含まれなくなったサーバーによってのみグループメンバーが許可されている場合、レプリケーショングループ内で許可されていない残りのサーバーには再接続できません。 このシナリオを完全に回避するには、レプリケーショングループのメンバーであるすべてのサーバーに同じ allowlist を指定します。

注記

たとえば、異なるサブネットを分離しておくために、セキュリティ要件に応じて異なるグループメンバーに異なる許可リストを構成できます。 セキュリティ要件を満たすために異なる許可リストを構成する必要がある場合は、レプリケーショングループ内の許可リスト間に十分な重複があることを確認して、元のシードメンバーが存在しない場合にサーバーが再接続できる可能性を最大化します。

ホスト名の場合、名前解決は、別のサーバーによって接続リクエストが行われた場合にのみ行われます。 解決できないホスト名は許可リストの検証で考慮されず、警告メッセージがエラーログに書き込まれます。 前方確認の逆引き DNS (FCrDNS) 検証は、解決されたホスト名に対して実行されます。

警告

ホスト名は本質的に許可リストの IP アドレスより安全性が低くなります。 FCrDNS の検証は適切なレベルの保護を提供しますが、特定のタイプの攻撃によって危険にさらされる可能性があります。 厳密に必要な場合にのみ許可リストにホスト名を指定し、名前解決に使用されるすべてのコンポーネント (DNS サーバーなど) が制御下に保持されていることを確認します。 外部コンポーネントを使用しないように、hosts ファイルを使用して名前解決をローカルに実装することもできます。


関連キーワード:  グループ, アドレス, 許可, 接続, メンバー, リスト, サーバー, group, リカバリ, 分散