如何使用Docker安装Mycat中间件 | 实现主从的读写分离,搭建属于你的Mysql 集群 | 来看看这篇吧
上一篇寫了如何使用Docker搭建Mysql的主從復制,這篇文章是在已經搭建好Mysql的主從復制的基礎上實現讀寫分離的。
直接CV也能搭建起來,莫慌。
我們一起加油!!!
只要有docker的環境就歐克了。
一、創建Mycat文件夾
mkdir /usr/local/mycat/conf -p二、創建Docker文件夾
mkdir /usr/local/docker/mycat/ -p然后cd到/usr/local/docker/mycat 目錄下
cd /usr/local/docker/mycat
三、下載Mycat并解壓
在這個目錄下(/usr/local/docker/mycat)下載 Mycat
wget http://dl.mycat.org.cn/1.6.7.1/Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz將Mycat-server-1.6.7.1-release-20190627191042-linux重命名為mycat
mv Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz mycat.tar.gz將mycat.tar.gz進行解壓
tar -zxvf mycat.tar.gz此時目錄結構:
為了不破壞原來的文件,我們將mycat的配置文件復制到/usr/local/mycat下。
cp -r mycat/conf/ /usr/local/mycat # 當前文件夾下mycat/conf/ 復制到 /usr/local/mycat 目錄下可以看到已經復制成功了。
四、編寫Dockerfile文件
依舊是在/usr/local/docker/mycat目錄下進行操作:
vim dockerfiledockerfile文件內容:
#基于openjdk:8 創建鏡像, #如果是基于centos或其他的,必須保證已安裝了JDK,否則就需要在Dockerfile文件中也ADD進來 FROM openjdk:8#將宿主機目錄下的文件拷貝進鏡像且ADD命令會自動處理URL和解壓tar壓縮包 #將mycat解壓到/usr/local目錄中,得到 /usr/local/mycat ADD mycat.tar.gz /usr/local#容器數據卷,用于數據保存和持久化工作 #將mycat的配置文件的地址暴露出映射地址,啟動時直接映射宿主機的文件夾 VOLUME /usr/local/mycat WORKDIR /usr/local/mycat#用來在構建鏡像過程中設置環境變量 ENV MYCAT_HOME=/usr/local/mycat#暴露出MyCat的所需端口 EXPOSE 8066 9066#以前臺進程的方式啟動MyCat服務 CMD ["/usr/local/mycat/bin/mycat", "console","&"]五、打包鏡像
docker build -t mycat:1.6 . #注意最后的小數點 . 點代表dockerfile文件在執行打包命令的目錄下六、編寫Mycat配置文件
跳轉到/usr/local/mycat/conf/ 目錄下(就是我們之前將配置文件復制去的那個目錄)
cd /usr/local/mycat/conf/ ls #展示文件重點文件就是標紅的三個
- schema.xml、server.xml :用于讀寫分離,在我們這個小Demo中,只對schema.xml做了編輯。
- rule.xml:用于分表分庫配置文件。
- 詳情請查詢相關官方文檔。
編輯schema.xml文件:
vim schema.xml默認文件內容:
刪除不必要的,改成下面這樣的即可。
<?xml version="1.0"?><!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> </schema><dataNode name="dn1" dataHost="localhost1" database="testdb" /> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="47.113.227.254:3310" user="root" password="123456"> <readHost host="hostS2" url="47.113.227.254:3311" user="root" password="123456" /> </writeHost> </dataHost> </mycat:schema>關于schema.xml做幾點簡單說明:
- balance=“0”, 不開啟讀寫分離機制,所有讀操作都發送到當前可用的 writeHost 上。
- balance=“1”,全部的 readHost 與 stand by writeHost 參與 select 語句的負載均衡,
- balance=“2”,所有讀操作都隨機的在 writeHost、readhost 上分發。
- balance=“3”,所有讀請求隨機的分發到 readhost 執行,writerHost 不負擔讀壓力
- 1 默認值,自動切換。
- -1 表示不自動切換
- 基于 MySQL 主從同步的狀態決定是否切換。
補充-命令模式下的快速刪除:
按下insert鍵后–>再按下Esc進入命令模式。
- 按dd即刪除光標當前所在行。
- 按ndd(n表示你輸入的數字)表示刪除包括光標所在行開始后的n行。
七、啟動鏡像
docker run --name mycat -p 8066:8066 -p 9066:9066 -v /usr/local/mycat/conf/:/usr/local/mycat/conf/ -v /usr/local/mycat/logs/:/usr/local/mycat/logs/ -d mycat:1.6 docker ps -a #查看容器docker logs mycat #查看運行日志八、連接測試
8.1、Navicat連接
可使用Navicat或者CMD命令行。
關于這里的賬號和密碼:
是在之前提到過的server.xml配置文件中。
我的連接上是這樣的,因為我已經搭建起了主從復制,里面也有表,所以是這樣的。
8.2、CMD連接
mysql -uroot -p123456 -h IP地址 -P 80668.3、讀寫分離測試
我們在主機中insert一句insert into mytable values(99,@@hostname),這樣就可以看出問題了。
從機在復制這條語句去執行的時候,和出現和主機不一樣的數據(有混合配置可以處理,我這里沒有處理,主要產生于函數),這樣我們再使用mycat去讀取數據,就可以看到是否實現讀寫分離了。
主機:
從機:
從機取到的數據是不一樣的。
mycat讀取:
可以看到讀取的是從機上的數據,可以說明我們確實已經實現了讀寫分離啦。
九、自言自語
我其實真的非常好奇,一個真正高可用的系統要用多少個服務器😂。
寫出來蠻久了,但是這方面看的人少,就一直留著自己在玩。
總結
以上是生活随笔為你收集整理的如何使用Docker安装Mycat中间件 | 实现主从的读写分离,搭建属于你的Mysql 集群 | 来看看这篇吧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你对Java网络编程了解的如何?Java
- 下一篇: 你有没有遇到要实现多种登录方式的场景丫