docker部署redis-cluster集群
https://segmentfault.com/a/1190000010131816
1>拉取reids镜像:docker pull redis
2>创建配置文件模版
port ${PORT} ##节点端口
cluster-enabled yes ##cluster集群模式
cluster-config-file nodes.conf ##集群配置名
cluster-node-timeout 5000 ##超时时间
cluster-announce-ip 172.18.0.1 ##实际为各节点网卡分配ip 先用上网关ip代替
cluster-announce-port ${PORT} ##节点映射端口
cluster-announce-bus-port 1${PORT} ##节点总线端
appendonly yes ##持久化模式
3>创建redis配置文件
mkdir docker/redisContainer/redis-cluster,进入redis-cluster目录执行下面指令
mkdir /docker/redisContainer/redis-cluster ##在home 目录下创建 集群配置文件加
cd /docker/redisContainer/redis-cluster ##在创建目录中
touch redis-cluster.tmpl ##创建模版件
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
注释:循环7000到7005,在redis-cluster目录下创建7000~7005文件夹,在每个文件夹下创建conf、data文件夹和在conf文件夹下的redis.conf配置文件
4>创建redis容器
for port in `seq 7000 7005`; do \
docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} \
-v /docker/redisContainer/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf:rw \
-v /docker/redisContainer/redis-cluster/${port}/data:/data:rw \
--restart always --name redis-${port} \
--sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf; \
done
注释:循环7000到7005创建以redis-7000 redis-7001 redis-7002 redis-7003 redis-7004 redis-7005的容器并运行
5>查看容器是否启动成功 docker ps 查看redis容器启动失败日志 docker logs redis-7000 查看reids容器使用的网络信息docker inspect redis-net
6>进入各个redis.conf配置cluster-announce-ip (对外IP),并重启各个redis:docker restart redis-7000 redis-7001 redis-7002 redis-7003 redis-7004 redis-7005
7>进入任意一个redis容器 docker exec -it redis-7000 /bin/bash
8>执行集群指令 redis-cli --cluster create (对外IP):7000 (对外IP):7001 (对外IP):7002 (对外IP):7003 (对外IP):7004 (对外IP):7005 --cluster-replicas 1,中间需要输入yes指令,执行成功如下
9>下载Redis Desktop Manager,reids可视化工具检验集群
10>进入redis客户端 docker exec -it redis-7000 /bin/bash
进入集群 redis-cli -c -p 7000
添加缓存key set name andy
查看缓存 get name
11>新增主节点
复制7000文件夹到7006,cp -r 7000 7006
修改7006/conf/redis.conf的配置,把ip和端口改成对外IP:7006
删除7006/data下的所有文件
新建redis-7006容器
port=7006; docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} -v /docker/redisContainer/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf:rw -v /docker/redisContainer/redis-cluster/${port}/data:/data:rw --restart always --name redis-${port} --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf;
进入任意redis容器,docker exec -it redis-7000 /bin/bash
执行命令新增主节点 redis-cli --cluster add-node (对外IP):7006 (对外IP):7000 --cluster-master-id 1
注释:第一个ip参数是新增节点ip地址,第二个ip为已存在的节点ip地址
12>新增子节点
复制7000文件夹到7007,cp -r 7000 7007
修改7007/conf/redis.conf的配置,把ip和端口改成对外IP:7007
删除7007/data下的所有文件
新建redis-7007容器:
port=7007; docker run -d -ti -p ${port}:${port} -p 1${port}:1${port} -v /docker/redisContainer/redis-cluster/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf:rw -v /docker/redisContainer/redis-cluster/${port}/data:/data:rw --restart always --name redis-${port} --sysctl net.core.somaxconn=1024 redis redis-server /usr/local/etc/redis/redis.conf;
进入任意redis容器,docker exec -it redis-7000 /bin/bash
执行命令新增主节点 redis-cli --cluster add-node (对外IP):7007 (对外IP):7000 --cluster-slave 1
注释:第一个ip参数是新增节点ip地址,第二个ip为已存在的主节点ip地址
集群不能用的情况:
(1)有半数或者半数以上的master挂掉,集群就不能用了
(2)如果集群任意master挂掉,且当前master没有slave,集群不能用
注:一个主库挂掉,它的从库自动顶替为主库,正常使用(前提是:有半数或者半数以上的master能用),挂掉的主库修复好后,会成为从库,不会抢占为主
其他:
redis-cli -h 查看redis-cli指令
redis-cli --cluster help查看cluster指令
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?