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