了解docker群在高可用性方面

我目前正试图了解创build一个Docker群来使某些服务高度可用的必要条件。 我阅读了很多docker swarm文档,但是如果我的理解是正确的,docker swarm只会在任何主机上执行一项服务。 如果主机出现故障会发生什么? swarmpipe理器会重新启动在另一个主机/节点上运行的服务吗? 有没有比这里find的原始文档更好的解释?

没有比这更复杂的了。 就像它说的那样,Swarm(和kubernetes以及这个空间中的大多数其他工具)是声明式的 ,这意味着你告诉它你想要的状态(即'我想要redis的4个实例'),Swarm会把系统收敛到州。 如果你有3个节点,那么它将在节点1上调度1次redis,在节点2上调度1次,在节点3上调度2次。如果节点2死了,那么系统现在不符合你声明的状态,Swarm将调度节点1或3上的另一个redis(取决于策略等)。

现在这种容器/任务/实例调度的dynamic带来了另一个问题,即发现。 Swarm通过维护内部DNSregistry并为每个服务创buildVIP(虚拟IP)来处理这个问题。 我不需要处理/跟踪每个redis实例,而是可以指向服务别名,Swarm会自动将stream量路由到需要的地方。

当然还有其他的考虑:

  • 你的服务可以支持多个后端实例吗? 这是无国籍吗? 会议? caching? 等等…
  • 什么是“医pipe局”? 多节点? 多AZ? 多区域? 等等…