我目前正在尝试了解创建 docker swarm 以使某些服务高度可用需要什么。我通读了很多 docker swarm 文档,但如果我的理解是正确的,docker swarm 只会在任何主机上执行服务。如果主机出现故障会发生什么?群管理器会重新启动在另一个主机/节点上运行的服务吗?有没有比在原始文档中找到的 here 更好的解释?
最佳答案
没有什么比这更复杂的了。就像它说的那样,Swarm(和 kubernetes,以及这个领域的大多数其他工具)是声明性的,这意味着你告诉它你想要的状态(即“我想要 4 个 redis 实例”),Swarm 会将系统收敛到那个状态状态。如果你有 3 个节点,那么它会在节点 1 上安排 1 个 redis,在节点 2 上安排 1 个,在节点 3 上安排 2 个。如果节点 2 死了,那么系统现在不“符合”你声明的状态,Swarm 将安排节点 1 或 3 上的另一个 redis(取决于策略等...)。
现在容器/任务/实例调度的这种动态性带来了另一个问题,发现。 Swarm 通过维护内部 DNS 注册表并为每个服务创建 VIP(虚拟 IP)来解决这个问题。不必寻址/跟踪每个 redis 实例,我可以改为指向服务别名,Swarm 将自动将流量路由到需要去的地方。
当然还有其他的考虑:
关于docker - 从高可用的角度理解 docker swarm,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44441140/