基于Docker搭建Redis主從集群的實(shí)現(xiàn)
最近陸陸續(xù)續(xù)有不少園友加我好友咨詢 redis 集群搭建的問題,我覺得一定是之前寫的這篇 《基于Docker的Redis集群搭建》 文章有問題了,所以我花了幾分鐘瀏覽之前的文章總結(jié)了下面幾個(gè)問題:
redis 數(shù)量太少,只創(chuàng)建了 3 個(gè)實(shí)例;由于只有 3 個(gè)實(shí)例,所以全部只能是主節(jié)點(diǎn),無法體現(xiàn)集群主從關(guān)系;如何搭建主從集群?如何分配從節(jié)點(diǎn)?
基于之前的文章,我想快速的過一下這幾個(gè)問題,本文基于 Docker + Redis 5.0.5 版本,通過 cluster 方式創(chuàng)建一個(gè) 6 個(gè) redis 實(shí)例的主從集群,當(dāng)然文章會指出相應(yīng)的參數(shù)說明,這樣即便是創(chuàng)建 9 個(gè)實(shí)例的集群方式也是一樣的。
1、拉取 Redis 鏡像基于 Redis:5.0.5 版本,執(zhí)行如下指令:
docker pull redis:5.0.52、創(chuàng)建 6 個(gè) Redis 容器
創(chuàng)建 6 個(gè)Redis 容器:
redis-node1:6379 redis-node2:6380 redis-node3:6381 redis-node4:6382 redis-node5:6383 redis-node6:6384執(zhí)行命令如下:
docker create --name redis-node1 --net host -v /data/redis-data/node1:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-1.conf --port 6379docker create --name redis-node2 --net host -v /data/redis-data/node2:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-2.conf --port 6380docker create --name redis-node3 --net host -v /data/redis-data/node3:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-3.conf --port 6381docker create --name redis-node4 --net host -v /data/redis-data/node4:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-4.conf --port 6382docker create --name redis-node5 --net host -v /data/redis-data/node5:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-5.conf --port 6383docker create --name redis-node6 --net host -v /data/redis-data/node6:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file nodes-node-6.conf --port 6384
部分參數(shù)解釋:
--cluster-enabled:是否啟動集群,選值:yes 、no --cluster-config-file 配置文件.conf :指定節(jié)點(diǎn)信息,自動生成 --cluster-node-timeout 毫秒值: 配置節(jié)點(diǎn)連接超時(shí)時(shí)間 --appendonly:是否開啟持久化,選值:yes、no執(zhí)行命令截圖:
執(zhí)行命令如下:
docker start redis-node1 redis-node2 redis-node3 redis-node4 redis-node5 redis-node6
啟動截圖如下:
進(jìn)入任意一個(gè) Redis 實(shí)例:
# 這里以 redis-node1 實(shí)例為例docker exec -it redis-node1 /bin/bash
執(zhí)行組件集群的命令:
# 組建集群,10.211.55.4為當(dāng)前物理機(jī)的ip地址redis-cli --cluster create 10.211.55.4:6379 10.211.55.4:6380 10.211.55.4:6381 10.211.55.4:6382 10.211.55.4:6383 10.211.55.4:6384 --cluster-replicas 1
執(zhí)行命令截圖如下:
創(chuàng)建成功后,通過 redis-cli 查看一下集群節(jié)點(diǎn)信息:
root@CentOS7:/data# redis-cli127.0.0.1:6379> cluster nodes
執(zhí)行命令截圖如下:
我們再回到創(chuàng)建集群的命令上:
redis-cli --cluster create 10.211.55.4:6379~6384 --cluster-replicas 1
大家著重看這個(gè)參數(shù) --cluster-replicas 1,參數(shù)后面的數(shù)字表示的是主從比例,比如這里的 1 表示的是主從比例是 1:1,什么概念呢?
也就是 1 個(gè)主節(jié)點(diǎn)對應(yīng)幾個(gè)從節(jié)點(diǎn),現(xiàn)有 6 個(gè)實(shí)例,所以主從分配就是 3 個(gè) master 主節(jié)點(diǎn),3 個(gè) slave 從節(jié)點(diǎn)。
主節(jié)點(diǎn)最少3個(gè),3個(gè)才能保證集群的健壯性。
如果 --cluster-replicas 2 呢?
那么主從比例就是 1:2,也就是 1 個(gè)主節(jié)點(diǎn)對于應(yīng) 2 個(gè)從節(jié)點(diǎn)。
即:3(master) + 6(slave) = 9個(gè) Redis 實(shí)例。
如果不足 9個(gè) Redis 實(shí)例,但是參數(shù)指定為 2 會怎么樣?
報(bào)錯(cuò)信息如下:
提示已經(jīng)很清楚了,Redis集群至少需要3個(gè)主節(jié)點(diǎn)。那么從節(jié)點(diǎn)就需要有6個(gè),所以最后說:至少需要9個(gè)節(jié)點(diǎn)。
好的,至少3個(gè)主節(jié)點(diǎn)的要求我不繼續(xù)剛了,但是我想4個(gè)主節(jié)點(diǎn),2個(gè)從節(jié)點(diǎn),這總該可以了吧?
4個(gè)主節(jié)點(diǎn)滿足你:
# 進(jìn)入一個(gè)啟動的 reids 實(shí)例,這里以 redis-node1 實(shí)例為例docker exec -it redis-node1 /bin/bash
執(zhí)行組建集群的命令:
redis-cli --cluster create 10.211.55.4:6379 10.211.55.4:6380 10.211.55.4:6381 10.211.55.4:6382 --cluster-replicas 0
指定4個(gè)沒有從節(jié)點(diǎn)的主節(jié)點(diǎn),這樣你就有4個(gè)主節(jié)點(diǎn)了:
剩下的兩個(gè)從節(jié)點(diǎn)怎么辦呢?手動添加。
怎么添加?手動添加!
看到這些 master 節(jié)點(diǎn)的 id 了嗎,只需要把 slave 指定給他們就可以了。
繼續(xù)執(zhí)行如下命令:
redis-cli --cluster add-node 10.211.55.4:6383 10.211.55.4:6379 --cluster-slave --cluster-master-id b0c32b1dae9e7b7f7f4b74354c59bdfcaa46f30aredis-cli --cluster add-node 10.211.55.4:6384 10.211.55.4:6379 --cluster-slave --cluster-master-id 111de8bed5772585cef5280c4b5225ecb15a582e
將兩個(gè) Redis 實(shí)例塞給其他主節(jié)點(diǎn)了:
最后我們進(jìn)入 redis-cli,通過 cluster nodes 查看一下節(jié)點(diǎn)信息:
到此這篇關(guān)于基于Docker搭建Redis主從集群的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Docker Redis主從集群內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. html中的form不提交(排除)某些input 原創(chuàng)2. ASP動態(tài)網(wǎng)頁制作技術(shù)經(jīng)驗(yàn)分享3. ASP常用日期格式化函數(shù) FormatDate()4. CSS3實(shí)現(xiàn)動態(tài)翻牌效果 仿百度貼吧3D翻牌一次動畫特效5. asp.net core項(xiàng)目授權(quán)流程詳解6. XMLHTTP資料7. vue使用moment如何將時(shí)間戳轉(zhuǎn)為標(biāo)準(zhǔn)日期時(shí)間格式8. CSS3中Transition屬性詳解以及示例分享9. jsp文件下載功能實(shí)現(xiàn)代碼10. 開發(fā)效率翻倍的Web API使用技巧
