1. 程式人生 > 其它 >Mycat 筆記 2:雙主雙從

Mycat 筆記 2:雙主雙從

 

1. 結構

192.168.0.100     master1
192.168.0.101     slave1
192.168.0.190     master2
192.168.0.191     slave2
192.168.0.170     mycat

slave1 是 master1 的從庫
slave2 是 master2 的從庫
master1 和 master2 互為主從,

建議 mysql 例項是 gtid + semi sync + mts,或者 PXC,或者 MGR
此處演示為了方便採用普通非同步複製。

 

2. 雙主雙從高可用

據說 mycat 推薦的底層節點架構是雙主雙從來保證高可用。

在 mycat 的配置中, 裡面配置:

  • master1 為第一個 write host,
  • master2 為第二個 write host,也就是 stand for write host

如果 master1 宕機的話,因為有 switchType=1 會自動切換到 master2 上面

 

<dataHost> 標籤中配置 writeType=0,也就是:

  • 所有寫操作均由第一個 write host 承擔,第一個宕機再由第二個負擔

 

<dataHost> 標籤中配置 balance=1,也就是:

  • 所有的讀操作在 read host 和 stand for write host 之間負擔

 
由此,在雙主雙從中,往 master1 寫資料,從 master2、slave1、slave2 中讀資料,
由此來實現高可用。

 

3. 雙主雙從的搭建

  • slave1 是 master1 的從庫

  • slave2 是 master2 的從庫

  • master1 和 master2 互為主從

    • master1 是 master2 的從庫

    • master2 是 master1 的從庫

搭建過程 略

 

4. mycat 的 schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

    <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" 
            dataNode="dn1">
    </schema>
    <dataNode name="dn1" dataHost="2m2s" database="world" />
    <dataHost name="2m2s" maxCon="1000" minCon="10" balance="1"  
                    writeType="0" dbType="mysql" dbDriver="native" 
                    switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="192.168.0.100:3306" 
                user="root" password="123456">
            <readHost host="hostS1" url="192.168.0.101:3306" 
                    password="123456" user="root" />
        </writeHost>
        <writeHost host="hostM2" url="192.168.0.190:3306" 
                user="root" password="123456">
            <readHost host="hostS2" url="192.168.0.191:3306" 
                password="123456" user="root" />
        </writeHost>
    </dataHost>
</mycat:schema>

 
如上:
邏輯庫依舊是 TESTDB
對應的資料節點是 dn1
資料節點對應的主機組是 2m2s
2m2s 下:
hostM1 作為寫節點(100),其從庫 hostS1(101)作為讀節點
hostM2 作為 stand by 寫節點(190),其從庫 hostS2(191)作為讀節點

 

5. 啟動 mycat 測試讀寫分離和高可用

(1)讀寫分離

 
寫操作:

 
如上,寫操作在 hostM1(100)上完成

 
讀操作:

 
如上,
讀操作分別在幾個節點中進行,(並非輪詢)

 

(2)高可用

先停掉 master1

再次檢視讀寫分離

 
如上,
master1 宕機後,其從庫 slave1 也不再參與到讀中,

 

如上,寫操作切換到 master2(190)

 
在 master1 宕機期間,插入一些資料,

 
還是建議寫 use database; SQL; 的方式

 
重新啟動 master1

 
master1 和 slave1 重新加入,並且已經同步了資料