Swarm集群中的服务发现与有状态服务扩展解决方案
1. 有状态服务扩展的问题
在Swarm集群中扩展服务看似简单,只需执行 docker service scale <SERVICE_NAME> <NUMBER_OF_INSTANCES> 命令,服务就能运行多个副本。但实际上,这只适用于无状态服务。无状态服务易于扩展的原因在于其没有状态需要考虑,无论运行多久,实例都是相同的,新实例和运行了一周的实例没有区别,可随时创建新副本。
然而,现实世界中存在有状态服务,如数据库。当扩展有状态服务时,至少需要考虑两个问题:
- 如何将一个实例的状态更改传播到其他实例?
- 如何创建有状态服务的副本(新实例),并确保状态也被复制?
通常,我们会将无状态和有状态服务组合成一个逻辑实体,例如后端服务可以是无状态的,并依赖数据库服务作为外部数据存储,这样可以明确区分关注点,且每个服务有不同的生命周期。
2. HAProxy可扩展性挑战
以HAProxy为例,当使用官方HAProxy镜像时,面临的挑战之一是如何更新所有实例的状态。有两种常规方法,但都存在问题:
- 挂载NFS卷 :在集群的每个节点上挂载NFS卷,并确保相同的主机卷挂载到所有HAProxy容器中。虽然所有实例会共享相同的配置文件,但HAProxy在初始化时加载配置文件,之后对配置的更改不会自动反映在服务状态中,需要重新加载。而且,实例可能运行在集群的任何节点上,采用动态扩展时,甚至可能不知道有多少实例在运行,需要发现实例数量、所在节点、容器ID,然后发送信号重新加载HAP
超级会员免费看
订阅专栏 解锁全文
36

被折叠的 条评论
为什么被折叠?



