高效能Mysql中間元件Mycat安裝配置
由於公司專案需要使用到讀寫分離,但是官方版本的Mysql-proxy讀寫分離元件太不穩定且有很多BUG,最終決定使用Mycat作為中間元件,其實讀寫分離只是Mycat中的一個功能,Mycat中還有分割槽分表等功能特性非常實用,並且還能通過Mycat-WEB進行各種監控,還是非常方便的,下面是具體的安裝配置步驟。
首先去Mycat的官網:http://www.mycat.io/ 下載最新版本的Mycat或者直接使用命令下載:wget
http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz,然後解壓:tar -zxvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
其實Mycat最主要的兩個配置檔案就是conf目錄下面的server.xml和scheam.xml檔案,
-
<user name="mycat">
-
<property name="password">mycat</property>
-
<property name="schemas">mycat</property>
-
</user>
-
<!-- baixiong,bxyd_activity,bxyd_log,open_platform -->
-
<user name="mycat1">
-
<property name="password">mycat</property>
-
<property name="schemas">mycat</property>
-
<property name="readOnly">true</property>
-
</user>
上面轉配置是server.xml中的,在需要讀寫分離的庫中先把讀寫使用者和只讀使用者創建出來,然後配置scheam.xml檔案,
-
<?xml version="1.0"?>
-
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
-
<mycat:schema xmlns:mycat="http://io.mycat/">
-
<!-- 設定庫屬性 -->
-
<schema name="db1" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
-
<schema name="db2" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2"></schema>
-
<schema name="db3" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn3"></schema>
-
<schema name="db4" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn4"></schema>
-
<!-- 庫分片管理的節點設定,按庫設定 -->
-
<dataNode name="dn1" dataHost="mycat_1" database="db1" />
-
<dataNode name="dn2" dataHost="mycat_1" database="db2" />
-
<dataNode name="dn3" dataHost="mycat_1" database="db3" />
-
<dataNode name="dn4" dataHost="mycat_1" database="db4" /> <!-- 下面是讀寫分離的配置 -->
-
<dataHost name="mycat_1" maxCon="1500" minCon="100" balance="2"
-
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="300">
-
<heartbeat>select 1</heartbeat>
-
<writeHost host="bxyd_master" url="10.29.25.149:3306" user="mycat" password="Kje09u230ifbhbhxc">
-
<readHost host="bxyd_slave" url="172.19.53.6:3306" user="mycat1" password="Kje09u230ifbhbhxc" />
-
</writeHost>
-
</dataHost>
-
</mycat:schema>
配置完成後啟動Mycat:../bin/mycat start,檢視啟動狀態:../bin/mycat status
接下去我們配置Mycat-WEB,進行WEB管理控制檯的監控,首先下載客戶端:wget http://dl.mycat.io/mycat-web-1.0/Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz,然後解壓:tar -zxvf Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz
在啟動Mycat-WEB前必須先安裝Zookeeper,因為Zookeeper是Mycat-WEB的註冊中心,下載Zookeeper:wget http://dl.mycat.io/zookeeper-3.4.6.tar.gz,解壓:tar -zxvf zookeeper-3.4.6.tar.gz,然後進入conf資料夾,mv zoo_smaple.cfg zoo.cfg,然後啟動zookeeper:../bin/zkServer.sh start
Zookeeper啟動成功後,我們開始啟動Mycat-WEB:./start.sh &,啟動完成後看下監聽埠是否正常,lsof -i tcp:8082
一切準備就緒後我們就可以訪問Mycat-WEB了,但是先確保你開了外網的8082埠,訪問地址:http://localhost:8082/mycat
下面是server.xml中優化配置項的說明:
<property name="charset">utf8</property>
字符集
<property name="processors">1</property>
處理執行緒數量,預設是cpu數量。
<property name="processorBufferChunk">4096</property>
每次讀取留的數量,預設4096。
<property name="processorBufferPool">409600</property>
建立共享buffer需要佔用的總空間大小。processorBufferChunk*processors*100。
<property name="processorBufferPoolType">0</property>
預設為0。0表示DirectByteBufferPool,1表示ByteBufferArena。
<property name="processorBufferLocalPercent">100</property>
二級共享buffer是processorBufferPool的百分比,這裡設定的是百分比。
<property name="sequnceHandlerType">100</property>
全域性ID生成方式。(0:為本地檔案方式,1:為資料庫方式;2:為時間戳序列方式;3:為ZK生成ID;4:為ZK遞增ID生成。
<property name="useCompression">1</property>
是否開啟mysql壓縮協議。1為開啟,0為關閉,預設關閉。
<property name="packetHeaderSize">4</property>
指定 Mysql 協議中的報文頭長度。預設 4。
<property name="maxPacketSize">16M</property>
指定 Mysql 協議可以攜帶的資料最大長度。預設 16M。
<property name="idleTimeout">1800000</property>
指定連線的空閒超時時間。某連線在發起空閒檢查下,發現距離上次使用超過了空閒時間,那麼這個連線會被回收,就是被直接的關閉掉。預設 30 分鐘,單位毫秒。
<property name="txIsolation">3</property>
前端連線的初始化事務隔離級別,只在初始化的時候使用,後續會根據客戶端傳遞過來的屬性對後端資料庫連線進行同步。預設為 REPEATED_READ,設定值為數字預設 3。 READ_UNCOMMITTED = 1; READ_COMMITTED = 2; REPEATED_READ = 3; SERIALIZABLE = 4;
<property name="sqlExecuteTimeout">300</property>
SQL 執行超時的時間,Mycat 會檢查連線上最後一次執行 SQL 的時間,若超過這個時間則會直接關閉這連線。預設時間為 300 秒,單位秒。
<property name="processorCheckPeriod">1000</property>
清理 NIOProcessor 上前後端空閒、超時和關閉連線的間隔時間。預設是 1 秒,單 位毫秒。
<property name="dataNodeIdleCheckPeriod">300000</property>
對後端連線進行空閒、超時檢查的時間間隔,預設是 300 秒,單位毫秒。
<property name="dataNodeHeartbeatPeriod">10000</property>
對後端所有讀、寫庫發起心跳的間隔時間,預設是 10 秒,單位毫秒。
<property name="bindIp">0.0.0.0</property>
mycat 服務監聽的 IP 地址,預設值為 0.0.0.0。
<property name="serverPort">8066</property>
定義 mycat 的使用埠,預設值為 8066。
<property name="managerPort">9066</property>
定義 mycat 的管理埠,預設值為 9066。
<property name="fakeMySQLVersion">5.6</property>
mycat 模擬的 mysql 版本號,預設值為 5.6 版本,如非特需,不要修改這個值,目前支援設定 5.5,5.6,5.7 版本,其他版本可能會有問題。
<property name="useSqlStat">0</property>
是否開啟實時統計。1為開啟;0為關閉 。
<property name="useGlobleTableCheck">0</property>
是否開啟全域性表一致性檢測。1為開啟;0為關閉 。
<property name="handleDistributedTransactions">0</property>
分散式事務開關。0為不過濾分散式事務;1為過濾分散式事務;2 為不過濾分散式事務,但是記錄分散式事務日誌。
<property name="maxStringLiteralLength">65535</property>
預設是65535。 64K 用於sql解析時最大文字長度 以上舉例的屬性僅僅是一部分,可以配置的變數很多,具體可以檢視SystemConfig這個類的屬性內容。 System標籤下的屬性,一般是上線後,需要根據實際執行的情況,分析後調優的時候進行修改。