用 Docker 搭建 Redis 集群
根据当前仓库里的配置,configurationUri 是给 Lettuce 用的 Redis 地址,支持单节点或多节点(作为集群种子节点)。下面是用 Docker 起 Redis 集群以及生成 configurationUri 的用法说明。
1. 用 Docker 搭建 Redis 集群
方式 A:docker-compose(推荐)
在项目里或任意目录建一个 docker-compose-redis-cluster.yml:
version: "3.8" services: redis-node-1: image: redis:7.2-alpine command: redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes ports: - "6379:6379" volumes: - redis-1-data:/data networks: redis-cluster: redis-node-2: image: redis:7.2-alpine command: redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes ports: - "6380:6379" volumes: - redis-2-data:/data networks: redis-cluster: redis-node-3: image: redis:7.2-alpine command: redis-server --port 6379 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes ports: - "6381:6379" volumes: - redis-3-data:/data networks: redis-cluster: volumes: redis-1-data: redis-2-data: redis-3-data: networks: redis-cluster: driver: bridge
启动并初始化集群:
# 启动 3 个节点 docker compose -f docker-compose-redis-cluster.yml up -d # 等待几秒后,创建集群(1 副本 = 3 主节点) docker run --rm --network <项目名>_redis-cluster redis:7.2-alpine redis-cli --cluster create \ redis-node-1:6379 redis-node-2:6379 redis-node-3:6379 \ --cluster-yes
<项目名>_redis-cluster 是 compose 根据目录名自动生成的网络名,可用 docker network ls 查看。
方式 B:单机多端口(本机开发)
本机跑 6 个容器(3 主 3 从),端口 6379–6384:
for port in 6379 6380 6381 6382 6383 6384; do docker run -d --name redis-$port -p $port:6379 \ redis:7.2-alpine redis-server --port 6379 --cluster-enabled yes \ --cluster-config-file nodes.conf --cluster-node-timeout 5000 done # 创建集群(前 3 个为主,后 3 个为从) docker run --rm -it --network host redis:7.2-alpine redis-cli --cluster create \ 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 \ 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 \ --cluster-replicas 1
2. 生成 configurationUri 并填到 config
代码里通过 RedisURI.create(uri) 解析,Lettuce 会连上你给的节点后自动用 CLUSTER SLOTS 发现整个集群,所以只需要填一个(或几个)种子节点即可。
-
单节点种子(本机/宿主机访问):
-
单机单节点:
redis://localhost:6379/ -
单机集群(上面方式 B):
redis://localhost:6379/或redis://127.0.0.1:6379/
-
-
多节点种子(可选,高可用):
-
redis://host1:6379,host2:6379,host3:6379/ -
示例:
redis://redis-node-1:6379,redis-node-2:6379,redis-node-3:6379/(在 compose 同一网络内的服务名)
-
-
带密码:
-
redis://:你的密码@localhost:6379/
-
你在 config.yml 里已经有的几处可以这样填(本机单节点示例):
# 本机单节点或本机集群任一节点 cacheCluster: configurationUri: redis://localhost:6379/ pubsub: uri: redis://localhost:6379/ pushSchedulerCluster: configurationUri: redis://localhost:6379/ rateLimitersCluster: configurationUri: redis://localhost:6379/
若 Signal-Server 跑在 Docker 里、Redis 用 compose 起的 3 个节点,则把 localhost 换成对应服务的 host(例如 redis-node-1),并保证它们在同一 Docker 网络中,例如:
-
configurationUri: redis://redis-node-1:6379/ -
或多种子:
redis://redis-node-1:6379,redis-node-2:6379,redis-node-3:6379/
3. 小结
| 场景 | configurationUri 示例 |
|---|---|
| 本机单节点 | redis://localhost:6379/ |
| 本机集群 | redis://localhost:6379/(任一台) |
| Docker 内多节点 | redis://redis-node-1:6379/ 或多节点逗号分隔 |
| 有密码 | redis://:password@host:6379/ |
你当前在 Ask 模式,我无法直接改仓库里的文件。若需要我帮你在项目里新建 docker-compose-redis-cluster.yml 或改写 config.yml 里这几项,可以切到 Agent 模式再说一下要哪种部署方式(本机 / Docker 内)。
更多推荐



所有评论(0)