一、創建目錄
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;
一從節點
在二從節點查看數據
二從節點