1. 程式人生 > >MySQL - MyCat 實現讀寫分離

MySQL - MyCat 實現讀寫分離

前言

        MyCat是一個徹底開源的,面向企業應用開發的大資料庫叢集,支援事務、ACID、可以替代MySQL的加強版資料庫.
其功能有可以視為MySQL叢集的企業級資料庫,用來替代昂貴的Oracle叢集.融合了記憶體快取技術、NoSQL技術、HDFS大資料的新型SQL Server,結合傳統資料庫和新型分散式資料倉庫的新一代企業級資料庫產品.

◆案例1◆ 配置MyCat實現讀寫分離

安裝JDK

tar -xzvf jdk-8u171-linux-x64.tar.gz -C /usr/local/

mv /usr/local/jdk1.8.0_171/ /usr/local/jdk

配置JAVA環境變數

vim /etc/profile

#=============================================================================
#Java-JDK-Path

export JAVA_HOME=/usr/local/jdk
export JAVA_BIN=/usr/local/jdk/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
#============================================================================= source /etc/profile

進入所有資料庫依次建立遠端登陸許可權

grant  all  on *.* to  "lyshark"@"%" identified by  "123123";

create database lysharkdb;                        #建立測試資料庫

解壓MyCat

tar -xzvf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local/

修改MyCat配置檔案

        a. 修改使用者授權檔案,寫入MyCat登陸賬號

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

        <user name="root" defaultAccount="true">                   #指定MyCat登陸使用者名稱
                <property name="password">123456</property>        #指定密碼
                <property name="schemas">lysharkDB</property>      #指定同步資料庫
        </user>

        <user name="user">                                         #指定MyCat登陸使用者名稱
                <property name="password">123456</property>        #指定密碼
                <property name="schemas">lysharkDB</property>      #指定同步資料庫
                <property name="readOnly">true</property>          #指定只讀
        </user>

        b. 修改MyCat讀寫分離策略

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

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

<schema name="lysharkDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn_test"> </schema>
<dataNode name="dn_test" dataHost="dh_43" database="lysharkDB" />

<dataHost name="dh_43" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                
                <heartbeat>select user()</heartbeat>

                <writeHost host="43_M" url="192.168.1.13:3306" user="lyshark" password="123">      # 配置寫主機
                <readHost host="45_S1" url="192.168.1.14:3306" user="lyshark" password="123" />    # 配置讀主機
        <readHost host="45_S2" url="192.168.1.15:3306" user="lyshark" password="123" />            # 配置讀主機

                </writeHost>
        </dataHost>
</mycat:schema>

schema name="lysharkDB"            # 指定你要同步的資料庫
database="lysharkDB"               # 同上

dataNode="dn_test"
dataNode name="dn_test"
dataHost="dh_43"

啟動MyCat

/usr/local/mycat/bin/mycat start

檢視埠

netstat -an |grep "9066"                                #虛擬schema管理埠
netstat -an |grep "8066"                                #虛擬schema登陸埠

登入MyCat管理端

mysql -uroot -p123456 -h127.0.0.1 -P 9066

MySQL [(none)]> show @@heartbeat;                            #RS_CODE為1表示心跳正常
+-------+-------+--------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
| NAME  | TYPE  | HOST         | PORT | RS_CODE | RETRY | STATUS | TIMEOUT | EXECUTE_TIME | LAST_ACTIVE_TIME    | STOP  |
+-------+-------+--------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
| 43_M  | mysql | 192.168.1.12 | 3306 |       1 |     0 | idle   |       0 | 173,173,173  | 2018-05-11 09:10:15 | false |
| 45_S1 | mysql | 192.168.1.13 | 3306 |       1 |     0 | idle   |       0 | 226,226,226  | 2018-05-11 09:10:15 | false |
| 45_S2 | mysql | 192.168.1.14 | 3306 |       1 |     0 | idle   |       0 | 206,206,206  | 2018-05-11 09:10:15 | false |
+-------+-------+--------------+------+---------+-------+--------+---------+--------------+---------------------+-------+

MySQL [(none)]> show @@datasource;                            #檢視讀寫分離的機器配置情況
+----------+-------+-------+--------------+------+------+--------+------+------+---------+-----------+------------+
| DATANODE | NAME  | TYPE  | HOST         | PORT | W/R  | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |
+----------+-------+-------+--------------+------+------+--------+------+------+---------+-----------+------------+
| dn_test  | 43_M  | mysql | 192.168.1.12 | 3306 | W    |      0 |   10 | 1000 |      19 |         0 |          0 |
| dn_test  | 45_S1 | mysql | 192.168.1.13 | 3306 | R    |      0 |    4 | 1000 |      12 |         0 |          0 |
| dn_test  | 45_S2 | mysql | 192.168.1.14 | 3306 | R    |      0 |    4 | 1000 |      12 |         0 |          0 |
+----------+-------+-------+--------------+------+------+--------+------+------+---------+-----------+------------+

登入MyCat讀寫分離服務

mysql -uroot -p123456 -h127.0.0.1 -P 8066

[[email protected] ~]# mysql -uroot -p123456 -h127.0.0.1 -P 8066
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.29-mycat-1.6.5-release-20180122220033 MyCat Server (OpenCloundDB)

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

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

MySQL [(none)]>

◆案例2◆ 配置MyCat-Web監控頁面

前戲:下載MyCat以及Zookeeper

wget http://www-eu.apache.org/dist/zookeeper/zookeeper-3.4.12/zookeeper-3.4.12.tar.gz

wget http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz

wget http://dl.mycat.io/mycat-web-1.0/Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz

安裝JDK

tar -xzvf jdk-8u171-linux-x64.tar.gz -C /usr/local/

mv /usr/local/jdk1.8.0_171/ /usr/local/jdk

配置JAVA環境變數

vim /etc/profile

#=============================================================================
#Java-JDK-Path

export JAVA_HOME=/usr/local/jdk
export JAVA_BIN=/usr/local/jdk/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
#=============================================================================

source /etc/profile

安裝MySQL並配置my.cnf

yum install -y mariadb mariadb-server

vim /etc/my.cnf

[mysqld]
lower_case_table_names = 1

安裝zookeeper

tar -xzvf zookeeper-3.4.12.tar.gz -C /usr/local/

cd /usr/local/zookeeper-3.4.12/conf/

cp zoo_sample.cfg zoo.cfg

修改其中的↓

dataDir=/usr/local/...

dataLogDir=/usr/local/...

執行zookeeper

cd /usr/local/zookeeper-3.4.12/bin/

./zkServer.sh start


檢視狀態:netstat -ant | grep 2181

tcp  0    0 :::2181       :::*           LISTEN 


如果出現錯誤:nohup: failed to run command `java’: No such file or directory

可以在zkServer.sh中的首行新增如下程式碼

export JAVA_HOME=/usr/lib/jdk
export PATH=$JAVA_HOME/bin:$PATH

安裝並執行Mycat-Web

tar -xzvf Mycat-web-1.0-SNAPSHOT-20170102153329-linux.tar.gz -C /usr/local

cd /usr/local/mycat-web

./start.sh &

netstat  -an | grep 8082


客戶訪問

http://localhost:8082/mycat

 

 

部落格搬運地址

  1. MyCat 實現讀寫分離