MySQL - MyCat 實現讀寫分離
阿新 • • 發佈:2018-11-21
前言
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
部落格搬運地址