一、创建目录
mkdir mgrTest
cd mgrTest
mkdir -p 1_ms/conf
mkdir -p 1_ms/data
cp -r 1_ms 2_ms
cp -r 1_ms 3_ms
touch docker-compose.yml
二、编写docker-compose.yml文件
version: '3'
services:
mysql-master:
image: mysql:8.0.32
container_name: mysql-master
ports:
- 3311:3306
restart: always
logging:
driver: "json-file"
options:
max-size: "200k"
max-file: "10"
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
# 映射目录 宿主机目录文件:容器目录文件
- ./1_ms/data:/var/lib/mysql
- ./1_ms/conf:/etc/mysql/conf.d
networks:
my_net:
ipv4_address: 172.18.0.11
mysql-slave-1:
image: mysql:8.0.32
container_name: mysql-slave-1
ports:
- 3312:3306
restart: always
logging:
driver: "json-file"
options:
max-size: "200k"
max-file: "10"
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
# 映射目录 宿主机目录文件:容器目录文件
- ./2_ms/data:/var/lib/mysql
- ./2_ms/conf:/etc/mysql/conf.d
networks:
my_net:
ipv4_address: 172.18.0.12
mysql-slave-2:
image: mysql:8.0.32
container_name: mysql-slave-2
ports:
- 3313:3306
restart: always
logging:
driver: "json-file"
options:
max-size: "200k"
max-file: "10"
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
# 映射目录 宿主机目录文件:容器目录文件
- ./3_ms/data:/var/lib/mysql
- ./3_ms/conf:/etc/mysql/conf.d
networks:
my_net:
ipv4_address: 172.18.0.13
networks:
my_net:
name: my_network
ipam:
config:
- subnet: '172.18.0.0/24'
三、启动容器
docker-compose up -d
四、设置主节点mysql-master
4.1 编辑主节点my.cnf
vim 1_ms/conf/my.cnf
将一下信息填入my.cnf,保存。
[mysqld]
default_authentication_plugin=mysql_native_password
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE
#此参数是在server收集写集合的同时以便将其记录到二进制日志。写集合基于每行的主键,并且是行更改后的唯一标识此标识将用于检测冲突
transaction_write_set_extraction=XXHASH64
#组的名字可以随便起,但不能用主机的GTID! 所有节点的这个组名必须保持一致!
loose-group_replication_group_name="aaaaaaaa-bbbb-cccc-dddd-cccccccccccc"
#启动mysql时不自动启动组复制
loose-group_replication_start_on_boot=OFF
#本机IP地址或者映射,33061用于接收来自其他组成员的传入连接
loose-group_replication_local_address= "172.18.0.11:33061"
#当前主机成员需要加入组时,Server先访问这些种子成员中的一个,然后它请求重新配置以允许它加入组
#需要注意的是,此参数不需要列出所有组成员,只需列出当前节点加入组需要访问的节点即可。
loose-group_replication_group_seeds= "172.18.0.11:33061,172.18.0.12:33062,172.18.0.13:33063"
#是否自动引导组。此选项只能在一个server实例上使用,通常是首次引导组时(或在整组成员关闭的情况下),如果多次引导,可能出现脑裂。
loose-group_replication_bootstrap_group=OFF
4.2 重启主节点
docker restart mysql-master
4.3 进入主节点容器,设置Mysql
docker exec -it mysql-master /bin/bash
mysql -uroot -p123456
以下是在mysql内部执行
mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'you_password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
mysql> GRANT BACKUP_ADMIN ON *.* TO 'repl'@'%';
mysql> flush privileges;
mysql> SET SQL_LOG_BIN=1;
mysql> change master to master_user='repl',master_password='you_password' for channel 'group_replication_recovery';
mysql> install PLUGIN group_replication SONAME 'group_replication.so';
查看插件
mysql> show plugins;
4.4 设置主节点MySQL Group Replication ,开启复制
还是在mysql内执行
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; // 查看组成员
此时只有一个成员。
主节点已完成。下面开始设置从节点
五、设置一从节点mysql-slave-1
5.1 编辑一从节点my.cnf
cp 1_ms/conf/my.cnf 2_ms/conf/
vim 2_ms/conf/my.cnf
仅需修改一下两个地方,
server_id=2
loose-group_replication_local_address= "172.18.0.12:33062"
5.2 重启一从节点
docker restart mysql-slave-1
5.3 进入一从节点容器,设置Mysql
docker exec -it mysql-slave-1 /bin/bash
mysql -uroot -p123456
以下是在mysql内部执行
mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'you_password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
mysql> GRANT BACKUP_ADMIN ON *.* TO 'repl'@'%';
mysql> flush privileges;
mysql> SET SQL_LOG_BIN=1;
mysql> change master to master_user='repl',master_password='you_password' for channel 'group_replication_recovery';
mysql> install PLUGIN group_replication SONAME 'group_replication.so';
5.4 一从节点MySQL Group Replication 开启复制
还是在mysql内执行
mysql> start group_replication;
mysql> SELECT * FROM performance_schema.replication_group_members;
此时已有两个成员。
六、设置二从节点mysql-slave-2
和设置一从节点步骤一样,只需要修改my.cnf里面的
server_id=3
loose-group_replication_local_address= "172.18.0.13:33063"
其余操作一样,参考一从节点操作不做赘述。
此时已有三个成员。
所有节点显示online,MGR配置完成。
七、测试数据
在主节点上创建测试数据库,插入测试数据。
mysql> create database boby;
mysql> use boby
mysql> create table test(id int primary key,name varchar(10));
mysql> insert into test values (1, 'boby');
mysql> select * from test;
在一从节点查看数据
mysql> show databases;
mysql> use boby;
mysql> select * from test;
在二从节点查看数据