一. mycat原理圖如下:
如上篇文章,在搭建好mysql主從數據庫的基礎上,現在開始利用mycat實現一主一從讀寫分離,主要有以下幾個步驟:
二. 準備工作(後面會用到)
1. 主從機名稱修改
主機:192.168.1.10 從機:192.168.1.108
修改主從機的名字:
hostnamectl set-hostname 192.168.108
hostnamectl set-hostname 192.168.108
修改完畢通過hostname,查看機器名
三. mycat解壓安裝
mycat官方使用文檔:https://github.com/MyCATApache/Mycat-Server/wiki
去官網下載mycat:http://dl.mycat.io/1.6.7.3/20190927161129/
Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz
利用ftp上傳到主機上,然後在主機上解壓安裝mycat
mv Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz /usr/local
tar -zxvf Mycat-server-1.6.7.3-release-20190927161129-linux.tar.gz
mv Mycat-server-1.6.7.3-release-20190927161129-linux mycat
四. mycat 配置
/usr/local/mycat/conf 下有幾個文件
1. server.xml : 定義用戶以及系統相關變量,如端口等
vim server.xml 修改如下部分,設置登錄mycat的用戶名,密碼,以及邏輯庫名
<user name="mycat"> // 用戶名
<property name="password">123456</property> // 密碼
<property name="schemas">TESTDB</property> // 邏輯庫名稱
</user>
2.rule.xml:分片規則
3.schema.xml:定義邏輯庫,表分片,節點
這裏我們主要配置下schema.xml
負載均衡類型,目前的取值有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",所有讀請求隨機的分發到 readhost 執行,writerHost 不負擔讀壓力
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
</schema>
<!-- 配置物理數據庫名testDB -->
<dataNode name="dn1" dataHost="localhost1" database="testDB" />
<!-- 爲了能看到讀寫分離的效果,把balance設置成2,會在兩個主機間切換查詢 -->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="2"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<!-- 主機寫庫ip-->
<writeHost host="hostM1" url="192.168.1.10:3306" user="root"
password="123456">
<!-- 從機讀庫ip-->
<readHost host="hostS1" url="192.168.1.108:3306" user="root"
password="123456"/>
</writeHost>
</dataHost>
</mycat:schema>
4. 遠程連接主機數據庫,從機數據庫,看看是否可以連得上。
cd /usr/local/mysql/bin
./mysql -u root -p -h 192.168.1.10 -P3306 //主機
密碼123456
./mysql -u root -p -h 192.168.1.108 -P3306 // 從機
密碼123456
五. 啓動&登錄mycat
1. 啓動等命令
啓動程序 mycat是用Java寫的
(1) 控制檯啓動:去mycat/bin目錄下執行./mycat console 使用控制它啓動,可以看到日誌-------使用這個
(2) 後臺啓動:去mycat/bin目錄下 ./mycat start
./mycat restart
./mycat status
./mycat start
./mycat stop
啓動成功輸出:Starting Mycat-server...
兩種登錄方法:
登錄管理窗口(運維管理): mysql -umycat -p123456 -h 192.168.1.10 -P9066
登錄數據窗口:mysql -umycat -p123456 -h 192.168.1.10 -P8066 使用這個
2. 測試mycat的配置是否正常
(1)先啓動搭建好的主從模式
(2)進入到mycat命令行中可以測試下,是否可以通過mycat可以查詢到主從數據。可以查到的話,就代表我們配置正常。然後就可以進行下面的讀寫分離了。
六. 驗證讀寫分離
1. 在寫主機插入:insert into mytable values (1, @@hostname);
主從主機數據不一致了
2. 在Mycat裏查詢:select * from mytable