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、測試數據同步,新建數據庫測試

  

 

   三、工程目錄需要的文件

  

  

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章