docker容器单机创建3个节点的MySQLMGR集群

docker容器单机创建3个节点的MySQLMGR集群

复制代码
mkdir -p /data/dockerData/mysql1/conf.d
mkdir -p /data/dockerData/mysql1/data
mkdir -p /data/dockerData/mysql2/conf.d
mkdir -p /data/dockerData/mysql2/data
mkdir -p /data/dockerData/mysql3/conf.d
mkdir -p /data/dockerData/mysql3/data

docker run -d \
--name mysql33011 \
-p 33011:3306 \
--net=mysql-network --ip 172.72.0.15 \
-v /data/dockerData/mysql1/conf.d:/etc/mysql/conf.d \
-v /data/dockerData/mysql1/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:8.0.43 

docker run -d \
--name mysql33012 \
-p 33012:3306 \
--net=mysql-network --ip 172.72.0.16 \
-v /data/dockerData/mysql2/conf.d:/etc/mysql/conf.d \
-v /data/dockerData/mysql2/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:8.0.43 


docker run -d \
--name mysql33013 \
-p 33013:3306 \
--net=mysql-network --ip 172.72.0.17 \
-v /data/dockerData/mysql3/conf.d:/etc/mysql/conf.d \
-v /data/dockerData/mysql3/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
mysql:8.0.43 


cat > /data/dockerData/mysql1/conf.d/my.cnf <<"EOF"
[mysqld]
user=mysql
port=3306
character_set_server=utf8mb4
secure_file_priv=''
server-id = 33011
default-time-zone = '+8:00'
log_timestamps = SYSTEM
log-bin = 1
binlog_format=row
binlog_checksum=NONE
log-slave-updates=1
skip-name-resolve
auto-increment-increment=2
auto-increment-offset=1
gtid-mode=ON
enforce-gtid-consistency=on
default_authentication_plugin=mysql_native_password
max_allowed_packet = 500M

master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log=mgr15-relay-bin-ip15


transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
loose-group_replication_start_on_boot=OFF
loose-group_replication_local_address= "172.72.0.15:33061"
loose-group_replication_group_seeds= "172.72.0.15:33061,172.72.0.16:33062,172.72.0.17:33063"
loose-group_replication_bootstrap_group=OFF
loose-group_replication_ip_whitelist="172.72.0.15,172.72.0.16,172.72.0.17"

report_host=172.72.0.15
report_port=3306

EOF




cat >  /data/dockerData/mysql2/conf.d/my.cnf <<"EOF"
[mysqld]
user=mysql
port=3306
character_set_server=utf8mb4
secure_file_priv=''
server-id = 33012
default-time-zone = '+8:00'
log_timestamps = SYSTEM
log-bin = 1
binlog_format=row
binlog_checksum=NONE
log-slave-updates=1
gtid-mode=ON
enforce-gtid-consistency=ON
skip_name_resolve
default_authentication_plugin=mysql_native_password
max_allowed_packet = 500M

master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log=mgr16-relay-bin-ip16


transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
loose-group_replication_start_on_boot=OFF
loose-group_replication_local_address= "172.72.0.16:33062"
loose-group_replication_group_seeds= "172.72.0.15:33061,172.72.0.16:33062,172.72.0.17:33063"
loose-group_replication_bootstrap_group=OFF
loose-group_replication_ip_whitelist="172.72.0.15,172.72.0.16,172.72.0.17"

report_host=172.72.0.16
report_port=3306

EOF




cat > /data/dockerData/mysql3/conf.d/my.cnf <<"EOF"
[mysqld]
user=mysql
port=3306
character_set_server=utf8mb4
secure_file_priv=''
server-id = 33013
default-time-zone = '+8:00'
log_timestamps = SYSTEM
log-bin = 1
binlog_format=row
binlog_checksum=NONE
log-slave-updates=1
gtid-mode=ON
enforce-gtid-consistency=ON
skip_name_resolve
default_authentication_plugin=mysql_native_password
max_allowed_packet = 500M


master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log=mgr17-relay-bin-ip17


transaction_write_set_extraction=XXHASH64
loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
loose-group_replication_start_on_boot=OFF
loose-group_replication_local_address= "172.72.0.17:33063"
loose-group_replication_group_seeds= "172.72.0.15:33061,172.72.0.16:33062,172.72.0.17:33063"
loose-group_replication_bootstrap_group=OFF
loose-group_replication_ip_whitelist="172.72.0.15,172.72.0.16,172.72.0.17"

report_host=172.72.0.17
report_port=3306

EOF

docker restart mysql33011 mysql33012 mysql33013


所有MySQL容器中安装MGR插件
//xxx是容器的名称
docker exec -it mysql33011 mysql -uroot -proot
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
show plugins;

docker exec -it mysql33012 mysql -uroot -proot
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
show plugins;

docker exec -it mysql33013 mysql -uroot -proot
INSTALL PLUGIN group_replication SONAME 'group_replication.so';
show plugins;

在所有节点上创建复制账号
docker exec -it mysql33011 mysql -uroot -proot
docker exec -it mysql33012 mysql -uroot -proot
docker exec -it mysql33013 mysql -uroot -proot

SET SQL_LOG_BIN=0;
CREATE USER repl@'%' IDENTIFIED BY 'root';
GRANT REPLICATION SLAVE ON *.* TO repl@'%';
FLUSH PRIVILEGES;
SET SQL_LOG_BIN=1;
CHANGE MASTER TO MASTER_USER='repl', MASTER_PASSWORD='root' FOR CHANNEL 'group_replication_recovery';
exit;


启动MGR单主模式

在主节点上启动MGR:
docker exec -it mysql33011 mysql -uroot -proot

SET GLOBAL group_replication_bootstrap_group=ON;
START GROUP_REPLICATION;
SET GLOBAL group_replication_bootstrap_group=OFF;
SELECT * FROM performance_schema.replication_group_members;

剩余节点需要加入MGR,在剩余节点上执行以下操作:
docker exec -it mysql33012 mysql -uroot -proot
docker exec -it mysql33013 mysql -uroot -proot

START GROUP_REPLICATION;
SELECT * FROM performance_schema.replication_group_members;
exit;
相关推荐
secondyoung2 小时前
队列原理与实现全解析
c语言·数据库·mysql·算法·队列
UP_Continue2 小时前
Linux--OS和认识进程
linux·运维·服务器
IT摆渡者2 小时前
Rocky Linux 10.1中找不到传统的 /etc/sysconfig/network-scripts 目录是正常现象。
linux·运维·服务器·网络·经验分享
无小道2 小时前
基于epoll的单进程Reactor服务器
运维·服务器·c++·网络编程·reactor·epoll
Justin_192 小时前
K8s常见问题(5)
云原生·容器·kubernetes
悟能不能悟2 小时前
mysql主键递增,之前已经插入的id有1,2,3,4,5,手动插入的那条记录id=15,那后面让它自动生成主键,会是从15开始,还是从5开始
数据库·mysql
Thomas21432 小时前
jupyterhub on k8s jupyter总是无响应
jupyter·容器·kubernetes
qq_395716172 小时前
服务器加硬盘应该用 RAID 几好?
运维·服务器
weixin_462446232 小时前
ubuntu / kali 将 /dev/sdb1 安全挂载为 /home 的完整实战指南(避坑版)
运维·安全·ubuntu
线束线缆组件品替网2 小时前
服务器高速互连测试中的 CableMAX 高速线缆实践
运维·服务器·人工智能·自动化·硬件工程·材料工程