mycat配置讀寫分離
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"> <property name="password">123456</property> <!-- <登錄mycat的用戶和密碼> --> <property name="schemas">mycat</property> <!-- <mydb是顯示的虛擬庫名,庫名多個時,使用逗號分隔> --> </user> <user name="user"> <property name="password">user</property> <property name="schemas">mycat</property> <property name="readOnly">true</property> <!-- <這裏配置只讀用戶> --> </user>
4.修改mycat配置分表讀寫分離策略schema.xml(沒用的我刪掉了)
[root@mycat mycat]# vim /usr/local/mycat/conf/schema.xml
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="mycat" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> <!-- <對應上面文件的虛擬庫名mycat> --> <!-- <這裏我不需要分數據分片,所以要加回一個表名dn1> --> </schema> <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743" /> --> <dataNode name="dn1" dataHost="localhost1" database="mydb" /> <!-- <mydb真實數據庫名> --> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM1" url="192.168.1.100:3306" user="root" password="123456"> <!-- <寫入的用戶名密碼> --> <!-- can have multi read hosts --> <readHost host="node1" url="192.168.1.30:3306" user="read" password="123456" /> <readHost host="node2" url="192.168.1.40:3306" user="read" password="123456" /> <readHost host="node3" url="192.168.1.50:3306" user="read" password="123456" /> <!-- <讀的用戶名密碼> --> </writeHost> </dataHost> </mycat:schema>
這裏面,有三個參數需要註意,balance、writeType和 switchType。 其中,balance指的負載均衡類型,目前的取值有4種: 1. balance="0", 不開啟讀寫分離機制,所有讀操作都發送到當前可用的writeHost上。 2. balance="1",全部的readHost與stand by writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->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配置讀寫分離