CoreOS 负载平衡是如何在云服务上发挥作用的?
How does CoreOS load balancing work out there in the wild on a cloud service?
假设我在某处的某个云服务上部署了一个 CoreOS 集群。
现在我有 4 台机器 运行 正在运行一个 node.js 应用程序,该应用程序遵循所有 12 因素原则和一台带有 Couchbase 的机器。
负载均衡在这种情况下是如何工作的?难道 ONE ip 最终 运行 会失去作为负载平衡器的功能吗?或者这几乎是不可能的?我应该将 DNS 指向哪里才能正常工作?
过去我有一个预先使用 NGINX 的 IP,然后以循环方式引导传入请求。
这如何与云服务上的 CoreOS 一起工作?
有不同的方法来完成这样的任务。一般来说,在你的基础设施、集群或数据中心之前应该有云服务负载均衡器。您将处理两层或三层架构。
DNS 指向您的云面向互联网的负载均衡器,它在任何情况下都管理客户端层。对于 AWS,它必须通过 CNAME 记录。
每一层的自动可扩展组可能会降低基础设施可用性降低的风险。然后,如果需要从 bootstrap 阶段进行配置,则通过 cloud-config 配置 Nginx 实例。
双层架构(您的方案)
- 您需要:
- Nginx 实例集群(客户端层)
- 数据库集群(数据层)
每个 Nginx 实例侦听一个 HTTP 端口并使用上游进行路由(取决于您的 NodeJS 应用程序分布)。服务发现是通过etcd实现的,使用Registrator + SkyDNS / Consul or Weaver,所以可以用这些工具提供的内部DNS替代Nginx解析器,而不是上游。
三层架构
- 您需要:
- Nginx 实例集群(客户端层)
- 应用集群(业务层)
- 数据库集群(数据层)
这同样适用于 Nginx 实例和两层,尽管客户端层解决了业务层应用程序(使用内部云负载平衡器)加上本地包含的单元。业务层的行为类似于两层体系结构中的客户端一,但考虑到安全组的正确配置。
对于这两种情况,数据层形成一个独立的区域(SkyDNS)或数据中心(Consul)。此外,您最终可以跳过 Nginx,但您需要在安全组中公开打开更多端口。
从中收集知识:
我能够构建:
TODO:Consul 版本。虽然,有 SkyDNS 和 Ambassadord 的例子。
参考文献:
- http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/vpc-loadbalancer-types.html
- http://www.softwaretestingclass.com/what-is-difference-between-two-tier-and-three-tier-architecture/
- http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/USVPC_creating_basic_lb.html
- http://weaveblog.com/2014/10/28/running-a-weave-network-on-coreos/
- http://www.livewyer.com/blog/2015/02/05/service-discovery-docker-containers-using-consul-and-registrator
- http://sysmagazine.com/posts/215653/
** 让我知道您的意见。
假设我在某处的某个云服务上部署了一个 CoreOS 集群。
现在我有 4 台机器 运行 正在运行一个 node.js 应用程序,该应用程序遵循所有 12 因素原则和一台带有 Couchbase 的机器。
负载均衡在这种情况下是如何工作的?难道 ONE ip 最终 运行 会失去作为负载平衡器的功能吗?或者这几乎是不可能的?我应该将 DNS 指向哪里才能正常工作?
过去我有一个预先使用 NGINX 的 IP,然后以循环方式引导传入请求。
这如何与云服务上的 CoreOS 一起工作?
有不同的方法来完成这样的任务。一般来说,在你的基础设施、集群或数据中心之前应该有云服务负载均衡器。您将处理两层或三层架构。
DNS 指向您的云面向互联网的负载均衡器,它在任何情况下都管理客户端层。对于 AWS,它必须通过 CNAME 记录。
每一层的自动可扩展组可能会降低基础设施可用性降低的风险。然后,如果需要从 bootstrap 阶段进行配置,则通过 cloud-config 配置 Nginx 实例。
双层架构(您的方案)
- 您需要:
- Nginx 实例集群(客户端层)
- 数据库集群(数据层)
每个 Nginx 实例侦听一个 HTTP 端口并使用上游进行路由(取决于您的 NodeJS 应用程序分布)。服务发现是通过etcd实现的,使用Registrator + SkyDNS / Consul or Weaver,所以可以用这些工具提供的内部DNS替代Nginx解析器,而不是上游。
- 您需要:
三层架构
- 您需要:
- Nginx 实例集群(客户端层)
- 应用集群(业务层)
- 数据库集群(数据层)
这同样适用于 Nginx 实例和两层,尽管客户端层解决了业务层应用程序(使用内部云负载平衡器)加上本地包含的单元。业务层的行为类似于两层体系结构中的客户端一,但考虑到安全组的正确配置。
- 您需要:
对于这两种情况,数据层形成一个独立的区域(SkyDNS)或数据中心(Consul)。此外,您最终可以跳过 Nginx,但您需要在安全组中公开打开更多端口。
从中收集知识:
我能够构建:
TODO:Consul 版本。虽然,有 SkyDNS 和 Ambassadord 的例子。
参考文献:
- http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/vpc-loadbalancer-types.html
- http://www.softwaretestingclass.com/what-is-difference-between-two-tier-and-three-tier-architecture/
- http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/USVPC_creating_basic_lb.html
- http://weaveblog.com/2014/10/28/running-a-weave-network-on-coreos/
- http://www.livewyer.com/blog/2015/02/05/service-discovery-docker-containers-using-consul-and-registrator
- http://sysmagazine.com/posts/215653/
** 让我知道您的意见。