关于Mesos-DNS

Mesos-DNS用来支持Mesos集群上的服务发现,使运行在Mesos上的应用和服务可以通过域名服务器来发现彼此。你只要知道一个Mesos数据中心上运行的应用的名字,就可以通过Mesos-DNS查询到该应用的IP和端口号。

工作原理

了解一个东西的原理,对实际运用是有帮助的。这里简单的看看Mesos-DNS的工作原理。下图是官网上的Mesos-DNS架构图。
官网提供的Mesos-DNS架构图
Mesos-DNS定期去查询Mesos master,监测所有framework上运行的所有任务,并生成这些任务的DNS记录(包括A记录和SRV记录)。当Mesos集群上的任务发生启动、结束、重启等状态变化时,Mesos-DNS都会更新DNS记录,以保持最新的状态。

Mesos-DNS不需要与framework交互,只需要在启动的时候指向Mesos master即可。运行在Master Slave上的应用和服务,可以通过查询Mesos-DNS来发现它们依赖的应用和服务的IP和端口号。

对于那些非Mesos任务的DNS解析请求,Mesos-DNS自己解析不了,通常使用一个扩展DNS服务器,将这些请求转发到扩展DNS服务来解析即可。

配置Mesos-DNS

Mesos-DNS不需要编译安装,从https://github.com/mesosphere/mesos-dns/releases直接获取二进制文件即可。下面以我在测试环境配置的过程为例,来简单的看看Mesos-DNS的配置和运行方法。

1 获取mesos-dns的二进制文件

mkdir /usr/local/mesos-dns
cd /usr/local/mesos-dns
curl -o mesos-dns https://github.com/mesosphere/mesos-dns/releases/download/v0.5.2/mesos-dns-v0.5.2-linux-amd64
chmod +x mesos-dns

2 编写json配置文件
mesos-dns启动时需要指定一个json的配置文件,这个配置文件里指定了Mesos master、域名等所需要的参数。上一篇文章中讲了Mesos和Marathon的安装,这里就直接使用上次搭建的那个环境来配置Mesos-DNS。config.json配置文件的内容如下:

{
  "zk": "zk://192.168.0.101:2181,192.168.0.102:2181,192.168.0.103:2181/mesos",
  "masters": ["192.168.0.101:5050", "192.168.0.102:5050", "192.168.0.103:5050"],
  "refreshSeconds": 60,
  "ttl": 60,
  "domain": "mesos",
  "port": 53,
  "resolvers": ["8.8.8.8"],
  "timeout": 5, 
  "httpon": true,
  "dnson": true,
  "httpport": 8123,
  "externalon": true,
  "listener": "192.168.0.106",
  "SOAMname": "felix.mesos",
  "SOARname": "admin.felix.mesos",
  "SOARefresh": 60,
  "SOARetry":   600,
  "SOAExpire":  86400,
  "SOAMinttl": 60,
  "IPSources": ["netinfo", "mesos", "host"]
}

3 运行mesos-dns
(1) 使用命令行直接运行mesos-dns

/usr/local/mesos-dns/mesos-dns -config=/usr/local/mesos-dns/config.json

(2) 使用marathon来运行mesos-dns
使用marathon来运行mesos-dns的好处是,即使在mesos-dns挂了之后也会立刻被重新运行。因为DNS服务器需要一个稳定的IP地址,所以通常将其指定在一个Mesos slave节点上运行。这里通过constraints字段来指定运行的slave的IP为192.168.0.106。在marathon上运行mesos-dns的json配置如下:

{
  "id": "/mesos-dns",
  "cmd": "/usr/local/mesos-dns/mesos-dns -config=/usr/local/mesos-dns/config.json",
  "cpus": 0.2,
  "mem": 128,
  "disk": 0,
  "instances": 1,
  "constraints": [
    [
      "hostname",
      "CLUSTER",
      "192.168.0.106"
    ]
  ]
}

4 指定mesos-dns为域名服务器
为了让Mesos上运行的任务都使用mesos-dns作为主DNS服务器来解析,需要在Mesos slave节点的/etc/resolv.conf配置文件的第一行指定mesos-dns服务器为域名服务器。

sed -i '1s/^/nameserver 192.168.0.106\n/' /etc/resolv.conf

5 mesos-dns能解析的域名的格式
mesos-dns解析的域名格式为:应用名.框架名.mesos域

构成项说明
应用名marathon上运行的应用或任务的名字,如果该应用在分组里面,需要在应用名后面接上”-组名”;另外,应用名字里面有点号的,需要替换成减号”-“
框架名我们采用的是marathon,这里的名字就为marathon
mesos域这个是在mesos-dns的json配置文件里,domain字段定义的;默认为mesos

例如,Mesos用的框架为marathon,在test分组里运行着名为centos7.2的应用,则该应用将对应名为centos7-2-test.marathon.mesos的域名

6 通过dig命令验证mesos-dns是否能正常解析
dig 应用名.框架名.mesos域 @mesos-dns所在节点IP
例:dig centos7-2-test.marathon.mesos @192.168.0.106

HTTP API

Mesos-DNS提供了几个简单的REST API以供通过http方式来发现服务。
以上面mesos-dns在192.168.0.106为例,则有:

URL说明
http://192.168.0.106:8123/v1/versionmesos-dns版本信息
http://192.168.0.106:8123/v1/configmesos-dns配置信息
http://192.168.0.106:8123/v1/hosts/{host}该host的IP地址信息
http://192.168.0.106:8123/v1/services/{service}该service的host、IP、端口信息

注意:
host为mesos-dns能解析的域名,如:centos7-2-test.marathon.mesos
service为DNS SRV记录名,如:_centos7-2-test._tcp.marathon.mesos

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值