如何通过主机名而不是 ip 链接 redis 集群中的节点?

如何通过主机名而不是 ip 链接 redis 集群中的节点?

Redis 集群要求所有节点都能互相看到对方才能进行通信;为了适应一些简单的情况(例如,所有节点都公开的 docker),可以使用一些额外的配置选项:

cluster-announce-ip 10.1.1.5
cluster-announce-port 6379
cluster-announce-bus-port 6380

(看http://download.redis.io/redis-stable/redis.conf了解有关这些选项的唯一可用文档)

请注意,这些值被硬编码到配置文件中。这非常不方便。

是否可以以某种方式配置 redis 来使用主机名而不是端点的 IP?有没有什么解决方法?

作为为什么需要这样做的一个具体例子,考虑尝试通过 Dockerfile 在单个容器上的多个 redis 实例在 docker 镜像中配置测试 redis 集群:

  • 如果cluster-announce-ip设置了,所有节点都会尝试通过 进行聊天cluster-announce-ip

  • 如果是外部 IP,由于期间cluster-announce-ip未运行 docker 镜像,因此外部 IP 不可用,无法配置集群。-pdocker build...

  • 如果cluster-announce-ip没有设置,则可以配置集群,但是由于ip是docker-internal,一旦集群运行,外部就无法看到它(外部客户端在获得一个MOVED 10.0.0.x:2321对外部客户端不可见的ip时会抱怨)。

  • 您必须使用docker build ...然后手动配置节点来docker commit ...对结果进行快照。\

  • 当你在不同的物理主机上运行容器时,你必须手动更新镜像来更改公告ip(当使用DHCP时这会变得更加成问题)。

我知道 docker swarm 总体上是解决此问题的一种可能方法,但对于测试目的(例如本地开发)而言,它不是一个相关的解决方案。

只需使用主机名而不是 ip,开发人员就可以使用主机文件条目进行连接,而不必为每个开发人员手动更新 docker 镜像(显然每台开发机器都有自己的外部 ip)。

答案1

不,它尚未得到支持 - 不过该主题仍有一个未解决的问题:https://github.com/antirez/redis/issues/2186

相关内容