Mycat讀寫分離配置實踐

   工作這些年來,也去了一些地方,有了一些見聞,隱隱感覺很多文化和貓有著千絲萬縷的聯(lián)系。就拿IT行業(yè)來說吧,貓有著很高的曝光率,比如大名鼎鼎的 tomcat,是由SUN的軟件構架師詹姆斯·鄧肯·戴維森開發(fā),并由Sun貢獻給Apache軟件基金會,他希望這種動物能夠自己照顧自己,將其命名為 Tomcat,于是乎這個名字就留下來了。

創(chuàng)新互聯(lián)網絡公司擁有十載的成都網站開發(fā)建設經驗,上千余家客戶的共同信賴。提供成都網站設計、成都網站制作、網站開發(fā)、網站定制、外鏈、建網站、網站搭建、響應式網站建設、網頁設計師打造企業(yè)風格,提供周到的售前咨詢和貼心的售后服務

  在Oracle中我最喜歡查看的一個數(shù)據(jù)字典試圖就是cat,這是典型的貓文化,沒有其他的技術意味。

  最早聽到mycat的時候,我意味是一個國外的開源項目,但是緊接著發(fā)現(xiàn)這竟然是一個國產項目,讓我有些激動,而且源代碼是基于Java的,我覺得太對我的胃口了。

  下面的貓兒是在泰國皮皮島的一個早晨碰見的,它睡在門口,眼皮都懶得抬一下。

Mycat讀寫分離配置實踐

  mycat這么一個項目,在國內確實很火,在github上也有鏈接,星標有2000多個。是基于阿里開源的Cobar產品而研發(fā)。

  github鏈接如下:

https://github.com/MyCATApache/Mycat-Server/wiki

  官方的鏈接如下:

http://dl.mycat.io/目前的版本比較新的是1.6,摸爬滾打這么多年,也算是見證了國內數(shù)據(jù)庫的一個發(fā)展,它本身不僅僅支持MySQL,還支持Oracle,PG等,目前MySQL方向用的最為流行。

安裝部署

Mycat的安裝部署其實很簡單,從官方下載對應的安裝包即可,大概是15M左右。

下載最新的安裝包:

wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

 解壓后的安裝包內容有60M左右。

安裝Mycat很簡單,只需要保證Java已經正確安裝,如果系統(tǒng)自帶,版本不低也可以。

# java -version
java version "1.7.0_45"
OpenJDK Runtime Environment (rhel-2.4.3.3.0.1.el6-x86_64 u45-b15)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)相應的Java的基礎配置也需要在profile文件里對應調整一下。

比如修改.bash_profile文件。

export JAVA_HOME=/usr/lib/jvm/jre-1.7.0-openjdk.x86_64
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

創(chuàng)建系統(tǒng)級的組和用戶

useradd mycat對于安裝來說,幾乎不需要可以調整,直接把解壓后的mycat目錄拷貝到/usr/local下即可,然后修改權限。

mv mycat/ /usr/local/
chown mycat:mycat /usr/local/mycat

配置數(shù)據(jù)庫環(huán)境

我們需要配置的數(shù)據(jù)庫環(huán)境假設是一主三從,可以在一臺服務器上搭建模擬,一主三從如果快速搭建部署,可以參考github上我寫的一個小腳本,https://github.com/jeanron100/mysql_slaves,分分鐘搞定。

假設環(huán)境的情況如下:

master:   端口33091
slave1:   端口33092
slave2:   端口33093
slave3:   端口33093

mycat可以實現(xiàn)很多功能,在此先實現(xiàn)一個需求,比如現(xiàn)在有一套環(huán)境讀多寫少,需要提供大量的數(shù)據(jù)量連接訪問。我們就可以創(chuàng)建兩個用戶mycat_user,負責DML,mycat_read負責查詢。create user mycat_user identified by 'mycat';
create user mycat_read identified by 'mycat';

比如有多個數(shù)據(jù)庫,我們就模擬創(chuàng)建3個數(shù)據(jù)庫來。

create database db1;
create database db2;
create database db3;

分配權限的部分如下:

grant select on db1.* to mycat_read;
grant select,insert,delete,update on db1.* to mycat_user;

grant select on db2.* to mycat_read;
grant select,insert,delete,update on db2.* to mycat_user;

grant select on db3.* to mycat_read;
grant select,insert,delete,update on db3.* to mycat_user;賦予從庫狀態(tài)查詢的權限,在后面需要用。

mysql> grant replication client on *.* to 'mycat_read'@'%' ;
mysql> grant replication client on *.* to 'mycat_user'@'%' ;

初始化數(shù)據(jù)

初始化數(shù)據(jù)庫,我還是選用一個經典的標travelrecord,然后插入兩行記錄。在3個數(shù)據(jù)庫db1,db2,db3中創(chuàng)建。

mysql> create table travelrecord
(id bigint not null primary key,user_id varchar(100),traveldate DATE, fee decimal,days int);

mysql>  insert into travelrecord(id,user_id,traveldate,fee,days)  values(1,@@hostname,20160101,100,10);

mysql> insert into travelrecord(id,user_id,traveldate,fee,days)  values(5000001,@@hostname,20160102,100,10);


mycat配置

 上面的工作做好之后,系統(tǒng)層面,數(shù)據(jù)庫層面的工作就做好了。啟動Mycat的命令很簡單,比如mycat start,停止Mycat的命 令 mycat stop等等。

  命令很簡單,關鍵在于Mycat的配置,這個才是重點。在mycat/conf目錄下有兩個文件需要重點關注,一個是server.xml,一個是schema.xml

  server.xml的配置關鍵內容如下,我們配置了兩個用戶,所以在這個配置文件里就先按照如下的配置,這里我們配置schema是pxc_schema,先賣個關子。

        <user name="mycat_user">
                <property name="password">mycat</property>
                <property name="schemas">pxc_schema</property>
        </user>
        <user name="mycat_read">
                <property name="password">mycat</property>
                <property name="schemas">pxc_schema</property>
                <property name="readOnly">true</property>
        </user>
</mycat:server>

  schema.xml的內容如下,也做了相應的標注。

<?xml version="1.0"?> 
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> 
    <mycat:schema xmlns:mycat="http://io.mycat/">          
        <!-- 定義MyCat的邏輯庫 --> 
        <schemaname="pxc_schema" checkSQLschema="false" sqlMaxLimit="100" dataNode="pcxNode"></schema>       
        <!-- 定義MyCat的數(shù)據(jù)節(jié)點 --> 
        <dataNodename="pcxNode" dataHost="dtHost" database="db1" />                 
        <!-- 定義數(shù)據(jù)主機dtHost,連接到MySQL讀寫分離集群 ,schema中的每一個dataHost中的host屬性值必須唯一--> 
        <!-- dataHost實際上配置就是后臺的數(shù)據(jù)庫集群,一個datahost代表一個數(shù)據(jù)庫集群 --> 
        <!-- balance="1",全部的readHost與stand by writeHost參與select語句的負載均衡--> 
        <!-- writeType="0",所有寫操作發(fā)送到配置的第一個writeHost,這里就是我們的hostmaster,第一個掛了切到還生存的第二個writeHost--> 
        <dataHostname="dtHost" maxCon="500" minCon="20" balance="1" 
            writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> 
            <!--心跳檢測 --> 
            <heartbeat>show slave status</heartbeat>            
            <!--配置后臺數(shù)據(jù)庫的IP地址和端口號,還有賬號密碼,這里我們可以根據(jù)需要來配置,比如一主三從的環(huán)境 --> 
            <writeHosthost="hostMaster" url="192.168.163.128:33091" user="mycat_user" password="mycat" /> 
            <writeHost host="hostSlave1" url="192.168.163.128:33092" user="mycat_read" password="mycat" /> 
            <writeHost host="hostSlave2" url="192.168.163.128:33093" user="mycat_read" password="mycat" /> 
            <writeHost host="hostSlave3" url="192.168.163.128:33094" user="mycat_read" password="mycat" /> 
        </dataHost> 
</mycat:schema>

檢測Mycat的連接情況

Mycat的配置做好了以后,整個工作的80%的任務就完成了,其實關鍵還是在于Mycat文件的配置,配置不當還是需要反復調試的。

如果驗證Mycat的生效呢,我們可以使用8066這個默認端口來連接,如果里面出現(xiàn)mycat的字樣,就證明是Mycat設置生效了。

[root@oel64 logs]# mysql -umycat_read -pmycat -P8066  -h292.168.163.128
。。。
Server version: 5.6.29-mycat-1.6-RELEASE-20161028204710 MyCat Server (OpenCloundDB)
。。。
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

我們看看這個用戶mycat_read能夠訪問的數(shù)據(jù)庫,在數(shù)據(jù)庫里應該就是db1,db2,db3,為什么這里出現(xiàn)了pxc_shema呢,其實也可以理解是Mycat在中間過濾的效果,其實這是db1,而db2,db3還沒有在Mycat配置文件中體現(xiàn),所以還沒有生效。

mysql> show databases;
+------------+
| DATABASE   |
+------------+
| pxc_schema |
+------------+
1 row in set (0.00 sec)我們就連接到這個pxc_schema數(shù)據(jù)庫。

mysql> use pxc_schema
Database changed

可以看到這個數(shù)據(jù)庫下的表。

mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| travelrecord  |
+---------------+
1 row in set (0.01 sec)

如果驗證我們連接到的數(shù)據(jù)庫是啟用了Mycat的讀寫分離呢。我們可以看端口。

mysql> select @@port;
+--------+
| @@port |
+--------+
|  33092 |
+--------+
1 row in set (0.05 sec)

由此我們可以看到,連接到的是33092的端口,即是slave1
可以反復切換,看看這個load balance的方式是否滿意。

繼續(xù)擴展Mycat讀寫分離的配置

上面的步驟只是簡單實現(xiàn)了讀寫分離的配置,比如我要訪問多個數(shù)據(jù)庫,而不僅僅是pxc_schema,該如何配置呢。

我們在server.xml中就需要對schema擴展一下,schema的值是以逗號分隔,配置的細節(jié)是在schema.xml里面映射的。

<user name="mycat_user">
                <property name="password">mycat</property>
                <property name="schemas">pxc_schema,db2,db3</property>
        </user>

        如果在schema.xml里面配置多個 邏輯庫,就可以配置多個schema鍵值即可。        

  <schema name="pxc_schema" checkSQLschema="false" sqlMaxLimit="100" dataNode="pcxNode"></schema> 
  <schema name="db2" checkSQLschema="false" sqlMaxLimit="100" dataNode="pcxNode2"></schema> 
  <schema name="db3" checkSQLschema="false" sqlMaxLimit="100" dataNode="pcxNode3"></schema>       相應的dataNode也需要擴展映射。  

<dataNode name="pcxNode" dataHost="dtHost" database="db1" /> 
<dataNode name="pcxNode2" dataHost="dtHost" database="db2" /> 
<dataNode name="pcxNode3" dataHost="dtHost" database="db3" />        整個過程完成后,重啟一下Mycat即可。

   

當前題目:Mycat讀寫分離配置實踐
URL地址:http://bm7419.com/article44/jdeshe.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供App設計、靜態(tài)網站、、小程序開發(fā)、網站內鏈、商城網站

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

網站建設網站維護公司