搭建Mycat實現讀寫分離
環境
mycat 192.168.43.160
master 192.168.43.109
slave 192.168.43.200
1 服務安裝與配置
(1)
[root@CO10 ~]# tar -zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
[root@CO10 ~]# ls /usr/local/
bin etc games include lib lib64 libexec mycat sbin share src
[root@CO10 ~]# ll /usr/local/mycat/
(2)Mycat 需要安裝JDK 1.7 或者以上版本
[root@CO10 ~]# rpm -ivh jdk-8u60-linux-x64.rpm
[root@CO10 ~]# rpm -pql jdk-8u60-linux-x64.rpm
/usr/java/jdk1.8.0_60/
(3)調用環境變量
[root@CO10 ~]# vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_60/
export JAVA_BIN=/usr/java/jdk1.8.0_60/bin
export PATH=${JAVA_HOME}bin:$PATH
export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar
export MYCAT_HOME=/usr/local/mycat
export PATH=$MYCAT_HOME/bin:$PATH
[root@CO10 ~]# source /etc/profile #使環境變量生效
(4)編寫hosts文件
[root@CO10 ~]# vim /etc/hosts
192.168.43.160 mycat.cn
192.168.43.109 master.cn
192.168.43.200 slave.cn
2 服務啟動與啟動設置
(1)mycat的用戶賬號和授權信息是在
[root@CO10 mycat]# vim conf/server.xml
(2)編輯MyCAT的配置文件schema.xml,關於dataHost的配置信息如下:
[root@CO10 conf]# cp -rp schema.xml schema.xml.bak
Vim /usr/local/mycat/conf/schema.xml
(3)啟動服務
[root@CO10 conf]# mycat star
[root@CO10 conf]# mycat status
Mycat-server is running (7225).
監聽端口8066
[
root@CO10 ~]# mysql -h192.168.43.160 -uroot -p501524 -P8066
測試登入成功
配置Mysql主從參考鏈接:http://blog.51cto.com/13719714/2107950
master上創建數據庫和表,用於實現寫操作:
[root@CO11~]# mysql -uroot -p
mysql> create database ha;
mysql> use ha;
mysql> create table test(id int,name varchar(20));
mysql> insert into test values(1,’man’);
授權給mycat登陸數據庫使用的帳號
mysql> GRANT ALL PRIVILEGES ON *.* TO 'mycat'@"%" IDENTIFIED BY "Ggrr50152412!";
mysql> grant replication slave on *.* to slave@"10.10.10.%" identified by "123456";
mysql>flush privileges;
mysqldump –uroot –p123456 -B ha>ha.sql #導出給從庫
關閉密碼強度審計,在my.cnf添加validate-password=off
slave上導入數據庫和表,用於實現讀操作:
[root@CO12~]# mysql -uroot -p123456<ha.sql
授權給mycat登陸數據庫使用的帳號
mysql> GRANT ALL PRIVILEGES ON *.* TO 'mycat'@"%" IDENTIFIED BY "Ggrr50152412!";
mysql>flush privileges;
mysql>stop slave; #停止slave
mysql> change master to master_host='192.168.43.109',master_user='slave',master_password='123456';
mysql> start slave; #啟動slave
mysql> show slave status\G 查看狀態 ,有兩個yes主從同步成功!
重新啟動服務mycat服務
測試讀寫分離
(1)模擬故障:從服務器掛掉了
說明讀操作的路由切換到master上了,對外沒有任何影響!
(2)模擬故障:主服務器掛掉了
在客戶端上測試讀寫,拒絕連接,主數據庫停止了,是無法寫操作的,但不影響讀.
有兩個參數需要註意,balance和 switchType。
其中,balance指的負載均衡類型,目前的取值有4種:
1. balance="0", 不開啟讀寫分離機制,所有讀操作都發送到當前可用的writeHost上。
2. balance="1",全部的readHost與stand by writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,並且M1與 M2互為主備),正常情況下,M2,S1,S2都參與select語句的負載均衡。
3. balance="2",所有讀操作都隨機的在writeHost、readhost上分發。
4. balance="3",所有讀請求隨機的分發到wiriterHost對應的readhost執行,writerHost不負擔讀壓力
switchType指的是切換的模式,目前的取值也有4種:
1. switchType='-1' 表示不自動切換
2. switchType='1' 默認值,表示自動切換
3. switchType='2' 基於MySQL主從同步的狀態決定是否切換,心跳語句為 show slave status
4. switchType='3'基於MySQL galary cluster的切換機制(適合集群)(1.4.1),心跳語句為 show status like 'wsrep%'。
搭建Mycat實現讀寫分離