docker redis5.0 cluster集群搭建的實現(xiàn)
系統(tǒng)環(huán)境:ubuntu16.04LTS
本文是使用 6 個 docker 容器搭建單機集群測試,實際環(huán)境如果是多臺,可對應(yīng)修改容器數(shù)量、端口號和集群 ip 地址,每臺機器都按下面步驟同樣操作即可。
拉取redis官方鏡像
docker pull redis:5.0
創(chuàng)建配置文件和數(shù)據(jù)目錄
創(chuàng)建目錄
mkdir ~/redis_cluster cd ~/redis_cluster
新建一個模板文件sudo vim redis_cluster.tmpl,填入如下內(nèi)容:
# redis端口 port ${PORT} # 關(guān)閉保護模式 protected-mode no # 開啟集群 cluster-enabled yes # 集群節(jié)點配置 cluster-config-file nodes.conf # 超時 cluster-node-timeout 5000 # 集群節(jié)點IP host模式為宿主機IP cluster-announce-ip 10.10.100.197 # 集群節(jié)點端口 7000 - 7005 cluster-announce-port ${PORT} cluster-announce-bus-port 1${PORT} # 開啟 appendonly 備份模式 appendonly yes # 每秒鐘備份 appendfsync everysec # 對aof文件進(jìn)行壓縮時,是否執(zhí)行同步操作 no-appendfsync-on-rewrite no # 當(dāng)目前aof文件大小超過上一次重寫時的aof文件大小的100%時會再次進(jìn)行重寫 auto-aof-rewrite-percentage 100 # 重寫前AOF文件的大小最小值 默認(rèn) 64mb auto-aof-rewrite-min-size 5120mb # 關(guān)閉快照備份 save ""
批量創(chuàng)建配置文件和數(shù)據(jù)目錄,終端運行以下命令:
for port in `seq 7000 7005`; do \ mkdir -p ./${port}/conf \ && PORT=${port} envsubst < ./redis_cluster.tmpl > ./${port}/conf/redis.conf \ && mkdir -p ./${port}/data; \ done
批量啟動 redis 容器
容器的 ip 地址采用 host 模式:
for port in `seq 7000 7005`; do \ docker run -d -it --memory=1G \ -v ~/redis_cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \ -v ~/redis_cluster/${port}/data:/data \ --restart always --name redis-${port} --net host \ --sysctl net.core.somaxconn=1024 redis:5.0 redis-server /usr/local/etc/redis/redis.conf; \ done
這里的--memeory=1G是限制單個 docker 容器占用內(nèi)存大小為 1G,超過會被進(jìn)程殺死。運行時可能會出現(xiàn)...Memory limited without swap...這個警告,可以忽略。如不需要限制內(nèi)存,可以去掉--memeory參數(shù)。
創(chuàng)建集群
隨便進(jìn)入其中一個容器:
docker exec -it redis-7000 bash
進(jìn)入后執(zhí)行如下命令創(chuàng)建集群:
redis-cli --cluster create 10.10.100.197:7000 10.10.100.197:7001 10.10.100.197:7002 10.10.100.197:7003 10.10.100.197:7004 10.10.100.197:7005 --cluster-replicas 1
安裝redis-cli命令(如已有可跳過此步):
sudo apt install redis-tools
輸入yes后,集群創(chuàng)建完畢,exit退出 docker,接著登錄其中一個節(jié)點,驗證集群可用性:
redis-cli -c -p 7000
輸入cluster nodes查看集群狀態(tài)
127.0.0.1:7000> cluster nodes 06851aa134d50096d82a434eced9194233b5204e 10.10.100.197:7003@17003 slave 8b33f273386c9504ef8bd10b005e24825b3b9596 0 1567671901000 4 connected a42297b65f7101fc9e4941ef8a0e65080d1b6338 10.10.100.197:7005@17005 slave 0aa20378d14e3ef0859815196cbafa67e1001d0e 0 1567671901581 6 connected e7b6a35b1e92f94c225c507ea19f7f0318f0d1c3 10.10.100.197:7002@17002 master - 0 1567671902582 3 connected 10923-16383 0aa20378d14e3ef0859815196cbafa67e1001d0e 10.10.100.197:7000@17000 myself,master - 0 1567671901000 1 connected 0-5460 8b33f273386c9504ef8bd10b005e24825b3b9596 10.10.100.197:7001@17001 master - 0 1567671902383 2 connected 5461-10922 fe355eed99100197f43d1216d1de82643dd496a5 10.10.100.197:7004@17004 slave e7b6a35b1e92f94c225c507ea19f7f0318f0d1c3 0 1567671901380 5 connected
設(shè)置集群密碼
設(shè)置密碼為什么不在上面的步驟,利用模板文件批量創(chuàng)建配置文件的時候就寫進(jìn)去?
無論是在 redis5.x 版本,還是以前的 redis 版本利用 ruby 創(chuàng)建集群的方式,在redis-cli --cluster create創(chuàng)建集群的環(huán)節(jié)沒有密碼參數(shù)配置,所以我們需要創(chuàng)建完集群再設(shè)置密碼。
我們用config set方式分別為每一個節(jié)點設(shè)置相同的密碼(不需要重啟 redis,且重啟后依然有效),在此之前先給所有 redis 配置文件加w權(quán)限,不然密碼無法保存到文件。
注意當(dāng)前路徑依然是在~/redis_cluster/:
for port in `seq 7000 7005`; do \ chmod a+w ./${port}/conf/redis.conf; \ done
下面用一臺做示例:
登錄一個節(jié)點:
redis-cli -c -p 7000
設(shè)置密碼:
127.0.0.1:7000> config set masterauth 123456 OK 127.0.0.1:7000> config set requirepass 123456 OK 127.0.0.1:7000> auth 123456 OK 127.0.0.1:7000> config rewrite OK
后面幾臺執(zhí)行同樣的操作即可。
集群寫入數(shù)據(jù)簡單測試
隨便登錄一個集群節(jié)點:
redis-cli -c -p 7003 -a 123456
寫入數(shù)據(jù):
127.0.0.1:7003> set va 1 -> Redirected to slot [7800] located at 10.10.100.197:7001 OK 10.10.100.197:7001> get va "1" 10.10.100.197:7001> del va (integer) 1
可以看到,集群中任意節(jié)點寫入數(shù)據(jù),在其他任意節(jié)點都能讀到。
至此,redis 集群搭建完成。
其他注意事項
- 外網(wǎng)訪問 redis,可能需要防火墻開放相應(yīng)端口;
- 如果需要刪除容器,可批量操作:
for port in `seq 7000 7005`; do \ docker stop redis-${port}; docker rm redis-${port}; done
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Docker方式實現(xiàn)MySql 主從復(fù)制(實踐篇)
本篇文章主要介紹了詳解Docker方式實現(xiàn)MySql 主從復(fù)制(實踐篇),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11Docker綁定端口后仍無法遠(yuǎn)程直接訪問的解決方法
在Docker中,如果容器的端口綁定錯誤或只綁定到了容器的內(nèi)部IP地址,將導(dǎo)致外部主機無法訪問該端口,所以本文小編給大家介紹了Docker綁定端口后仍無法遠(yuǎn)程直接訪問的解決方法,需要的朋友可以參考下2024-09-09使用Dockerfile部署nodejs服務(wù)的方法步驟
這篇文章主要介紹了使用Dockerfile部署nodejs服務(wù)的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01Docker?Windows最新版(4.17.x)修改鏡像存儲路徑的詳細(xì)步驟
這篇文章主要介紹了Docker?WIndows最新版(4.17.x)修改鏡像存儲路徑的步驟,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03docker搭建redis三主三從集群的實現(xiàn)步驟
本文主要介紹了docker搭建redis三主三從集群,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08Dockerfile中multi-stage(多階段構(gòu)建)詳解
在2017年5月3日即將發(fā)行的 Docker 17.05.0-ce 中,Docker 官方提供了簡便的多階段構(gòu)建 (multi-stage build) 方案,下面這篇文章主要給大家介紹了關(guān)于Dockerfile中multi-stage(多階段構(gòu)建)的相關(guān)資料,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03解決docker中mysql時間與系統(tǒng)時間不一致問題
最近在Docker中裝mysql時,發(fā)現(xiàn)數(shù)據(jù)庫時間與系統(tǒng)時間相差8個小時。查詢資料發(fā)現(xiàn),docker的默認(rèn)時區(qū)是0區(qū),其實這會對安裝的容器造成不少麻煩,比如執(zhí)行日志的記錄不準(zhǔn)確等2021-12-12Linux下Docker及portainer相關(guān)配置方法
本文以CentOS 7為例,安裝docker CE版本,docker有兩種版本,社區(qū)版本CE和企業(yè)版本EE,通過實例代碼給大家介紹了Linux下Docker及portainer相關(guān)配置方法,感興趣的朋友跟隨小編一起看看吧2019-06-06