DB Proxy,數據庫中間件
mycat功能
1. 讀寫分離 M-S-S M-M-S-S
2. 負載均衡 Galera Cluster
3. 支持數據的分片自動路由與聚合
同類產品
MySQL Proxy MySQL官方
Atlas 奇虎360
DBProxy 美團點評
cober 阿里巴巴
MyCat 阿里巴巴
Mycat概述
Mycat是一個開源的分佈式數據庫系統,不一樣於oracle和mysql,Mycat並無存儲引擎,可是Mycat實現了mysql協議,前段用戶能夠把它當作一個Proxy。其核心功能是分表分庫,即將一個大表水平分割爲N個小表,存儲在後端mysql存儲引擎裏面。最新版本的Mycat不只支持mysql,還能夠支持MS SqlServer,Oracle,DB2等關係型數據庫,並且還支持MongoDB這種NoSQL。Mycat對調用者屏蔽了後端存儲具體實現。
Mycat的原理是先攔截用戶的SQL語句並作分析:分片分析,路由分析,讀寫分離分析,緩存分析等,再對將該SQL語句發送到指定規則的數據庫。最終將存儲引擎返回的結果返回給用戶.
架構: 一臺MyCat LB 4臺mysql servers(服務器) 作成M-M-S-S 前端
JRE ( Java Runtime Environment)
是java運行時環境,包含了java虛擬機,java基礎類庫。是使用java語言編寫的程序運行所須要的軟件環境,是提供給想運行java程序的用戶使用的。
JDK (JDK:Java Development Kit )
JDK顧名思義是java開發工具包,是程序員使用java語言編寫java程序所需的開發工具包,是提供給程序員使用的。JDK包含了JRE,同時還包含了編譯java源碼的編譯器javac,還包含了不少java程序調試和分析的工具:jconsole,jvisualvm等工具軟件,還包含了java程序編寫所需的文檔和demo例子程序。若是你須要運行java程序,只需安裝JRE就能夠了。若是你須要編寫java程序,須要安裝JDK。
下載: jdkmycat對於 jdk的版本沒有過高的的要求 8 9 10 的版本都行
[root@localhost ~]# jdk-10.0.1_linux-x64_bin.tar.gz -C /usr/local
[root@localhost ~]# ln -s /usr/local/jdk-10.0.1/ /usr/local/java
[root@localhost ~]# vim /etc/profile #添加環境變量
/etc/profile最後面添加:
JAVA_HOME=/usr/local/java/bin
PATH=$PATH:$JAVA_HOME
export JAVA_HOME PATH
或者
[root@localhost ~]# vim /etc/profile
[root@localhost ~]# source /etc/profile #刷新環境變量
[root@localhost ~]# env |grep java #驗證環境變量
[root@localhost ~]# java -version #查詢java版本,查不出來就是環境變量設置有問題
java端口號9066
下載:mycat[root@localhost ~]# tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
[root@localhost ~]# ls /usr/local/mycat/
java
[root@localhost ~]# vim /usr/local/mycat/conf/server.xml
註釋掉多餘用戶node
啓動mycat管理員 登陸mycat的帳戶
mysql
請務必先備份此文件 schema.xml
[root@localhost ~]# vim /usr/local/mycat/conf/schema.xml
上面這個是我本身的配置linux
這個schema 的 name="mycat" 和 bataNode 的database="mycat" 再加上前端的mycat 必須一致,不然會報錯。
schema name:mycat維護的集羣名稱。
datanode:後方節點羣的名稱。
datahost:後方節點羣的主機名稱。
writehost:寫主機
readhost:讀主機
小技巧!!!!倒着看。通常的腳本倒着看都能看懂.
關於屬性(參數)的介紹:
負載均衡類型:
1. balance="0", 不開啓讀寫分離機制,全部讀操做都發送到當前可用的 writeHost 上。
2. balance="1", 所有的 readHost 與 stand by writeHost 參與 select 語句的負載均衡,
簡單的說,當雙主雙從模式(M1->S1,M2->S2,而且 M1 與 M2 互爲主備),正常狀況下,M2,S1,S2 都參與 select 語句的負載均衡。
3. balance="2", 全部讀操做都隨機的在 writeHost、readhost 上分發。
4. balance="3", 全部讀請求隨機的分發到 wiriterHost 對應的 readhost 執行,writerHost 不負擔讀壓力,注意 balance=3 只在 1.4 及其之後版本有,1.3 沒有。
writeType 屬性:
1. writeType="0", 全部寫操做發送到配置的第一個 writeHost,
第一個掛了切到還生存的第二個writeHost,
從新啓動後已切換後的爲準,切換記錄在配置文件中:dnindex.properties .
2. writeType="1",全部寫操做都隨機的發送到配置的 writeHost。
3. writeType="2",沒實現。
程序員
M-M-S-S 準備Mycat鏈接的用戶及權限:
再其中一個M 服務器上設置,其他都會同步
mysql > grant all on *.* to 'mycatproxy'@'192.168.0.118' identified by 'WJW952945084@qq.com';
sql
在mycat服務器上:
root@localhost ~]# /usr/local/mycat/bin/mycat start
Starting Mycat-server...
啓動成功,不然就是配置Mycat後端語法錯誤。ps:這裏啓動成功並不能說明什麼,是一種假象。你配置有問題它同樣也能起來。
[root@localhost ~]# ss -tnlp |grep java #監測端口是否啓動
[root@localhost ~]# ps aux | grep mycat #檢測進程是否啓動
爲了顯示效果在mycat服務器上安裝一個 mariadb查看效果
[root@localhost ~]# yum install -y mariadb
[root@localhost ~]# mysql -h10.18.43.101 -uroot -p123456 -P8066
MySQL [(none)]> show databases;
+----------+
| DATABASE |
+----------+
| mycat |
+----------+
1 row in set (0.00 sec)
!注意後方mysql羣中應該建立該庫
在mycat上
select * from tianyun.t1;
insert into tianyun.t1 values(3);
查看效果
最後報錯就去查詢 mycat.log 日誌
[root@localhost ~]# tailf /usr/local/mycat/logs/mycat.log
多庫時設置mycat思路:
數據庫