(九)數據庫集羣技術Galera+mycat(數據庫運維學習終章)

學習預覽:

(一)mysql 運維基礎篇(Linux雲計算從入門到精通)

(二)mysql 索引和視圖(數據庫運維基礎補充)

(三)mysql 觸發器、存儲過程和函數(數據庫運維基礎補充)

(四)MySQL安全機制和日誌管理(mysql運維)

(五)mysql數據備份—物理備份(完備+lvm快照+xtrabackup)+邏輯備份(mysqldump+導入導出)

(六)mysql複製技術—M-S主從配置(傳統+GTID)+M-M-S-S主從配置(GTID)

(七)mysql中間件mycat配置和部署(基於M-M-S-S)

(八) 數據庫集羣技術—Galera Cluster安裝與配置

(九)數據庫集羣技術Galera+mycat(數據庫運維學習終章)


 

聲明:

上一章我已經介紹了數據庫集羣技術—Galera Cluster安裝與配置,這篇mycat的配置就是基於上篇文章的基礎而做的。

點擊查看博客—Galera Cluster安裝與配置

配置好Galera Cluster之後,就開始安裝配置mycat了。安裝mycat之前的java環境和安裝的教程可以看下面這篇博客:

點擊查看博客—mycat安裝環境配置

這篇博客主要介紹下配置文件schema.xml 和server.xml在Galera集羣下的配置。還有其它區別於之前mysql8下安裝mycat。因爲之前裝的是mysql8,這次裝的mysql5.7,其實區別並不大,就需要修改下mysql-connector-java的版本(正常你下載的mycat不需要額外花功夫搞這個,只是上次做實驗我裝的mysql-connector-java8,這次又要換回來。其它主要都是配置文件schema.xml 的區別)。

(1)先在Galera1創數據庫並授權給mycat用戶,我就先創三個數據庫(根據需要授權數據庫)。

create database blog;
create database shop;
create database blog;
grant all on testdb.* to testdb@'%' identified by 'Galera@123';
grant all on shop.* to shop@'%' identified by 'Galera@123';
grant all on blog.* to blog@'%' identified by 'Galera@123';
flush privileges;

(2)更換 mysql-connector-java(提醒,如果你做過我之前的實驗這一步要做的,沒做過的話可以跳過這一步)

wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.35/mysql-connector-java-5.1.35.jar
ll
cp mysql-connector-java-5.1.35.jar /usr/local/mycat/lib/
cd /usr/local/mycat/
mv lib/mysql-connector-java-8.0.19.jar /root
chmod 777 lib/mysql-connector-java-5.1.35.jar
ll lib

  (3) vim /usr/local/mycat/conf/server.xml 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<!--配置連接mycat的用戶-->
        <user name="testdb">
                <property name="password">123456</property>
                <!--虛擬數據庫,這個要和schema.xml定義的數據庫相一致-->
                <property name="schemas">testdb</property>
        </user>
        <user name="shop">
                <property name="password">123456</property>
                <!--虛擬數據庫,這個要和schema.xml定義的數據庫相一致-->
                <property name="schemas">shop</property>
        </user>
        <user name="blog">
                <property name="password">123456</property>
                <!--虛擬數據庫,這個要和schema.xml定義的數據庫相一致-->
                <property name="schemas">blog</property>
        </user>
</mycat:server>

(4)vim /usr/local/mycat/conf/schema.xml 。先做一個簡單介紹:

  • balance=1         開啓讀寫分離機制,所有讀操作都發送到當前可用的writeHost上。
  • wirteType=0      所有寫操作發送到第-個writeHost ,第一個掛了切換到第二個
  • switchType=3    基於MySQL Galera cluster的切換機制, 心跳語句爲show status like 'wsrep%'
     
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="testdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
        </schema>

        <schema name="shop" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2">
        </schema>
        <schema name="blog" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn3">
        </schema>

        <dataNode name="dn1" dataHost="localhost1" database="testdb" />

        <dataNode name="dn2" dataHost="localhost2" database="shop" />
        <dataNode name="dn3" dataHost="localhost3" database="blog" />

        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="3"  slaveThreshold="100">
                <heartbeat>show status like 'wsrep%'</heartbeat>
                <writeHost host="galera1" url="galera1:3306" user="testdb" password="Galera@123"> </writeHost>
                <writeHost host="galera2" url="galera2:3306" user="testdb" password="Galera@123"> </writeHost>
                <writeHost host="galera3" url="galera3:3306" user="testdb" password="Galera@123"> </writeHost>
                <writeHost host="galera4" url="galera4:3306" user="testdb" password="Galera@123"> </writeHost>
    </dataHost>

        <dataHost name="localhost2" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="3"  slaveThreshold="100">
                <heartbeat>show status like 'wsrep%'</heartbeat>
                <writeHost host="galera1" url="galera1:3306" user="shop" password="Galera@123"> </writeHost>
                <writeHost host="galera2" url="galera2:3306" user="shop" password="Galera@123"> </writeHost>
                <writeHost host="galera3" url="galera3:3306" user="shop" password="Galera@123"> </writeHost>
                <writeHost host="galera4" url="galera4:3306" user="shop" password="Galera@123"> </writeHost>

    </dataHost>

        <dataHost name="localhost3" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="3"  slaveThreshold="100">
                <heartbeat>show status like 'wsrep%'</heartbeat>
                <writeHost host="galera1" url="galera1:3306" user="blog" password="Galera@123"> </writeHost>
                <writeHost host="galera2" url="galera2:3306" user="blog" password="Galera@123"> </writeHost>
                <writeHost host="galera3" url="galera3:3306" user="blog" password="Galera@123"> </writeHost>
                <writeHost host="galera4" url="galera4:3306" user="blog" password="Galera@123"> </writeHost>
    </dataHost>
</mycat:schema>

(5)啓動mycat

#先關掉mycat,在控制檯中運行mycat,檢查錯誤,沒有錯誤就啓動mycat
/usr/local/mycat/bin/mycat  stop
/usr/local/mycat/bin/mycat  console
Running Mycat-server...
wrapper  | --> Wrapper Started as Console
wrapper  | Launching a JVM...
jvm 1    | Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
jvm 1    |   Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.
jvm 1    | 
jvm 1    | MyCAT Server startup successfully. see logs in logs/mycat.log

#啓動mycat
/usr/local/mycat/bin/mycat  start

#檢測java端口是否打開
ss -nltp | grep java
LISTEN     0      1      127.0.0.1:32000                    *:*                   users:(("java",pid=88675,fd=4))
LISTEN     0      100         :::9066                    :::*                   users:(("java",pid=88675,fd=68))
LISTEN     0      100         :::8066                    :::*                   users:(("java",pid=88675,fd=72))

(6)客戶端登錄

先添加主機解釋,這個自己做相應的修改(每臺都要做的)

192.168.119.163 galera1
192.168.119.160 galera2
192.168.119.161 galera3
192.168.119.162 galera4

開始登錄(登錄三個賬號查看)

mysql -h192.168.119.165 -utestdb -p123456 -P8066
MySQL [(none)]> show databases;
+----------+
| DATABASE |
+----------+
| testdb   |
+----------+

mysql -h192.168.119.165 -ushop -p123456 -P8066
MySQL [(none)]> show databases;
+----------+
| DATABASE |
+----------+
| shop     |
+----------+

mysql -h192.168.119.165 -ublog -p123456 -P8066
MySQL [(none)]> show databases;
+----------+
| DATABASE |
+----------+
| blog     |
+----------+

(7)檢測mycat是否實現讀寫分離

  • 所有節點都正常writeHost負責寫操作,備writHost負責讀操作
  • 當第一個writeHost失效時 ,其中一個備的writeHost負責寫操作,其他備的writeHost負責讀操作
  • 當只有一個writeHost時,同時負擔讀寫

先配置conf/log4j.xml文件,將輸出級別調整爲debug級別,便於觀察問題:

vim /usr/local/mycat/conf/log4j2.xml 

然後在客戶機上插入數據,並在mycat主機上查看日誌:tailf /usr/local/mycat/logs/mycat.log 

MySQL [(none)]> insert into testdb.t1 values (5,'77777777777777777777');

如下圖,很明顯在Galera1上進行寫的:
 

如果讀呢?很明顯從Galera2上讀。

 MySQL [(none)]> select * from testdb.t1 where name='77777777777777777777';

 

如果我直接把Galera1和Galera2掛掉呢?看看有什麼改變:

讀的時候發生讀節點轉換,轉換到Galera3上讀。

MySQL [(none)]> select * from testdb.t1 where name='77777777777777777777';

 

寫入數據的時候,開始從Galera4上寫入數據:

MySQL [(none)]> insert into testdb.t1 values (7,'888888888888887');


結束語:

自此Linux雲計算之mysql運維篇就結束了,我覺得這些還挺實用的,後面講的數據庫中間件mycat,其實介紹的很淺顯。有興趣的童鞋可以去官網下載官方文檔好好學習,比如它還適用於分佈式數據庫等等。後面如果我還會遇到一些比較有用的知識,也願意和大家一起分享。😀

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章