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

mycat讀寫分離配置

目前mysql的讀寫分離方案網上找了幾個並做了對比。

1.mycat 基於阿里的cobar改版的   比較穩定

2.atlas 360開發的 網友說不是很穩定 已經很久沒更新

3.mysql-proxy mysql自己的,不是很穩定

4.oneproxy 需要付費 比較穩定 效能也很好

5.amoeba 好像還行,有一些公司使用,但是很久沒有更新了

綜上所述,我選擇用mycat來實現mysql的讀寫分離。

首先先配置mysql的主從備份。如果只有兩個mysql,還是建議使用雙主,這樣即使一臺掛掉,另一臺依舊能夠實現讀操作和寫操作,所以先把mysql雙主配置完成

Mysql雙主的配置和主從差不多,只要把之前主和從的配置顛倒一下就行,參照部落格之前寫的mysql主從備份就行。

Mycat的前期工作需要java環境,ubuntu下直接apt-get就可以下載,網上教程很多,下載好java之後再配置一下jdk環境變數

Whereis  jvm  檢視jvm路徑

然後 vi /etc/profile

export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64  

export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH  

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH  

接著 source /etc/profile 使配置生效

配置好jdk環境變數後就可以下載mycat了

Mycat的配置檔案主要是conf下的schema.xml,rule.xml,server.xml。

我只是簡單的配置了mysql的讀寫分離,分片分庫這些功能並沒有使用,所以我只配置了schema.xml和server.xml這兩個檔案

Server.xml 檔案是mycat的登入資訊,這裡我只修改了以下配置

 <user name="test">   mycat登入使用者名稱

                <property name="password">test</property>mycat登入密碼

  

                <property name="schemas">test,test1(有多個數據庫可以新增多個邏輯庫</property>   邏輯庫,這裡的邏輯庫名要和schema.xml里名字一致

        </user>                                           

        <user name="user">

                <property name="password">user</property>

                <property name="schemas">test</property>

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

        </user>

Schema.xml 檔案裡有mycat分庫分片和讀寫分離的配置

<?xml version="1.0"?>

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

<mycat:schema xmlns:mycat="http://org.opencloudb/" >

        <schema name="test" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">    這裡的test名字要和server裡的一致

       <schema name="test1" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2">

       因為有多個數據庫,所以schema name 有兩個

        <dataNode name="dn1" dataHost="localhost1" database="test" />

        <dataNode name="dn2" dataHost="localhost1" database="test1" />

       datanode 也有兩個,分別對應物理資料庫test 和test1

        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"

                writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

                <heartbeat>select user()</heartbeat>

                <writeHost host="hostM1" url="localhost:3306" user="root"

                        password="123456">

                   </writeHost>

                <writeHost host="hostS1" url="192.168.1.1:3306" user="root"

                        password="123456" />

        </dataHost>

</mycat:schema>

 這裡我把註釋檔案全都刪除了,因為我只需要實現讀寫分離,所以配置比較簡單。

 這裡需要注意的是 balance, switchType, writeType

以下摘抄自http://www.dongcoder.com/detail-61311.html

balance="0", 不開啟讀寫分離機制,所有讀操作都發送到當前可用的writeHost上。

balance="1",全部的readHost與stand by writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,並且M1與M2互為主備),正常情況下,M2,S1,S2都參與select語句的負載均衡。

balance="2",所有讀操作都隨機的在writeHost、readhost上分發。

balance="3",所有讀請求隨機的分發到wiriterHost對應的readhost執行,writerHost不負擔讀壓力

writeType表示寫模式

writeType="0",所有的操作傳送到配置的第一個writehost

writeType="1",隨機發送到配置的所有writehost

writeType="2",不執行寫操作

switchType指的是切換的模式,目前的取值也有4種:

switchType=‘-1‘ 表示不自動切換

switchType=‘1‘ 預設值,表示自動切換

switchType=‘2‘ 基於MySQL主從同步的狀態決定是否切換,心跳語句為show slave status

switchType=‘3‘基於MySQL galary cluster的切換機制(適合叢集)(1.4.1),心跳語句為show status like ‘wsrep%‘。

我上面的配置是實現的兩個mysql都參與讀操作,寫操作只在hostm上進行,當hostm掛掉之後在hosts上進行。

完成後進入bin檔案,./mycat start 啟動mycat

如果只是實現讀寫分離,mycat的配置檔案還是比較簡單的,不過有幾點需要注意。

1.確定上面mysql使用者是否有遠端登入的許可權

2.mycat有兩個埠,一個是8066,一個是9066,其中9066是管理埠,8066是資料埠,我之前一直登入管理埠,show  tables;時不能成功執行,後來才發現登入8066才行。

到此,mysql的讀寫分離就實現了,接下來就測試mycat讀寫分離是否成功了。