Docker-compose部署redis-cluster集群的完整步驟
一、核心配置解析(先理解關(guān)鍵參數(shù))
1. Redis 配置文件(redis1.conf/redis2.conf...)核心參數(shù)
| 參數(shù) | 作用 |
|---|---|
port 7001 | Redis 節(jié)點(diǎn)的服務(wù)端口(6 個(gè)節(jié)點(diǎn)對(duì)應(yīng) 7001-7006) |
protected-mode no | 關(guān)閉保護(hù)模式(允許跨機(jī)器訪問,集群部署必須關(guān)閉) |
cluster-enabled yes | 開啟集群模式(Redis Cluster 核心開關(guān)) |
cluster-config-file nodes.conf | 集群節(jié)點(diǎn)信息文件(自動(dòng)生成,無需手動(dòng)修改) |
cluster-node-timeout 5000 | 集群節(jié)點(diǎn)超時(shí)時(shí)間(5 秒,超時(shí)則判定節(jié)點(diǎn)不可用) |
cluster-announce-ip 172.13.3.160 | 集群對(duì)外公告的 IP(必須是宿主機(jī)可訪問的 IP,容器內(nèi) IP 不行) |
cluster-announce-port 7001 | 集群對(duì)外公告的服務(wù)端口(和 port 一致) |
cluster-announce-bus-port 17001 | 集群節(jié)點(diǎn)間通信的總線端口(服務(wù)端口 + 10000) |
appendonly yes | 開啟 AOF 持久化(防止集群重啟數(shù)據(jù)丟失) |
2. docker-compose.yml 核心配置
&redis-image:YAML 錨點(diǎn)語法,復(fù)用redis:5.0.7鏡像,避免重復(fù)寫;volumes:掛載本地配置文件到容器內(nèi)(./redis1.conf:/home/redis/cluster/redis.conf)、掛載數(shù)據(jù)目錄(./7001/data:/data),保證配置生效和數(shù)據(jù)持久化;ports:映射端口(服務(wù)端口 + 總線端口),必須全部開放,否則集群節(jié)點(diǎn)無法通信。
二、完整部署步驟(適配通用 Linux 環(huán)境,如 CentOS/Ubuntu)
步驟 1:環(huán)境準(zhǔn)備
檢查 Docker 和 Docker Compose 是否安裝:
# 檢查Docker docker -v # 檢查Docker Compose docker-compose -v # 若未安裝,先安裝(以CentOS為例) yum install -y docker docker-compose systemctl start docker && systemctl enable docker
替換配置中的宿主機(jī) IP:將所有 redis*.conf 和集群創(chuàng)建命令中的 172.13.3.160 替換為你的宿主機(jī)實(shí)際 IP(可通過 ifconfig/ip addr 查看)。
關(guān)閉防火墻 / 開放端口(二選一,推薦開放端口更安全):
# 方式1:臨時(shí)關(guān)閉防火墻(CentOS) systemctl stop firewalld && systemctl disable firewalld # 方式2:開放所需端口(推薦,CentOS) firewall-cmd --add-port=7001-7006/tcp --permanent firewall-cmd --add-port=17001-17006/tcp --permanent firewall-cmd --reload # Ubuntu 防火墻開放端口 ufw allow 7001-7006/tcp ufw allow 17001-17006/tcp ufw reload
步驟 2:創(chuàng)建目錄和配置文件
創(chuàng)建項(xiàng)目目錄(統(tǒng)一管理文件):
mkdir -p redis-cluster/{7001,7002,7003,7004,7005,7006}/data
cd redis-cluster生成 6 個(gè) Redis 配置文件(以 redis1.conf 為例,其他僅改端口):
# 創(chuàng)建redis1.conf
cat > redis1.conf << EOF
port 7001
protected-mode no
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 你的宿主機(jī)IP
cluster-announce-port 7001
cluster-announce-bus-port 17001
appendonly yes
pidfile /var/run/redis_7001.pid
EOF
# 快速生成redis2-redis6.conf(替換端口)
for port in {2..6}; do
cp redis1.conf redis${port}.conf
sed -i "s/7001/700${port}/g" redis${port}.conf
sed -i "s/17001/1700${port}/g" redis${port}.conf
sed -i "s/redis_7001/redis_700${port}/g" redis${port}.conf
done創(chuàng)建 docker-compose.yml 文件:
# 注意:新版本Docker Compose可刪除version字段(避免過時(shí)警告)
x-image:
&redis-image
redis:5.0.7
services:
redis1:
image: *redis-image
container_name: redis1
command: ["redis-server", "/home/redis/cluster/redis.conf"]
volumes:
- ./redis1.conf:/home/redis/cluster/redis.conf
- ./7001/data:/data
ports:
- 7001:7001
- 17001:17001
# 可選:添加網(wǎng)絡(luò)模式,避免IP問題
network_mode: "host"
redis2:
image: *redis-image
container_name: redis2
command: ["redis-server", "/home/redis/cluster/redis.conf"]
volumes:
- ./redis2.conf:/home/redis/cluster/redis.conf
- ./7002/data:/data
ports:
- 7002:7002
- 17002:17002
network_mode: "host"
redis3:
image: *redis-image
container_name: redis3
command: ["redis-server", "/home/redis/cluster/redis.conf"]
volumes:
- ./redis3.conf:/home/redis/cluster/redis.conf
- ./7003/data:/data
ports:
- 7003:7003
- 17003:17003
network_mode: "host"
redis4:
image: *redis-image
container_name: redis4
command: ["redis-server", "/home/redis/cluster/redis.conf"]
volumes:
- ./redis4.conf:/home/redis/cluster/redis.conf
- ./7004/data:/data
ports:
- 7004:7004
- 17004:17004
network_mode: "host"
redis5:
image: *redis-image
container_name: redis5
command: ["redis-server", "/home/redis/cluster/redis.conf"]
volumes:
- ./redis5.conf:/home/redis/cluster/redis.conf
- ./7005/data:/data
ports:
- 7005:7005
- 17005:17005
network_mode: "host"
redis6:
image: *redis-image
container_name: redis6
command: ["redis-server", "/home/redis/cluster/redis.conf"]
volumes:
- ./redis6.conf:/home/redis/cluster/redis.conf
- ./7006/data:/data
ports:
- 7006:7006
- 17006:17006
network_mode: "host"? 關(guān)鍵優(yōu)化:添加 network_mode: "host",讓容器使用宿主機(jī)網(wǎng)絡(luò),避免容器內(nèi) IP 和宿主機(jī) IP 不一致導(dǎo)致集群通信失敗。
步驟 3:?jiǎn)?dòng)容器
# 啟動(dòng)并后臺(tái)運(yùn)行容器 docker-compose up -d # 檢查容器狀態(tài)(6個(gè)容器都應(yīng)是Up狀態(tài)) docker-compose ps # 或 docker ps | grep redis
步驟 4:初始化 Redis Cluster 集群
進(jìn)入任意一個(gè) Redis 容器(比如 redis1):
docker exec -it redis1 /bin/bash
執(zhí)行集群創(chuàng)建命令(替換為你的宿主機(jī) IP):
redis-cli --cluster create 你的宿主機(jī)IP:7001 你的宿主機(jī)IP:7002 你的宿主機(jī)IP:7003 你的宿主機(jī)IP:7004 你的宿主機(jī)IP:7005 你的宿主機(jī)IP:7006 --cluster-replicas 1
--cluster-replicas 1:表示每個(gè)主節(jié)點(diǎn)對(duì)應(yīng) 1 個(gè)從節(jié)點(diǎn),最終形成 3 主 3 從的集群;
執(zhí)行后會(huì)提示集群規(guī)劃,輸入 yes 確認(rèn)即可。
步驟 5:驗(yàn)證集群是否正常
連接集群(-c 表示開啟集群模式,自動(dòng)重定向):
redis-cli -c -p 7001
查看集群節(jié)點(diǎn)信息:
redis
127.0.0.1:7001> cluster nodes # 輸出會(huì)顯示6個(gè)節(jié)點(diǎn),標(biāo)注主(master)/從(slave)、槽位分配等信息
測(cè)試數(shù)據(jù)讀寫(驗(yàn)證集群分片):
127.0.0.1:7001> set name test OK 127.0.0.1:7001> get name "test" # 切換節(jié)點(diǎn)測(cè)試(比如7002) 127.0.0.1:7001> exit redis-cli -c -p 7002 127.0.0.1:7002> get name # 會(huì)自動(dòng)重定向到存儲(chǔ)該key的節(jié)點(diǎn)并返回結(jié)果
三、常用運(yùn)維命令
# 停止集群容器 docker-compose stop # 啟動(dòng)集群容器 docker-compose start # 徹底刪除集群(含數(shù)據(jù),謹(jǐn)慎使用) docker-compose down rm -rf 700*/data/* # 刪除持久化數(shù)據(jù) # 查看集群狀態(tài) docker exec -it redis1 redis-cli -c -p 7001 cluster info
四、常見問題及解決方法
- 集群創(chuàng)建失?。篊ould not connect to xxx:7001
- 原因:端口未開放、宿主機(jī) IP 配置錯(cuò)誤、容器網(wǎng)絡(luò)模式問題;
- 解決:檢查防火墻 / 端口、確認(rèn)
cluster-announce-ip是宿主機(jī) IP、添加network_mode: "host"。
- 容器啟動(dòng)后日志報(bào)錯(cuò):Cluster state changed: fail
- 原因:節(jié)點(diǎn)間總線端口(17001-17006)未開放;
- 解決:開放 17001-17006 端口,重啟容器。
- 數(shù)據(jù)寫入后重啟容器丟失
- 原因:數(shù)據(jù)目錄未掛載或權(quán)限問題;
- 解決:檢查
volumes掛載路徑是否正確,給本地?cái)?shù)據(jù)目錄賦權(quán):
- 運(yùn)行
chmod 777 -R 700*/data
總結(jié)
- 部署核心:替換宿主機(jī) IP + 開放所有端口(7001-7006、17001-17006) + 初始化集群命令;
- 關(guān)鍵配置:
cluster-announce-ip必須是宿主機(jī) IP,protected-mode no關(guān)閉保護(hù)模式; - 避坑點(diǎn):添加
network_mode: host避免容器網(wǎng)絡(luò)隔離導(dǎo)致的通信失敗,開啟 AOF 持久化防止數(shù)據(jù)丟失。
到此這篇關(guān)于Docker-compose部署redis-cluster集群的文章就介紹到這了,更多相關(guān)Docker compose redis-cluster集群內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker desktop實(shí)現(xiàn)一分鐘部署searxng
這篇文章主要介紹了docker desktop實(shí)現(xiàn)一分鐘部署searxng,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-04-04
docker下遷移elasticsearch問題以及解決方案
文章描述了如何將Elasticsearch數(shù)據(jù)從一個(gè)服務(wù)器遷移到另一個(gè)服務(wù)器,包括數(shù)據(jù)掛載、版本一致性、啟動(dòng)命令的匹配以及可能遇到的權(quán)限和節(jié)點(diǎn)故障問題的解決方法2024-11-11
Docker安裝和基礎(chǔ)用法 Docker入門教程第二篇
這篇文章主要介紹了Docker安裝和基礎(chǔ)用法,Docker入門教程第二篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
Docker內(nèi)置網(wǎng)絡(luò)模式分析
這篇文章主要為大家介紹了Docker內(nèi)置網(wǎng)絡(luò)模式分析及使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08
Docker目錄遷移的詳細(xì)執(zhí)行步驟(按腳本流程)
我們?cè)谏a(chǎn)環(huán)境中安裝Docker時(shí),默認(rèn)的安裝目錄是?/var/lib/docker,而通常情況下,規(guī)劃給系統(tǒng)盤的目錄一般為50G,該目錄是比較小的,一旦容器過多或容器日志過多,就可能出現(xiàn)Docker無法運(yùn)行的情況,所以我們進(jìn)行Docker目錄遷移,本文給大家介紹了Docker目錄遷移的詳細(xì)步驟2025-07-07
在CentOS 7上安裝Docker環(huán)境的方法與注意事項(xiàng)
這篇文章主要介紹了在CentOS 7上安裝Docker環(huán)境的方法與注意事項(xiàng),需要的朋友可以參考下2016-10-10

