1. 程式人生 > >mycat配置讀寫分離

mycat配置讀寫分離

負載均衡 limit 壓力 防火 開啟 防火墻的設置 lease tar.gz 8.0

現有後端MYSQL架構:

MHA1                  192.168.1.20
MHA2                  192.168.1.30
MHA3                  192.168.1.40
SLAVE                 192.168.1.50
MANAGER          192.168.1.60(VIP192.168.1.100)

因現有架構前端程序都是利用腳本輪詢讀寫來實現人肉分離,沒有健康檢查,造成了網站時時有卡頓,因此需要利用中間件mycat來實現讀寫分離,且帶有有健康檢查。

安裝包:Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz


一、新服務器192.168.1.70配置mycat

1.下載Mycat-server-1.6-RELEASE

[root@mycat ~]# wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

2.安裝mycat(解壓)
[root@mycat ~]# tar -xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
[root@mycat mycat]# cp -r ~/mycat/ /usr/local/mycat

3.修改登錄mycat的賬戶密碼和防火墻的設置server.xml

[root@mycat mycat]# vim /usr/local/mycat/conf/server.xml

<user name="root"&gt;
<property name="password"&gt;123456&lt;/property&gt;
<!-- &lt;登錄mycat的用戶和密碼&gt; --&gt;
<property name="schemas"&gt;mycat&lt;/property&gt;
<!-- &lt;mydb是顯示的虛擬庫名,庫名多個時,使用逗號分隔&gt; --&gt;
</user&gt;
<user name="user"&gt;
<property name="password"&gt;user&lt;/property&gt;
<property name="schemas"&gt;mycat&lt;/property&gt;
<property name="readOnly"&gt;true&lt;/property&gt;
<!-- &lt;這裏配置只讀用戶&gt; --&gt;
</user&gt;

4.修改mycat配置分表讀寫分離策略schema.xml(沒用的我刪掉了)

[root@mycat mycat]# vim /usr/local/mycat/conf/schema.xml

<?xml version="1.0"?&gt;
<!DOCTYPE mycat:schema SYSTEM "schema.dtd"&gt;
<mycat:schema xmlns:mycat="http://io.mycat/"&gt;
<schema name="mycat" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"&gt;
<!-- &lt;對應上面文件的虛擬庫名mycat&gt; --&gt;
<!-- &lt;這裏我不需要分數據分片,所以要加回一個表名dn1&gt; --&gt;
</schema&gt;
<!-- &lt;dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
/&gt; --&gt;
<dataNode name="dn1" dataHost="localhost1" database="mydb" /&gt;
<!-- &lt;mydb真實數據庫名&gt; --&gt;       
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"&gt;
<heartbeat&gt;select user()&lt;/heartbeat&gt;
<!-- can have multi write hosts --&gt;
<writeHost host="hostM1" url="192.168.1.100:3306" user="root"  password="123456"&gt;
<!-- &lt;寫入的用戶名密碼&gt; --&gt; 
<!-- can have multi read hosts --&gt;
<readHost host="node1" url="192.168.1.30:3306" user="read" password="123456" /&gt;
<readHost host="node2" url="192.168.1.40:3306" user="read" password="123456" /&gt;
<readHost host="node3" url="192.168.1.50:3306" user="read" password="123456" /&gt;
<!-- &lt;讀的用戶名密碼&gt; --&gt;  
</writeHost&gt;
</dataHost&gt;
</mycat:schema&gt;
這裏面,有三個參數需要註意,balance、writeType和 switchType。
其中,balance指的負載均衡類型,目前的取值有4種:
1. balance="0", 不開啟讀寫分離機制,所有讀操作都發送到當前可用的writeHost上。
2. balance="1",全部的readHost與stand by writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1-&gt;S1,M2-&gt;S2,並且M1與 M2互為主備),正常情況下,M2,S1,S2都參與select語句的負載均衡。
3. balance="2",所有讀操作都隨機的在writeHost、readhost上分發。
4. balance="3",所有讀請求隨機的分發到wiriterHost對應的readhost執行,writerHost不負擔讀壓力
writeType屬性負載均衡類型,目前的取值有3種:
1. writeType="0", 所有寫操作發送到配置的第一個writeHost,第一個掛了切到還生存的第二個writeHost,重新啟動後已切換後的為準,
切換記錄在配置文件中:dnindex.properties .
2. writeType="1",所有寫操作都隨機的發送到配置的writeHost,1.5以後廢棄不推薦。
3. writeType="-1",不開啟讀寫分離
switchType指的是切換的模式,目前的取值也有4種:
1. switchType=‘-1‘ 表示不自動切換
2. switchType=‘1‘ 默認值,表示自動切換
3. switchType=‘2‘ 基於MySQL主從同步的狀態決定是否切換,心跳語句為 show slave status
4. switchType=‘3‘基於MySQL galary cluster的切換機制(適合集群)(1.4.1),心跳語句為 show status like ‘wsrep%‘。

5.安裝java環境

[root@mycat mycat]# yum -y install java-1.8.0-openjdk

6.主mysql授權select用戶(對應設置的讀用戶名字)

mysql > grant select on *.* to read@‘%‘ identified by ‘123456‘;

7.開啟mycat

[root@mycat ~]# /usr/local/mycat/bin/mycat start

二、測試讀寫分離(mycat端口8066)

[root@mha1 ~]# for i in {1..5};do mysql -uroot -p123456 -P8066 -h192.168.1.70 -e "select @@hostname"; done
| @@hostname |
+------------+
| slave |
+------------+
| @@hostname |
+------------+
| mha3 |
+------------+
| @@hostname |
+------------+
| mha2 |
+------------+
| @@hostname |
+------------+
| mha2 |
+------------+
| @@hostname |
+------------+
| slave |
+------------+

mycat配置讀寫分離