MySQL運維16-雙主雙從讀寫分離

Se7eN_HOU發表於2023-12-25

一、雙主雙從架構介紹

  在MySQL多主多從的架構配置中和雙主雙從是一樣的,學會了雙主雙從的架構部署,多主多從的配置也同樣就回了。下面以雙主雙從作為示例演示。其中一個主機maste1用於處理所有寫請求,它的從機slave1和另外一臺主機master2還有它的從機salve2負責所有讀資料請求,當master1主機當機後,master2主機會立刻切換到負責寫請求,master1和master2互為備機,架構如下:

  

二、雙主雙從主機配置

  四臺MySQL主機,分別如下

  192.168.3.91:角色 master1, 啟動服務Mycat,MySQL, 關閉防火牆

  192.168.3.92:角色 slave1, 啟動服務MySQL,關閉防火牆

  192.168.3.93:角色 master2, 啟動服務MySQL,關閉防火牆

  192.168.3.94:角色 slave2,  啟動服務MySQL,關閉防火牆

  MySQL運維16-雙主雙從讀寫分離

  說明1:其中192,168.3.91即當MySQL伺服器,又充當Mycat的伺服器 

三、master1節點配置

  3.1 修改mysql配置檔案

    192.168.3.91這個臺伺服器當做雙主中的一個,修改其配置檔案如下:vim /etc/my.cnf

    

    說明1: server-id=1 是mysql叢集服務中的唯一標識

    說明2:binlog-do-db是指定要主從複製的資料庫,不指定預設是全部資料庫都做主從複製

    說明3:在主伺服器上要配置log-slave-updates因為當存在多個主伺服器的時候,有可能會存在備用主機,備用主機也是需要透過binlog檔案向自己的從機同步資料的,所以要開始log-slave-updates

  3.2 重啟mysql

    

  3.3 建立用於主從複製的賬號

    要進入mysql互動介面,注意不是進入Mycat 

# 建立一個mysql使用者為houlei,並設定密碼為:Se7eN521,該使用者可以在任意主機連線該MySQL服務
mysql> create user 'houlei'@'%' identified with mysql_native_password by 'Se7eN521';
Query OK, 0 rows affected (0.03 sec)
# 為'houlei'@'%' 使用者分配主從複製許可權
mysql> grant replication slave on *.* to 'houlei'@'%';
Query OK, 0 rows affected (0.01 sec)

  3.4 檢視二進位制日誌座標    

    

四、master2節點配置

  4.1 修改mysql配置檔案

    192.168.3.93這個臺伺服器當做雙主中的另外一個,修改其配置檔案如下:vim /etc/my.cnf

    

    說明1:這裡的server-id=3

  4.2 重啟mysql  

    

   4.3 建立用於主從複製的賬號

    要進入mysql互動介面,注意不是進入Mycat 

# 建立一個mysql使用者為houlei,並設定密碼為:Se7eN521,該使用者可以在任意主機連線該MySQL服務
mysql> create user 'houlei'@'%' identified with mysql_native_password by 'Se7eN521';
Query OK, 0 rows affected (0.03 sec)
# 為'houlei'@'%' 使用者分配主從複製許可權
mysql> grant replication slave on *.* to 'houlei'@'%';
Query OK, 0 rows affected (0.01 sec)

  4.4 檢視二進位制日誌座標

  

 

五、slave1節點配置

  5.1 修改配置檔案

    slave1節點是192.168.3.92, 修改其配置檔案如下 vim /etc/my.cnf

    

  5.2 重啟mysql

    

  5.3 slave1關聯master1

change master to master_host='192.168.3.91',master_user='houlei',master_password='Se7eN521',master_log_file='binlog.000010',master_log_pos=156;

    說明1:master_host是該從庫關聯的主庫,slave1關聯的事192.168.3.91這臺master1

    說明2:master_user是關聯賬號,houlei這個賬號是在master1中剛建立的賬號,就是用來做主從複製使用的

    說明3:master_password是關聯賬號的密碼

    說明4:master_log_file是開始主從複製的binlog檔名

    說明5:master_log_poss是binlog日誌檔案位置,這個引數是不用加引號或單引號的。

  5.4 啟動slave1的主從複製

    

    說明6:start slave 開始主從複製

 

六、slave2節點配置

  6.1 修改配置檔案

    slave2節點是192.168.3.94,修改其配置檔案如下 vim /etc/my.cnf

    

  6.2 重啟mysql

    

  6.3 slave2關聯master2

change master to master_host='192.168.3.93',master_user='houlei',master_password='Se7eN521',master_log_file='binlog.000018',master_log_pos=156;

    說明1:master_host是該從庫關聯的主庫,slave2關聯的事192.168.3.93這臺master2

    說明2:master_user是關聯賬號,houlei這個賬號是在master1中剛建立的賬號,就是用來做主從複製使用的

    說明3:master_password是關聯賬號的密碼

    說明4:master_log_file是開始主從複製的binlog檔名

    說明5:master_log_poss是binlog日誌檔案位置,這個引數是不用加引號或單引號的。

    說明6:該語句是在slave2的mysql互動介面執行的

   6.4 啟動slave2的主從複製 

    

 

七、兩臺主庫相互複製

  以上6章節我們等於部署了master1-slave1和master2-slave2兩套一主一從,但是目前位置這兩個一主一從還沒有任何關係,所以接下來我們就要配置兩臺主機上的關聯了。即master1複製master2的同時master2也複製master2.

  在master1上執行:

change master to master_host='192.168.3.93',master_user='houlei',master_password='Se7eN521',master_log_file='binlog.000018',master_log_pos=156;
 start slave;
show slave status\G;

  

  說明1:以上程式碼其實就是將master1配置為master2的從庫  

  然後在master2上執行:

change master to master_host='192.168.3.91',master_user='houlei',master_password='Se7eN521',master_log_file='binlog.000010',master_log_pos=156;
start slave;
show slave status\G;

  

  說明2:以上程式碼其實就是將master2配置為master1的從庫  

八、雙主雙從測試

  分別在兩臺主庫master1,master2上執行DDL和DML語句,檢視涉及到的資料庫伺服器的資料同步情況

  在master1上操作:

  8.1、建立資料庫test_db1

mysql> create database test_db1;
Query OK, 1 row affected (0.01 sec)

    MySQL運維16-雙主雙從讀寫分離

    說明1:我們在192.168.3.91的master1主庫上建立了資料庫test_db1,然後再slave1,和master2,slave2上立刻就複製建立了test_db1出來

  2、我們在master2上的test_db1的資料庫中建立一個tb_test表

    

    

create table tb_test(id int auto_increment primary key, name varchar(20));

    MySQL運維16-雙主雙從讀寫分離

    說明2:在master2上進行建立表同樣會自動複製到master1和其他從表中

    說明3:至此雙主雙從算是配置好了

九、雙主雙從的讀寫分離

  Mycat控制後臺資料庫的讀寫分離和負載均衡有schema.xml檔案中的dataHost標籤的balance屬性控制,透過writeType及switchType來完成失敗自動切換的。

  9.1 配置schema.xml 

    MySQL運維16-雙主雙從讀寫分離

    說明1:在配置schema邏輯庫的時候就要指定資料節點dataNode的值,因為如果邏輯庫下的所有表都要實現讀寫分離,則不需要配置table標籤

    說明2:dn1資料節點下對應的mysql的database為test_db1

    說明3:在dataHost標籤的配置中要注意,balance值為"1",writeType值為"0",switchType的值為"1",解釋如下:

    • balance="1": 關於balance所有值的解釋在上一遍文章中有解釋,需要的請透過合集找到上一篇文章檢視,這裡直接是balance="1"的情況:代表全部的readHost和備用主機的writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(master1->slave1,master2->slave2,並且master1和master2互為主備),正常情況下master2,slave1,slave2都要參與select語句的負載均衡
    • writeType:0:代表寫操作都轉發到第一臺writerHost,writeHost1掛了,會切換到writeHost2上。1:代表所有寫操作都隨機的傳送到配置的witerHost上
    • switchType:-1:代表不自動切換,1:代表自動切換

    說明4:雙主雙從即配置兩個writeHost和readHost組合,如果是多主多從即配置多個writeHost和readHost組合即可。

  9.2 配置server.xml

    

    說明5:給root使用者增加test_db1資料庫的操作許可權

  9.3 雙主雙從讀寫分離測試

    首先重啟Mycat

    

    登入Mycat

    

    檢視邏輯庫和邏輯表

    

    插入測試資料

insert into tb_test(name) values ("張三");
insert into tb_test(name) values ("李四");
insert into tb_test(name) values ("王五");

    

    MySQL運維16-雙主雙從讀寫分離

    說明6:在Mycat中插入資料master1,slave1,master2,slave2中都新增了資料.

    查詢資料測試:同樣的直接查詢我們是沒辦法確定查詢的資料到底是來自哪裡,所以我們還是修改從庫中的資料,將slave1中的“張三”改了“張三s1”,將slave2中的“張三”改為“張三s2”

    MySQL運維16-雙主雙從讀寫分離   

    

    說明7:查詢結果是張三的說明資料來源master2

    說明8:查詢結果是張三s1的說明資料來源是slave1

    說明9:查詢結果是張三s2的說明資料來源是slave2

    說明10:以上測試說明了雙主雙從實現了讀寫分離

十、雙主雙從的高可用測試

  測試一臺主機當機下,雙主雙從是否可以繼續執行。

  10.1、現將master1(192.168.3.91)的服務關閉

    

  10.2 進入Mycat進行增刪改查測試

    

    說明1:仍然可以查詢,說明可以進行讀資料

    

    說明2:master1掛了的情況下,我們的雙主雙從架構的MySQL依然可讀可寫,所以高可用也沒問題

    總結:在雙主雙從的基礎上,多主多從同樣的實現思路。

 

 

 

  

 

相關文章