1. 程式人生 > >mycat資料庫集群系列之mycat讀寫分離安裝配置

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+。

直接上地址:https://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官網下載: http://dl.mycat.io

  github下載:https://github.com/MyCATApache/Mycat-download

  其它下載地址:http://dl.mycat.org.cn/

                              http://www.mycat.org.cn/

  我最終的下載地址是在http://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="http://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
為了更高的交流,歡迎大家關注我的公眾號,掃描下面二維碼即可關注,謝謝: