部署组复制最常见的方式是使用多个服务器实例来提供高可用性。也可以在本地部署组复制,例如用于测试目的。本节介绍如何在本地部署组复制。
组复制通常部署在多台主机上,因为这可以确保提供高可用性。本节中的说明不适用于生产部署,因为所有 MySQL 服务器实例都在同一台主机上运行。如果此主机发生故障,则整个组都将失败。因此,此信息应仅用于测试目的,不应在生产环境中使用。
本节介绍如何在同一台物理机上创建包含三个 MySQL 服务器实例的复制组。这意味着需要三个数据目录(每个服务器实例一个),并且需要独立配置每个实例。此过程假设已将 MySQL 服务器下载并解压缩到名为 mysql-9.0
的目录中。每个 MySQL 服务器实例都需要一个特定的数据目录。创建一个名为 data
的目录,然后在该目录中为每个服务器实例创建一个子目录,例如 s1、s2 和 s3,并初始化每个子目录。
mysql-9.0/bin/mysqld --initialize-insecure --basedir=$PWD/mysql-9.0 --datadir=$PWD/data/s1
mysql-9.0/bin/mysqld --initialize-insecure --basedir=$PWD/mysql-9.0 --datadir=$PWD/data/s2
mysql-9.0/bin/mysqld --initialize-insecure --basedir=$PWD/mysql-9.0 --datadir=$PWD/data/s3
data/s1
、data/s2
、data/s3
中分别是一个初始化的数据目录,包含 mysql 系统数据库和相关表等等。要详细了解初始化过程,请参阅 第 2.9.1 节“初始化数据目录”。
不要在生产环境中使用 -initialize-insecure
,它在这里只是为了简化教程。有关安全设置的详细信息,请参阅 第 20.6 节“组复制安全”。
在按照 第 20.2.1.2 节“为组复制配置实例” 进行操作时,需要为上一节中添加的数据目录添加配置。例如
[mysqld]
# server configuration
datadir=<full_path_to_data>/data/s1
basedir=<full_path_to_bin>/mysql-9.0/
port=24801
socket=<full_path_to_sock_dir>/s1.sock
这些设置将 MySQL 服务器配置为使用前面创建的数据目录,以及服务器应打开哪个端口并开始侦听传入连接。
使用非默认端口 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 节“以单主模式部署组复制” 中的其余步骤同样适用于以这种方式在本地部署的组。