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 实例。

  1. 双层架构(您的方案)

    • 您需要:
      1. Nginx 实例集群(客户端层)
      2. 数据库集群(数据层)

    每个 Nginx 实例侦听一个 HTTP 端口并使用上游进行路由(取决于您的 NodeJS 应用程序分布)。服务发现是通过etcd实现的,使用Registrator + SkyDNS / Consul or Weaver,所以可以用这些工具提供的内部DNS替代Nginx解析器,而不是上游。

  2. 三层架构

    • 您需要:
      1. Nginx 实例集群(客户端层)
      2. 应用集群(业务层)
      3. 数据库集群(数据层)

    这同样适用于 Nginx 实例和两层,尽管客户端层解决了业务层应用程序(使用内部云负载平衡器)加上本地包含的单元。业务层的行为类似于两层体系结构中的客户端一,但考虑到安全组的正确配置。

对于这两种情况,数据层形成一个独立的区域(SkyDNS)或数据中心(Consul)。此外,您最终可以跳过 Nginx,但您需要在安全组中公开打开更多端口。

从中收集知识:

我能够构建:

TODO:Consul 版本。虽然,有 SkyDNS 和 Ambassadord 的例子。

参考文献:

** 让我知道您的意见。