天天看點

mycat讀寫分離介紹安裝mycat實作mysql負載均衡

事先準備好兩台及以上資料庫伺服器

mycat支援特性如(官網mycat.io,以下是官網介紹的支援特性):

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預編譯指令(1.6),非堆記憶體(Direct Memory)聚合計算(1.6)

PostgreSQL的native協定(1.6)。mysql和oracle存儲過程,out參數、多結果集傳回(1.6)。zookeeper協調主從切換、zk序列、配置zk化(1.6)。庫内分表(1.6),叢集基于ZooKeeper管理,線上更新,擴容,智能優化,大資料處理(2.0)

安裝好jdk的環境,mycat啟動需要依賴jdk運作,jdk下載下傳後解壓到相應目錄下

jdk變量如下示例,可根據jdk版本修改變量路徑,将PATH變量路徑寫入/etc/profile檔案中

下載下傳mycat安裝包,解壓後直接移動到/usr/local/目錄下

建立mycat運作的使用者群組,并把mycat的目錄給予mycat使用者所屬主所屬組權限

mycat作為中間件并不存儲任何資料,後端連結mysql實體伺服器,schem.xml用來連結後端的mysql伺服器的(檔案可配置分庫分表政策,分片節點也在其中)

修改mycat配置檔案/usr/local/mycat/conf/schema.xml

在配置檔案的vriteHost标簽中配置mysql的位址、使用者名和密碼

<readHost host=>中配置的是從節點的資料庫連接配接使用者和密碼,我們現在先隻在writeHost中配置(這台伺服器安裝了mysql)

所有讀操作配置設定到readhost上、負載均衡發送到第一個writehost,第一個無法提供服務後會分發到第二個writehost上、

schema.xml中配置負載均衡需要注意的地方

此處有三點需要注意: 

writeType屬性,負載均衡類型,配置項有3類

switchType屬性

mycat支援雙主多從,可以配置兩個writeHost節點,多個readHost節點

配置mycat的使用者密碼,在檔案中找到user name标簽中配置mycat的使用者名和密碼,儲存

server.xml跟讀寫分離政策關系不大,但是需要使用此檔案來配置連接配接mycat使用者的權限,這裡簡單配置使用者和密碼

第一個user是指定主資料庫的登入寫入使用者名和密碼

第二個user指定從資料庫的讀取使用者名和密碼(可能不需要指定)

啟動mycat服務 /usr/locar/mycat/bin/mycat start

檢視mycat啟動監聽的端口,如果監聽到8066端口,說明mycat啟動成功               

mycat服務驗證

mycat的主從延時切換技術 

Mycat1.4開始支援 MySQL主從複制狀态綁定的讀寫分離機制,讓讀更加安全可靠,配置如下: MyCAT心跳檢查語句配置為 show slave status ,dataHost 上定義兩個新屬性: switchType=”2” 與slaveThreshold=”100”,此時意味着開啟MySQL主從複制狀态綁定的讀寫分離與切換機制,Mycat心跳機制通過檢測 show slave status 中的 “Seconds_Behind_Master”, “Slave_IO_Running”, “Slave_SQL_Running” 三個字段來确定目前主從同步的狀态以及Seconds_Behind_Master 主從複制時延, 當Seconds_Behind_Master>slaveThreshold 時,讀寫分離篩選器會過濾掉此Slave機器,防止讀到很久之前的舊資料,而當主節點當機後,切換邏輯會檢查Slave上的Seconds_Behind_Master是否為0,為0時則表示主從同步,可以安全切換,否則不會切換。

登入mycat的操作端 mysql -uroot -ppwd@123 -h127.0.0.1 -P8066 -DTESTDB

建立測試用的表

這裡報錯Invalid DataSource:1。修改server.xml檔案,指定主資料庫寫入的使用者名和密碼

報錯 Invalid DataSource:0 

需要建立schema.xml中的一個配置裡的三個資料庫,是沒有這三個庫造成的,退出mycat在mysql終端裡進行建立庫操作

建立mycat所需的三個庫(schema.xml配置檔案中指定的庫)

在mysql主庫裡建立好三個庫後,登入mycat,執行建立表操作,可見成功建立一個新表

mycat無法與mysql讀寫問題解決完成後

上述建立好了一個表後,進行sql查詢,中間件服務mycat建議不要和master資料庫再一個伺服器上,驗證master停止mysql服務後,mycat無法提供正常的sql讀取操作

在所有從伺服器上建立master授權通路的使用者,用于master上的mycat查詢資料使用,授權對象是192.168.1.234,有多個從的話都需要授權192.168.1.234通路

修改mycat的schema.xml配置檔案,在readhost中指定從的授權使用者

在其中一個slave從上建立一個master主上沒有的資料,真實環境部署不建議這麼操作

首先檢視master主上的travelrecord的表内容,确認和slave從上資料不一緻

在slave中插入一條master上沒有的資料,檢視slave從上的表内容

這裡注意master中沒有<code>www.abcd.com這條資料,如果執行查詢操作,master不會給出這個查詢的結果</code>

在master上登入mycat,多次查詢資料

可以從mycat的查詢結果中得到顯而易見的結果,讀資料會從slave上讀取

繼續閱讀