天天看點

mycat搭建讀寫分離mycat搭建讀寫分離

mycat搭建讀寫分離

摘自:https://www.cnblogs.com/youzhibing/p/9553766.html

之前安裝過MySQL與MySQL的主從複制現在就不示範了

mycat是基于jdk的是以要先安裝jdk,版本一定要高7以上。

先下載下傳mycat的tar包

http://www.mycat.org.cn/

mycat搭建讀寫分離mycat搭建讀寫分離

如圖所示,writeHost表示主節點,readHost表示從節點,Mycat内部定期對一個dataHost裡所有的writeHost與readHost節點發起心跳檢測(writeHost與readHost都可以配置多個,至于資料同步的問題則需要我們從mysql層面實作了,Mycat并不提供資料同步的支援,本文隻講mysql一主一從),正常情況下,Mycat會将第一個writeHost作為寫節點,所有的DML SQL會發送給此節點,若Mycat開啟了讀寫分離,則Select SQL會根據讀寫分離政策發往readHost(+writeHost)執行。當一個dataHost裡面配置了多個writeHost時,如果第一個writeHost當機,則Mycat會在預設的3次心跳檢查失敗後,自動切換到下一個可用的writeHost,以此類推。

這存在一個問題,就是當當機的writeHost恢複後,怎麼重新加入Mycat,要不要恢複為原來的寫節點? 最佳建議方式是:保持現有狀态不變,改旗易幟,恢複後的mysql節點作為從節點,跟随新的主節點,重新配置主從同步,原來跟随該節點做同步的從節點也同樣換帥,重新配置同步源,這些節點的資料手工完成同步後,再加入Mycat裡。

[[email protected] opt]# cp Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz -C /usr/local
           
[[email protected] local]# useradd mycat
           
[[email protected] local]# chown -R mycat:mycat /usr/local/mycat
           
[[email protected] local]# passwd mycat
           

将MyCat配置到環境變量中

[[email protected] local]# vi /etc/profile
           

增加如下内容

MYCAT_HOME=/usr/local/mycat
PATH=$MYCAT_HOME/bin:$PATH
           
mycat搭建讀寫分離mycat搭建讀寫分離

儲存後退出,執行source指令使配置生效

[[email protected] local]# source /etc/profile
           

配置mycat

隻需要簡單配置下schema.xml

a. 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 不負擔讀壓力,注意 balance=3 隻在 1.4 及其以後版本有, 1.3 沒有。

b. writeType 屬性

負載均衡類型,目前的取值有 3 種:

  1. writeType=“0”, 所有寫操作發送到配置的第一個 writeHost,第一個挂了切到還生存的第二個

    writeHost,重新啟動後已切換後的為準,切換記錄在配置檔案中:dnindex.properties .

  2. writeType=“1”,所有寫操作都随機的發送到配置的 writeHost。
  3. writeType=“2”,沒實作。

c. switchType 屬性

  • -1 表示不自動切換
  • 1 預設值,自動切換
  • 2 基于MySQL 主從同步的狀态決定是否切換
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
				<!-- 虛拟庫名稱 -->                                        
    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
    </schema>
    <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
        /> -->                                         <!-- 真實庫名稱 -->
    <dataNode name="dn1" dataHost="localhost1" database="math" />
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="hostM1" url="192.168.31.113:3306" user="root" password="123456">
            <readHost host="hostS1" url="192.168.31.114:3306" user="root" password="123456" />    <!-- 讀寫分離; 寫走hostM1,讀走hostS1; hostM1當機了, hostS1也不可用 -->
        </writeHost>
    </dataHost>
</mycat:schema>
           

這裡隻需要改database的名字 db1 就是你真實資料庫服務上的資料庫名 .

根據你自己的資料庫名進行修改.

修改server.xml

vi /server.xml

拉倒最後面修改mycat的登入使用者名或密碼與MySQL做于區分

mycat搭建讀寫分離mycat搭建讀寫分離

修改儲存後到mycat的bin目錄中輸入

./mycat console
           

./mycat console是可以檢視啟動日志的可以看到哪裡出現了錯誤便于修改

如果啟動沒有問題可以使用mycat start

啟動後可以再進行測試一下讀寫分離與主從複制

我這裡使用了2台Linux因為113安裝master與mycat,114安裝slave

注意

mycat搭建讀寫分離mycat搭建讀寫分離

mycat的端口号為8066

mycat搭建讀寫分離mycat搭建讀寫分離

一切就緒就可以測試了

可以在113的mycat中寫入資料

到113的MySQL中檢視是否寫入,

在114中也檢視是否同步。

檢視讀寫分離也可以将MySQL的主從複制關掉,直接測試mycat的讀寫分離

也可以是手動的修改113上的資料,在修改114上的資料讓兩個資料不一緻,在再113mycat上檢視到底是讀的那個資料源上的資料。

嗯~在測試中springboot+jpa的時候遇到了一點問題,是jpa本身的事務導緻mycat在讀寫時都走了master寫庫,可以将jpa的事務關掉就可以了。

/**
 * 關閉jpamor預設事務
 */
@EnableJpaRepositories(basePackages = "com.albd.math", enableDefaultTransactions = false)
@Configuration
public class JpaTransactionConfig {
}
           

摘自: https://www.cnblogs.com/youzhibing/p/9553766.html

有寫的不對或有問題的希望評論

繼續閱讀