Mycat+MariaDB/Mysql實(shí)現(xiàn)讀寫分離

本文參考

隨著應(yīng)用的訪問(wèn)量并發(fā)量的增加,應(yīng)用讀寫分離是很有必要的。當(dāng)然應(yīng)用要實(shí)現(xiàn)讀寫分離,首先數(shù)據(jù)庫(kù)層要先做到主從配置。

應(yīng)用實(shí)現(xiàn)讀寫分離至少有兩種方法:
應(yīng)用本身通過(guò)代碼實(shí)現(xiàn),例如基于動(dòng)態(tài)數(shù)據(jù)源、AOP的原理來(lái)實(shí)現(xiàn)寫操作時(shí)用主數(shù)據(jù)庫(kù),讀操作時(shí)用從數(shù)據(jù)庫(kù)。
通過(guò)中間件的方式實(shí)現(xiàn),例如通過(guò)Mycat,即中間件會(huì)分析對(duì)應(yīng)的SQL,寫操作時(shí)會(huì)連接主數(shù)據(jù)庫(kù),讀操作時(shí)連接從數(shù)據(jù)庫(kù)。
本篇文章是介紹通過(guò)Mycat中間件的方式實(shí)現(xiàn)讀寫分離。

一、Mycat簡(jiǎn)介

Mycat是一款開(kāi)源的數(shù)據(jù)庫(kù)中間件,其官網(wǎng)為http://www.mycat.io/,其中官方對(duì)它介紹為:
Mycat 是一個(gè)強(qiáng)大的數(shù)據(jù)庫(kù)中間件,不僅僅可以用作讀寫分離、以及分表分庫(kù)、容災(zāi)備份,
而且可以用于多租戶應(yīng)用開(kāi)發(fā)、云平臺(tái)基礎(chǔ)設(shè)施、讓你的架構(gòu)具備很強(qiáng)的適應(yīng)性和靈活性,借助于即將發(fā)布的Mycat 智能優(yōu)化模塊,系統(tǒng)的數(shù)據(jù)訪問(wèn)瓶頸和熱點(diǎn)一目了然,根據(jù)這些統(tǒng)計(jì)分析數(shù)據(jù),你可以自動(dòng)或手工調(diào)整后端存儲(chǔ),將不同的表映射到不同存儲(chǔ)引擎上,而整個(gè)應(yīng)用的代碼一行也不用改變。
Mycat的實(shí)現(xiàn)原理為:
Mycat 的原理中最重要的一個(gè)動(dòng)詞是“攔截”,它攔截了用戶發(fā)送過(guò)來(lái)的SQL 語(yǔ)句,首先對(duì)SQL 語(yǔ)句做了一些特定的分析:如分片分析、路由分析、讀寫分離分析、緩存分析等,然后將此SQL 發(fā)往后端的真實(shí)數(shù)據(jù)庫(kù),并將返回的結(jié)果做適當(dāng)?shù)奶幚?,最終再返回給用戶。

二、部署環(huán)境規(guī)劃

應(yīng)用是直接連接Mycat,然后Mycat管理了1個(gè)主數(shù)據(jù)庫(kù)和1個(gè)從數(shù)據(jù)庫(kù),架構(gòu)如下:

其中每個(gè)組件對(duì)應(yīng)服務(wù)器地址為:
Mycat:192.168.100.70:8066
mysql主庫(kù):192.168.100.70:3306
mysql從庫(kù):192.168.100.71:3306

三、mysql的安裝

請(qǐng)參考這里

注意為mysql添加用戶(從庫(kù)最好用只讀用戶),以使可遠(yuǎn)程訪問(wèn),添加用戶腳本為:
創(chuàng)建用戶:create user 'developer'@'%' identified by '123456';
主庫(kù)賦權(quán):grant all privileges on edu_admin.* to  'developer'@'%' ;
從庫(kù)賦權(quán):grant select on edu_admin.* to 'developer'@'%';
添加用戶后還需要刷新權(quán)限:flush privileges;

四、mysql的主從配置

請(qǐng)參考這里

六、Mycat的安裝

Mycat的安裝非常簡(jiǎn)單,只需解壓即可。
1. 下載:wget http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
2. 解壓: tar -xzvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
3、復(fù)制解壓后的文件夾到/usr/local/下,目錄結(jié)構(gòu)如下:

[root@localhost mycat]# clear
[root@localhost mycat]# pwd
/usr/local/mycat
[root@localhost mycat]# ll
total 16
drwxr-xr-x. 2 root root 4096 Aug 15 09:35 bin
drwxr-xr-x. 2 root root    6 Aug 15 09:35 catlet
drwxr-xr-x. 4 root root 4096 Aug 15 09:35 conf
drwxr-xr-x. 2 root root 4096 Aug 15 09:35 lib
drwxr-xr-x. 2 root root    6 Aug 15 09:35 logs
-rwxr-xr-x. 1 root root  219 Aug 15 09:35 version.txt
[root@localhost mycat]# 

七、Mycat的配置

1. mycat的訪問(wèn)用戶配置
修改/usr/local/mycat/conf/server.xml添加用戶root,密碼為123456,只保留一個(gè)user標(biāo)簽,如下:
<user name="root">
    <property name="password">123456</property>
    <property name="schemas">edu_admin</property>
</user>

2.schema配置
修改/usr/local/mycat/conf/schema.xml文件。其內(nèi)容如下:
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/" >
        <schema name="edu_admin" checkSQLschema="false" sqlMaxLimit="100" dataNode="dataNode1"> </schema>

        <dataNode name="dataNode1" dataHost="localhost1" database="edu_admin" />

        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
                <heartbeat>show slave status</heartbeat>
                <writeHost host="hostM1" url="192.168.100.70:3306" user="developer" password="123456">
                <readHost host="hostS1" url="192.168.100.71:3306" user="developer" password="123456"></readHost>
                </writeHost>
        </dataHost>

</mycat:schema>

八、啟動(dòng)Mycat

啟動(dòng):/usr/local/mycat/bin/mycat start
連接mycat: mysql -h 192.168.100.70 -P 8066 -uroot -p123456

Mycat啟動(dòng)成功后,會(huì)開(kāi)放兩個(gè)端口,即數(shù)據(jù)端口8066,管理端口9066
連接管理端口的命令同連接mysql:mysql -h 192.168.100.70 -P 9066 -uroot -p123456

九、讀寫分離的測(cè)試

連接Mycat,在命令行中操作insert語(yǔ)句及select語(yǔ)句,通過(guò)查看mycat的日志(mycat的日志目錄為/usr/local/mycat/logs。日志級(jí)別可通文件/usr/local/mycat/conf/log4j2.xml調(diào)整)可以看到其連接到實(shí)際數(shù)據(jù)加的信息。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容