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

相关推荐
java_logo3 小时前
Docker 部署 HertzBeat:轻松搭建无代理实时监控与告警平台
运维·docker·容器·监控告警·部署教程·hertzbeat·轩辕镜像
子建莫敌4 小时前
Docker 速查手册
docker·容器
雾隐隐o5 小时前
Docker 镜像归档与容器管理
java·docker·eureka
独码侠5 小时前
第02篇·30 分钟跑通 Dify:Docker 一键部署,5 步上线首个 AI 应用
人工智能·docker·容器·dify
纪伊路上盛名在5 小时前
了解一点Docker
java·docker·容器
索西引擎6 小时前
基于 Docker 容器化的 MySQL 数据库部署与访问控制机制研究
数据库·mysql·docker
Csxyzj6 小时前
基于Linux+Docker NAT的Ollama多实例负载均衡部署
运维·docker·容器
瞬间&永恒~7 小时前
【Kubernetes】(十五)维护与升级、ETCD 备份和恢复
linux·运维·docker·云原生·kubernetes
LlmCraft|大模型工程实践7 小时前
12. Docker 日志管理与监控:ELK 日志收集 + Prometheus 性能监控
elk·docker·prometheus