docker-compose值mysql集群模式(MGR)
一、之前也提过MGR的方式,局限很多,但是毕竟是集群的方式还是存在使用场景的。
1、必须使用InnoDB
2、每个表必须定义主键,主要用于事务冲突判断。
3、必须使用IPV4网络。
4、最多只支持 9 个节点。
5、网络问题会影响性能。
6、死锁问题等。
二、这里介绍MGR的部署安装过程,仅供参考
1、dockerfile
FROM mysql:8.0.19 MAINTAINER xbd RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime COPY ./config/db/xbd_cluster.sql /docker-entrypoint-initdb.d
xbd_cluster.sql
SET SQL_LOG_BIN=0; CREATE USER 'xbd'@'%' IDENTIFIED BY 'xbd'; GRANT REPLICATION SLAVE ON *.* TO 'xbd'@'%'; FLUSH PRIVILEGES; CHANGE MASTER TO MASTER_USER='xbd', MASTER_PASSWORD='xbd' FOR CHANNEL 'group_replication_recovery'; SET SQL_LOG_BIN=1;
2、docker-compose.yml
version: "2" services: xbd-cluster-1: build: context: ./ dockerfile: ./config/Dockerfile/Dockerfile-cluster image: xbd-cluster-1 restart: always container_name: xbd-cluster-1 volumes: - /var/lib/mysql/xbd-cluster-1:/var/lib/mysql ports: - 3306:3306 environment: - TZ=Asia/Shanghai - MYSQL_ROOT_PASSWORD=root privileged: true command: ['--server-id=1', '--gtid_mode=ON', '--enforce_gtid_consistency=ON', '--master_info_repository=TABLE', '--relay_log_info_repository=TABLE', '--binlog_checksum=NONE', '--log_slave_updates=ON', '--log-bin=xbd-cluster-1-bin', '--binlog_format=ROW', '--transaction_write_set_extraction=XXHASH64', '--plugin_load_add=group_replication.so', '--loose-group_replication_group_name=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', '--loose-group_replication_start_on_boot=off', '--loose-group_replication_local_address=xbd-cluster-1:33061', '--loose-group_replication_group_seeds=xbd-cluster-1:33061,xbd-cluster-2:33062,xbd-cluster-3:33063', '--loose-group_replication_bootstrap_group=off', '--loose-group_replication_single_primary_mode=off', '--loose-group_replication_enforce_update_everywhere_checks=on', '--lower_case_table_names=1', '--character-set-server=utf8', '--collation-server=utf8_general_ci', '--sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'] xbd-cluster-2: build: context: ./ dockerfile: ./config/Dockerfile/Dockerfile-cluster image: xbd-cluster-2 restart: always container_name: xbd-cluster-2 volumes: - /var/lib/mysql/xbd-cluster-2:/var/lib/mysql ports: - 3307:3306 environment: - TZ=Asia/Shanghai - MYSQL_ROOT_PASSWORD=root privileged: true command: ['--server-id=2', '--gtid_mode=ON', '--enforce_gtid_consistency=ON', '--master_info_repository=TABLE', '--relay_log_info_repository=TABLE', '--binlog_checksum=NONE', '--log_slave_updates=ON', '--log-bin=xbd-cluster-2-bin', '--binlog_format=ROW', '--transaction_write_set_extraction=XXHASH64', '--plugin_load_add=group_replication.so', '--loose-group_replication_group_name=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', '--loose-group_replication_start_on_boot=off', '--loose-group_replication_local_address=xbd-cluster-2:33062', '--loose-group_replication_group_seeds=xbd-cluster-1:33061,xbd-cluster-2:33062,xbd-cluster-3:33063', '--loose-group_replication_bootstrap_group=off', '--loose-group_replication_single_primary_mode=off', '--loose-group_replication_enforce_update_everywhere_checks=on', '--lower_case_table_names=1', '--character-set-server=utf8', '--collation-server=utf8_general_ci', '--sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'] xbd-cluster-3: build: context: ./ dockerfile: ./config/Dockerfile/Dockerfile-cluster image: xbd-cluster-3 restart: always container_name: xbd-cluster-3 volumes: - /var/lib/mysql/xbd-cluster-3:/var/lib/mysql ports: - 3308:3306 environment: - TZ=Asia/Shanghai - MYSQL_ROOT_PASSWORD=root privileged: true command: ['--server-id=3', '--gtid_mode=ON', '--enforce_gtid_consistency=ON', '--master_info_repository=TABLE', '--relay_log_info_repository=TABLE', '--binlog_checksum=NONE', '--log_slave_updates=ON', '--log-bin=xbd-cluster-3-bin', '--binlog_format=ROW', '--transaction_write_set_extraction=XXHASH64', '--plugin_load_add=group_replication.so', '--loose-group_replication_group_name=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa', '--loose-group_replication_start_on_boot=off', '--loose-group_replication_local_address=xbd-cluster-3:33063', '--loose-group_replication_group_seeds=xbd-cluster-1:33061,xbd-cluster-2:33062,xbd-cluster-3:33063', '--loose-group_replication_bootstrap_group=off', '--loose-group_replication_single_primary_mode=off', '--loose-group_replication_enforce_update_everywhere_checks=on', '--lower_case_table_names=1', '--character-set-server=utf8', '--collation-server=utf8_general_ci', '--sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION']
配置说明:
# 服务ID,必须唯一 server-id=1 # 开启GTID,必须开启 gtid_mode=ON # 强制GTID的一致性 enforce_gtid_consistency=ON # 基于安全的考虑,MGR集群要求复制模式要改成slave记录记录到表中,不然就报错 master_info_repository=TABLE # 基于安全的考虑,MGR集群要求复制模式要改成slave记录记录到表中,不然就报错 relay_log_info_repository=TABLE # binlog校验规则,8.0.21以后不需要设置 binlog_checksum=NONE # 因为集群会在故障恢复时互相检查binlog的数据, 所以需要记录下集群内其他服务器发过来已经执行过的binlog,按GTID来区分是否执行过. log_slave_updates=ON # binlog前缀 log-bin=xbd-cluster-1-bin # binlog格式,MGR要求必须是ROW binlog_format=ROW # 记录事务的算法,官网建议设置该参数使用 XXHASH64 算法 transaction_write_set_extraction=XXHASH64 # 预装插件 plugin_load_add=group_replication.so # 主要是用来区分整个内网里边的各个不同的GROUP,而且也是这个group内的GTID值的UUID loose-group_replication_group_name=aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa # 是否随服务器启动而自动启动组复制,不建议直接启动,怕故障恢复时有扰乱数据准确性的特殊情况 loose-group_replication_start_on_boot=off # 本地MGR的IP地址和端口,host:port,是MGR的端口,不是数据库的端口 loose-group_replication_local_address=xbd-cluster-1:33061 # 需要接受本MGR实例控制的服务器IP地址和端口,是MGR的端口,不是数据库的端口 loose-group_replication_group_seeds=xbd-cluster-1:33061,xbd-cluster-2:33062,xbd-cluster-3:33063 # 开启引导模式,添加组成员,用于第一次搭建MGR或重建MGR的时候使用,只需要在集群内的其中一台开启 loose-group_replication_bootstrap_group=off # 是否启动单主模式,如果启动,则本实例是主库,提供读写,其他实例仅提供读,如果为off就是多主模式了 loose-group_replication_single_primary_mode=off # 多主模式下,强制检查每一个实例是否允许该操作,如果不是多主,可以关闭 loose-group_replication_enforce_update_everywhere_checks=on
3、启动部署
1)完成docker-compose的部署
docker-compose up &
2)在其中的一个节点执行,这里选择xbd-cluster-1
SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;
3)其他节点执行,xbd-cluster-2,xbd-cluster-3
RESET MASTER; SET GLOBAL group_replication_recovery_get_public_key=ON; START GROUP_REPLICATION;
4、测试查看
SELECT * FROM `performance_schema`.replication_group_members;
5、测试数据同步,新建数据库测试
三、工程目录需要的文件