从高可用性的角度了解 docker swarm
Understanding docker swarm in terms of high availability
我目前正在尝试了解创建 docker 集群以使某些服务高度可用所需的条件。我通读了很多 docker swarm 文档,但如果我的理解是正确的,docker swarm 将只在任何主机上执行一个服务。如果主机出现故障会怎样?集群管理器会在另一个 host/node 上重新启动服务 运行 吗?有没有比找到的原始文档更好的解释 here?
没有比这更复杂的了。就像它说的那样,Swarm(和 kubernetes,以及此 space 中的大多数其他工具)是 声明性的 ,这意味着您告诉它您想要的状态(即 'I want 4 instances of redis') 并且 Swarm 会将系统收敛到该状态。如果你有 3 个节点,那么它将在节点 1 上调度 1 个 redis,在节点 2 上调度 1 个,在节点 3 上调度 2 个。如果节点 2 挂掉,那么系统现在不是 'compliant' 你声明的状态,Swarm将在节点 1 或 3 上安排另一个 redis(取决于策略等...)。
现在容器/任务/实例调度的这种动态性带来了另一个问题,发现。 Swarm 通过维护内部 DNS 注册表和为每个服务创建 VIP(虚拟 IP)来解决这个问题。不必寻址/跟踪每个 Redis 实例,我可以指向一个服务别名,Swarm 会自动将流量路由到它需要去的地方。
当然还有其他的考虑:
- 您的服务可以支持多个后端实例吗?它是无状态的吗?会话?缓存?等等...
- 什么是'HA'?多节点?多可用区?多区域?等等...
我目前正在尝试了解创建 docker 集群以使某些服务高度可用所需的条件。我通读了很多 docker swarm 文档,但如果我的理解是正确的,docker swarm 将只在任何主机上执行一个服务。如果主机出现故障会怎样?集群管理器会在另一个 host/node 上重新启动服务 运行 吗?有没有比找到的原始文档更好的解释 here?
没有比这更复杂的了。就像它说的那样,Swarm(和 kubernetes,以及此 space 中的大多数其他工具)是 声明性的 ,这意味着您告诉它您想要的状态(即 'I want 4 instances of redis') 并且 Swarm 会将系统收敛到该状态。如果你有 3 个节点,那么它将在节点 1 上调度 1 个 redis,在节点 2 上调度 1 个,在节点 3 上调度 2 个。如果节点 2 挂掉,那么系统现在不是 'compliant' 你声明的状态,Swarm将在节点 1 或 3 上安排另一个 redis(取决于策略等...)。
现在容器/任务/实例调度的这种动态性带来了另一个问题,发现。 Swarm 通过维护内部 DNS 注册表和为每个服务创建 VIP(虚拟 IP)来解决这个问题。不必寻址/跟踪每个 Redis 实例,我可以指向一个服务别名,Swarm 会自动将流量路由到它需要去的地方。
当然还有其他的考虑:
- 您的服务可以支持多个后端实例吗?它是无状态的吗?会话?缓存?等等...
- 什么是'HA'?多节点?多可用区?多区域?等等...