DCOS的Mesos-DNS它主要提供域名解析服务,Mesos-DNS 在DCOS框架中支持服务发现,同意应用程序和服务通过域名系统(DNS)来相互定位。DCOS中的 Mesos-DNS充当的角色和在互联网中DNS 的作用几乎相同。Mesos-DNS 的特点是轻量、无状态,易于部署和维护。

由DCOS架构中的Marathon或者Aurora框架启动的应用程序或者常驻服务被赋予名字,如earch.marathon.mesos或者log-aggregator.aurora.mesos,Mesos-DNS将每一个集群中正在执行的应用程序的域名转换成IP地址和端口号。这使得不论什么链接到集群中执行的服务都能够通过DNS进行查找。

Mesos-DNS被设计成简单而且无状态的,它不须要共识机制,永久储存以及日志。

这是能够的,由于Mesos-DNS 没有实现心跳,状态监測,或者管理应用方程序的生命周期。这些功能在 Mesos master, slaves,和 frameworks中实现。

图6.1 Mesos-DNS架构

Frameworks执行在 Mesos中,不须要直接与 Mesos-DNS通信。

Mesos-DNS 定期查询Mesos master(s),检索全部执行的框架中正在执行的任务的状态,并为这些任务生成DNS记录,包含A记录与SRV记录。当Mesos 集群中的任务開始,结束,或重新启动, Mesos-DNS都须要更新 DNS 记录以保证为最新状态。

Mesos-DNS通过Mesos master(s) 制定的配置来执行,能够容错,而且能够通过一个框架,如Marathon来监视应用程序的健康状况。从故障中重新启动后,Mesos-DNS检索Mesos master(s)和serves 的最新状态,并提供DNS请求。

Mesos-DNS,不是像其它的DNS系统,如SkyDNS 或者 Consul。首先,我们须要一个DNS系统来密切配合Mesos, 而不是让每一个用户或者框架描写叙述两次任务(一次Mesos执行,一次到 DNS系统),它更easy和简洁的从Mesos传递信息到DNS。其次,我们须要一个解决方法。Mesos及其框架已经实现了容错性和生命周期的管理。我们不想强迫Mesos用户再为DNS 部署还有一套同步机制,永久储存或日志。

Mesos-DNS也将延伸到 Mesos引入的安全和网络方面,并集成到到来的Datacenter Operating System (DCOS)中,以支持在公有云,私有数据中心以及混合部署中的服务发现。

命名规则

A(adress)即为记录,将hostname与ip进行关联(即上文所述的概念),在某一DNS域A中,当某一框架B启动某一任务C。
Mesos-DNS就会为hostname为C.B.A生成一条记录(A)。相应的ip有下述两中情况:
1、任务执行的容器所提供的网络ip(这个网络是mesos容器提供的)
2、任务在某一slave节点执行的ip
须要解释的A.B.C即为taks.framework.domain这种命名规则,比如。当mesos使用marathon 框架执行jenkins任务,这样就能够知道其域名。即为:jenkins.marathon.mesos

   SOA记录

 

dig jenkins.marathon.mesos

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.1 <<>> jenkins.marathon.mesos;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40120;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0;; QUESTION SECTION:;jenkins.marathon.mesos.        IN  A;; ANSWER SECTION:jenkins.marathon.mesos. 60  IN  A   10.133.19.22jenkins.marathon.mesos. 60  IN  A   10.133.19.23;; Query time: 0 msec;; SERVER: 10.133.19.21#53(10.133.19.21);; WHEN: 三 1月 13 13:58:02 EST 2016;; MSG SIZE  rcvd: 72

结果表明我们通过scale,扩展到2个task。位于不同的slave 节点上
当你将一个节点down掉,我们能够继续查下SOA记录:

dig jenkins.marathon.mesos

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.1 <<>> jenkins.marathon.mesos;; global options: +cmd;; Got answer:;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27520;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0;; QUESTION SECTION:;jenkins.marathon.mesos.        IN  A;; ANSWER SECTION:jenkins.marathon.mesos. 60  IN  A   10.133.19.22;; Query time: 0 msec;; SERVER: 10.133.19.21#53(10.133.19.21);; WHEN: 三 1月 13 11:49:34 EST 2016;; MSG SIZE  rcvd: 56

除了task.framework.domain记录,Mesos-DNS通常还会产生一个A记录 task.framework.slave.domain,即为task执行的slave节点的ip。例 如,jenkins.marathon.slave.mesos的A记录将执行marathon框架的jenkins应用的slave节点的ip。

在下述task 状态labels中。task的执行器必须提供容器ip

  • NetworkSettings.IPAddress
  • NetworkSettings.IPAddress

SRV记录
服务器资源记录为某一服务分配一个hostname和一个ip port。对于在域A中,当框架B启动任务C,
这样Mesos-DNS将产生一个SRV记录名为_C._tcp.B.A,命名规则为_taskname._protocol.framework.domain,
当中protocol能够为udp或者tcp。比如mesos使用marathon启动的任务jenkins。

dig _jenkins._tcp.marathon.mesos SRV

; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.1 <<>> _jenkins._tcp.marathon.mesos SRV

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 34329

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2

;; QUESTION SECTION:;_jenkins._tcp.marathon.mesos.  IN  SRV

;; ANSWER SECTION:_jenkins._tcp.marathon.mesos. 60 IN SRV 0 0 31383 jenkins-hfa6x-s5.marathon.slave.mesos._jenkins._tcp.marathon.mesos. 60 IN SRV 0 0 31006 jenkins-z8kkj-s7.marathon.slave.mesos.

;; ADDITIONAL SECTION:jenkins-hfa6x-s5.marathon.slave.mesos. 60 IN A  10.133.19.23jenkins-z8kkj-s7.marathon.slave.mesos. 60 IN A  10.133.19.22

;; Query time: 0 msec;; SERVER: 10.133.19.21#53(10.133.19.21)

;; WHEN: 三 1月 13 17:14:05 EST 2016

;; MSG SIZE  rcvd: 241

能够看到上述的查询结果,对于查询内容就不一一解释了

Service CT-IP Avai DI Avail Target Host Target Port A (Target Resolution)
{task}.{proto}.framework.domain no no {task}.framework.slave.domain host-port slave-ip
  yes no {task}.framework.domain di-port slave-ip
  no yes {task}.framework.domain di-port slave-ip
        di-port container-ip
{task}.{proto}.framework.slave.domain n/a n/a {task}.framework.slave.domain host-port slave-ip

下述图标简述了SRV产生的规则:

    其它记录

Mesos-DNS产生一些特殊的记录:

  • 对于leading master
    产生:leader.domain 记录和SRV(_leader._tcp.domain、_udp.domain)
  • 对于全部框架调度器
    产生:{framwork}.domain和SRV(_framwork._tcp.{framework}.domain)
  • 对于mesos master
    产生:master.domain记录和SRV(_master._tcp.domain、_udp.domain)
  • 对于mesos slave
    产生: slave.domain记录和SRV(_slave._tcp.domain)

假设须要配置Mesos-DNS去侦測leading master(通过Zookeeper),仅仅有一个master记录,可是对于Mesos-DNS来说,由于leading master须要经过选举过程,所以有时延。除了A记录和SRV记录以外,Mesos-DNS还支持SOA以及NS记录,DNS对于其它类型的请求将返回NXDOMAIN,Mesos-DNS不支持PTR记录来回溯IP。

6.3 Mesos-DNS安装与配置

要构建Mesos-DNS,你必须在你的电脑上安装go和godep。

必须设置GOPATH环境变量指向go

安装包的文件夹,必须加入$GOPATH/bin到PATH环境变量。假设你安装go到自己定义文件夹,须要

设置GOROOT环境变量,而且把$GOROOT/bin加入到PATH环境变量中去。比如,执行以下

操作:

export GOPATH=$HOME/go

export PATH=$PATH:$GOPATH/bin

export GOROOT=/usr/local/go

假设 go装在了/usr/local/go文件夹下

export PATH=$PATH:$GOROOT/bin

用godep构建Mesos-DNS:

go get github.com/mesosphere/mesos-dns

cd $GOPATH/src/github.com/mesosphere/mesos-dns

make all

这将生成一个静态的二进制Mesos-DNS文件,能够装在随意地方。在同一文件夹下你能够找到配置文件config.json。

6.4 Mesos-DNS执行

若要执行Mesos-DNS,必须在所选的服务器上安装mesos-dns二进制文件。服务能够装在Mesos的随意一台机器上,或者是在同一网络的一台专用机器上。接下来,依照链接创建一个配置文件。

能够这样启动Mesos-DNS

sudo mesos-dns -config=config.json &

为了加强容错能力,建议通过Marathon把Mesos-DNS服务公布到随意一台Mesos从节点上。假设Mesos-DNS失败,Marathon将又一次启动它,确保差点儿不间断的服务。能够通过Marathon约束从节点的主机名或者不论什么从节点的属性来选择把Mesos-DNS公布到哪一个从节点上面。

比如以下的json描写叙述了Marathon通过从节点的主机名公布Mesos-DNS 10.134.29.134:

{

“cmd”: “sudo /usr/local/mesos-dns/mesos-dns -config=/usr/local/mesos-dns/config.json”,

“cpus”: 1.0,

“mem”: 1024,

“id”: “mesos-dns”,

“instances”: 1,

“constraints”: [[“hostname”, “CLUSTER”, “10.134.29.134”]]

}

注意这个主机名字段是指从节点向Mesos注冊时使用的主机名。它可能不是一个IP地址,或者是不论什么形式有效的主机名。能够通过Mesos的WEB页面来检查从节点的主机名属性。能够通过REST訪问状态:

curl http://10.134.29.134:5050/master/state.json|python -mjson.tool

同意Mesos任务使用Mesos-DNS作为主DNS服务,你必须在每一个从节点上改动文件/etc/resolv.conf添加新的nameserver。10.134.29.134是Mesos-DNS安装节点,应该在每一个从节点/etc/resolv.conf開始加上一行nameserver 10.134.29.134。

假设启动多个Mesos-DNS,须要在/etc/resolv.conf的開始为每一个服务加入nameserver。这些条目的顺序将确定从节点连接Mesos-DNS实例的顺序。你能够通过设置options rotate在nameserver之间选择负载均衡的轮循机制。

/etc/resolv.conf中其它的nameserver设置保持不变。/etc/resolv.conf文件在主节点中,仅仅须要改动同一时候做为从节点的机器。

最新文章

  1. 安卓android sharepreference数据存储,保存输入框里面的数据
  2. mysql之替换字符串
  3. Frag(匹配跟踪)
  4. solr学习之入门篇
  5. 让Fragment监听返回键
  6. Timer组件
  7. Android图形合成和显示系统---基于高通MSM8k MDP4平台
  8. Winform获取当前程序名称或路径
  9. web开发性能优化---项目架构篇
  10. vim note(3)
  11. C语言中符号格式说明
  12. jetbrain phpstorm 增加或删除一个 live template
  13. Linux如何配置bond
  14. widows下的进程与服务
  15. css sprites 图标合并工具网站
  16. 数据库CRUD操作以及MyBatis的配置使用
  17. redis Lua学习与坑
  18. idea使用错误及技巧总结合集(一)
  19. css 圆形头像
  20. 在UnrealEngine中用Custom节点实现马赛克效果

热门文章

  1. c++ string char* 获取输入值的区别
  2. mysql 基本查询
  3. HDU 5514 Frogs
  4. 【管理】个人主义—&gt;集体主义
  5. 编辑被标记为“只读”的Word文档
  6. .net提高文章
  7. SG博弈函数模板
  8. 自定义Title
  9. 性能学习笔记之四--事务,思考时间,检查点,集合点和手写lr接口
  10. CF dp 一句话解题