docker中redis集群配置

安装redis

redis集群配置

docker run -d --name redis-node-1 --net host --privileged=true -v /data/redis/share/redis-node-1:/data redis --cluster-enabled yes --appendonly yes --port 6381

docker run -d --name redis-node-2 --net host --privileged=true -v /data/redis/share/redis-node-2:/data redis --cluster-enabled yes --appendonly yes --port 6382

docker run -d --name redis-node-3 --net host --privileged=true -v /data/redis/share/redis-node-3:/data redis --cluster-enabled yes --appendonly yes --port 6383

docker run -d --name redis-node-4 --net host --privileged=true -v /data/redis/share/redis-node-4:/data redis --cluster-enabled yes --appendonly yes --port 6384

docker run -d --name redis-node-5 --net host --privileged=true -v /data/redis/share/redis-node-5:/data redis --cluster-enabled yes --appendonly yes --port 6385

docker run -d --name redis-node-6 --net host --privileged=true -v /data/redis/share/redis-node-6:/data redis --cluster-enabled yes --appendonly yes --port 6386

docker run -d 后台启动 Docker 容器

--name redis-node-1 给容器命名为redis-node-1(区分集群节点)

--net host 主机网络模式:容器直接使用宿主机的网络栈,端口无需映射(仅 Linux 支持)

--privileged=true 开启特权模式,解决数据卷挂载的权限问题

-v 宿主机目录:容器目录 数据持久化挂载:宿主机/data/redis/share/redis-node-1映射容器/data,Redis 数据落地到宿主机

redis 使用官方 Redis 镜像

--cluster-enabled yes 核心:开启 Redis 集群模式

--appendonly yes 开启 AOF 持久化,防止数据丢失

--port 6381 指定节点端口为 6381

redis-cli --cluster create 172.26.235.122:6381 172.26.235.122:6382 172.26.235.122:6383 172.26.235.122:6384 172.26.235.122:6385 172.26.235.122:6386 --cluster-replicas 1

这条命令的作用是:创建一个 3 主 3 从 的 Redis 集群,6 个节点都在同一台服务器(172.26.235.122),端口分别是 6381~6386,--cluster-replicas 1 表示每个主节点配 1 个从节点

验证集群是否成功

redis-cli --cluster check 172.26.235.122:6381

进入6381作为切入点,查看节点状态

redis cli -p 6381

cluster info

集群里所有节点的核心信息全部打印出来

cluster nodes

主从容错切换迁移案例

数据读写存储

启动6机构成的集群并通过exec进入

docker exec -it d2ba651c9635 /bin/bash

对6381新增两个key

set k1 v1

会根据内部哈希算法,去到不同的凹槽中

防止路由失效加参数-c并新增两个key

redis-cli -p 6381 -c

查看集群信息

redis-cli --cluster check 172.26.235.122:6381

主从容错的切换迁移

1号是主机,4号是从机

先停掉1号,原本1号是主机就会变成从机,4号就会变成主机

扩容

增加两个

docker run -d --name redis-node-7 --net host --privileged=true -v /data/redis/share/redis-node-7:/data redis --cluster-enabled yes --appendonly yes --port 6387

docker run -d --name redis-node-8 --net host --privileged=true -v /data/redis/share/redis-node-8:/data redis --cluster-enabled yes --appendonly yes --port 6388

进入6387容器实例内部,将新增的6387节点作为master节点加入原集群

redis-cli --cluster add-node 172.26.235.122:6387 172.26.235.122:6381

检查集群情况第一次

redis-cli --cluster check 172.26.235.122:6381

M: be60f9fe3b9caef9066398092faafac180701e98 172.26.235.122:6387

slots: (0 slots) maste

可以看到这个是新机器

重新分派槽号(从之前各自有点,平均分一点组成新的)

redis-cli --cluster reshard 172.26.235.122:6381

How many slots do you want to move (from 1 to 16384)? 4096(16385/4)

What is the receiving node ID? be60f9fe3b9caef9066398092faafac180701e98

第二次检查

redis-cli --cluster check 172.26.235.122:6381

为主节点6387分配从节点6388

redis-cli --cluster add-node 172.26.235.122:6388 172.26.235.122:6387 --cluster-slave --cluster-master-id be60f9fe3b9caef9066398092faafac180701e98

第三次检查

redis-cli --cluster check 172.26.235.122:6381

缩容

目的把6387和6388下线(先从机再主机)

检查集群情况

redis-cli --cluster check 172.26.235.122:6381

删除6388

redis-cli --cluster del-node 172.26.235.122:6388 f2c562b4e34f0083211fa54b1be08645dcdb66b4

第四次检查

redis-cli --cluster check 172.26.235.122:6381

把6387的槽号清空,重新分配

redis-cli --cluster reshard 172.26.235.122:6381

重新检查集群情况

redis-cli --cluster check 172.26.235.122:6381

删除6387

redis-cli --cluster del-node 172.26.235.122:6387 be60f9fe3b9caef9066398092faafac180701e98

相关推荐
分布式存储与RustFS1 天前
MinIO 官方 Docker 镜像被移除:依赖它的项目该怎么办
docker·云原生·devops·对象存储·minio·分布式存储
玉&心2 天前
通过Arthas在线诊断K8S中的内存及JVM等使用情况
docker·k8s·arthas
xing-xing2 天前
Docker容器中Nginx站点根目录网页配置访问
nginx·docker
guo_wen_qiang2 天前
上传本地镜像到harbor中
docker·容器·持续部署
羑悻的小杀马特2 天前
Dockerfile 全景指南:从入门编写dockerfile到生产环境镜像优化实战,一步步带你从啃透制作指令到镜像制作落地!
docker·dockerfile·镜像制作
BianHuanShiZhe2 天前
docker常见命令
docker
正经教主2 天前
【FDE系列】阶段2:Day 43:Docker Compose — 多容器一键编排
人工智能·docker·fde
忆~遂愿2 天前
本地片库怎么在外面打开?Plex + cpolar 搭一套可远程访问的私人影音库
docker·容器
Zhu7582 天前
docker环境,vLLM 部署 Qwen3.8-27B
docker·qwen·vllm
溜达的大象2 天前
多台服务器不想上重型监控?用 Beszel 搭一套轻量主机与 Docker 看板
docker