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 不可用,无法配置集群。-p
docker 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