如何使用Docker安装Mycat中间件 | 实现主从的读写分离,搭建属于你的Mysql 集群 | 来看看这篇吧
上一篇寫(xiě)了如何使用Docker搭建Mysql的主從復(fù)制,這篇文章是在已經(jīng)搭建好Mysql的主從復(fù)制的基礎(chǔ)上實(shí)現(xiàn)讀寫(xiě)分離的。
直接CV也能搭建起來(lái),莫慌。
我們一起加油!!!
只要有docker的環(huán)境就歐克了。
一、創(chuàng)建Mycat文件夾
mkdir /usr/local/mycat/conf -p二、創(chuàng)建Docker文件夾
mkdir /usr/local/docker/mycat/ -p然后cd到/usr/local/docker/mycat 目錄下
cd /usr/local/docker/mycat
三、下載Mycat并解壓
在這個(gè)目錄下(/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進(jìn)行解壓
tar -zxvf mycat.tar.gz此時(shí)目錄結(jié)構(gòu):
為了不破壞原來(lái)的文件,我們將mycat的配置文件復(fù)制到/usr/local/mycat下。
cp -r mycat/conf/ /usr/local/mycat # 當(dāng)前文件夾下mycat/conf/ 復(fù)制到 /usr/local/mycat 目錄下可以看到已經(jīng)復(fù)制成功了。
四、編寫(xiě)Dockerfile文件
依舊是在/usr/local/docker/mycat目錄下進(jìn)行操作:
vim dockerfiledockerfile文件內(nèi)容:
#基于openjdk:8 創(chuàng)建鏡像, #如果是基于centos或其他的,必須保證已安裝了JDK,否則就需要在Dockerfile文件中也ADD進(jìn)來(lái) FROM openjdk:8#將宿主機(jī)目錄下的文件拷貝進(jìn)鏡像且ADD命令會(huì)自動(dòng)處理URL和解壓tar壓縮包 #將mycat解壓到/usr/local目錄中,得到 /usr/local/mycat ADD mycat.tar.gz /usr/local#容器數(shù)據(jù)卷,用于數(shù)據(jù)保存和持久化工作 #將mycat的配置文件的地址暴露出映射地址,啟動(dòng)時(shí)直接映射宿主機(jī)的文件夾 VOLUME /usr/local/mycat WORKDIR /usr/local/mycat#用來(lái)在構(gòu)建鏡像過(guò)程中設(shè)置環(huán)境變量 ENV MYCAT_HOME=/usr/local/mycat#暴露出MyCat的所需端口 EXPOSE 8066 9066#以前臺(tái)進(jìn)程的方式啟動(dòng)MyCat服務(wù) CMD ["/usr/local/mycat/bin/mycat", "console","&"]五、打包鏡像
docker build -t mycat:1.6 . #注意最后的小數(shù)點(diǎn) . 點(diǎn)代表dockerfile文件在執(zhí)行打包命令的目錄下六、編寫(xiě)Mycat配置文件
跳轉(zhuǎn)到/usr/local/mycat/conf/ 目錄下(就是我們之前將配置文件復(fù)制去的那個(gè)目錄)
cd /usr/local/mycat/conf/ ls #展示文件重點(diǎn)文件就是標(biāo)紅的三個(gè)
- schema.xml、server.xml :用于讀寫(xiě)分離,在我們這個(gè)小Demo中,只對(duì)schema.xml做了編輯。
- rule.xml:用于分表分庫(kù)配置文件。
- 詳情請(qǐng)查詢(xún)相關(guān)官方文檔。
編輯schema.xml文件:
vim schema.xml默認(rèn)文件內(nèi)容:
刪除不必要的,改成下面這樣的即可。
<?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>關(guān)于schema.xml做幾點(diǎn)簡(jiǎn)單說(shuō)明:
- balance=“0”, 不開(kāi)啟讀寫(xiě)分離機(jī)制,所有讀操作都發(fā)送到當(dāng)前可用的 writeHost 上。
- balance=“1”,全部的 readHost 與 stand by writeHost 參與 select 語(yǔ)句的負(fù)載均衡,
- balance=“2”,所有讀操作都隨機(jī)的在 writeHost、readhost 上分發(fā)。
- balance=“3”,所有讀請(qǐng)求隨機(jī)的分發(fā)到 readhost 執(zhí)行,writerHost 不負(fù)擔(dān)讀壓力
- 1 默認(rèn)值,自動(dòng)切換。
- -1 表示不自動(dòng)切換
- 基于 MySQL 主從同步的狀態(tài)決定是否切換。
補(bǔ)充-命令模式下的快速刪除:
按下insert鍵后–>再按下Esc進(jìn)入命令模式。
- 按dd即刪除光標(biāo)當(dāng)前所在行。
- 按ndd(n表示你輸入的數(shù)字)表示刪除包括光標(biāo)所在行開(kāi)始后的n行。
七、啟動(dòng)鏡像
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 #查看運(yùn)行日志八、連接測(cè)試
8.1、Navicat連接
可使用Navicat或者CMD命令行。
關(guān)于這里的賬號(hào)和密碼:
是在之前提到過(guò)的server.xml配置文件中。
我的連接上是這樣的,因?yàn)槲乙呀?jīng)搭建起了主從復(fù)制,里面也有表,所以是這樣的。
8.2、CMD連接
mysql -uroot -p123456 -h IP地址 -P 80668.3、讀寫(xiě)分離測(cè)試
我們?cè)谥鳈C(jī)中insert一句insert into mytable values(99,@@hostname),這樣就可以看出問(wèn)題了。
從機(jī)在復(fù)制這條語(yǔ)句去執(zhí)行的時(shí)候,和出現(xiàn)和主機(jī)不一樣的數(shù)據(jù)(有混合配置可以處理,我這里沒(méi)有處理,主要產(chǎn)生于函數(shù)),這樣我們?cè)偈褂胢ycat去讀取數(shù)據(jù),就可以看到是否實(shí)現(xiàn)讀寫(xiě)分離了。
主機(jī):
從機(jī):
從機(jī)取到的數(shù)據(jù)是不一樣的。
mycat讀取:
可以看到讀取的是從機(jī)上的數(shù)據(jù),可以說(shuō)明我們確實(shí)已經(jīng)實(shí)現(xiàn)了讀寫(xiě)分離啦。
九、自言自語(yǔ)
我其實(shí)真的非常好奇,一個(gè)真正高可用的系統(tǒng)要用多少個(gè)服務(wù)器😂。
寫(xiě)出來(lái)蠻久了,但是這方面看的人少,就一直留著自己在玩。
總結(jié)
以上是生活随笔為你收集整理的如何使用Docker安装Mycat中间件 | 实现主从的读写分离,搭建属于你的Mysql 集群 | 来看看这篇吧的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 你对Java网络编程了解的如何?Java
- 下一篇: 数据库常用函数总结