mycat資料庫集群系列之mycat讀寫分離安裝配置
最近在梳理資料庫集群的相關操作,現在花點時間整理一下關於mysql資料庫集群的操作總結,恰好你又在看這一塊,供一份參考。本次系列終結大概包括以下內容:多資料庫安裝、mycat部署安裝、資料庫之讀寫分離主從複製、資料庫之雙主多重、資料庫分庫分表。每一個點,有可能會對應一篇或者多篇文章,由於還要繼續上班工作,所以本系列分享預計持續時間需要10天左右,有興趣的您可以持續關注。我是一個菜鳥,如果寫的不好的地方,望多多指點和包涵。
好了,直接進入本次的主題:mycat讀寫分離模式配置安裝。
一、簡介
mycat是幹嘛的呢?首先我們來簡單的了解一下mycat到底是幹嘛的:MyCat 是目前最流行的基於 java 語言編寫的資料庫中間件,是一個實現了 MySQL 協議 的伺服器,前端用戶可以把它看作是一個資料庫代理,MyCat 發展到目前的版本,已經不是一個單純的 MySQL 代理了,它的後端可以支援MySQL、SQL Server、Oracle、DB2、PostgreSQL 等主流資料庫,也支援 MongoDB 這種新型NoSQL 方式的存儲,未來還會支援更多類型的存儲。
簡單的說,Mycat是一個資料庫集群操作中間件,實現了資料庫的:讀寫分離、主從切換、分庫分表等業務,但是對我們程式設計師在使用上來說,是封裝的,和平時使用單庫單表操作無差別。其它的就不在此忽悠了,網上介紹多如牛毛。
二、環境準備
1、JDK安裝
前面已經介紹了mycat是用java寫的,所以第一個環境要求就是要jdk環境,並且jdk是1.8+。
Jdk安裝包下載,我最開始在官網下載,下載的速度超慢,今天就不推薦官網下載地址了,今天給大家推薦的是中國華為大佬提供的下載地址,當然上麵包的更新速度沒有官網及時,但是夠用了,目前是13+。
直接上地址://repo.huaweicloud.com/java/jdk/13+33/?C=M&O=D
下載速度但是杠杠的,分分鐘下載完畢:
根據自己的電腦環境,選擇對應的包下載即可,由於本次是在win10上實操,所我現在的是win-64。
下載完畢後,直接點擊exe安裝包,傻瓜式的下一步下一步即可完成安裝操作。
安裝完畢後,接下來就是配置一下環境變數:
電腦-》屬性-》高級系統配置-》高級-》環境變數-》
在系統變數中的新建變數:
先新建變數名:JAVA_HOME,變數值為:
C:\Program Files\Java\jdk-13 (jdk安裝位置)
接著在PATH變數名中分別添加以下兩個值:
%JAVA_HOME%\bin
查看jdk是否安裝成功
進入cmd:
輸入:java -version
2、mycat下載
Mycat下載途徑有很多種,可以直接在mycat官網下載、github、其它地址下載,具體下載地址,可以根據自己的網路來選擇適合自己的下載方式
mycat官網下載: //dl.mycat.io
github下載://github.com/MyCATApache/Mycat-download
其它下載地址://dl.mycat.org.cn/
我最終的下載地址是在//dl.mycat.org.cn/上下載的。
根據機器環境和版本要求,選擇對應的版本的環境下載完成即可。
下載好mycat後,將文件解壓到存放的文件目錄,我只放在E盤下,只根據實際磁碟來自由選擇:E:\Program Files\mycat
三、mycat配置主從複製
Mycat的使用配置,我們先從最簡單的模式(主從複製)開始配置起走。Mycat主從複製主要配置文件有如下兩個文件,兩個文件都在mycat目錄\conf下。
-
server.xml: 配置文件包含了mycat的系統配置資訊
-
schema.xml:涵蓋了mycat的邏輯庫,表,分片規則,分片節點及數據源。
server.xml配置文件
server.xml主要涉及到兩個標籤的配置,
-
system標籤:主要配置系統相關的配置,在此不在做詳細的描述,根據實際需要在去配置;
-
user標籤:主要用於定義登錄mycat的用戶和許可權,這也是本次需要介紹的配置節點。user標籤可以同時配置多個節點。
<!--配置mycat連接用戶資訊--> <!--name:用戶名--> <user name="root" defaultAccount="true"> <!--password:用戶登錄密碼--> <property name="password">xuyuanhong</property> <!--password:mysql對應的邏輯庫名稱,如果有多個庫,那麼不同的庫之間通過,連接--> <property name="schemas">test</property> </user>
schema.xml配置文件
schema配置文件是我們這一次介紹的關鍵配置文件,該配置文件會配置具體是mycat邏輯庫和實際資料庫的映射關係,以及分庫分表規則,讀寫規則等等。本次還是只介紹其讀寫分離的配置方式。由於配置資訊很多,直接看詳細的配置說明。
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="//io.mycat/"> <!--schema:mycat整個資料庫的映射框架配置,每一個mycat邏輯庫需要一個對於的配置節點--> <!--name:mycat的邏輯庫名稱,和sercer.xml中的邏輯庫名稱保持一致--> <!--checkSQLschema:是否檢測SQL,如果設置為 true,那麼mycat會對傳遞的SQL做優化,主要去掉指定庫名稱,反之則不做任何處理,一般情況下設置false--> <!--sqlMaxLimit:最大連接數--> <!--dataNode:主要配置邏輯庫和實際庫的映射關係,會有一個專門的節點來配置,此處指需要綁定對於的映射關係名稱即可--> <schema name="test" checkSQLschema="false" sqlMaxLimit="100" dataNode="dntest"> </schema> <!--dataNode:配置mycat邏輯庫和實際庫的映射關係--> <!--name:映射關係名稱,要和上面的schema對應的dataNode節點名稱保持一致--> <!--database:實體庫映射的真實資料庫名稱--> <!--dataHost:具體的資料庫連接屬性節點名稱--> <dataNode name="dntest" database="test" dataHost="hosttest" /> <!--dataHost:配置資料庫的連接資訊和路由規則資訊--> <!--name:數據連接地址資訊名稱,與上面的dataNode節點中的dataHost名稱對應--> <!--maxCon:指定每個讀寫實例連接池的最大連接--> <!--minCon:指定每個讀寫實例連接池的最小連接,初始化連接池的大小--> <!--balance:查詢操作負載均衡類型,目前的取值有以下4種 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不負擔讀壓力,注意balance=3隻在mycat1.4之後版本中有效。 在實際使用中,針對讀寫分離模式,我們一般都配置為3 --> <!--writeType:寫操作負載均衡類型,目前的取值有3種: writeType=「0」, 所有寫操作都發送到可用的writeHost上。 writeType=「1」,所有寫操作都隨機的發送到readHost。 writeType=「2」,所有寫操作都隨機的在writeHost、readhost分發。 毫無疑問,在實際使用過中,都會配置為0 --> <!--dbType:指定後端連接的資料庫類型,目前支援二進位的mysql協議,還有其他使用JDBC連接的資料庫。如mongodb,spark等--> <!--dbDriver:指定連接後端資料庫使用的Driver,目前可選的值有native和JDBC。 使用native的話,因為這個值執行的是二進位的mysql協議,所以可以使用mysql和maridb。 其他類型的資料庫則需要使用JDBC驅動來支援 --> <!--switchType:切換方式: -1:表示不自動切換。 1:默認值,表示自動切換 2:表示基於MySQL主從同步狀態決定是否切換,心跳語句: show slave status. 3:表示基於mysql galary cluster的切換機制,適合mycat1.4之上的版本,心跳語句show status like "%esrep%"; --> <dataHost name="hosttest" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <!--心跳檢測語句,mycat也是要實時的去檢測每一個映射資料庫的狀態,通過執行該語句的返回來判斷資料庫是否在線--> <heartbeat>select user()</heartbeat> <!-- writeHost:寫伺服器映射關係配置 --> <!-- url:資料庫地址(ip+埠號) --> <!-- user:資料庫連接用戶名(注意改帳號一定要授權可以遠程訪問改資料庫) --> <!-- password:資料庫連接密碼 --> <writeHost host="hostM1" url="192.168.3.205:3306" user="root" password="xuyuanhong"> <!--readHost:讀伺服器映射關係配置,可以配置多個節點,多個節點就代表多個從資料庫--> <readHost host="hostS1" url="192.168.3.205:3307" user="root" password="xuyuanhong"> </readHost> </writeHost> </dataHost> </mycat:schema>
四、mycat啟動及其常用操作命令
- 首先需要進入到mycat安裝目錄的bin目錄下
cd E:\Program Files\mycat\bin
- 開啟mycat
mycat.bat start
- 停止mycat
mycat.bat stop
- 重啟mycat
mycat.bat restart
- 查看mycat狀態
mycat.bat status
五、mycat中遇到的問題解決
其實在實際mycat配置時,我也不是一次配置成功的,也遇到了兩個小問題,現在羅列出來,如果剛剛你也遇到了正好可以解決掉。
1、Unrecognized VM option ‘AggressiveOpts’
解決方式:打開wrapper.conf配置文件,找到AggressiveOpts並將整行注釋掉即可,如下圖所示:
2、Could not create the Java Virtual Machine.
該問題有可能是設置才記憶體超出本地環境實際記憶體,處理方式也簡單,直接將wrapper.conf對應的記憶體改小即可。如下圖位置:
有關mycat的部署安裝、讀寫分離就分享到這兒了,下一篇將和大家一起分享mycat的多主多重配置,有興趣的小夥伴,可以持續關注,謝謝!
END
為了更高的交流,歡迎大家關注我的公眾號,掃描下面二維碼即可關注,謝謝: