Docker搭建MySQL Group Replication集群

一、创建目录

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;
一从节点

在二从节点查看数据


二从节点

如果不是用Docker建的服务,在my.cnf中需要加上配置

loose-group-replication-ip-whitelist="ip_1,ip_2,ip_3"

感谢记录自己搭建MySQL Group Replication集群过程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容