您好,登錄后才能下訂單哦!
這篇文章主要介紹了如何利用mycat實現mysql數據庫讀寫分離,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
什么是MyCAT
一個徹底開源的,面向企業應用開發的大數據庫集群
支持事務、ACID、可以替代MySQL的加強版數據庫
一個可以視為MySQL集群的企業級數據庫,用來替代昂貴的Oracle集群
一個融合內存緩存技術、NoSQL技術、HDFS大數據的新型SQL Server
結合傳統數據庫和新型分布式數據倉庫的新一代企業級數據庫產品
一個新穎的數據庫中間件產品
MyCAT關鍵特性
支持SQL92標準
支持MySQL、Oracle、DB2、SQL Server、PostgreSQL等DB的常見SQL語法
遵守MySQL原生協議,跨語言,跨平臺,跨數據庫的通用中間件代理。
基于心跳的自動故障切換,支持讀寫分離,支持MySQL主從,以及galera cluster集群。
支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster
基于Nio實現,有效管理線程,解決高并發問題。
支持數據的多片自動路由與聚合,支持sum,count,max等常用的聚合函數,支持跨庫分頁。
支持單庫內部任意join,支持跨庫2表join,甚至基于caltlet的多表join。
支持通過全局表,ER關系的分片策略,實現了高效的多表join查詢。
支持多租戶方案。
支持分布式事務(弱xa)。
支持XA分布式事務(1.6.5)。
支持全局序列號,解決分布式下的主鍵生成問題。
分片規則豐富,插件化開發,易于擴展。
強大的web,命令行監控。
支持前端作為MySQL通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。
支持密碼加密
支持服務降級
支持IP白名單
支持SQL黑名單、SQL注入攻擊攔截
支持prepare預編譯指令
支持非堆內存(Direct Memory)聚合計算
支持PostgreSQL的native協議
支持MySQL和oracle存儲過程,out參數、多結果集返回
支持zookeeper協調主從切換、zk序列、配置zk化
支持庫內分表
集群基于ZooKeeper管理,在線升級,擴容,智能優化,大數據處理(2.0開發版)。
1、這里是在mysql主從復制實現的基礎上,利用mycat做讀寫分離,架構圖如下:
2、Demo
2.1 在mysql master上創建數據庫創建db1
2.2 在數據庫db1創建表student
同時,因為配置好了mysql主從復制,在mysql slave上也有一樣數據庫和表
2.3 編輯 mycat的配置文件server.xml
<!--表示mycat的登錄用戶名--> <user name="test"> <!--表示mycat的登錄密碼--> <property name="password">test</property> <!--表示mycat的邏輯數據庫名稱,可以自定義--> <property name="schemas">TESTDB</property> </user> <user name="user"> <property name="password">user</property> <property name="schemas">TESTDB</property> <property name="readOnly">true</property> </user>
2.4編輯mycat的配置文件schema.xml
<!--TESTDB表示mycat的邏輯數據庫名稱 當schema節點沒有子節點table的時候,一定要有dataNode屬性存在(指向mysql真實數據庫), --> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> </schema> <!--指定master的數據庫db1--> <dataNode name="dn1" dataHost="192.168.0.4" database="db1" /> <!--指定mastet的ip --> <dataHost name="192.168.0.4" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <!--表示mysql的心跳狀態--> <heartbeat>select user()</heartbeat> <!-- master負責寫 --> <writeHost host="hostM1" url="192.168.0.4:3306" user="root" password="admin"> <!--slave負責讀--> <readHost host="hostS2" url="192.168.0.5:3306" user="root" password="admin" /> </writeHost> </dataHost>
到這里,利用mycat做讀寫分離就已經配置完了
注意 dataHost節點的下面三個屬性
balance, switchType, writeType
balance="0", 不開啟讀寫分離機制,所有讀操作都發送到當前可用的writeHost上。
balance="1",全部的readHost與stand by writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,并且M1與M2互為主備),正常情況下,M2,S1,S2都參與select語句的負載均衡。
balance="2",所有讀操作都隨機的在writeHost、readhost上分發。
balance="3",所有讀請求隨機的分發到writeHost下的readhost執行,writeHost不負擔讀壓力
writeType表示寫模式
writeType="0",所有的操作發送到配置的第一個writehost
writeType="1",隨機發送到配置的所有writehost
writeType="2",不執行寫操作
switchType指的是切換的模式,目前的取值也有4種:
switchType=‘-1‘ 表示不自動切換
switchType=‘1‘ 默認值,表示自動切換
switchType=‘2‘ 基于MySQL主從同步的狀態決定是否切換,心跳語句為show slave status
switchType=‘3‘基于MySQL galary cluster的切換機制(適合集群)(1.4.1),心跳語句為show status like ‘wsrep%‘。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“如何利用mycat實現mysql數據庫讀寫分離”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。