docker-compose值mysql雙主(HA)+ keepalived

  一、mysql的常用集羣方案有很多種吧,但是相對容易的就是mysql的HA方案,也有更加合適的MGR方案。但是兩種方案都存在利弊。比如HA方案中部署簡單,也可以配置keepalived通過VIP飄移來實現IP不變的會用。但是存在的問題就是,數據會存在一定的延遲,故障事務問題等。MGR的方案主要是限制很多,比如:主鍵(所有表),維護等方式。

  二、這裏介紹HA的雙主方式+keepalived的方式來實現故障轉移。

  三、部署方式:

  1)準備2臺機器:

  VIP:192.168.5.100

  master-1:192.168.5.101

  master-2:192.168.5.102

  2)dockerfile

  a、master-1

FROM mysql:8.0.19
MAINTAINER xbd
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY ./config/db/xbd_master_1.sql /docker-entrypoint-initdb.d

  xbd_master_1.sql

CREATE USER 'root'@'xbd-master-2' IDENTIFIED BY 'root';
grant replication slave, replication client on *.* to 'root'@'xbd-master-2';
flush privileges;
change master to master_host='xbd-master-2', master_user='root',master_password='root',master_port=3306;
start slave;

  b、master-2

FROM mysql:8.0.19
MAINTAINER xbd
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
COPY ./config/db/xbd_master_2.sql /docker-entrypoint-initdb.d

  xbd_master_2.sql

CREATE USER 'root'@'xbd-master-1' IDENTIFIED BY 'root';
grant replication slave, replication client on *.* to 'root'@'xbd-master-1';
flush privileges;
change master to master_host='xbd-master-1', master_user='root',master_password='root',master_port=3306;
start slave;

  3)docker-compose相關配置

version: "2"
services:
  xbd-master-1:
    build:
      context: ./
      dockerfile: ./config/Dockerfile/Dockerfile-master-1
    image: xbd-master-1
    restart: always
    container_name: xbd-master-1
    volumes:
      - /var/lib/mysql/xbd-master-1:/var/lib/mysql
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=root
    privileged: true
    extra_hosts:
      - xbd-master-2:192.168.5.102
    command: ['--server-id=1',
              '--log-bin=xbd-master-1-bin',
              '--binlog-ignore-db=mysql',
              '--binlog_cache_size=256M',
              '--binlog_format=mixed',
              '--relay_log=xbd-master-1-relay',
              '--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-master-2:
    build:
      context: ./
      dockerfile: ./config/Dockerfile/Dockerfile-master-2
    image: xbd-master-2
    restart: always
    container_name: xbd-master-2
    volumes:
      - /var/lib/mysql/xbd-master-2:/var/lib/mysql
    ports:
      - 3306:3306
    environment:
      - MYSQL_ROOT_PASSWORD=root
    privileged: true
    extra_hosts:
      - xbd-master-1:192.168.5.101
    command: ['--server-id=2',
              '--log-bin=xbd-master-2-bin',
              '--binlog-ignore-db=mysql',
              '--binlog_cache_size=256M',
              '--binlog_format=mixed',
              '--relay_log=xbd-master-2-relay',
              '--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']

  使用docker-compose的方式主要是保證服務不會因爲認爲因素掛掉。被動掛了,可以重拉。

  4)安裝keepalived這個相對簡單

yum install -y keepalived

  在/etc/keepalived中修改keepalived.conf文件,沒有就自己建一個

  a、master

global_defs {
    router_id MySQL-Master
}

vrrp_instance MAIN {
    state MASTER
    interface ens33
    virtual_router_id 1
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass xbd
    }
    virtual_ipaddress {
        192.168.5.100
    }
}

  b、backup

global_defs {
    router_id MySQL-Backup
}

vrrp_instance MAIN {
    state BACKUP
    interface ens33
    virtual_router_id 1
    priority 99
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass xbd
    }
    virtual_ipaddress {
        192.168.5.100
    }
}

  四、需要的文件

  

 

   五、測試:

  1)mysql雙主

  

    

   2)測試虛擬IP

  

 

 

 

 

 

 

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