在Swarm集群中创建和管理有状态服务
1. 有状态服务的持久化方法选择
有多种工具可用于持久化有状态服务的状态,常见的方法有以下三种:
1. 不持久化状态。
2. 将状态持久化到主机。
3. 将状态持久化到集群外部。
由于持久化有状态服务的数据至关重要,所以第一种方法不可取。在集群环境中,不能依赖某个特定主机始终可用,主机可能随时故障,服务也可能失败并被Swarm重新调度,无法保证新副本在同一主机上运行。因此,状态不应持久化到特定主机。
剩下的选择是将状态持久化到集群外部,比如网络驱动器。传统做法是系统管理员在所有主机上挂载网络驱动器,但这种方式存在问题,例如需要挂载单个驱动器并期望所有有状态服务将状态持久化到它上面,为每个服务挂载新驱动器会成为负担。如果使用Terraform管理基础设施,每次有新服务时都需要更新配置。根据十二因素应用的原则,一个服务应该有一个代码库,所有服务所需的内容应在单个存储库中,所以Terraform或其他基础设施配置工具不应包含特定于服务的详细信息。
解决方案是使用与管理服务类似的原则来管理卷,就像采用调度器(如Swarm)管理服务一样,应采用卷调度器来处理挂载。由于采用Docker容器运行服务,卷调度器应能与之集成并提供无缝体验,即管理卷应成为管理服务的一部分。Docker卷插件可以实现这一点,其目的是将第三方解决方案集成到Docker生态系统中,使卷管理透明化。
REX - Ray是一种解决方案,它能以透明的方式在集群中持久化数据,只需确保其已安装,之后就可以像挂载常规主机卷一样挂载卷,REX - Ray会在后台创建、挂载和管理网络驱动器。对于不使用实例间复制和同步的有状态服务
超级会员免费看
订阅专栏 解锁全文
4万+

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



