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

CONTEND

 

7.1 DB Proxy數據庫中間件概述

7.2 mycat概述

7.3 配置java環境

7.4 mycat安裝部署

7.4.1 下載mycat和相關驅動

7.4.2 修改配置文件

7.4.3 master1上開啓授權賬號

7.5 開啓mycat並測試


7.1 DB Proxy數據庫中間件概述

(1)DB Proxy的應用場景,APPserver端不需要判斷如何去訪問數據庫(畢竟後面的數據庫環境可能會比較複雜),所以只需要安裝proxy就可以實現讀寫分離,訪問數據庫。大概的拓撲圖幫助大家理解其概念哦:

(2)數據庫中間件的主要作用:

  • 1.讀寫分離 M-S-S M-M-S-S
  • 2.負載均衡 Galera Cluster
  • 3.支持數據的分片自動路由與聚合

(3)常見的數據庫中間件:

  • MySQL Proxy        MySQL官方(這個好像不太好用的亞子)
  • Atlas                       奇虎360
  • DBProxy                美團點評
  • Amoeba                早期阿里巴巴
  • cober                     阿里巴巴
  • MyCat                   阿里巴巴  (這個比較常用,下面我就使用mycat來部署mysql中間件)

7.2 mycat概述

這個官網上給它的解釋很詳細,我就簡單拉個概念。

  • 一個徹底開源的,面向企業應用開發的大數據庫集羣
  • 支持事務、ACID、可以替代MySQL的加強版數據庫
  • 一個可以視爲MySQL集羣的企業級數據庫,用來替代昂貴的Oracle集羣
  • 一個融合內存緩存技術、NoSQL技術、HDFS大數據的新型SQL Server
  • 結合傳統數據庫和新型分佈式數據倉庫的新一代企業級數據庫產品
  • 一個新穎的數據庫中間件產品

7.3 配置java環境

下面我就直接開始安裝mycat了,先配置java環境,mycat是依賴java環境的。

#我安裝的jdk14版本,比較新,大家根據需要下載
wget https://download.oracle.com/otn-pub/java/jdk/14.0.1+7/664493ef4a6946b186ff29eb326336a2/jdk-14.0.1_linux-x64_bin.tar.gz?AuthParam=1587277033_3ff384ec1aceaba6c3613c6c76d44642

#檢查一下本地是否有安裝java,有的話先卸載,因爲低版本的java不適用mycat
rpm -qa | grep java
yum remove java-1.* -y
 
#解壓
tar xf jdk-14.0.1_linux-x64_bin.tar.gz\?AuthParam\=1587277033_3ff384ec1aceaba6c3613c6c76d44642 -C /usr/local/  
ln -s /usr/local/jdk-14.0.1/ /usr/local/java   #創建一個鏈接方便使用

#編輯環境變量
vim /etc/profile
----------------------------------------------------------------------------------------
JAVA_HOME=/usr/local/java
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH
----------------------------------------------------------------------------------------
#source生效
source /etc/profile  

env | grep java  #檢查java環境
PATH=/usr/local/java/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
JAVA_HOME=/usr/local/java
----------------------------------------------------------------------------------------
java -version  #檢查JAVA版本
java version "14.0.1" 2020-04-14
Java(TM) SE Runtime Environment (build 14.0.1+7)
Java HotSpot(TM) 64-Bit Server VM (build 14.0.1+7, mixed mode, sharing)

7.4 mycat安裝部署

我這個依舊是基於上篇文章M-M-S-S做的,拓撲如下:

M-M-S-S配置博客鏈接

7.4.1 下載mycat和相關驅動

(1)下載mycat:

#我下載的是1.6.7版本
wget http://dl.mycat.i0/1.6.7.4/Mycat-server-1.6.7.4-release/Mycat-server-1.6.7.4-release-20200105164103-linux. tar.gz
#解壓到/usr/local目錄下
tar xf Mycat-server-1.6.7.4-release-20200105164103-linux.tar.gz -C /usr/local/

#修改權限
useradd mycat;passwd mycat
chown mycat:mycat /usr/local/mycat

(2)下載8.x版本的驅動

因爲我的數據庫是mysql8版本,需要下載8.x版本的驅動,Mycat 默認的MySQL驅動版本爲5.x。到maven中央倉庫上覆制8.x驅動jar包的下載地址,然後到Linux上使用wget命令進行下載:

https://mvnrepository.com/artifact/mysql/mysql-connector-java

wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.18/mysql-connector-java-8.0.18.jar
#將jar包方到這個目錄下,並刪除5.X版本
mv mysql-connector-java-8.0.18.jar /usr/local/mycat/lib/
rm -rf /usr/local/mycat/lib/mysql-connector-java-5.1.35.jar
#接着使用chmod命令設置該驅動包的權限:
chmod 777 lib/mysql-connector-java-8.0.18.jar 

7.4.2 修改配置文件

主要配置文件schema.xml、server.xml 、wrapper.confrule.xml。

方便觀看,我把多餘的註釋和一些內容刪去了,但不影響mycat的使用,後面我會再詳細介紹配置文檔的。

(1)schema.xml文件配置,開放兩個數據庫(testdb和bbs)給用戶。

cd /usr/local/mycat/;
vim conf/schema.xml 

 

<?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="bbs" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2">
        </schema>

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

        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
     <writeHost host="master1" url="jdbc:mysql://master1:3306" user="mycat_user" password="Root@123">
     <readHost host="slave1" url="jdbc:mysql://slave1:3306" user="mycat_user" password="Root@123" />
     <readHost host="slave2" url="jdbc:mysql://slave2:3306" user="mycat_user" password="Root@123" />
     </writeHost>

      <writeHost host="master2" url="jdbc:mysql://master2:3306" user="mycat_user" password="Root@123">
      <readHost host="slave1" url="jdbc:mysql://slave1:3306" user="mycat_user" password="Root@123" />
      <readHost host="slave2" url="jdbc:mysql://slave2:3306" user="mycat_user" password="Root@123" />
      </writeHost>
    </dataHost>
</mycat:schema>

(2)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="root">
                <property name="password">123456</property>
                <!--虛擬數據庫,這個要和schema.xml定義的數據庫相一致-->
                <property name="schemas">testdb,bbs</property>
        </user>
        <!--配置第二個連接mycat的用戶-->
        <user name="user">
                <property name="password">user</property>
                <property name="schemas">testdb,bbs</property>
                <!--開啓只讀模式-->
                <property name="readOnly">true</property>
        </user>
</mycat:server>
               

(3)rule.xml文件配置就默認好了,以後再研究,不過wrapper.conf這個文件要注意了,後面mycat頻繁起不來的很多原因都可以在這邊解決

  1. 比如MyCat啓動報錯,“運行./mycat console報錯 Unrecognized VM option 'AggressiveOpts'”,我們只需在這個文件把這行註釋掉。
  2. 還有會輸出以下錯誤信息:(是因爲mycat默認需要的內存要求大於機器的實際內存,修改一下就好了。)

wrapper  | Launching a JVM...
wrapper  | JVM exited while loading the application.
jvm 1    | Invalid maximum heap size: -Xmx4G
jvm 1    | The specified size exceeds the maximum representable size.
jvm 1    | Error: Could not create the Java Virtual Machine.
jvm 1    | Error: A fatal exception has occurred. Program will exit.
wrapper  | Launching a JVM...

wrapper  | JVM exited while loading the application.


#wrapper.java.additional.3=-XX:+AggressiveOpts

wrapper.java.additional.9=-Xmx1G
wrapper.java.additional.10=-Xms256M

7.4.3 master1上開啓授權賬號

這個很簡單,注意這邊賬號和密碼要和schema.xml給的賬號密碼一致,並且授權的數據庫也要一致哦。

 create user 'mycat_user'@'192.168.119.164' identified with mysql_native_password by 'Root@123';
 grant all on testdb.* to 'mycat_user'@'192.168.119.164' ;
 grant all on bbs.* to 'mycat_user'@'192.168.119.164' ;

7.5 開啓mycat並測試

(1)啓動mycat並檢查java進程是否起來

#通過console可以啓動mycat並且檢查啓動出現的問題
[root@Centos7-host1 mycat]# bin/mycat console
#保證沒問題直接start
[root@Centos7-host1 mycat]# bin/mycat start

#檢查java進程是否起來,記住這邊8066是客戶端登錄mycat的端口哦!
[root@Centos7-host1 mycat]# ss -nltp | grep java
LISTEN     0      1      127.0.0.1:32000                    *:*                   users:(("java",pid=84602,fd=4))
LISTEN     0      100         :::9066                    :::*                   users:(("java",pid=84602,fd=68))
LISTEN     0      100         :::8066                    :::*                   users:(("java",pid=84602,fd=72))

(2)客戶端登錄測試

客戶機也要添加相應的主機解釋,也要安裝mysql客戶端(最好不要用mysql8版本的,會出問題,因爲密碼加密的方式不一樣)。我這個測試機安裝的是MariaDB客戶端。

#登錄,這邊注意連接的主機是mycat的IP哦,賬號密碼也是訪問mycat的賬戶密碼,不要用訪問數據庫的賬戶密碼
#端口是8066,前面我提示過了。
mysql -h192.168.119.164 -uroot -p123456 -P8066

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.29-mycat-1.6.7.4-release-20200105164103 MyCat Server (OpenCloudDB)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> show databases;
+----------+
| DATABASE |
+----------+
| bbs      |
| testdb   |
+----------+

MySQL [(none)]> select * from testdb.t1;
+----+---------+
| id | name    |
+----+---------+
|  1 | jack    |
|  2 | tom     |
|  3 | lucy    |
|  4 | master1 |
|  5 | master2 |
+----+---------+

(3)mycat主機也可以查看日誌,看客戶端訪問的記錄,訪問的是哪臺數據庫(我就不細說咯)。

[root@Centos7-host1 mycat]# cat logs/mycat.log 

over,還有最後一篇數據庫集羣技術再下一篇博客中介紹!

 

 

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