1. 程式人生 > >用mycat做讀寫分離:基於 MySQL主從複製

用mycat做讀寫分離:基於 MySQL主從複製

mycat是最近很火的一款國人發明的分散式資料庫中介軟體,它是基於阿里的cobar的基礎上進行開發的

 搭建之前我們先要配置mysql的主從複製,這個過程很長,我這裡就不寫了,有興趣的可以看看我寫的這篇文章。

mycat在應用當中的作用可以看下圖

mycat可以讓程式設計師只需要關心業務程式碼的編寫,而不用擔心後端資料庫叢集的負載均衡,讀寫分離,分庫分表的資料分片邏輯的編寫,只要直接連線mycat就可以了

首先我們準備一臺乾淨的centos機器,安裝好jdk

解壓mycat的安裝包到/user/local/下

設定mycat的環境變數

 vi /etc/profile

使配置檔案立即生效

source /etc/profile

進入mycat的配置檔案目錄

cd /usr/local/mycat/conf/
vi schema.xml
這個配置檔案主要是用來配置資料庫節點,邏輯表等等東西的
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">
	
	<!-- 定義MyCat的邏輯庫 -->
	<schema name="pcx_schema" checkSQLschema="false" sqlMaxLimit="100" dataNode="pcxNode"></schema>

	<!-- 定義MyCat的資料節點 -->
	<dataNode name="pcxNode" dataHost="dtHost" database="pcx" />

	
	<!-- 定義資料主機dtHost,連線到MySQL讀寫分離叢集 ,schema中的每一個dataHost中的host屬性值必須唯一-->
	<!-- dataHost實際上配置就是後臺的資料庫叢集,一個datahost代表一個數據庫叢集 -->
	<!-- balance="1",全部的readHost與stand by writeHost參與select語句的負載均衡-->
	<!-- writeType="0",所有寫操作傳送到配置的第一個writeHost,這裡就是我們的hostmaster,第一個掛了切到還生存的第二個writeHost-->
	<dataHost name="dtHost" maxCon="500" minCon="20" balance="1"
		writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
		<!--心跳檢測 -->
		<heartbeat>show slave status</heartbeat>
		
		<!--配置後臺資料庫的IP地址和埠號,還有賬號密碼 -->
		<writeHost host="hostMaster" url="192.168.1.6:3306" user="root" password="root" />
		<writeHost host="hostSlave" url="192.168.1.7:3306" user="root" password="root" />
	</dataHost>
	

</mycat:schema>
接下來配置使用者許可權,系統變數
 vi server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
	- you may not use this file except in compliance with the License. - You 
	may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
	- - Unless required by applicable law or agreed to in writing, software - 
	distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
	WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
	License for the specific language governing permissions and - limitations 
	under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
	<system>
	<!-- 這裡配置的都是一些系統屬性,可以自己檢視mycat文件 -->
	<property name="defaultSqlParser">druidparser</property>
	<property name="charset">utf8mb4</property>
	</system>

	
							
	<!-- 使用者1,對應的MyCat邏輯庫連線到的資料節點對應的主機為主從複製叢集 -->
	<user name="user1">
		<property name="password">root</property>
		<property name="schemas">pcx_schema</property>
	</user>
							
	<!-- 使用者2,只讀許可權-->
	<user name="user2">
		<property name="password">root</property>
		<property name="schemas">pcx_schema</property>
		<property name="readOnly">true</property>
	</user>

</mycat:server>
修改防火牆,允許mycat的埠被外界訪問
 vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8066 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 9066 -j ACCEPT

然後重啟防火牆

service iptables restart
cd /usr/local/mycat/bin/

進入mycat的指令碼目錄

執行啟動命令

 ./mycat start
我們可以使用mysql客戶端連線或者navicat來連線mycat

接下來我們測試一下讀寫分離

進入mycat的日誌目錄

cd /usr/local/mycat/logs/

先測試一下讀操作

我們連線到mycat傳送一句select *命令試試

可以看到select 操作被路由到了192.168.1.7也就是我們的slave節點

那麼我們執行多次看看

結果還是被路由到了讀節點

接下來我們測試一下寫操作


可見插入被路由到了master節點

最後我們看看master的資料是否被同步到slave

記錄成功的同步過來了,可見讀寫分離搭建成功。