一、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/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