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閱讀 227,882評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,208評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,746評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,666評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,477評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,960評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,047評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,200評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,726評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,617評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,807評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,327評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,049評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,425評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,674評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,432評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,769評論 2 372

推薦閱讀更多精彩內容