在负载均衡器后面集群 Docker 个容器以实现 HA
Clustering Docker containers behind load-balancers for HA
大多数 Docker 文献吹嘘您可以 运行 在同一台物理服务器上安装数百个甚至数千个容器。我想知道从 load-balancing/clustering 的角度来看这是什么样的。
假设我有一个 RESTful 网络服务 fizz-service.war
。通常,对于 "normal" 个虚拟机,我可能会将此服务部署到 50 个虚拟机(例如,fizzsvc01.example.com
到 fizzsvc50.example.com
),然后 cluster/load 平衡服务背后的这些虚拟机 URL,例如http://fizz-service.example.com
。当一个请求进来时,负载均衡器 select 一个节点将请求转发到,比如说 fizzsvc34:8080/fizz-service
.
我想知道这如何与 Docker 容器一起工作。 如果我有相同的 50 个容器 运行 跨越,比如说,5 个节点:
- 这些节点可以是 VM 还是物理服务器?
- 对于同一节点上的容器 运行,它们每个 运行 都在自己的端口上吗?否则,您怎么可能在同一个端口上有 50 个 运行ning 服务实例?
- 而使用 "normal VMs" 时,负载均衡器配置了构成池的所有 VM,然后我只需将服务部署到池中的每个 VM,[=41 这有何变化=] 容器?我的负载均衡器(可能是 F5 或 nginx 等单独的基础设施)如何“知道”所有可用于分配负载的容器?
或者当我进入 Docker-land 时,我对 HA/load 平衡的整个方法是否需要改变?
每个容器将 运行 在一个专用端口上(通常由 Docker 分配),您需要一些机制来跟踪每个容器,以便为您的容器生成配置负载均衡器。
因此,除了容器的数量可能更大,需要自动化才能实用之外,没有什么真正的改变。与虚拟机相比,容器更加即时。
大多数 Docker 文献吹嘘您可以 运行 在同一台物理服务器上安装数百个甚至数千个容器。我想知道从 load-balancing/clustering 的角度来看这是什么样的。
假设我有一个 RESTful 网络服务 fizz-service.war
。通常,对于 "normal" 个虚拟机,我可能会将此服务部署到 50 个虚拟机(例如,fizzsvc01.example.com
到 fizzsvc50.example.com
),然后 cluster/load 平衡服务背后的这些虚拟机 URL,例如http://fizz-service.example.com
。当一个请求进来时,负载均衡器 select 一个节点将请求转发到,比如说 fizzsvc34:8080/fizz-service
.
我想知道这如何与 Docker 容器一起工作。 如果我有相同的 50 个容器 运行 跨越,比如说,5 个节点:
- 这些节点可以是 VM 还是物理服务器?
- 对于同一节点上的容器 运行,它们每个 运行 都在自己的端口上吗?否则,您怎么可能在同一个端口上有 50 个 运行ning 服务实例?
- 而使用 "normal VMs" 时,负载均衡器配置了构成池的所有 VM,然后我只需将服务部署到池中的每个 VM,[=41 这有何变化=] 容器?我的负载均衡器(可能是 F5 或 nginx 等单独的基础设施)如何“知道”所有可用于分配负载的容器?
或者当我进入 Docker-land 时,我对 HA/load 平衡的整个方法是否需要改变?
每个容器将 运行 在一个专用端口上(通常由 Docker 分配),您需要一些机制来跟踪每个容器,以便为您的容器生成配置负载均衡器。
因此,除了容器的数量可能更大,需要自动化才能实用之外,没有什么真正的改变。与虚拟机相比,容器更加即时。