Mycat介紹
Mycat,一個(gè)開源的分布式數(shù)據(jù)庫中間件,實(shí)現(xiàn)了MySQL協(xié)議劳殖,前端用戶可以把它看作是一個(gè)數(shù)據(jù)庫代理彤委,用MySQL客戶端工具和命令行訪問鞭铆;而后端可以用MySQL原生協(xié)議與多個(gè)MySQL服務(wù)器通信,也可以用JDBC協(xié)議與大多數(shù)主流數(shù)據(jù)庫服務(wù)器通信,其核心功能是分表分庫车遂,即將一個(gè)大表水平分割為N個(gè)小表封断,存儲(chǔ)在后端MySQL服務(wù)器里或者其他數(shù)據(jù)庫里。Mycat官網(wǎng):http://www.mycat.org.cn/
MySQL主從復(fù)制配置
主從復(fù)制是基于MySQL的replication機(jī)制實(shí)現(xiàn)舶担,可參考另一篇文章:http://www.reibang.com/p/eb0ac29c0ccc
這篇文章是講述MySQL的單向主從復(fù)制坡疼,只要把slave節(jié)點(diǎn)也按照master節(jié)點(diǎn)進(jìn)行配置,就可以實(shí)現(xiàn)雙向的主從復(fù)制衣陶。
Mycat主從互備配置
從官網(wǎng)下載Mycat柄瑰,我用的是1.6 windows版本。Mycat配置讀寫分離與主從互備只需修改conf目錄下的server.xml與schema.xml文件剪况。
server.xml中添加連接Mycat的用戶名密碼:
<user name="mycat">
<property name="password">123456</property>
<property name="schemas">TESTDB</property>
</user>
其中教沾,TESTDB要和schema.xml文件配置的schema對(duì)應(yīng),用戶名和密碼可任意命名译断。
schema.xml配置:
hostM1:寫操作主節(jié)點(diǎn)
hostS1:讀操作節(jié)點(diǎn)(從節(jié)點(diǎn))
hostM2:寫操作備節(jié)點(diǎn)授翻,和讀操作節(jié)點(diǎn)是同一臺(tái)MySQL物理服務(wù)器
參數(shù)balance設(shè)置
balance決定了哪些MySQL服務(wù)器參與到讀操作的負(fù)載均衡中。
0:表示不開啟讀寫分離
1:表示全部的readHost與standby writeHost參與select語句的負(fù)載均衡
2:則表示所有的writeHost不參與負(fù)載均衡镐作。
這里有一個(gè)細(xì)節(jié)藏姐,readHost是從屬于writeHost的,意味著它從那個(gè)writeHost獲取同步數(shù)據(jù)该贾,因此羔杨,當(dāng)它所屬的writeHost宕機(jī)了,則它也不會(huì)再參與到讀寫分離杨蛋,即“不工作了”兜材,這是因?yàn)榇藭r(shí),它的數(shù)據(jù)已經(jīng)“不可靠”了逞力∈锕眩基于這個(gè)考慮,目前mycat 1.3和1.4版本中寇荧,若想支持MySQL一主一從的標(biāo)準(zhǔn)配置举庶,并且在主節(jié)點(diǎn)宕機(jī)的情況下,從節(jié)點(diǎn)還能讀取數(shù)據(jù)揩抡,則需要在Mycat里配置為兩個(gè)writeHost并設(shè)置banlance=1户侥。
參數(shù)writeType設(shè)置
0:表示所有寫操作發(fā)送到第一個(gè)writeHost,第一個(gè)宕機(jī)了切換到可用的第二個(gè)writeHost
1:表示所有寫操作都隨機(jī)的發(fā)送到所有的writeHost
2:貌似還沒實(shí)現(xiàn)
參數(shù)switchType設(shè)置
-1:表示不自動(dòng)切換
1:默認(rèn)值峦嗤,自動(dòng)切換
2:基于MySQL主從同步的狀態(tài)決定是否切換
當(dāng)switchType="2" 與slaveThreshold="100"蕊唐,意味著開啟MySQL主從復(fù)制狀態(tài)綁定的讀寫分離與切換機(jī)制,Mycat心跳機(jī)制通過檢測 show slave status 中的 "Seconds_Behind_Master", "Slave_IO_Running", "Slave_SQL_Running" 三個(gè)字段來確定當(dāng)前主從同步的狀態(tài)以及Seconds_Behind_Master主從復(fù)制時(shí)延烁设,當(dāng)Seconds_Behind_Master > slaveThreshold時(shí)替梨,讀寫分離篩選器會(huì)過濾掉此Slave機(jī)器,防止讀到很久之前的舊數(shù)據(jù),而當(dāng)主節(jié)點(diǎn)宕機(jī)后副瀑,切換邏輯會(huì)檢查Slave上的Seconds_Behind_Master是否為0弓熏,為0時(shí)則表示主從同步,可以安全切換俗扇,否則不會(huì)
切換硝烂。
注意:要確保連接的MySQL用戶擁有執(zhí)行心跳檢測語句的權(quán)限
以上內(nèi)容參考自《Mycat權(quán)威指南》
至此,基于Mycat的MySQL讀寫分離與主從互備的高可用數(shù)據(jù)庫集群已配置完成铜幽,可使用命令行工具連接Mycat進(jìn)行測試:
mysql -hlocalhost -P8066 -umycat -p123456 -DTESTDB
只要writeHost不同時(shí)宕機(jī)滞谢,這個(gè)數(shù)據(jù)庫集群方案都是可用的。
注意:測試時(shí)除抛,插入的數(shù)據(jù)最好能區(qū)分是哪臺(tái)MySQL服務(wù)器的狮杨,比如使用某個(gè)字段插入@@hostname 來進(jìn)行區(qū)分。