下载:https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.23-1.el7.x86_64.rpm-bundle.tar
环境 | 主机名 | 系统版本 | 安装软件 |
---|---|---|---|
192.168.171.129 | node1 | centos7.9 | mysql-8.0.23社区版 server-id 1 |
192.168.171.130 | node2 | centos7.9 | mysql-8.0.23社区版 server-id 2 |
192.168.171.131 | node3 | centos7.9 | mysql-8.0.23社区版 server-id 3 |
#安装,3台机器都同样操作
[root@node1 ~]# tar xf mysql-8.0.23-1.el7.x86_64.rpm-bundle.tar
[root@node1 ~]# rpm -ivh mysql-community-server-8.0.23-1.el7.x86_64.rpm mysql-community-client-8.0.23-1.el7.x86_64.rpm mysql-community-client-plugins-8.0.23-1.el7.x86_64.rpm mysql-community-common-8.0.23-1.el7.x86_64.rpm mysql-community-libs-8.0.23-1.el7.x86_64.rpm mysql-community-libs-compat-8.0.23-1.el7.x86_64.rpm
#生成一个uuid
[root@node1 ~]# uuidgen
91b20cf4-a36c-4c55-af2e-d9b4a32a19ee
#修改配置文件(server-id、loose-group_replication_local_address不同机器对应修改)
[root@node1 ~]# vim /etc/my.cnf
[mysqld]
port=3306
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
server-id=1
#开启GTID
gtid_mode=ON
#强制GTID的一致性
enforce_gtid_consistency=ON
#binlog校验规则,5.6之后的高版本是CRC32,低版本都是NONE,但是MGR要求使用NONE
binlog_checksum=NONE
log_bin=binlog
#binlog格式,MGR要求必须是ROW,不过就算不是MGR,也最好用row
binlog_format=row
#MGR使用乐观锁,所以官网建议隔离级别是RC,减少锁粒度
transaction_isolation = READ-COMMITTED
log-slave-updates=1
#基于安全的考虑,MGR集群要求复制模式要改成slave记录记录到表中,不然就报错
master_info_repository=TABLE
relay_log_info_repository=TABLE
#记录事务的算法
transaction_write_set_extraction=XXHASH64
#相当于此GROUP的名字,是UUID值
loose-group_replication_group_name="91b20cf4-a36c-4c55-af2e-d9b4a32a19ee"
loose-group_replication_ip_whitelist = '127.0.0.1/8,192.168.171.0/24'
#是否随服务器启动而自动启动组复制,不建议直接启动
loose-group_replication_start_on_boot=OFF
#本地MGR的IP地址和端口,host:port,是MGR的端口
loose-group_replication_local_address="192.168.171.129:33061"
#需要接受本MGR实例控制的服务器IP地址和端口
loose-group_replication_group_seeds="192.168.171.129:33061,192.168.171.130:33061,192.168.171.131:33061"
#开启引导模式,添加组成员,用于第一次搭建MGR或重建MGR的时候使用,只需要在集群内的其中一台开启,
loose-group_replication_bootstrap_group=OFF
#是否启动单主模式,如果启动,则本实例是主库,提供读写,其他实例仅提供读,如果为off就是多主模式了
loose-group_replication_single_primary_mode = ON
#多主模式下,强制检查每一个实例是否允许该操作,如果不是多主,可以关闭
loose-group_replication_enforce_update_everywhere_checks = off
启动mysqld(3台机器相同操作)
[root@node1 ~]# systemctl start mysqld
[root@node1 ~]# systemctl status mysqld
#查看临时密码
[root@node1 ~]# grep 'temporary password' /var/log/mysqld.log
#设置密码
[root@node1 ~]# mysql -uroot -p
set global validate_password.policy=0;
set global validate_password.length=1;
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
flush privileges;
exit;
安装mgr插件(所有机器执行)
[root@node1 ~]# mysql -uroot -p
mysql> install PLUGIN group_replication SONAME 'group_replication.so';
#查看group_replication处于ACTIVE状态
mysql> show plugins;
#创建复制账号
mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER repl@'%' IDENTIFIED WITH sha256_password BY 'repl';
mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'%';
mysql> FLUSH PRIVILEGES;
mysql> SET SQL_LOG_BIN=1;
mysql> CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='repl' FOR CHANNEL 'group_replication_recovery';
启动MGR单主模式
#node1机器执行
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
mysql> START GROUP_REPLICATION;
mysql> SET GLOBAL group_replication_bootstrap_group=OFF;
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-----------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-----------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 8b22c4cd-64ff-11eb-9687-000c29857d33 | 192.168.171.131 | 3306 | ONLINE | PRIMARY | 8.0.23 |
+---------------------------+--------------------------------------+-----------------+-------------+--------------+-------------+----------------+
# 其他节点加入MGR,在node1,node2机器mysql执行
mysql> START GROUP_REPLICATION;
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 1c327e28-64ff-11eb-9eac-000c29b52317 | node1 | 3306 | ONLINE | PRIMARY | 8.0.23 |
| group_replication_applier | 896d824a-64ff-11eb-846f-000c2976705e | node2 | 3306 | RECOVERING | SECONDARY | 8.0.23 |
| group_replication_applier | 8b22c4cd-64ff-11eb-9687-000c29857d33 | node3 | 3306 | RECOVERING | SECONDARY | 8.0.23 |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
切换到多主模式
#所有节点执行
stop group_replication;
set global group_replication_single_primary_mode=OFF;
set global group_replication_enforce_update_everywhere_checks=ON;
#node1执行
SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
#node2和node3执行
START GROUP_REPLICATION;
mysql> SELECT * FROM performance_schema.replication_group_members;
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| CHANNEL_NAME | MEMBER_ID | MEMBER_HOST | MEMBER_PORT | MEMBER_STATE | MEMBER_ROLE | MEMBER_VERSION |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
| group_replication_applier | 1c327e28-64ff-11eb-9eac-000c29b52317 | node1 | 3306 | ONLINE | PRIMARY | 8.0.23 |
| group_replication_applier | 896d824a-64ff-11eb-846f-000c2976705e | node2 | 3306 | ONLINE | PRIMARY | 8.0.23 |
| group_replication_applier | 8b22c4cd-64ff-11eb-9687-000c29857d33 | node3 | 3306 | ONLINE | PRIMARY | 8.0.23 |
+---------------------------+--------------------------------------+-------------+-------------+--------------+-------------+----------------+
3 rows in set (0.03 sec)