一、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