组复制安装部署 | 全方位认识 MySQL 8( 八 )


2.2 本地部署组复制
部署组复制常见的方法是使用多个MySQL 且每个单独占用一台主机,以提供更好的高可用性 。但,组复制也支持在本地部署(所有部署在同一台主机中),这样,可以大大节省用于测试目的的成本 。
下面以3个MySQL 的组复制为例,简要介绍本地部署的操作步骤 。要在一台主机上创建一个包含三个MySQL 的组复制 。这意味着需要三个不同的目录来分别存放3个MySQL 的数据和配置文件 。1)初始化安装MySQL
# 这里,我们仍然沿用上文中的Server名称s1、s2、s3,分别代表组复制中的第一个Server、第二个Server、第三个Server,各自创建好对应的数据和配置文件存放目录,然后,使用如下命令对3个MySQL Server进行初始化安装## 初始化安装第一个Server(s1)mysql-8.0/bin/mysqld --initialize-insecure --basedir=$PWD/mysql-8.0 --datadir=$PWD/data/s1## 初始化安装第二个Server(s2)mysql-8.0/bin/mysqld --initialize-insecure --basedir=$PWD/mysql-8.0 --datadir=$PWD/data/s2## 初始化安装第三个Server(s3)mysql-8.0/bin/mysqld --initialize-insecure --basedir=$PWD/mysql-8.0 --datadir=$PWD/data/s3
上述步骤中的data/s1、data/s2、data/s3目录中,是每个MySQL 的初始化数据目录,其中包含着各自的mysql系统数据库和相关表等 。2)本地组复制成员的配置 。基于"2.1.2. 组复制的实例配置"中的f配置参数模板,修改对应每个MySQL 的路径和端口相关的系统变量,如下:
[mysqld]# server configurationdatadir=/data/s1basedir=/mysql-8.0/port=24801socket=/s1.sock
组复制需要成员之间的网络连接互通,这意味着每个成员必须能够解析所有其他成员的网络地址 。由于这里我们是采用本地部署,所有的MySQL 都安装在了同一台主机中,因此,可以在f配置文件中添加一行配置,例如:=127.0.0.1,这样,所有的组成员都可以通过本地回环地址进行通讯,可以确保每个组成员之间能够互相通讯,然后,在每个成员的f中,按照如下示例配置组复制相关的系统变量 。
# 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"# s2的组复制相关的系统变量配置group_replication_local_address= "127.0.0.1:24902"group_replication_group_seeds= "127.0.0.1:24901,127.0.0.1:24902,127.0.0.1:24903"# s3的组复制相关的系统变量配置group_replication_local_address= "127.0.0.1:24903"group_replication_group_seeds= "127.0.0.1:24901,127.0.0.1:24902,127.0.0.1:24903"
本地部署方式,由于所有MySQL 都部署在同一台主机中,所以,你可以在系统变量上为3个组成员指定相同的地址,但是,端口一定要确保唯一(如果组成员处在不同的主机中,则需要指定不同的地址,但端口不需要保证唯一,总之,该系统变量值中,"地址+端口"需要保证唯一),这样组成员之间才能正确地相互找到彼此 。另外,对于系统变量,为了配置简便,你可能希望将所有的组成员地址与端口信息都一并指定,这样所有成员都可以充当种子成员,但是要注意,整个地址串中需要保证有活跃成员能够为节点提供分布式恢复相关的服务 。
| 作者简介
罗小波·数据库技术专家
《千金良方——MySQL性能优化金字塔法则》作者之一 。熟悉MySQL体系结构,擅长数据库的整体调优,喜好专研开源技术,并热衷于开源技术的推广,在线上线下做过多次公开的数据库专题分享,发表过近100篇数据库相关的研究文章 。
全文完 。