用mycat做讀寫分離:基於 MySQL主從複製
阿新 • • 發佈:2019-02-09
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
修改防火牆,允許mycat的埠被外界訪問<?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>
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
記錄成功的同步過來了,可見讀寫分離搭建成功。