Spartan

DNS是DC/OS的一个重要的组成部分。因为在DC/OS中,任务会经常移动(Agent节点内或Agent节点之间),一些通过名称引用的资源必须被动态解析(特别是通过某些应用协议)。没有在每个项目中实现Zookeeper或Mesos客户端,DC/OS选择DNS作为所有组件之间相互发现发现的通用语言。

Spartan是一个遵循RFC5625规范的DNS代理/分发器,它基于Mesos DNS(一个运行在DC/OS所有的Master节点上的服务)服务实现。

在所有的子系统(Agent节点及Agent节点上所有运行的容器)中,DC/OS将每个Master节点上的Mesos DNS服务地址添加到/etc/resolv.conf中。如果其中一个Master节点故障,对该Master节点的DNS查询将超时,这是有问题的。Spartan通过将DNS查询双调度到多个Master节点并返回第一个结果来解决这个问题。

除此之外,为了降低风险,Spartan将查询操作路由到它认为最适合执行查询的节点。具体来说,如果域以mesos结束,它只会将查询分派给Mesos的Master节点;如果没有,它将发送查询请求到配置的2个上行DNS代理(初始安装DC/OS时,在安装UI界面或genconf/config.yaml文件中配置的两个resolvers;安装完成后,可从/opt/mesosphere/etc/spartan.json查看)。

实现

Spartan的实现很简单,它具有双调度逻辑,并且还托管一个域spartan,这个域只有一条记录:ready.spartan。这条记录用来检查Spartan的可用性,许多服务在启动之前都先ping(ICMP)此地址,确认可达。

Spartan从Exhibitor(Zookeeper)服务那里获取自身的信息,因此,Exhibitor在Master节点上配置的正确性是至关重要的。另外,如果集群在安装时Master节点的列表是静态配置的,Spartan将从静态配置文件(位于/opt/mesosphere/etc/master_list)加载它们。

Zookeeper

Spartan还实现了Zookeeper的高可用性,在DC/OS中可以随时使用地址zk-1.zkzk-2.zkzk-3.zkzk-4.zkzk-5.zk。如果少于5个Zookeeper,Spartan将多个记录指向同一个Zookeeper节点。

Watchdog

由于DNS是一个如此特殊,敏感的系统服务,DC/OS为此采用Watchdog(dcos-spartan-watchdog.timer)来保护它。Watchdog会安装在每个节点上,每5分钟运行一次,检查ready.spartan域名是否可达。为了避免与Spartan竞争产生谐波效应,Watchdog在启动后休眠1分钟。

除了这个Watchdog,还有一个genresolv的Watchdog (dcos-gen-resolvconf.timer),它检查Spartan是否存活并能够生成resolv.conf。如果它检查到Spartan不活动,那么它将使用在DC/OS群集中配置的上游解析器重写resolv.conf(/etc/resolv.conf)。

Spartan网络接口

Spartan创建了一个名为spartan的网络接口虚拟设备。这个设备托管了3个IP:198.51.100.1/32198.51.100.2/32198.51.100.3/32。在/etc/resolv.conf中可以看到如下配置:

# Generated by gen_resolvconf.py. Do not edit.
# Change configuration options by changing DC/OS cluster configuration.
# This file must be overwritten regularly for proper cluster operation around
# master failure.

options timeout:1
options attempts:3

nameserver 198.51.100.1
nameserver 198.51.100.2
nameserver 198.51.100.3

参考

https://github.com/dcos/spartan

results matching ""

    No results matching ""