Redis 集群要求所有节点都能看到对方聊天;为了适应一些琐碎的情况(例如,所有节点都公开的 docker),提供了一些额外的配置选项:
cluster-announce-ip 10.1.1.5
cluster-announce-port 6379
cluster-announce-bus-port 6380
Run Code Online (Sandbox Code Playgroud)
(有关这些选项的唯一可用文档,请参阅http://download.redis.io/redis-stable/redis.conf)
请注意,这些值被硬编码到配置文件中。这是非常不方便的。
是否可以以某种方式将 redis 配置为使用主机名而不是端点的 IP?有什么解决方法吗?
作为为什么需要这样做的具体示例,请考虑尝试通过 Dockerfile 在单个容器上具有多个 redis 实例的 docker 镜像中配置测试 redis 集群:
如果cluster-announce-ip
设置了,则所有节点都尝试通过 进行聊天cluster-announce-ip
。
如果cluster-announce-ip
是外部IP,由于docker镜像在运行-p
期间没有运行docker build...
,外部IP不可用,无法配置集群。
如果cluster-announce-ip
未设置,则可以配置集群,但由于 ip 是 docker-internal,一旦集群运行,就无法从外部看到它(外部客户端会在收到MOVED 10.0.0.x:2321
外部客户端不可见的a 时抱怨)。
您必须使用docker build ...
然后手动配置节点来docker commit ...
对结果进行快照。\
当您在不同的物理主机上运行容器时,您必须手动更新映像以更改公告 ip(使用 DHCP 时,这变得更加成问题)。
我很欣赏 docker swarm 是解决这个问题的一种可能的解决方案,但对于测试目的(例如本地开发),它不是一个相关的解决方案。
简单地使用主机名而不是 ips 将允许开发人员只使用主机文件条目进行连接,而不必为每个开发人员手动更新 docker 映像(显然每个开发机器都有自己的外部 ip)。
归档时间: |
|
查看次数: |
6074 次 |
最近记录: |