docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > docker容器单机创建3个节点的MySQLMGR集群

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

作者:MrZhou周

本文档详细介绍了如何在单机上使用Docker创建一个包含三个节点的MySQL MGR集群,通过一系列步骤,包括安装Docker、配置MySQL MGR以及启动多个容器,成功构建了一个高可用的MySQL集群环境

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;

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文