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系统),它更容易和简洁的从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文件在主节点中,只需要修改同时做为从节点的机器。

DCOS之Mesos-DNS介绍相关推荐

  1. DCOS实践分享(4):如何基于DC/OS整合SMACK(Spark, Mesos, Akka, Cassandra, Kafka)

    这篇文章入选CSDN极客头条 http://geek.csdn.net/news/detail/71572 当前,要保证业务的市场竞争力,仅靠设计一个可用并且好看的产品,已经完全不能满足要求.全球消费 ...

  2. 剖析Docker Swarm和Mesos:是什么?如何结合?有什么优势?

    本文讲的是剖析Docker Swarm和Mesos:是什么?如何结合?有什么优势?,[编者的话]本文来自Mesosphere,从生产环境的需求出发,简要介绍了Docker Swarm的诞生背景,以及其 ...

  3. IBM云计算架构师:Mesos新功能以及roadmap简介

    今天主要为大家介绍下Mesos社区,分享Mesos最近发布的一些新功能,以及未来会做的一些项目. 1 Mesos社区介绍 Mesos是Apache下的开源分布式资源管理框架,它被称为是分布式系统的内核 ...

  4. DCOS(centos 7.4/7.6)

    https://dcos.io/releases/ https://downloads.dcos.io/dcos/stable/1.12.0/dcos_generate_config.sh https ...

  5. dcos -1.7 都有哪些服务

    [root@t16 ~]# systemctl status dcos* | grep service | grep -v Nov | grep -v enable | grep -v CGroup ...

  6. centos7.2安装dcos

    1. 前言 对于容器编排系统,前段时间主要研究kubernetes,现在实验室要用dcos,所以在实验室集群上搭建了该系统,dcos版本为1.8.6. 使用的系统为centos7.2,机器使用情况如下 ...

  7. 36 张图详解 DNS :网络世界的导航

    上帝视角 我们平时在访问网站时,不使用 IP 地址,而是网站域名.但是抓包发现:交互报文是以 IP 地址进行的.那么 IP 地址是从哪来的呢?这是因为 DNS 把网站域名自动转换为 IP 地址. 报文 ...

  8. 网络服务-DNS 域名系统服务

    所有坑全部踩过,跟着步骤类所有命令正常运行 文章目录 一.DNS介绍 1.1什么是域名? 1.2什么是 DNS? 1.3域名的组成和分类 二.域名解析过程 分布式 DNS 服务器 三.DNS软件信息 ...

  9. linux 服务搭建DNS

    查看本地服务器所开启的服务.命令: service --status-all  举例说明: [root@zabbix-server ~]# service --status-all auditd (p ...

  10. Linux下的DNS服务器搭建

    Linux下的DNS服务器搭建 一.DNS介绍 1.dns域名系统 2.正向解析和反向解析 二.检查环境 三.搭建主DNS 1.安装dns相关包 2.设置服务开机自启 3.编辑DNS主配置文件 4.编 ...

最新文章

  1. 线性布局上的一个小错误
  2. ASP.NET 数据分页第三篇 - 结合 Custom Control 处理 GridView 的 UI 呈现
  3. BZOJ4668: 冷战 [并查集 按秩合并]
  4. 不计前嫌,握手言和:Microsoft宣布新版SQL Server将同时支持Windows与Linux两大平台...
  5. Android系统原生应用解析之桌面闹钟及相关原理应用之时钟任务的应用(二)
  6. CISC-235 Fall 2018 Assignment
  7. oracle 11g备份,导入oracle 10g
  8. dll 源码_重新编译mono——Android动态更新dll
  9. HALCON示例程序dem_trees.hdev提取树
  10. C语言实现与功能的程序,用C语言实现Ping程序功能
  11. input css年月日,input标签的type为date,显示的日期格式样式更改
  12. java重写面试题_Java面试题:重写了equals方法,为什么还要重写hashCode方法?
  13. hibernate 并发获取session失败 空指针_高并发之|通过ThreadPoolExecutor类的源码深度解析线程池执行任务的核心流程...
  14. 1926: 粟粟的书架 前缀和+二分+主席树
  15. 概要设计 英文_JavaScript 中的位运算和权限设计
  16. java.sql.SQLException: Field 'id' doesn't have a default value解决方法
  17. Day11如何衡量算法的时间复杂度和空间复杂度
  18. 微信小程序开发手册 - 02JSON 配置
  19. python数据分析与可视化从入门到精通_零基础学Python爬虫、数据分析与可视化从入门到精通...
  20. 同行动态:海隆软件96%销售额来自出口

热门文章

  1. java 获取当前时间是第几周
  2. pathon基础练习
  3. 怎么把文字转换成语音?如何将文字变成音频呢?
  4. 深度 | 剖析中国金融科技50强,数十万亿风口怎么追?
  5. 图片情感识别/分类/分析 概述
  6. 我们需要一个什么样的公司---读《重新定义公司》有感
  7. 蓝牙HID——将android设备变成蓝牙鼠标/触控板(BluetoothHidDevice)
  8. 天蝎项目整机柜服务器技术规范v1.01,天蝎项目整机柜服务器技术规范v1.01.doc
  9. 河南二级分销系统开发|二级分销是如何分佣的?
  10. 水管工游戏(啊哈算法)