mysql讀寫分離實現 jdk+mycat環境部署
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 LB 4臺mysql servers(服務器) 做成M-M-S-S
開始配置環境:
首先準備好mysql的主從復制,我的是M-M-S-S (雙主雙從)再接著配置java環境,最後部署mycat
一、配置java環境
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。
下載: jdk
mycat對於 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/
二、配置mycat前端
配置mycat前端
[root@localhost ~]# vim /usr/local/mycat/conf/server.xml
註釋掉多余用戶
啟動mycat管理員 登錄mycat的賬戶
配置mycat後端
請務必先備份此文件 schema.xml
[root@localhost ~]# vim /usr/local/mycat/conf/schema.xml
上面這個是我自己的配置
這個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",沒實現。
三、配置後端mysql群
M-M-S-S 準備Mycat連接的用戶及權限:
再其中一個M 服務器上設置,其余都會同步
mysql > grant all on *.* to 'mycatproxy'@'192.168.0.118' identified by '[email protected]';
四、啟動MyCat
在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思路:
mysql讀寫分離實現 jdk+mycat環境部署