我配置了三个docker容器..
- ghost - 运行我的 ghost 博客的自定义 docker 容器
- ghost-data-保存所有持久数据的docker容器..
content/* config.js, newrelic.js
- jwilder/nginx-proxy- 一个带有 nginx 的 docker 容器,位于 ghost 容器的前面
使用单个服务器,我知道如何将 nginx 链接到 ghost 容器并通过 nginx 提供服务。
但是我想开始学习 coreos 并迁移到 coreos 服务器群。我知道为了做到这一点,我需要为两个容器 (ghost、ghost-data) 编写服务文件,并确保 ghost 和 ghost-data 位于同一主机上,而 nginx 不位于同一主机上。
据我所知,coreos 中 fleet/clustering 的全部意义在于正常运行时间。容器将根据需要从一个节点移动到另一个节点。问题是,这些节点中的每一个都有自己的 IP。我如何让我的 DNS 知道这些 IP 以及哪个 IP 上有 nginx 服务器?
在我看来,有些事情就像这样运行……
- node1-运行nginx-proxy,公共ip为
1.1.1.1
- node2 - 运行 ghost、ghost-data、公共 ip
1.1.1.2
- node3 - 空闲节点,公网 IP
1.1.1.3
DNS 将 example.com 指向1.1.1.1
当 coreos 决定将 nginx-proxy 移至 node3 时会发生什么1.1.1.3
?
我如何让 DNS 遵循这一点?我确信在服务文件中有一种方法可以强制 nginx 停留在同一节点上,但这完全违背了目的,不是吗?
答案1
您有三个主要选择:
- 使用特定主机进行路由
这与您上面描述的设置类似,但我会确保您的单元文件保留在该主机上MachineID=abc123...
。但是,它不是超级 HA,因为您有一个单点故障。
- 使用云负载均衡器
如果您使用的是云提供商,请使用 LB 并在端口 80 上设置健康检查。只有在 80 上运行的机器才会获得流量。如果 LB 无法足够快地检测到您的故障,您将会有一些停机时间(几秒到几分钟)。
- 两层路由
类似于https://github.com/robszumski/varnish_etcd,但您可以使用 varnish/nginx/haproxy 和 confd 或 vulcand 来实现。基本上,每台机器上都有一个路由层,可以动态重定向到后端的位置。