20.2.2 本地部署组复制
最常见的方式是使用多个服务器实例来部署 Group Replication,以提供高可用性。也可以在本地部署 Group Replication,例如用于测试目的。这一节将解释如何在本地部署 Group Replication。
Group Replication 通常是在多个主机上部署的,因为这确保了高可用性。在这个部分中的指令不适合生产环境,因为所有 MySQL 服务器实例都运行在同一个物理主机上。如果该主机发生故障,整个组将失败。因此,这些信息应该用于测试目的,并且不能在生产环境中使用。
这节将解释如何创建一个包含三个 MySQL 服务器实例的复制组,每个实例都运行在同一个物理主机上。这意味着需要三个数据目录,一個 per 服务器实例,每个实例都需要独立配置。这一过程假设 MySQL 服务器已经下载和解压到名为 mysql-8.4
的目录中。每个 MySQL 服务器实例都需要一个特定的数据目录。创建一个名为 data
的目录,然后在该目录下创建三个子目录,每个子目录对应一个服务器实例,例如 s1、s2 和 s3,并初始化每个实例。
mysql-8.4/bin/mysqld --initialize-insecure --basedir=$PWD/mysql-8.4 --datadir=$PWD/data/s1
mysql-8.4/bin/mysqld --initialize-insecure --basedir=$PWD/mysql-8.4 --datadir=$PWD/data/s2
mysql-8.4/bin/mysqld --initialize-insecure --basedir=$PWD/mysql-8.4 --datadir=$PWD/data/s3
在 data/s1
、data/s2
和 data/s3
中是一个已经初始化的数据目录,包含 MySQL 系统数据库和相关表格等。要了解更多关于初始化过程的信息,请见第 2.9.1 节,“Initializing the Data Directory”。
在生产环境中,不要使用-initialize-insecure
,它只用于简化教程。有关安全设置的更多信息,请见第20.6节,“Group Replication Security”。
本地组复制成员配置
在第20.2.1.2节,“Configuring an Instance for Group Replication”中,您需要添加配置项,以便在前一节中添加的数据目录。例如:
[mysqld]
# server configuration
datadir=<full_path_to_data>/data/s1
basedir=<full_path_to_bin>/mysql-8.4/
port=24801
socket=<full_path_to_sock_dir>/s1.sock
这些设置将MySQL服务器配置为使用之前创建的数据目录,并指定服务器应打开哪个端口以开始监听 incoming 连接。
非默认端口24801用于本教程,因为在本教程中三个实例共享同一个主机名。在具有三个不同的机器的设置中,这将不需要。
组复制要求成员之间的网络连接,这意味着每个成员都必须能够解析其他所有成员的网络地址。例如,在本教程中三个实例都运行在一个机器上,因此要确保成员可以联系彼此,您可以将以下行添加到选项文件中,如report_host=127.0.0.1
。
然后,每个成员都需要能够连接到其他成员的group_replication_local_address
。例如,在s1实例的选项文件中添加:
group_replication_local_address= "127.0.0.1:24901"
group_replication_group_seeds= "127.0.0.1:24901,127.0.0.1:24902,127.0.0.1:24903"
将 s1 配置为使用端口 24901 与种子成员进行内部组通信。对于要添加到组中的每个服务器实例,请在该成员的选项文件中进行这些更改。对于每个成员,您必须确保指定唯一的地址,因此请使用每个实例的唯一端口来设置group_ replication_local_address
。通常,您想要所有成员都可以作为加入组的成员处理未处理事务的种子。在这种情况下,请将所有端口添加到group_ replication_group_seeds
中,如上所示。
第20.2.1节,“单主模式下部署组复制”的其余步骤对本地在这种方式部署的组也同样适用。