Mesos-dns是 mesos 服务发现工具,能查找app的Ip,端口号以及master,leader等信息。在Apache Mesos 集群中,允许应用程序和服务通过域名系统(DNS)来相互定位。Mesos-DNS 充当的角色和在互联网中DNS 的作用差不多。Mesos-DNS 的特点是轻量、无状态,易于部署和维护。
Mesos-DNS 将每个集群中正在运行的应用程序的域名转换成IP 地址和端口号。这使得任何链接到集群中运行的服务都可以通过DNS 进行查找。Mesos-DNS 被设计成简单并且无状态的,它不需要共识机制,永久储存以及日志。因为Mesos-DNS 没有实现心跳,状态监测,或者管理应用程序的生命周期。这些功能在Mesos master,slaves,和frameworks 中实现。
Frameworks 运行在Mesos 中,不需要直接与Mesos-DNS 通信。Mesos-DNS 定期查询Mesos master(s),检索所有运行的框架中正在运行的任务的状态,并为这些任务生成DNS 记录,包括A 记录与SRV记录。当Mesos 集群中的任务开始,结束,或重启, Mesos-DNS 都需要更新DNS 记录以保证为最新状态。需要解释的A.B.C 即为taks.framework.domain 这样的命名规则,例如,当mesos 使用marathon 框架执行2048任务,这样就可以知道其域名,即为:2048.marathon.mesos。
SOA记录。除了task.framework.domain 记录,Mesos-DNS 通常还会产生一个A记录task.framework.slave.domain,即为task 执行的slave 节点的ip。例如,2048.marathon.slave.mesos 的A 记录将运行marathon 框架的2048应用的slave 节点的ip。
SRV记录。服务器资源记录为某一服务分配一个hostname 和一个ip port,对于在域A 中,当框架B 启动任务C,这样Mesos-DNS 将产生一个SRV 记录名为_C._tcp.B.A,命名规则为_taskname._protocol.framework.domain,其中protocol 可以为udp 或者tcp,例如mesos 使用marathon 启动的任务2048。
我在DC/OS的Marathon中部署二个应用,如2048和tomcat。如下所示部署了一个2048的app,其以网桥形式把容器内部的80端口映射成动态端口,而且在2个host中共启动了4个部署实例:
再如下所示,部署了一个tomcat的app,其以网桥形式把容器内部的8080端口映射成动态端口,而且在2个host中共启动了3个部署实例:
由于在安装DC/OS后,已经在master上安装好了mesos-dns服务。因此65和66节点,以及任何master几点上都可以查询到app的Ip,端口号以及master,leader等信息。
1) 首先查看2048应用的运行所在ip:
[root@agent-01 ~]# dig 2048.marathon.mesos
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.3 <<>> 2048.marathon.mesos
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47800
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;2048.marathon.mesos. IN A
;; ANSWER SECTION:
2048.marathon.mesos. 60 IN A 192.168.15.66
2048.marathon.mesos. 60 IN A 192.168.15.65
;; Query time: 3 msec
;; SERVER: 198.51.100.1#53(198.51.100.1)
;; WHEN: Thu Jul 14 20:32:06 EDT 2016
;; MSG SIZE rcvd: 69
[root@agent-01 ~]#
如果用简短形式:
[root@agent-01 ~]# dig 2048.marathon.mesos +short
192.168.15.65
192.168.15.66
[root@agent-01 ~]#
查看tomcat应用的运行所在ip:
[root@agent-01 ~]# dig tomcat.marathon.mesos
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.3 <<>> tomcat.marathon.mesos
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3108
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;tomcat.marathon.mesos. IN A
;; ANSWER SECTION:
tomcat.marathon.mesos. 60 IN A 192.168.15.65
;; Query time: 3 msec
;; SERVER: 198.51.100.1#53(198.51.100.1)
;; WHEN: Thu Jul 14 20:38:03 EDT 2016
;; MSG SIZE rcvd: 55
[root@agent-01 ~]# dig tomcat.marathon.mesos +short
192.168.15.65
[root@agent-01 ~]#
2) 查看2048应用的运行所在端口号及master:
[root@agent-01 ~]# dig SRV _2048._tcp.marathon.mesos
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.3 <<>> SRV _2048._tcp.marathon.mesos
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28333
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 4
;; QUESTION SECTION:
;_2048._tcp.marathon.mesos. IN SRV
;; ANSWER SECTION:
_2048._tcp.marathon.mesos. 60 IN SRV 0 0 10525 2048-6w861-s3.marathon.mesos.
_2048._tcp.marathon.mesos. 60 IN SRV 0 0 19257 2048-n5wi7-s3.marathon.mesos.
_2048._tcp.marathon.mesos. 60 IN SRV 0 0 13976 2048-9sn1t-s8.marathon.mesos.
_2048._tcp.marathon.mesos. 60 IN SRV 0 0 10086 2048-z97jw-s3.marathon.mesos.
;; ADDITIONAL SECTION:
2048-z97jw-s3.marathon.mesos. 60 IN A 192.168.15.65
2048-6w861-s3.marathon.mesos. 60 IN A 192.168.15.65
2048-9sn1t-s8.marathon.mesos. 60 IN A 192.168.15.66
2048-n5wi7-s3.marathon.mesos. 60 IN A 192.168.15.65
;; Query time: 5 msec
;; SERVER: 198.51.100.1#53(198.51.100.1)
;; WHEN: Thu Jul 14 20:39:58 EDT 2016
;; MSG SIZE rcvd: 355
[root@agent-01 ~]# dig SRV _2048._tcp.marathon.mesos +short
0 0 13976 2048-9sn1t-s8.marathon.mesos.
0 0 10086 2048-z97jw-s3.marathon.mesos.
0 0 19257 2048-n5wi7-s3.marathon.mesos.
0 0 10525 2048-6w861-s3.marathon.mesos.
[root@agent-01 ~]#
查看tomcat应用的运行所在
端口号及master:
[root@agent-01 ~]# dig SRV _tomcat._tcp.marathon.mesos
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.3 <<>> SRV _tomcat._tcp.marathon.mesos
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 64583
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 3
;; QUESTION SECTION:
;_tomcat._tcp.marathon.mesos. IN SRV
;; ANSWER SECTION:
_tomcat._tcp.marathon.mesos. 60 IN SRV 0 0 23649 tomcat-petwd-s3.marathon.mesos.
_tomcat._tcp.marathon.mesos. 60 IN SRV 0 0 11376 tomcat-7xaza-s3.marathon.mesos.
_tomcat._tcp.marathon.mesos. 60 IN SRV 0 0 5008 tomcat-jffrj-s3.marathon.mesos.
;; ADDITIONAL SECTION:
tomcat-7xaza-s3.marathon.mesos. 60 IN A 192.168.15.65
tomcat-petwd-s3.marathon.mesos. 60 IN A 192.168.15.65
tomcat-jffrj-s3.marathon.mesos. 60 IN A 192.168.15.65
;; Query time: 3 msec
;; SERVER: 198.51.100.1#53(198.51.100.1)
;; WHEN: Thu Jul 14 20:41:56 EDT 2016
;; MSG SIZE rcvd: 291
[root@agent-01 ~]# dig SRV _tomcat._tcp.marathon.mesos +short
0 0 23649 tomcat-petwd-s3.marathon.mesos.
0 0 5008 tomcat-jffrj-s3.marathon.mesos.
0 0 11376 tomcat-7xaza-s3.marathon.mesos.
[root@agent-01 ~]#
3)2048无论哪个host+port的形式访问,都能正常的访问其端口服务
~