docker-compose之mysql-router(MGR單主模式)

  一、mysql-router:簡單理解就是集羣的路由,通過路由來訪問具體的數據庫集羣。

  

  二、本編介紹如何搭建docker版的MGR集羣

  

   1、dockerfile

  Dockerfile-cluster

FROM mysql:8.0.19
MAINTAINER xbd
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

  Dockerfile-router

FROM mysql/mysql-router:8.0.19
MAINTAINER xbd
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ADD ./config/mysql-shell/mysql-shell-8.0.19.tar.gz /mysql-shell/

  說明:這裏添加mysql-shell主要是初始化集羣。這個包我是修改過名字的,根據實際執行

  Mysql-shell下載地址:https://dev.mysql.com/downloads/shell/

   2、docker-compose.yaml

  注意:mysql-shell的官方版本只支持單主模式(可能是沒有搞清楚咋弄)

  具體的參數意義可以參考

  https://www.cnblogs.com/ll409546297/p/16919642.html

  https://hub.docker.com/r/mysql/mysql-router

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=on',
              '--loose-group_replication_enforce_update_everywhere_checks=off',
              '--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=on',
              '--loose-group_replication_enforce_update_everywhere_checks=off',
              '--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=on',
              '--loose-group_replication_enforce_update_everywhere_checks=off',
              '--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-mysql-router:
    build:
      context: ./
      dockerfile: ./config/Dockerfile/Dockerfile-router
    image: xbd-mysql-router
    restart: always
    container_name: xbd-mysql-router
    ports:
      - 6446:6446
      - 6447:6447
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_HOST=xbd-cluster-1
      - MYSQL_PORT=3306
      - MYSQL_USER=root
      - MYSQL_PASSWORD=root
      - MYSQL_INNODB_CLUSTER_MEMBERS=3
    privileged: true
    depends_on:
      - xbd-cluster-1
      - xbd-cluster-2
      - xbd-cluster-3

  三、部署

  1、build

  

   2、運行mysql集羣

docker-compose up xbd-cluster-1 xbd-cluster-2 xbd-cluster-3 &

  

   3、運行一個臨時的mysql-router,目的通過mysql-shell建立集羣

docker-compose run xbd-mysql-router /bin/bash

  

./mysql-shell/mysql-shell-8.0.19/bin/mysqlsh

  

  執行以下腳本mysql-shell.script

shell.connect('root@xbd-cluster-1:3306');
var cluster = dba.createCluster('cluster');
cluster.addInstance('xbd-cluster-2:3306');
cluster.addInstance('xbd-cluster-3:3306');
cluster.status();

  

   查看狀態

  

   4、啓動mysql-router

docker-compose up xbd-mysql-router &

  

   四、數據庫測試

SELECT * FROM `performance_schema`.replication_group_members;

  

   到此搭建完成,並且集羣具備自動修復能力。

  五、說一下,多主的配置,通過物理代理的形式也是可以達到代理的目的。

  1、搭建MGR多主集羣

  https://www.cnblogs.com/ll409546297/p/16919642.html

  2、下載mysql-router

  https://dev.mysql.com/downloads/router/

  3、修改和配置

  

   複製配置文件並修改

cp share/doc/mysqlrouter/sample_mysqlrouter.conf conf/mysqlrouter.conf
[DEFAULT]
logging_folder = /usr/local/mysqlrouter/logs
plugin_folder = /usr/local/mysqlrouter/lib/mysqlrouter
config_folder = /usr/local/mysqlrouter/conf
runtime_folder = /usr/local/mysqlrouter/run
data_folder = /usr/local/mysqlrouter/lib/data
keyring_path = /usr/local/mysqlrouter/lib/keyring-data
master_key_path = /usr/local/mysqlrouterlib/keyring-key

[logger]
level = INFO[routing:cluster]
bind_address = 0.0.0.0
bind_port = 3305
routing_strategy = first-available
mode = read-write
destinations = 192.168.5.14:3306,192.168.5.14:3307,192.168.5.14:3308

  4、啓動

/usr/local/mysqlrouter/bin/mysqlrouter -c /usr/local/mysqlrouter/conf/mysqlrouter.conf

  5、說明:這種方式可以代理多主的模式,但是不建議這種方式,還是推薦單主和docker的方式吧,可以配合K8S做容災處理。

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