Docker學習二-MySQL雙主互備

Docker學習一-MySQL主從熱備 https://blog.csdn.net/rajayu/article/details/88815814

原理說明

  熱備份指的是:High Available(HA)即高可用。第一種,雙機熱備它的工作原理是使用兩臺服務器,一臺作爲主服務器(Active),運行應用系統來提供服務。另一臺作爲備機,安裝完全一樣的應用系統,但處於待機狀態(Standby)。當Active服務器出現故障時,通過軟件診測將Standby機器激活,保證應用在短時間內完成恢復正常使用;第二種,雙機互備方式則是在雙機熱備的基礎上,兩個相對獨立的應用在兩臺機器同時運行,但彼此均設爲備機,當某一臺服務器出現故障時,另一臺服務器可以在短時間內將故障服務器的應用接管過來,從而保證了應用的持續性,這種方式實際上是雙機熱備方案的一種應用。
  前面一篇中做了一個主從複製,也就是雙機熱備,這一篇中來看下,雙主互備,我們系統架構中常常需要考慮到這樣的問題,數據庫服務器掛掉了,完蛋了,當然這就導致了客戶端無法訪問的情況,對於一些重要系統而言,用戶是很難忍受這樣長時間的服務中斷的。因此,就需要通過雙機熱備服務,來避免長時間的服務中斷,保證系統長期、可靠的服務,上一篇中的主從熱備方案就是我們可以臨時的修改配置切換到從服務器,縮短了服務中斷的時間,此篇中我們來看下雙機互備的方案,我們藉助nginx實現負載,在一個服務A掛掉的情況下,無縫切換到另外一個服務B,用戶不會中斷服務正常訪問,而且能夠在服務A修復之後,B中的數據能夠自動同步到A,當然在B服務器掛掉的情況下,A中可以正常寫入數據,B服務器修復重啓之後,A中數據可以自動同步到B,這樣就實現了雙機互備。

Mysql配置

  上一篇我們已經瞭解了Mysql服務器的主從配置,Mysql的雙主配置也很簡單,就是在從服務器上創建一個主服務器訪問的用戶,然後在主服務器配置從服務器的信息,然後start slave就可以了。

  1. 先在docker中啓動兩個mysql容器
docker run -p 3308:3306 --name mysql01 -v D:\Docker\mysql\mysql01\mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
docker run -p 3309:3306 --name mysql02 -v D:\Docker\mysql\mysql02\mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

在這裏插入圖片描述
2. mysql配置
mysql01配置:

[mysqld]
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
datadir		= /var/lib/mysql
server-id=1 #採用自然數,保持唯一即可
read-only=0 #0代表讀寫均可
log-bin=mysql-bin #二進制日誌

mysql02配置:

[mysqld]
pid-file	= /var/run/mysqld/mysqld.pid
socket		= /var/run/mysqld/mysqld.sock
datadir		= /var/lib/mysql
server-id=2
read-only=0
log-bin=mysql-bin #二進制日誌

  如果不做其他的要求,兩個服務器的配置除了server-id不同,其他的都可以相同。

  1. 配置完成重啓兩個容器
docker restart mysql01 mysql02
  1. 配置主從配置

  首先,在容器mysql01中添加服務器2訪問的用戶,並賦給權限。

docker exec -it mysql01 mysql -uroot -p123456
grant replication slave on *.* to test_slave@'%' identified by '123456';
show master status;

在這裏插入圖片描述
  其次,在容器mysql02中添加從服務器1訪問的用戶,並賦給權限。

docker exec -it mysql02 mysql -uroot -p123456
grant replication slave on *.* to test_slave@'%' identified by '123456';
show master status;

在這裏插入圖片描述
  並增加服務器1的同步參數,啓動從服務器,查看參數。

change master to master_host='10.238.64.31',master_port=3308,master_user='test_slave',master_password='123456',master_log_file='mysql-bin.000006',master_log_pos=1106;
start slave;
show slave status \G;

在這裏插入圖片描述
  最後,修改服務器1的同步服務器2的參數,啓動並查看狀態。

change master to master_host='10.238.64.31',master_port=3309,master_user='test_slave',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=324;
start slave;
show slave status \G;

在這裏插入圖片描述

  1. 查看同步情況
    在這裏插入圖片描述
      在服務器mysql01中新建數據庫test,刷新mysql02,test存在,mysql02同步mysql01成功。
    在這裏插入圖片描述
      在服務器mysql02中刪除數據庫test,刷新mysql01,test也已經被刪除,mysql01同步mysql02成功。兩個數據庫互爲主庫,成功。

Nginx負載

  在新版本的nginx是支持四層代理模式的,默認情況下,此模塊不構建,應使用配置參數啓用 --with-stream。下面使用docker安裝nginx
在這裏插入圖片描述
查看鏡像
在這裏插入圖片描述
nginx配置

worker_processes  1;

events {
    use   epoll;
    worker_connections  1024;
}

stream {
    upstream mysql {
        server 10.238.64.31:3308 max_fails=3 fail_timeout=30s;
        server 10.238.64.31:3309      backup;
    }

    server {
        listen    3306;
        proxy_connect_timeout 3000s;
        proxy_timeout 6000s;
        proxy_pass mysql;
    }
}

啓動容器

docker run -p 3316:3306 --name nginx_db -v "D:\Docker\nginx\conf\nginx.conf":/etc/nginx_bak/nginx.conf -v D:\Docker\nginx\html\:/usr/share/nginx/html -it -d nginx

進入bash,刪除/etc/nginx/nginx.cnf,將/etc/nginx_bak/nginx.conf複製到/etc/nginx/。然後重啓nginx。
在這裏插入圖片描述

測試

測試就不寫了

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