標籤:讀寫分離 als 從庫 通過 password 添加 一個 服務 自動
一 簡介 今天咱們來聊聊mycat的一個功能 讀寫分離
二 前沿: mycat的核心功能之一,讀寫分離的測試
三
1讀寫分離的需求
1 將業務的讀需求定向到從庫去查詢,減輕主庫壓力
2 將業務的特殊讀需求定向到主庫去查詢
2 讀寫分離要考慮的問題
1 當從庫出現問題時踢出有問題的從庫(從庫down機或者複製停止)
2 當從庫出現延遲時踢出有問題的從庫(單個從庫延遲),但是當從庫正常時,從庫節點從新提供讀服務
3 當所有提供讀取的從節點的從庫出現問題時,查詢指向主庫,當從庫恢複正常時,從庫節點從新提供讀服務
四 測試與配置
一 環境配置 與初步測試
1 修改schemal.xml設定檔
在<writeHost>標籤內添加
<readHost host="readM1" url="1.1.1.2:3306" user="mycat" password="mycat"> </readHost>
<heartbeat>show slave status</heartbeat> 監控主從服務
2 登入管理服務連接埠9066
reload @@config 重新載入設定檔
3 登入執行服務連接埠8086
1 解析資料查詢語句
explain select * from people
| DATA_NODE | SQL |
| db1 | SELECT * FROM people LIMIT 100 |
| db2 | SELECT * FROM people LIMIT 100 |
在這裡我們也可以發現 我們搜全表資料 自動加上了limit 100
2 執行查詢語句並查詢日誌
1 select * from people
2 過濾相關日誌可發現以下內容
threadId=28911, charset=utf8, txIsolation=3, autocommit=true, attachment=db1{SELECT *
FROM people
WHERE id > 151
LIMIT 100}, respHandler=SingleNodeHandler [node=db1{SELECT *
FROM people
WHERE id > 151
LIMIT 100}, packetId=17], host=1.1.1.2, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]
3 select操作解析到從庫,證明讀寫分離完成
二 類比故障1
1 從庫stop slave
2 觀察mycat日誌
觀察日誌發現 found MySQL master/slave Replication err !!
3 執行查詢並過濾相關日誌
threadId=28911, charset=utf8, txIsolation=3, autocommit=true, attachment=db1{SELECT *
FROM people
WHERE id > 151
LIMIT 100}, respHandler=SingleNodeHandler [node=db1{SELECT *
FROM people
WHERE id > 151
LIMIT 100}, packetId=17], host=1.1.1.1, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]
這裡變成了主庫IP,查詢成功
4 從庫 start slave
5 再次執行查詢並過濾日誌,發現slave繼續提供讀操作
三 類比故障2
1 從庫stop slave
2 從庫設定延時庫
3 從庫start slave
4 觀察mycat日誌
觀察日誌發現 found MySQL master/slave Replication delay !!
5 執行查詢並過濾相關日誌
threadId=28911, charset=utf8, txIsolation=3, autocommit=true, attachment=db1{SELECT *
FROM people
WHERE id > 151
LIMIT 100}, respHandler=SingleNodeHandler [node=db1{SELECT *
FROM people
WHERE id > 151
LIMIT 100}, packetId=17], host=1.1.1.1, port=3306, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]
這裡變成了主庫IP,查詢成功
6 將從庫恢複正常
7 再次執行查詢並過濾日誌,發現slave繼續提供讀操作
四 特殊需求
需求說明:一些sql需要強制走主庫
範例說明: /*#mycat:db_type=master*/ select * from people 根據註解選擇資料來源
具體說明:從mycat 1.6開始,對於一些特殊的sql語句,採用註解實現,這裡的例子僅僅是一個簡單的單表查詢,複雜語句並未做測試
五 總結
通過測試我們可以發現,mycat完美的支援了讀寫需求的完全功能,通過註解可以實現特殊的sql查詢需求,當然這隻是測試,僅供參考哦
這就是今天的成果
mysql 第十七篇文章~mycat的讀寫分離