docker - 调用 redis-trib 时启动 Redis 集群挂起

标签 docker redis

我尝试设置一个运行 docker 的 Redis 集群,但当我尝试加入它们时它挂起。我的 docker ps 给我这个:

docker ps output

注意端口映射。

所有容器都有这个基本的 redis.conf 文件

port 6379
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes

cluster-announce-ip 127.0.0.1
cluster-announce-port [7001, 7002, 7003, 7004, 7005 or 7006]
cluster-announce-bus-port [7101, 7102, 7103, 7104, 7105 or 7106]

唯一的变化是每个 docker 容器的 cluster-announce-portcluster-announce-bus-port。我希望你明白这一点。

我尝试使用 ./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 加入节点127.0.0.1:7006

它完美地发现了它并询问是否应该接受配置:

redis-trib output

但随后 redis-trib 无限期挂起,并显示“等待集群加入”。我可以通过 docker logs r_1 看到 r_6,纪元正在设置:

1:M 15 Jul 10:38:08.493 # configEpoch set to 1 via CLUSTER SET-CONFIG-EPOCH

所以 redis-trib 确实调用了不同的节点。

我真的无法在任何地方找到关于集群通告变量的任何信息。这里有人知道怎么做吗?我认为我的问题出在这部分。

我使用的redis版本是4.0.10。

最佳答案

好的,我想通了。我需要

  1. 将我的 cluster-announce-ip 设置为安装 docker 时创建的以太网适配器(打开终端并执行 ipconfig)
  2. 更新 redis-trib.rb 以反射(reflect)此 IP
  3. 创建docker镜像时映射16379端口

关于docker - 调用 redis-trib 时启动 Redis 集群挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51347622/

相关文章:

docker - 在 Go 应用程序中获取容器 IP

amazon-web-services - 我可以在 AWS ECS 基础设施中使用 docker key 吗?

node.js - Jenkins - docker : not found

php - 为什么我的 Predis 客户端的 PHPUnit 模拟不符合我的预期?

php - Redis session disable_locking 为真

windows - docker 警告 : failed to get default registry endpoint from daemon

docker - 限制 Internet 访问 - Docker 容器

node.js - 在 redis/heroko/node.js 上捕获身份验证错误

docker - 使用备份 dump.rdb 启动 redis 容器

php - 更新/追加 redis 值