docker部署redis集群
一、查询最新redis镜像
docker search redis
二、下载redis镜像
docker pull redis
三、创建一个文件夹,以及创建redis-cluster.tmpl模板文件
mkdir redis-cluster-d
cd redis-cluster-d
port ${PORT}
masterauth 123456
requirepass 123456
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.19.0.1
cluster-announce-port ${PORT}
cluster-announce-bus-port 1${PORT}
appendonly yes
参数描述
(1)port(端口号)
(2)masterauth(设置集群节点间访问密码,跟下面一致)
(3)requirepass(设置redis访问密码)
(4)cluster-enabled yes(启动集群模式)
(5)cluster-config-file nodes.conf(集群节点信息文件)
(6)cluster-node-timeout 5000(redis节点宕机被发现的时间)
(7)cluster-announce-ip(集群节点的汇报ip,防止nat,预先填写为网关ip后续需要手动修改配置文件)
(8)cluster-announce-port(集群节点的汇报port,防止nat)
(9)cluster-announce-bus-port(集群节点的汇报bus-port,防止nat)
(10) appendonly yes(开启aof)
四、在 redis-cluster下生成conf和data目标,并生成配置信息
执行以下命令,按模板生成文件以及文件夹
for port in `seq 7001 7006`; do \
mkdir -p ./${port}/conf \
&& PORT=${port} envsubst < ./redis-cluster.tmpl > ./${port}/conf/redis.conf \
&& mkdir -p ./${port}/data; \
done
文件结构
五、创建6个redis容器
for port in `seq 7001 7006`; do
docker run -d --net=host -v /root/redis-cluster-d/${port}/conf/redis.conf:/etc/redis/redis.conf -v /root/redis-cluster-d/${port}/data:/data --restart always --name=redis-${port} redis redis-server /etc/redis/redis.conf;
done
六、进入任意一个已运行的redis容器
docker exec -it redis-7001 bash
执行集群指令
redis-cli -a 123456 --cluster create 192.168.96.171:7001 192.168.96.171:7002 192.168.96.171:7003 192.168.96.171:7004 192.168.96.171:7005 192.168.96.171:7006 --cluster-replicas 1
七、检查集群状态
容器内验证
redis-cli -c -a 123456 -h 192.168.96.171 -p 7001
Centos中验证
redis-cli -c -a 123456 -h 192.168.96.171 -p 7001
redis-cli -a 123456 --cluster check 192.168.96.171:7001
八、如果是准备在公网使用集群,需要修改每一个nodes.conf文件中 myself,master配置的ip地址为公网ip,并重启
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了