1、Mycat讀寫分離的配置

1.1、Mycat是什麼

Mycat是一個開源資料庫中介軟體,是一個實現了MySQL協議的的資料庫中介軟體伺服器,我們可以把它看作是一個數據庫代理,用MySQL客戶端工具和命令列訪問Mycat,而Mycat再使用用MySQL原生(Native)協議與多個MySQL伺服器通訊,也可以用JDBC協議與大多數主流資料庫伺服器通訊,包括SQL Server、Oracle、DB2、PostgreSQL等主流資料庫,也支援MongoDB這種新型NoSQL方式的儲存,未來還會支援更多型別的儲存。

1.2、Mycat能幹什麼

1.2.1、資料庫的讀寫分離

1、通過Mycat可以自動實現寫資料時操作主資料庫,讀資料時操作從資料庫,這樣能有效地減輕資料庫壓力,也能減輕IO壓力。

2、實現讀寫分離,當主出現故障後,Mycat自動切換到另一個主上,進而提供高可用的資料庫服務,當然我們需要部署多主多從的模式

1.2.1.1、資料庫讀寫分離圖解

這裡是一主一從的圖解

1.2.2、資料庫分庫分表

分庫分表指的是對資料庫資料的拆分,分為兩種:水平拆分和垂直拆分

1.2.2.1、水平拆分(分庫)

根據表中資料的邏輯關係,將同一個表中的資料按照某種條件拆分到多臺資料庫伺服器上面

1.2.2.2、垂直拆分(分表)

按照不同的表來拆分分到不同的資料庫伺服器之上,根據表的型別不同來拆分

1.3、Mycat的搭建

1.3.1、前期準備

1、要將Mycat準備好可以去官網下載 http://www.mycat.org.cn/

2、需要兩臺或者兩臺以上的伺服器或者虛擬機器

3、保證每臺伺服器上已經安裝好了mysql並且主從複製已經搭建完成

主從複製搭建可以參考這裡:https://blog.csdn.net/qq_45334037/article/details/118708689

1.3.2、搭建環境

主伺服器ip:176.20.92.71

從伺服器ip:176.20.92.73

Mycat版本:1.6.7.1

MySQL版本:5.7.18

Linux版本:centos7

1.3.3、Mycat的安裝啟動關閉

1、Mycat解壓即用

將Mycat解壓到/usr/local目錄下

2、啟動Mycat 需要切換到Mycat中的bin目錄下

./mycat start

3、登入mycat 需要進入mysql中的bin目錄下

./mysql -umycat -p -P8066 -h127.0.0.1

4、Mycat的關閉

./mycat stop

1.3.4、Mycat的配置檔案

  1. server.xml: 用於配置mycat所需要的伺服器資訊。常用於配置:

    1、配置序列生成方式

    2、配置mycat邏輯資料庫

    3、配置mycat的訪問賬戶和密碼
  2. schema.xml: 用於配置的邏輯資料庫的對映、表、分片規則、資料結點及真實的資料庫資訊。常用於配置:

    1、配置邏輯庫對映

    2、配置垂直切分的表

    3、配置真實的資料庫

    4、配置讀寫結點
  3. rule.xml: 用於定義分片規則

1.3.5、server.xml檔案的配置

只需設定連線mycat時的使用者名稱和密碼, 邏輯庫即可,將預設的修改為你想要的

	<user name="mycat" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">mycatdb</property>
</user>

1.3.6、schema.xml檔案的配置

1.3.6.1、schema配置

因為只做讀寫分離,不做分庫分表,Mycat只是幫我們轉發一下請求,寫轉發到主庫,讀轉發到從庫,所以schema標籤裡面不用配置table

配置如下

<schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100"  dataNode="dn1">
</schema>

1.3.6.2、dataNode配置

dataNode標籤的作用

dataNode定義了Mycat中的資料節點,也就是我們通常說所的資料分片,一個dataNode標籤就是一個獨立的資料分片,通俗理解,一個分片就是一個物理資料庫

配置如下

<dataNode name="dn1" dataHost="host1" database="testdb" />

name屬性:定義資料節點的名字,這個名字需要是唯一的,這個名字在schema裡面會使用到

dataHost屬性:用於定義該分片屬於哪個資料庫例項的,屬性值是引用dataHost標籤上定義的name屬性

database屬性:用於對應真實的資料庫名,必須是真實存在的

1.3.6.3、dataHost配置

dataHost標籤的作用

定義具體的資料庫例項、讀寫分離配置和心跳語句

配置如下

	<dataHost name="host1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="176.20.92.71:3306" user="root" password="123456">
<readHost host="hostS1" url="176.20.92.73:3306" user="root" password="123456" />
</writeHost>
</dataHost>

balance屬性:負載均衡型別,目前的取值有4種

switchType屬性:用於指定主伺服器發生故障後的切換型別

heartbeat標籤:用於和後端資料庫進行心跳檢查的語句,檢測MySQL資料庫是否正常執行

writeHost標籤:將後端的資料庫的相關配置給mycat,用於例項化後端連線池,寫例項

readHost標籤:將後端的資料庫的相關配置給mycat,用於例項化後端連線池,讀例項

在一個dataHost內可以定義多個writeHost和readHost。但是,如果writeHost指定的後端資料庫宕機,那麼這個writeHost繫結的所有readHost都將不可用。另一方面,由於這個writeHost宕機系統會自動的檢測到,並切換到備用的writeHost上去

1.3.6.4、完整配置

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="host1" database="testdb" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="176.20.92.71:3306" user="root" password="123456">
<readHost host="hostS1" url="176.20.92.73:3306" user="root" password="123456" />
</writeHost> </dataHost>
</mycat:schema>

在此我們的mycat讀寫分離配置就全部完成了,重啟mycat進行測試

1.4、讀寫分離測試



在mycat中的邏輯資料庫mycatdb的t_user表中插入資料 可以發現主從資料庫都被插入了資料



在mycat中查詢t_user中的資料



到此mycat讀寫分離的搭建和測試就全部完成了