Mycat讀寫分離配置實踐
工作這些年來,也去了一些地方,有了一些見聞,隱隱感覺很多文化和貓有著千絲萬縷的聯絡。就拿IT行業來說吧,貓有著很高的曝光率,比如大名鼎鼎的 tomcat,是由SUN的軟體構架師詹姆斯·鄧肯·戴維森開發,並由Sun貢獻給Apache軟體基金會,他希望這種動物能夠自己照顧自己,將其命名為 Tomcat,於是乎這個名字就留下來了。
在Oracle中我最喜歡檢視的一個資料字典試圖就是cat,這是典型的貓文化,沒有其他的技術意味。
最早聽到mycat的時候,我意味是一個國外的開源專案,但是緊接著發現這竟然是一個國產專案,讓我有些激動,而且原始碼是基於Java的,我覺得太對我的胃口了。
下面的貓兒是在泰國皮皮島的一個早晨碰見的,它睡在門口,眼皮都懶得抬一下。
mycat這麼一個專案,在國內確實很火,在github上也有連結,星標有2000多個。是基於阿里開源的Cobar產品而研發。
github連結如下:
官方的連結如下:
目前的版本比較新的是1.6,摸爬滾打這麼多年,也算是見證了國內資料庫的一個發展,它本身不僅僅支援MySQL,還支援Oracle,PG等,目前MySQL方向用的最為流行。
安裝部署
Mycat的安裝部署其實很簡單,從官方下載對應的安裝包即可,大概是15M左右。
下載最新的安裝包:
wget 1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
解壓後的安裝包內容有60M左右。
安裝Mycat很簡單,只需要保證Java已經正確安裝,如果系統自帶,版本不低也可以。
# 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
建立系統級的組和使用者
useradd mycat對於安裝來說,幾乎不需要可以調整,直接把解壓後的mycat目錄複製到/usr/local下即可,然後修改許可權。
mv mycat/ /usr/local/
chown mycat:mycat /usr/local/mycat
配置資料庫環境
我們需要配置的資料庫環境假設是一主三從,可以在一臺伺服器上搭建模擬,一主三從如果快速搭建部署,可以參考github上我寫的一個小指令碼,分分鐘搞定。
假設環境的情況如下:
master: 埠33091
slave1: 埠33092
slave2: 埠33093
slave3: 埠33093
mycat可以實現很多功能,在此先實現一個需求,比如現在有一套環境讀多寫少,需要提供大量的資料量連線訪問。我們就可以建立兩個使用者mycat_user,負責DML,mycat_read負責查詢。create user mycat_user identified by 'mycat';
create user mycat_read identified by 'mycat';
比如有多個資料庫,我們就模擬建立3個資料庫來。
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;賦予從庫狀態查詢的許可權,在後面需要用。
mysql> grant replication client on *.* to 'mycat_read'@'%' ;
mysql> grant replication client on *.* to 'mycat_user'@'%' ;
初始化資料
初始化資料庫,我還是選用一個經典的標travelrecord,然後插入兩行記錄。在3個資料庫db1,db2,db3中建立。
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配置
上面的工作做好之後,系統層面,資料庫層面的工作就做好了。啟動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="">
<!-- 定義MyCat的邏輯庫 -->
<schema name="pxc_schema" checkSQLschema="false" sqlMaxLimit="100" dataNode="pcxNode"></schema>
<!-- 定義MyCat的資料節點 -->
<dataNode name="pcxNode" dataHost="dtHost" database="db1" />
<!-- 定義資料主機dtHost,連線到MySQL讀寫分離叢集 ,schema中的每一個dataHost中的host屬性值必須唯一-->
<!-- dataHost實際上配置就是後臺的資料庫叢集,一個datahost代表一個資料庫叢集 -->
<!-- balance="1",全部的readHost與stand by writeHost參與select語句的負載均衡-->
<!-- writeType="0",所有寫操作傳送到配置的第一個writeHost,這裡就是我們的hostmaster,第一個掛了切到還生存的第二個writeHost-->
<dataHost name="dtHost" maxCon="500" minCon="20" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!--心跳檢測 -->
<heartbeat>show slave status</heartbeat>
<!--配置後臺資料庫的IP地址和埠號,還有賬號密碼,這裡我們可以根據需要來配置,比如一主三從的環境 -->
<writeHost host="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這個預設埠來連線,如果裡面出現mycat的字樣,就證明是Mycat設定生效了。
[root@oel64 logs]# mysql -umycat_read -pmycat -P8066 -h192.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能夠訪問的資料庫,在資料庫裡應該就是db1,db2,db3,為什麼這裡出現了pxc_shema呢,其實也可以理解是Mycat在中間過濾的效果,其實這是db1,而db2,db3還沒有在Mycat配置檔案中體現,所以還沒有生效。
mysql> show databases;
+------------+
| DATABASE |
+------------+
| pxc_schema |
+------------+
1 row in set (0.00 sec)我們就連線到這個pxc_schema資料庫。
mysql> use pxc_schema
Database changed
可以看到這個資料庫下的表。
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| travelrecord |
+---------------+
1 row in set (0.01 sec)
如果驗證我們連線到的資料庫是啟用了Mycat的讀寫分離呢。我們可以看埠。
mysql> select @@port;
+--------+
| @@port |
+--------+
| 33092 |
+--------+
1 row in set (0.05 sec)
由此我們可以看到,連線到的是33092的埠,即是slave1
可以反覆切換,看看這個load balance的方式是否滿意。
繼續擴充套件Mycat讀寫分離的配置
上面的步驟只是簡單實現了讀寫分離的配置,比如我要訪問多個資料庫,而不僅僅是pxc_schema,該如何配置呢。
我們在server.xml中就需要對schema擴充套件一下,schema的值是以逗號分隔,配置的細節是在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即可。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2144503/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MyCat分庫分表、讀寫分離
- Mycat 讀寫分離+分庫分表
- 【Mycat】Mycat讀寫分離與負載均衡2負載
- Mycat實現mysql的負載均衡讀寫分離MySql負載
- StoneDB 讀寫分離實踐方案
- haproxy+keepalived+mycat+mysql (讀寫分離)MySql
- Mycat中介軟體實現Percona Cluster讀寫分離
- Mycat中介軟體實現Mysql主從讀寫分離MySql
- mycat結合MySQL的雙主實現讀寫分離MySql
- mysql讀寫分離的最佳實踐MySql
- ShardingSphere(七) 讀寫分離配置,實現分庫讀寫操作
- Amoeba for MySQL讀寫分離配置MySql
- CentOS7系統下使用Mycat實現mysql讀寫分離部署CentOSMySql
- Mycat讀寫分離、主從切換、分庫分表的操作記錄
- SQL Server AlwaysOn讀寫分離配置SQLServer
- 安裝Centos7 、 Mysql8 叢集,實現讀寫分離 高可用(五)-- MyCat配置詳解CentOSMySql
- Spring配置RoutingDataSource實現mysql讀寫分離SpringMySql
- mysql proxy 安裝及配置實現讀寫分離MySql
- Amoeba實現讀寫分離
- docker+mysql叢集+讀寫分離+mycat管理+垂直分庫+負載均衡DockerMySql負載
- Mysql讀寫分離叢集的搭建且與MyCat進行整合MySql
- 配置\清除 MySQL 主從 讀寫分離MySql
- [PHP]Larval主從讀寫分離配置PHP
- 搭建基於springmvc,ibatis的工程實現讀寫分離,配置分離SpringMVCBAT
- ProxySQL實現MySQL讀寫分離MySql
- Amoeba 實現 MySQL 讀寫分離MySql
- CQRS如何實現讀寫分離
- Mycat分庫分表的簡單實踐
- 位元組面試:什麼是讀寫分離?讀寫分離的底層如何實現?面試
- Amoeba+Mysql 實現讀寫分離MySql
- 【Mongo】Mongo讀寫分離的實現Go
- springboot實現讀寫分離Spring Boot
- mysql-proxy實現讀寫分離MySql
- MyCat 讀寫分離 資料庫分庫分表 中介軟體 安裝部署,及簡單使用資料庫
- mycat配置分庫分表
- Mycat分庫分表配置
- Docker實現Mariadb分庫分表、讀寫分離Docker
- Redis的讀寫分離Redis