天天看點

(三)Linux下Mycat安裝與讀寫分離配置

該篇文章是基于下面的文章,進行進一步的搭建

(一)Linux下MySQL 5.7.x版本單執行個體+多執行個體部署

(二)Linux下MySQL 5.7.x版本主從資料庫搭建配置

開始之前先記錄一個新學到的Linux指令:

rz,sz是Linux/Unix同Windows進行ZModem檔案傳輸的指令行工具。優點就是不用再開一個sftp工具登入上去上傳下載下傳檔案。

sz filename:将標明的檔案發送(send)到本地機器
rz:運作該指令會彈出一個檔案選擇視窗,從本地選擇檔案上傳到Linux伺服器
rz -y : 覆寫上傳
           
安裝指令:

yum install lrzsz
           

1. 開始mycat的安裝:

1、下載下傳:

wget http://dl.mycat.io/1.6.7.3/20190927161129/Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz
           

2、下載下傳後解壓即可:

tar –zxvf Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz –C /usr/local
           

解壓後即安裝完成;

(三)Linux下Mycat安裝與讀寫分離配置
bin 程式目錄,存放了可執行檔案:

./mycat {start|restart|stop|status…}
           
conf 目錄下存放配置檔案:
 
server.xml 是 Mycat 伺服器參數設定和使用者賬号權限設定的配置檔案; 
schema.xml 是邏輯庫定義、讀寫分離、分庫分表的核心配置檔案;
rule.xml 是分庫分表分片規則的配置檔案;
log4j2.xml配置logs目錄下mycat日志輸出; 
wrapper.conf 配置相關JVM參數;
lib 目錄下主要存放 mycat 依賴的 jar包; 
logs目錄日志存放日志檔案
           

3. Mycat讀寫分離配置

修改配置server.xml檔案

設定連接配接mycat時的使用者名和密碼, 邏輯庫:

<user name="root" defaultAccount="true">
	<property name="password">root</property>
	<property name="schemas">MYCATDB</property>
	
	<!-- 表級 DML 權限設定 -->
	<!-- 		
	<privileges check="false">
		<schema name="TESTDB" dml="0110" >
			<table name="tb01" dml="0000"></table>
			<table name="tb02" dml="1111"></table>
		</schema>
	</privileges>		
	 -->
</user>

<user name="user">
	<property name="password">user</property>
	<property name="schemas">MYCATDB</property>
	<property name="readOnly">true</property>
</user>
           

配置schema.xml檔案

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

	<!--配置邏輯資料庫的映射  最大傳回資料條數 sqlMaxLimit -->
	<schema name="MYCATDB" checkSQLschema="true" sqlMaxLimit="1000" dataNode="dn1">
		
	<!--如果隻實作讀寫分離,此schema标簽下不需要配置其他資訊-->

	</schema>
	
	<!--配置了一個真實的資料庫goodsdb-->
	<dataNode name="dn1" dataHost="localhost1" database="goodsdb" />
	
	<!--balance="1"表示開啟讀寫分離,0表示不開啟讀寫分離-->
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
		
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
		
		<!--寫庫(主庫)-->
		<writeHost host="hostM3306" url="localhost:3306" user="root" password="root">
			 <!--讀庫(從庫)-->
		     <readHost host="hostS4406" url="localhost:4406" user="root" password="root"/>
		</writeHost>
		
	</dataHost>
	
</mycat:schema>
           

4. 測試讀寫分離

配置好MySQL主從複制并啟動主從MySQL;

啟動Mycat:

/usr/local/mycat/bin/mycat start 
           

登入Mycat:

cd /usr/local/mysql-5.7.24/bin/
mysql -uroot -p -P8066 -h127.0.0.1
           

mycat預設資料通路端口是8066

(三)Linux下Mycat安裝與讀寫分離配置
show databases;
           
(三)Linux下Mycat安裝與讀寫分離配置
use mycatdb;
           
show tables;
           

會出現,配置的主庫的所有資料表

(三)Linux下Mycat安裝與讀寫分離配置

插入資料,觀察MySQL資料的情況;

insert into users (phone) values ('13700000000');
           
Select * from users; 可以正常查詢;
           
cd /usr/local/mysql-5.7.24/bin
./mysqladmin -uroot -p -P3306 -h127.0.0.1 shutdown

./mysqld_safe --defaults-file=/usr/local/mysql-5.7.24/data/3306/my.cnf &
           

當把主庫關閉當機,驗證是否可以再插入,如果不能插入,表示已經實作了讀寫分離;

cd /usr/local/mysql-5.7.24/bin
./mysqladmin -uroot -p -P4406 -h127.0.0.1 shutdown

./mysqld_safe --defaults-file=/usr/local/mysql-5.7.24/data/4406/my.cnf &

           

當把從庫關閉當機,驗證是否可以再查詢,如果不能查詢,表示已經實作了讀寫分離;

balance屬性

負載均衡類型,目前的取值有4種:

  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設定為1;

switchType屬性

用于指定主伺服器發生故障後的切換類型:

-1 表示不自動切換

1 預設值,自動切換

2 基于MySQL主從同步的狀态決定是否切換

3 基于MySQL galary cluster的切換機制(适合叢集)(1.4.1)

heartbeat标簽

用于和後端資料庫進行心跳檢查的語句

當switchType為1時,mysql心跳檢查語句是select user()

switchType為2時,心跳檢查語句是show slave status

writeHost與readHost标簽

writeHost指定寫庫、readHost指定讀庫,組合這些讀寫執行個體來滿足系統的要求。

在一個dataHost内可以定義多個writeHost和readHost。如果writeHost指定的後端資料庫當機,那麼這個writeHost綁定的所有readHost都将不可用。另外,由于writeHost當機系統會自動被檢測到,将自動切換到備用的writeHost上去;

繼續閱讀