Mycat簡介

一、Mycat介紹

1、是什么(數(shù)據(jù)庫中間件)

  • 前身是阿里的cobar
  • 一個徹底開源的舍哄,面向企業(yè)應用開發(fā)的大數(shù)據(jù)庫集群
  • 支持事務、ACID誊锭、可以替代MySQL的加強版數(shù)據(jù)庫
  • 一個可以視為MySQL集群的企業(yè)級數(shù)據(jù)庫蠢熄,用來替代昂貴的Oracle集群
  • 一個融合內(nèi)存緩存技術(shù)、NoSQL技術(shù)炉旷、HDFS大數(shù)據(jù)的新型SQL Server
  • 結(jié)合傳統(tǒng)數(shù)據(jù)庫和新型分布式數(shù)據(jù)倉庫的新一代企業(yè)級數(shù)據(jù)庫產(chǎn)品
  • 一個新穎的數(shù)據(jù)庫中間件產(chǎn)品

2、Mycat關(guān)鍵特性

  • 支持SQL92標準
  • 支持MySQL叉讥、Oracle窘行、DB2、SQL Server图仓、PostgreSQL等DB的常見SQL語法
  • 遵守Mysql原生協(xié)議罐盔,跨語言,跨平臺救崔,跨數(shù)據(jù)庫的通用中間件代理惶看。
  • 基于心跳的自動故障切換,支持讀寫分離六孵,支持MySQL主從纬黎,以及galera cluster集群。
  • 支持Galera for MySQL集群劫窒,Percona Cluster或者MariaDB cluster
  • 基于Nio實現(xiàn)本今,有效管理線程,解決高并發(fā)問題主巍。
  • 支持數(shù)據(jù)的多片自動路由與聚合冠息,支持sum,count,max等常用的聚合函數(shù),支持跨庫分頁。
  • 支持單庫內(nèi)部任意join孕索,支持跨庫2表join逛艰,甚至基于caltlet的多表join。
  • 支持通過全局表搞旭,ER關(guān)系的分片策略散怖,實現(xiàn)了高效的多表join查詢菇绵。
  • 支持多租戶方案。
  • 支持分布式事務(弱xa)杭抠。
  • 支持XA分布式事務(1.6.5)脸甘。
  • 支持全局序列號,解決分布式下的主鍵生成問題偏灿。
  • 分片規(guī)則豐富丹诀,插件化開發(fā),易于擴展翁垂。
  • 強大的web铆遭,命令行監(jiān)控。
  • 支持前端作為MySQL通用代理沿猜,后端JDBC方式支持Oracle枚荣、DB2、SQL Server 啼肩、 mongodb 橄妆、巨杉。
  • 支持密碼加密
  • 支持服務降級
  • 支持IP白名單
  • 支持SQL黑名單祈坠、sql注入攻擊攔截
  • 支持prepare預編譯指令(1.6)
  • 支持非堆內(nèi)存(Direct Memory)聚合計算(1.6)
  • 支持PostgreSQL的native協(xié)議(1.6)
  • 支持mysql和oracle存儲過程害碾,out參數(shù)、多結(jié)果集返回(1.6)
  • 支持zookeeper協(xié)調(diào)主從切換赦拘、zk序列慌随、配置zk化(1.6)
  • 支持庫內(nèi)分表(1.6)
  • 集群基于ZooKeeper管理,在線升級躺同,擴容阁猜,智能優(yōu)化,大數(shù)據(jù)處理(2.0開發(fā)版)蹋艺。

3剃袍、干什么的

(1)讀寫分離

(2)數(shù)據(jù)分片

  • 垂直拆分
  • 水平拆分
  • 垂直+水平拆分


(3)多數(shù)據(jù)源整合

4、原理

攔截
Mycat 的原理中最重要的一個動詞是“攔截”车海,它攔截了用戶發(fā)送過來的 SQL 語句笛园,首先對 SQL 語句做了一些特定的分析:如分片分析、路由分析侍芝、讀寫分離分析研铆、緩存分析等,然后將此 SQL 發(fā)往后端的真實數(shù)據(jù)庫州叠,并將返回的結(jié)果做適當?shù)奶幚砜煤欤罱K再返回給用戶

這種方式把數(shù)據(jù)庫的分布式從代碼中解耦出來,程序員察覺不出來后臺使用mycat還是mysql咧栗。

5逆甜、Mycat監(jiān)控

  • 支持對Mycat虱肄、Mysql性能監(jiān)控
  • 支持對Mycat的JVM內(nèi)存提供監(jiān)控服務
  • 支持對線程的監(jiān)控
  • 支持對操作系統(tǒng)的CPU、內(nèi)存交煞、磁盤咏窿、網(wǎng)絡的監(jiān)控


6、Mycat架構(gòu)

1.6版本架構(gòu)

二素征、安裝

Mycat官網(wǎng):http://www.mycat.io/
可以了解下Mycat的背景和應用情況集嵌,這樣使用起來比較有信心。

Mycat權(quán)威指南:http://www.mycat.io/document/mycat-definitive-guide.pdf

Mycat實體書籍:《分布式數(shù)據(jù)庫架構(gòu)及企業(yè)實踐——基于Mycat中間件》 ISBN:978-7-121-30287-9

Mycat下載地址:http://dl.mycat.io/
官網(wǎng)有個文檔御毅,屬于詳細的介紹根欧,初次入門,看起來比較花時間端蛆。

下載:
建議大家選擇 1.6-RELEASE 版本凤粗,畢竟是比較穩(wěn)定的版本。

安裝:
根據(jù)不同的系統(tǒng)選擇不同的版本今豆。包括linux嫌拣、windows、mac,作者考慮還是非常周全的呆躲,當然亭罪,也有源碼版的。(ps:源碼版的下載后歼秽,只要配置正確,就可以正常運行調(diào)試情组,這個贊一下燥筷。)
[圖片上傳失敗...(image-7dc3fc-1578843743507)]

Mycat的安裝其實只要解壓下載的目錄就可以了,非常簡單院崇。
安裝完成后肆氓,目錄如下:

目錄 說明
bin mycat命令,啟動底瓣、重啟谢揪、停止等
catlet catlet為Mycat的一個擴展功能
conf Mycat 配置信息,重點關(guān)注
lib Mycat引用的jar包,Mycat是java開發(fā)的
logs 日志文件捐凭,包括Mycat啟動的日志和運行的日志

三拨扶、配置

Mycat的配置文件都在conf目錄里面,這里介紹幾個常用的文件:

  • server.xml:用于配置Mycat的用戶名茁肠、密碼患民、邏輯數(shù)據(jù)庫名、服務端口垦梆、讀寫權(quán)限等
  • schema.xml:最常用的配置文件匹颤,用于配置物理數(shù)據(jù)庫信息(ip仅孩、port、username印蓖、password辽慕、database)、表的配置(表所在的數(shù)據(jù)節(jié)點赦肃、表的分片規(guī)則溅蛉、主鍵是否自增等)、讀寫分離配置等
  • rule.xml:分片規(guī)則配置摆尝,mycat提供了十多種分片規(guī)則温艇,也可以自定義分片規(guī)則
  • log4j2.xml:配置mycat的日志信息,開發(fā)的時候建議設置成debug級別

logs: Mycat打印的日志文件

  • console.log:mycat啟動時的日志堕汞,啟動成功一般會有有日志記錄勺爱,如果沒有日志記錄可以通過mycat status命令來查看是否啟動成功,如果啟動失敗可以去mycat.log中查看錯誤日志
  • mycat.log:mycat執(zhí)行sql對應的日志讯检,可以通過該日志知道m(xù)ycat是怎么樣執(zhí)行sql的琐鲁,一些錯誤日志會輸出到該文件中,是一個很重要的日志文件
  • wrapper.log:錯誤日志也可能在這個日志文件中
  • switch.log

Mycat的架構(gòu)其實很好理解人灼,Mycat是代理围段,Mycat后面就是物理數(shù)據(jù)庫。和Web服務器的Nginx類似投放。對于使用者來說奈泪,訪問的都是Mycat,不會接觸到后端的數(shù)據(jù)庫灸芳。
我們現(xiàn)在做一個主從涝桅、讀寫分離,簡單分表的示例烙样。結(jié)構(gòu)如下圖:

服務器 IP 說明
Mycat 192.168.0.2 mycat服務器冯遂,連接數(shù)據(jù)庫時,連接此服務器
database1 192.168.0.3 物理數(shù)據(jù)庫1谒获,真正存儲數(shù)據(jù)的數(shù)據(jù)庫
database2 192.168.0.4 物理數(shù)據(jù)庫2蛤肌,真正存儲數(shù)據(jù)的數(shù)據(jù)庫

Mycat作為主數(shù)據(jù)庫中間件,肯定是與代碼弱關(guān)聯(lián)的批狱,所以代碼是不用修改的裸准,使用Mycat后,連接數(shù)據(jù)庫是不變的赔硫,默認端口是8066狼速。連接方式和普通數(shù)據(jù)庫一樣,如:jdbc:mysql://192.168.0.2:8066/

四:Mycat命令

# 前端啟動 打印一些信息 通過ctrl+c來停止
~ bin/mycat console
# 后臺啟動 幾乎不打印日志
~ bin/mycat start
# 打印的信息比較多
~ ./bin/startup_nowrap.sh
# 重新啟動
~ bin/mycat restart

# 查看mycat是否正在運行
~ bin/mycat status
# 停止mycat
~ bin/mycat stop

# 有時候啟動失敗是端口占用了,找到它向胡,殺死它恼蓬,重啟啟動
~ lsof -i:8066
~ kill -9 PID
~ bin/mycat start

五:Mycat的配置文件

server.xml文件

文件用途:

  • 配置系統(tǒng)相關(guān)參數(shù)
  • 配置哦用戶訪問權(quán)限
  • 配置SQL防火墻及SQL攔截功能
  • 幾乎保存了所有 mycat 需要的系統(tǒng)配置信息。

server.xml配置詳解

1僵芹、system 標簽
該標簽內(nèi)嵌套的所有 property 標簽都與系統(tǒng)配置有關(guān)处硬。

<system>
    <!-- mycat服務的端口號  -->  
    <property name="serverPort">3306</property>  
    <!-- mycat管理的端口號  -->
    <property name="managerPort">9066</property>
    <!-- 0為需要密碼登陸、1為不需要密碼登陸 ,默認為0拇派,設置為1則需要指定默認賬戶-->
    <property name="nonePasswordLogin">0</property> 
    <!-- mycat 服務監(jiān)聽的 IP 地址荷辕,默認值為 0.0.0.0 -->
    <property name="bindIp">0.0.0.0</property> 
    <!-- 前端寫隊列大小默認值2048 -->
    <property name="frontWriteQueueSize">4096</property>

    <property name="charset">utf8</property>
    <!-- 前端連接的初始化事務隔離級別,只在初始化的時候使用件豌,后續(xù)會根據(jù)客戶端傳遞過來的屬性對后端數(shù)據(jù)庫連接進行同步疮方。默認為 REPEATED_READ,設置值為數(shù)字默認 3茧彤。 -->
    <property name="txIsolation">3</property>
    <!-- 用于指定系統(tǒng)可用的線程數(shù)骡显,默認值為機器 CPU 核心線程數(shù) -->
    <property name="processors">8</property> 
    <!-- 指定連接的空閑超時時間。某連接在發(fā)起空閑檢查下曾掂,發(fā)現(xiàn)距離上次使用超過了空閑時間惫谤,那么這個連接會被回收,就是被直接的關(guān)閉掉珠洗。默認 30 分鐘溜歪,單位毫秒 -->
    <property name="idleTimeout">300000</property>
    <!-- SQL 執(zhí)行超時的時間,Mycat 會檢查連接上最后一次執(zhí)行 SQL 的時間许蓖,若超過這個時間則會直接關(guān)閉這連接蝴猪。默認時間為 300 秒,單位秒膊爪。 -->
    <property name="sqlExecuteTimeout">300</property>
    <!-- 1為開啟實時統(tǒng)計拯腮、0為關(guān)閉 -->
    <property name="useSqlStat">0</property>  
    <!-- 1為開啟全加班一致性檢測、0為關(guān)閉 -->
    <property name="useGlobleTableCheck">0</property>  
    <!-- 指定使用 Mycat 全局序列的類型蚁飒。 0 為本地文件方式,1 為數(shù)據(jù)庫方式萝喘,2 為時間戳序列方式淮逻,3 為分布式ZK ID 生成器,4 為 zk 遞增 id 生成 -->
    <property name="sequnceHandlerType">2</property>
    <!-- MyCat默認返回數(shù)據(jù)集大小 -->
    <property name="defaultMaxLimit">100</property>
    <!-- 指定 Mysql 協(xié)議可以攜帶的數(shù)據(jù)最大長度阁簸。默認 16M爬早。 -->
    <property name="maxPacketSize">104857600</property>
</system>

2、user 標簽
該標簽主要用于定義登錄 mycat 的用戶和權(quán)限启妹。示例定義了一個用戶筛严,用戶名為 test、密碼為123456饶米,可訪問的 schema 也只有 TESTDB 一個桨啃。

<user name="test">
    <property name="password">123456</property>  
    <property name="schemas">mycat1,mycat2,mycat3</property>  
    <property name="readOnly">false</property>  
</user>

<user name="root" defaultAccount="true">
    <property name="password">123456</property>  
    <property name="schemas">mycat1</property>  
    
    <!-- 表級 DML 權(quán)限設置 -->   
    <privileges check="false">
        <schema name="mycat1" dml="0110" >
            <table name="tb01" dml="0000"></table>
            <table name="tb02" dml="1111"></table>
        </schema>
    </privileges>       
</user>

用戶密碼加密

java -cp /usr/local/mycat/lib/Mycat-server-1.6.5-release.jar io.mycat.util.DecryptUtil 0:root:123456
# 啟用并更改密碼為密文车胡,0表示前端加密,root表示用戶名照瘾,123456為用戶密碼
<property name="usingDecrypt">1</property>
<property name="password">xasdfasdxSFA23</property>
# 1.5.1如下
[root@mycat01 lib]# java -cp /usr/local/mycat/lib/Mycat-server-1.5.1-RELEASE.jar org.opencloudb.util.DecryptUtil 0:root:password
a2SY+TZczkA9Fz9+QA3DoY7W7+Vp62782bp/qR1BNN8XjDXfiImfArARJyWdIcm8RMIU29p5FijneWPoHUyZgw==
# 重啟mycat生效

log4j2.xml文件

文件用途:

  • 配置輸出日志的格式
  • 配置輸出日志的級別

log4j2.xml配置詳解

<pattern>配置MyCat日志格式
完整配置 基本上不用改匈棘,只要知道格式這些就好

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d [%-5p][%t] %m %throwable{full} (%C:%F:%L) %n"/>
        </Console>

        <RollingFile name="RollingFile" fileName="${sys:MYCAT_HOME}/logs/mycat.log"
                     filePattern="${sys:MYCAT_HOME}/logs/$${date:yyyy-MM}/mycat-%d{MM-dd}-%i.log.gz">
        <PatternLayout>
                <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%t] (%l) - %m%n</Pattern>
            </PatternLayout>
            <Policies>
                <OnStartupTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="250 MB"/>
                <TimeBasedTriggeringPolicy/>
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <!--<AsyncLogger name="io.mycat" level="info" includeLocation="true" additivity="false">-->
            <!--<AppenderRef ref="Console"/>-->
            <!--<AppenderRef ref="RollingFile"/>-->
        <!--</AsyncLogger>-->
        <asyncRoot level="info" includeLocation="true">

            <!--<AppenderRef ref="Console" />-->
            <AppenderRef ref="RollingFile"/>

        </asyncRoot>
    </Loggers>
</Configuration>

<pattern>配置MyCat日志格式說明:

格式 說明
%d{yyyy-MM-dd HH:mm:ss.SSS} 表示日志的時間格式
%5p 表示輸出的日志級別
%t 日志中記錄線程名稱
%m 輸出代碼中指定的消息
%n 輸出一個回車換行符,window平臺為 “/r/n”析命,
linux平臺為 “\n”

level屬性配置MyCAT日志級別
級別:All < Trace < Debug < Info < Warn < Error < Fatal < OFF

<asyncRoot level="info" includeLocation="true">
  <!--<AppenderRef ref="Console" />-->
  <AppenderRef ref="RollingFile"/>
</asyncRoot>

rule.xml文件

文件用途:

  • 水平分表的時候才需要主卫,配置水平分片的分片規(guī)則
  • 指定分片規(guī)則和分片規(guī)則對應的分片函數(shù)

<tableRule>標簽配置表的分片規(guī)則
<function>配置表的分片算法

<tableRule name="hash-mod-4_id">
<!-- 分片規(guī)則名稱,整個配置文件唯一鹃愤,分片算法-分片節(jié)點數(shù)_分片列名 -->
    <rule>
        <!-- 分片使用的列字段簇搅,必須是實際存在的列 -->
        <columns>id</columns>
        <!-- 分片的算法,取自<function>的name屬性 --> 
        <algorithm>hash-mod-4</algorithm> 
    </rule>
</tableRule>

<function name="hash-mod-4" class="org.opencloudb.route.function.PartitionByHashMod">
<!-- 分片算法软吐,唯一瘩将;JAVA類路徑,1.6是"io.mycat.route.function.PartitionByHashMod"-->
        <property name="count">4</property>
        <!-- 不同分片算法屬性不一樣关噪,這里是將數(shù)據(jù)分成4份 -->
</function>

常用分片算法

  • 1鸟蟹、簡單取模-PartitionByMod:適用于整數(shù)類型的列,簡單取模存儲到后端節(jié)點-分片基數(shù)使兔,數(shù)據(jù)分布比較均勻
<tableRule name="customer_login">
    <rule>
        <columns>customer_id</columns>
        <!-- 這個列整形 -->
        <algorithm>mod-long</algorithm>
    </rule>
</tableRule>

<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
        <property name="count">2</property>
</function>
  • 2建钥、hash取模-PartitionByHashMod:適用非整形類型的列,如字符串虐沥、日期熊经,經(jīng)過hash后再進行取模,數(shù)據(jù)分布可能不均勻**
<tableRule name="customer_login">
    <rule>
        <columns>login_name</columns>
        <!-- 這個列是字符串 -->
        <algorithm>mod-long</algorithm>
    </rule>
</tableRule>

<function name="mod-long" class="io.mycat.route.function.PartitionByHashMod">
<!-- 分片算法不一樣 -->
        <property name="count">2</property>
</function>

前面兩個算法是利用mycat本身算法分片欲险,后面兩算法可以人為控制

  • 3镐依、枚舉分片-PartitionByFileMap:根據(jù)可能的枚舉值指定數(shù)據(jù)存儲的節(jié)點位置,需要額外增加mapfile文件天试,適用按地區(qū)來分片業(yè)務場景**

    mapFile記錄可能出現(xiàn)的值槐壳,及分片值對應的節(jié)點索引
<tableRule name="customer_login">
    <rule>
        <columns>login_name</columns>
        <!-- 這個列是字符串 -->
        <algorithm>filemap-int</algorithm>
    </rule>
</tableRule>

<function name="filemap-int" class="io.mycat.route.function.PartitionByFileMap">
<!-- 分片算法不一樣 -->
        <property name="mapFile">partition-hash-int.txt</property>
        <!--
        partition-hash-int.txt,存在conf目錄
        10000=0
        10001=1
        DEFAULT_NODE=0
        -->
        <property name="type">0</property>
        <!-- mapfile中枚舉key的類型喜每,0代表整形务唐,非0代表string -->
        <property name="DefaultNode">0</property>
        <!-- 大于等于0啟用默認節(jié)點,小于0不啟用默認節(jié)點 -->
</function>
  • 4带兜、字符串范圍取模-PartitionByPrefixPattern:截取固定長度字符串進行ascii碼求和枫笛,然后除以求蔫盗粒基數(shù)(配置文件指定)娇妓,確定數(shù)據(jù)存儲節(jié)點**
<tableRule name="customer_login">
    <rule>
        <columns>login_name</columns>
        <!-- 這個列是字符串 -->
        <algorithm>filemap-int</algorithm>
    </rule>
</tableRule>

<function name="filemap-int" class="io.mycat.route.function.PartitionByPrefixPattern">
<!-- 分片算法不一樣 -->
        <property name="patternValue">128/property>
        <!-- 求模基數(shù) -->
        <property name="mapFile">prefix-partition-pattern.txt</property>
        <!--
        partition-hash-int.txt逆皮,存在conf目錄
        0-63=0
        64-127=1
        -->
        <property name="PrefixLength">2</property>
        <!-- 截取的字符串長度 -->
</function>

schema.xml文件

文件用途:

  • 配置邏輯庫及邏輯表信息
  • 配置邏輯表所存儲的數(shù)據(jù)節(jié)點
  • 配置數(shù)據(jù)節(jié)點所對應的物理數(shù)據(jù)庫服務器信息

schema.xml配置詳解

1、定義邏輯庫

  • name:定義邏輯庫的名稱啊楚,名字不可重復吠冤,可以和物理庫不一樣。
  • checkSQLschema:判斷是否檢查發(fā)給mycat的sql是否含有庫名特幔。
  • sqlMaxLimit:限制前端應用的默認返回行數(shù)咨演,如果這里沒有配置,將使用server.xml中的參數(shù)值蚯斯,-1表示關(guān)閉Limit限制薄风。
<schema name="test" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn_test"> </schema>
<!-- 定義邏輯庫的名稱,可以和物理庫不一樣拍嵌,checkSQLschema-判斷是否檢查發(fā)給mycat的sql是否含有庫名遭赂,sqlMaxLimit-限制前端應用的默認返回行數(shù),如果這里沒有配置横辆,將使用server.xml中的參數(shù)值撇他,-1表示不限制返回函數(shù) -->

2、定義邏輯表

  • name:定義邏輯表的名稱狈蚤,必須和物理表名一致且唯一困肩。
  • primaryKey:定義邏輯表主鍵,和物理表主鍵一致脆侮,可以緩存主鍵信息锌畸,提高查詢性能。
  • dataNode:指定物理表存儲的物理節(jié)點靖避;物理節(jié)點順序和rule.xml節(jié)點順序必須一致潭枣;。
  • rule:指定分片規(guī)則幻捏,這里的customer_login分配規(guī)則名稱對應rule.xml的tableRule名稱
<table name="customer_login" primaryKey="customer_id" dataNode="logindb01,logindb02" rule="customer_login"/>
<!-- 定義邏輯表的名稱盆犁,必須和物理表名一致;定義邏輯表主鍵篡九,和物理表主鍵一致谐岁,可以緩存主鍵信息,提高查詢性能榛臼;指定物理表存儲的物理節(jié)點伊佃;物理節(jié)點順序和rule.xml節(jié)點順序必須一致; 指定分片規(guī)則讽坏,這里的customer_login分配規(guī)則名稱對應rule.xml的tableRule名稱-->

3、定義物理數(shù)據(jù)庫

  • name:物理節(jié)點名稱例证,唯一路呜。
  • dataHost:定義分片所在的物理主機。
  • database:物理數(shù)據(jù)庫名稱。
<dataNode name="dn_test" dataHost="dh_10.151" database="test" />
<!-- 物理節(jié)點名稱胀葱,唯一漠秋;mysql集群的名稱;集群中物理數(shù)據(jù)庫名稱 -->

4抵屿、定義mysql集群信息

<dataHost name="dh_10.151" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
<!-- mysql集群的名稱庆锦,唯一;mycat與后端數(shù)據(jù)庫的最大轧葛、初始化連接數(shù)搂抒; -->
        <heartbeat>show slave status</heartbeat>
        <!-- <heartbeat>select user()</heartbeat> -->
        <!-- can have multi write hosts -->
        <writeHost host="Master_vip" url="172.16.10.151:3306" user="root" password="123456">
                <!-- can have multi read hosts -->
                <readHost host="S1_10.153" url="172.16.10.153:3306" user="root" password="123456" />
                <readHost host="S2_10.154" url="172.16.10.154:3306" user="root" password="123456" />
        </writeHost>
        <!-- <writeHost host="hostM2" url="localhost:3306" user="root" password="123456"/> -->
</dataHost>

# balance
# "0" 不開啟讀寫分離機制,適用只有一個mysql數(shù)據(jù)庫實例尿扯,或者讀寫敏剛應用
# "1" 全部的readhost和stand by writehost參與select語句負載均衡求晶,適用雙主雙從實例
# "2" 所有的readhost和writehost都參與select語句負載均衡,適用寫壓力不大的應用場景
# "3" 所有readhost參與select語句的負載均衡衷笋,適用一主多從實例架構(gòu)

# writeType
# "0" 默認值芳杏,所有的寫請求落在第一個writehost上,當?shù)谝粋€writehost宕機后辟宗,才會選擇第二個writehost主機
# "1" 隨機將write請求分發(fā)到writehost主機上爵赵,有風險,適用PXC多寫集群

# dbType
# 可以用于mongodb泊脐,用jdbc驅(qū)動

# switchType 寫數(shù)據(jù)庫如何進行切換
# "1" 當寫主機不可用空幻,自動切換到下一個可用寫節(jié)點
# "-1" 關(guān)閉自動切換寫主機功能,適用MHA管理的集群


switchType="-1,1,2,3"
--是否啟用主從切換
-1:表示不啟用主從切換晨抡;
1:為默認值氛悬,自動切換;
2:基于主從同步的狀態(tài)耘柱,決定是否切換如捅,與show slave status心跳對應;
3:基于多住galary集群切換调煎,與show status like 'wsrep%'對應镜遣;


<heartbeat>show slave status</heartbeat> 
--心跳檢測語句,一般為select user();
如果是switchType=2士袄,基于主從同步狀態(tài)決定是否切換悲关,則心跳設為show slave status;
如果是switchType=3,則心跳設為show status like 'wsrep%'娄柳;

5寓辱、關(guān)于balance補充

  • 1、一主一從情況下赤拒,為1有可能無法select 從庫秫筏,讀寫均落在主庫
  • 2诱鞠、一主情況下,主庫宕機这敬,所有從庫無法通過mycat連接
  • 3航夺、一主多從,balance設為1崔涂,select均在從庫
  • 4阳掐、一主一從,balance設為3冷蚂,select在從庫 通常使用該項
  • 5缭保、一主一從,balance設為2帝雇,select會落在從庫

未完待續(xù)涮俄。。尸闸。彻亲。。吮廉。

參考:
http://www.mycat.io/

http://www.mycat.io/document/mycat-definitive-guide.pdf

https://www.cnblogs.com/fyy-hhzzj/p/9044775.html

https://www.cnblogs.com/kingsonfu/p/10627802.html

https://blog.csdn.net/vbirdbest/article/details/83514361

https://blog.csdn.net/weixin_41043145/article/details/102753351

https://www.cnblogs.com/jenvid/p/10180435.html

https://blog.csdn.net/qq_30889373/article/details/103007101

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末苞尝,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子宦芦,更是在濱河造成了極大的恐慌宙址,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件调卑,死亡現(xiàn)場離奇詭異抡砂,居然都是意外死亡,警方通過查閱死者的電腦和手機恬涧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門注益,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人溯捆,你說我怎么就攤上這事丑搔。” “怎么了提揍?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵啤月,是天一觀的道長。 經(jīng)常有香客問我劳跃,道長谎仲,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任刨仑,我火速辦了婚禮郑诺,結(jié)果婚禮上绞呈,老公的妹妹穿的比我還像新娘。我一直安慰自己间景,他們只是感情好,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布艺智。 她就那樣靜靜地躺著倘要,像睡著了一般。 火紅的嫁衣襯著肌膚如雪十拣。 梳的紋絲不亂的頭發(fā)上封拧,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機與錄音夭问,去河邊找鬼泽西。 笑死,一個胖子當著我的面吹牛缰趋,可吹牛的內(nèi)容都是我干的捧杉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼秘血,長吁一口氣:“原來是場噩夢啊……” “哼味抖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起灰粮,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤仔涩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后粘舟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體熔脂,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年柑肴,在試婚紗的時候發(fā)現(xiàn)自己被綠了霞揉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡嘉抒,死狀恐怖零聚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情些侍,我是刑警寧澤隶症,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站岗宣,受9級特大地震影響蚂会,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜耗式,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一胁住、第九天 我趴在偏房一處隱蔽的房頂上張望趁猴。 院中可真熱鬧,春花似錦彪见、人聲如沸儡司。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捕犬。三九已至,卻和暖如春酵镜,著一層夾襖步出監(jiān)牢的瞬間碉碉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工淮韭, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留垢粮,地道東北人。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓靠粪,卻偏偏與公主長得像蜡吧,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子占键,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 1. 什么是mycat斩跌? 2. mycat可以應用在什么場景? 3. 什么樣的表需要進行分片捞慌? 答:超過1000萬...
    bernierayxu閱讀 3,668評論 0 1
  • 先上官方文檔: Mycat-doc Mycat 權(quán)威指南 常用配置文件間的關(guān)系 由上圖可以看到 Mycat 的核心...
    端碗吹水閱讀 2,203評論 0 1
  • mycat簡介 mycat是一個數(shù)據(jù)庫中間件啸澡,可以理解為一個數(shù)據(jù)庫的代理層袖订。 mycat的重要配置文件包括serv...
    撈月亮的阿湯哥閱讀 11,730評論 0 0
  • 一、學習與實踐 1.付出不亞于任何人的努力 2.要謙虛嗅虏,不要驕傲 3.要每天反省 4.活著洛姑,就要感謝 5.積善行,...
    grace2039閱讀 178評論 0 0
  • The day before yestoday,l don't have the concept of the m...
    寄與已閱讀 275評論 1 1