一、雙主雙從架構介紹
在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,關閉防火牆
說明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)
說明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));
說明2:在master2上進行建立表同樣會自動複製到master1和其他從表中
說明3:至此雙主雙從算是配置好了
九、雙主雙從的讀寫分離
Mycat控制後臺資料庫的讀寫分離和負載均衡有schema.xml檔案中的dataHost標籤的balance屬性控制,透過writeType及switchType來完成失敗自動切換的。
9.1 配置schema.xml
說明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 ("王五");
說明6:在Mycat中插入資料master1,slave1,master2,slave2中都新增了資料.
查詢資料測試:同樣的直接查詢我們是沒辦法確定查詢的資料到底是來自哪裡,所以我們還是修改從庫中的資料,將slave1中的“張三”改了“張三s1”,將slave2中的“張三”改為“張三s2”
說明7:查詢結果是張三的說明資料來源master2
說明8:查詢結果是張三s1的說明資料來源是slave1
說明9:查詢結果是張三s2的說明資料來源是slave2
說明10:以上測試說明了雙主雙從實現了讀寫分離
十、雙主雙從的高可用測試
測試一臺主機當機下,雙主雙從是否可以繼續執行。
10.1、現將master1(192.168.3.91)的服務關閉
10.2 進入Mycat進行增刪改查測試
說明1:仍然可以查詢,說明可以進行讀資料
說明2:master1掛了的情況下,我們的雙主雙從架構的MySQL依然可讀可寫,所以高可用也沒問題
總結:在雙主雙從的基礎上,多主多從同樣的實現思路。