Docker配置Redis集群及主從擴(kuò)容與縮容的操作方法
基礎(chǔ)鏡像拉取
docker run -p 6379:6379 -d redis:6.0.8
配置文件以及數(shù)據(jù)卷掛載
# 開啟密碼驗(yàn)證(可選) requirepass 1234 # 允許redis外地連接,需要注釋掉綁定的IP # bind 127.0.0.1 # 關(guān)閉保護(hù)模式(可選) protected-mode no # 注釋掉daemonize yes,或者配置成 daemonize no。因?yàn)樵撆渲煤?docker run中的 -d 參數(shù)沖突,會導(dǎo)致容器一直啟動失敗 daemonize no # 開啟redis數(shù)據(jù)持久化, (可選) appendonly yes
進(jìn)行數(shù)據(jù)卷掛載
docker run -d -p 6379:6379 --name redis --privileged=true \ -v /app/redis/redis.conf:/etc/redis/redis.conf \ -v /app/redis/data:/data \ redis:6.0.8 \ redis-server /etc/redis/redis.conf
三主三從配置
# 啟動第1臺節(jié)點(diǎn) docker run -d --name redis-node-1 --net host --privileged=true -v /app/redis-cluster/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6381 # 啟動第2臺節(jié)點(diǎn) docker run -d --name redis-node-2 --net host --privileged=true -v /app/redis-cluster/share/redis-node-2:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6382 # 啟動第3臺節(jié)點(diǎn) docker run -d --name redis-node-3 --net host --privileged=true -v /app/redis-cluster/share/redis-node-3:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6383 # 啟動第4臺節(jié)點(diǎn) docker run -d --name redis-node-4 --net host --privileged=true -v /app/redis-cluster/share/redis-node-4:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6384 # 啟動第5臺節(jié)點(diǎn) docker run -d --name redis-node-5 --net host --privileged=true -v /app/redis-cluster/share/redis-node-5:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6385 # 啟動第6臺節(jié)點(diǎn) docker run -d --name redis-node-6 --net host --privileged=true -v /app/redis-cluster/share/redis-node-6:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6386
通過docker ps可以看到結(jié)點(diǎn)已經(jīng)運(yùn)行成功
我們通過ifconfig查看本機(jī)的ip地址,后續(xù)操作會用到
進(jìn)入到node1中
docker exec -it redis-node-1 /bin/bash
配置主從關(guān)系:
redis-cli --cluster create ip:6381 ip:6382 ip:6383 ip:6384 ip:6385 ip:6386 --clu ster-replicas 1
查看集群狀態(tài):cluster nodes
每次配置的主從關(guān)系都不一致,所以需要查看信息 ,本次的主從對應(yīng)關(guān)系對應(yīng)如下圖所示:
Redis集群模式配置
進(jìn)入容器節(jié)點(diǎn)1:
docker exec -it redis-node-1 /bin/bash
此時(shí)配置set k1 v1可能會報(bào)錯(cuò),因?yàn)閗1超過了哈希槽的位置 ,無法進(jìn)行匹配
我們以集群模式進(jìn)入節(jié)點(diǎn)1:
redis-cli -p 6381 -c
此時(shí)會將哈希槽進(jìn)行重定向,哈希槽為12706,重定向到6383
(即節(jié)點(diǎn)3,哈希槽[10923, 16383]
)
主從擴(kuò)容
配置第七,第八臺redis服務(wù)
docker run -d --name redis-node-7 --net host --privileged=true -v /app/redis-cluster/share/redis-node-7:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6387 docker run -d --name redis-node-8 --net host --privileged=true -v /app/redis-cluster/share/redis-node-8:/data redis:6.0.8 --cluster-enabled yes --appendonly yes --port 6388
進(jìn)入第七臺容器內(nèi)部
docker exec -it redis-node-7 /bin/bash
將第七臺容器加入集群
redis-cli --cluster add-node ip:6387 ip:6381
檢查集群配置信息,此時(shí)加入集群成功,但哈希槽并沒有重新分配
重新分配哈希槽:
redis-cli --cluster reshard ip:6381
我們現(xiàn)在有4臺主機(jī),所以16384/4=4096,每臺機(jī)器分配到4096個(gè)槽位,然后會提示將哪些節(jié)點(diǎn)分配出去,此時(shí)輸入all,并且輸入yes
此時(shí)原先的哈希槽位發(fā)生了變化,有些槽位中已經(jīng)存儲了key
,完全的重新洗牌重新分配的成本過高,所以redis選擇從前3個(gè)節(jié)點(diǎn)中勻出來一部分給node7
為主節(jié)點(diǎn)6387分配從節(jié)點(diǎn)6388:
redis-cli --cluster add-node 192.168.xxx.xxx:6388 192.168.xxx.xxx:6387 --cluster-slave --cluster-master-id (6387的id)
主從縮容
現(xiàn)將從機(jī)6388移除
1. 進(jìn)入容器節(jié)點(diǎn)1
docker exec -it redis-node-1 /bin/bash
2. 檢查容器狀態(tài),獲取6388的節(jié)點(diǎn)編號,并移除
redis-cli --cluster del-node ip:6388 6388節(jié)點(diǎn)編號
3. 對集群重新分配槽位
redis-cli --cluster reshard ip:6381
我們將node7的槽位全部分配出去,所以輸入4096,將他分配給node1,所以再次輸入node1的id,并且輸入node7的id,回車后輸入done
此時(shí)槽位重新分配后,node7的槽位為0,我們可以將他刪除,否則會報(bào)錯(cuò)
redis-cli --cluster del-node ip:6387 node7 id
到此這篇關(guān)于Docker配置Redis集群以及主從擴(kuò)容與縮容的文章就介紹到這了,更多相關(guān)Docker配置Redis集群內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker基礎(chǔ)學(xué)習(xí)之?dāng)?shù)據(jù)管理
我們在使用Docker 的時(shí)候,會產(chǎn)生很多數(shù)據(jù),比如web服務(wù)器啊,數(shù)據(jù)庫之類的,有時(shí)我們還需要備份或復(fù)制這些數(shù)據(jù),這就需要涉及到Docker的數(shù)據(jù)管理了。這篇文章就給大家詳細(xì)的介紹Docker的數(shù)據(jù)管理,感興趣的朋友們可以參考借鑒,下面來一起看看吧。2016-10-10解決Docker x509 insecure registry的問題
這篇文章主要介紹了解決Docker x509 insecure registry的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03Docker使用Bind9實(shí)現(xiàn)域名解析的思路詳解
這篇文章主要介紹了DOCKER使用BIND9實(shí)現(xiàn)域名解析,主要包括刷新服務(wù)修改配置文件信息,實(shí)現(xiàn)思路也很簡單,本文給大家介紹的非常詳細(xì)對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-11-11Docker容器實(shí)戰(zhàn)之鏡像與容器的工作原理
這篇文章主要介紹了Docker容器實(shí)戰(zhàn)之鏡像與容器,關(guān)于鏡像與容器的工作原理,下面文章將詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-05-05docker+daocloud實(shí)現(xiàn)前端項(xiàng)目自動構(gòu)建部署
這篇文章主要介紹了docker+daocloud實(shí)現(xiàn)前端項(xiàng)目自動構(gòu)建部署,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07