docker容器下的mgr集群,研究maxscale的转发规则
docker快速启动mysql集群
docker下载&&安装&&启动
wget https://mirrors.cloud.tencent.com/docker-ce/linux/static/stable/x86_64/docker-19.03.9.tgz
tar -xf docker-19.03.9.tgz
mv docker /usr/local/
ln -s /usr/local/docker/* /usr/local/bin/
dockerd &
docker version
load docker镜像
docker load < aa65c3d806de.tar
docker images
创建docker容器通信网段
docker network create --subnet=172.18.0.0/16 mynetwork
mv newdk /usr/local/bin/
newdk 80 1 在172.18.80.x
网段创建172.18.80.1的ip,使用这个ip创建一个mysql的镜像容器
#newdk文件内容
#!/bin/bash
if (( $2<10 ))
then
name_tail=0$2
else
name_tail=$2
fi
if (( $1==57 ))
then
docker run --hostname mysql80-${name_tail} --name mysql57-${name_tail} --network mynetwork --ip 172.18.57.$2 -it -d -w /root mysql-autostart:5.7.30 /bin/bash
elif (( $1==80 ))
then
docker run --hostname mysql80-${name_tail} --name mysql80-${name_tail} --network mynetwork --ip 172.18.80.$2 -it -d -w /root mysql-autostart:8.0.21 /bin/bash
else
docker run --hostname dk-${name_tail} --name dk-${name_tail} --network mynetwork --ip 172.18.1.$2 -it -d -w /root --privileged=true centos-custom:7.4 /usr/sbin/init
fi
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
771dfad329d1 mysql-autostart:8.0.21 "/root/docker-entryp…" 9 days ago Up 8 days mysql80-01
关闭selinux 防火墙
setenforce 0
systemctl stop firewalld
启动其他几个mysql实例
newdk 80 2
newdk 80 3
登陆容器并进入mysql
docker exec -it 容器id bash
mysql -uroot -pletsg0 -h172.18.80.1 -P3306
which mysql
yum install crypto*
mgr学习资料
环境:
docker容器启动的mysql实例
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58308933687b mysql-autostart:8.0.21 "/root/docker-entryp…" 9 days ago Up 8 days mysql80-09
64773d2e3a28 mysql-autostart:8.0.21 "/root/docker-entryp…" 9 days ago Up 8 days mysql80-08
771dfad329d1 mysql-autostart:8.0.21 "/root/docker-entryp…" 9 days ago Up 8 days mysql80-07
修改配置文件
#### Group Replication #mgr配置的相关参数 需要group_replication插件
plugin-load-add='group_replication.so'
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_enforce_update_everywhere_checks=off
loose-group_replication_ip_whitelist='0.0.0.0/0' #格式类似于阿里云的http白名单
loose-group_replication_local_address='172.18.80.7:33061' #都写当前机器的ip 端口
loose-group_replication_group_seeds='172.18.80.7:33061,172.18.80.8:33061,172.18.80.9:33061' #其群中所有机器的ip &&端口
loose-group_replication_bootstrap_group=off
loose-group_replication_single_primary_mode=on
loose-group_replication_clone_threshold=50000
#### Clone Plugin #利用clone plugin 主从搭建,初始化从库,达到跟主库基本一致的环境。也可以通过xtrbackup进行主从搭建
plugin-load-add=mysql_clone.so
loose-clone_autotune_concurrency=ON
loose-clone_max_concurrency=16
loose-clone_max_data_bandwidth=100
loose-clone_max_network_bandwidth=100
loose-clone_ddl_timeout=300
#### 修改后重启mysql实例
配置文件参数:
group_replication_group_seeds参数为种子节点的service地址
group_replication_local_address为当前节点service地址
>就是本机的ip
group_replication_start_on_boot在有PRIMARY节点时,建议重新设置为ON
group_replication_clone_threshold为超过指定事务延迟数量后触发Clone Plugin重搭备库 #----自动解决主从延迟问题
从库clone主库数据(初次创建可忽略)
可参考https://blog.csdn.net/n88Lpo/article/details/105872240
SET GLOBAL clone_valid_donor_list = '[主库ip]:[主库数据库端口]'
CLONE INSTANCE FROM '[主库管理权限账号]'@'[主库ip]':[主库数据库端口] IDENTIFIED BY '[用户密码]' ;
集群创建
- 创建用户(可以加入到docker-entrypoint.sh)
mysql> SET SQL_LOG_BIN=0;
mysql> CREATE USER rpl_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';
mysql> GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';
- 配置复制通道(所有members都指定复制通道)
mysql> CHANGE MASTER TO MASTER_USER='rpl_user', MASTER_PASSWORD='password' FOR CHANNEL 'group_replication_recovery';
- 启动集群
### 引导节点启动
mysql> SET GLOBAL group_replication_bootstrap_group=ON;
mysql> START GROUP_