1. 程式人生 > >高效能Mysql中間元件Mycat安裝配置

高效能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檔案,

  1.         <user name="mycat">

  2.     <property name="password">mycat</property>

  3.     <property name="schemas">mycat</property>

  4. </user>

  5. <!-- baixiong,bxyd_activity,bxyd_log,open_platform -->

  6. <user name="mycat1">

  7.     <property name="password">mycat</property>

  8.     <property name="schemas">mycat</property>

  9.     <property name="readOnly">true</property>

  10. </user>

上面轉配置是server.xml中的,在需要讀寫分離的庫中先把讀寫使用者和只讀使用者創建出來,然後配置scheam.xml檔案,

  1. <?xml version="1.0"?>

  2. <!DOCTYPE mycat:schema SYSTEM "schema.dtd">

  3. <mycat:schema xmlns:mycat="http://io.mycat/">

  4. <!-- 設定庫屬性 -->

  5. <schema name="db1" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>

  6. <schema name="db2" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2"></schema>

  7. <schema name="db3" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn3"></schema>

  8. <schema name="db4" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn4"></schema>

  9. <!-- 庫分片管理的節點設定,按庫設定 -->

  10. <dataNode name="dn1" dataHost="mycat_1" database="db1" />

  11. <dataNode name="dn2" dataHost="mycat_1" database="db2" />

  12. <dataNode name="dn3" dataHost="mycat_1" database="db3" />

  13. <dataNode name="dn4" dataHost="mycat_1" database="db4" /> <!-- 下面是讀寫分離的配置 -->

  14. <dataHost name="mycat_1" maxCon="1500" minCon="100" balance="2"

  15. writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="300">

  16. <heartbeat>select 1</heartbeat>

  17. <writeHost host="bxyd_master" url="10.29.25.149:3306" user="mycat" password="Kje09u230ifbhbhxc">

  18. <readHost host="bxyd_slave" url="172.19.53.6:3306" user="mycat1" password="Kje09u230ifbhbhxc" />

  19. </writeHost>

  20. </dataHost>

  21. </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標籤下的屬性,一般是上線後,需要根據實際執行的情況,分析後調優的時候進行修改。