Mesos-DNS 也会为服务创建 DNS SRV 记录。SRV 记录将服务名称与主机名和 IP 端口相关联。Mesos-DNS 为服务名称生成一条 DNS-SRV 记录 _task._protocol.framework.domain。
其中:
任务是启动的应用程序/服务(在本例中为 MysSQL)
协议是 UDP 或 TCP,框架是 Marathon 或其他任何框架
域是集群域(在本例中为 Mesos)。
其他 Marathon 应用程序可使用此 SRV 记录来发现服务。
例如,需要 MySQL 服务的任何应用程序都可以查找 _mysql_tcp.marathon.mesos 的 SRV 记录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e227390bfb3d ppc64le/mysql "/setup.sh" 3 seconds ago Up Less than a second 0.0.0.0:31172->3306/tcp mesos-fabb6e52-064a-425a-a501-330bc772cd55-S16.85fb3e7c-b2ca-412f-ac75-1ec314bee575 # dig _mysql._tcp.marathon.mesos -t SRV ; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7 <<>> _mysql._tcp.marathon.mesos -t SRV ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2126 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; QUESTION SECTION: ;_mysql._tcp.marathon.mesos. IN SRV ;; ANSWER SECTION: _mysql._tcp.marathon.mesos. 60 IN SRV 0 0 31172 mysql-4huw5-s16.marathon.slave.mesos. ;; ADDITIONAL SECTION: mysql-4huw5-s16.marathon.slave.mesos. 60 IN A 192.168.122.48 ;; Query time: 1 msec ;; SERVER: 192.168.122.48#53(192.168.122.48) ;; WHEN: Mon Feb 08 14:27:38 IST 2016 ;; MSG SIZE rcvd: 147
有关 mesos-dns 命名的更多信息,请参阅 服务命名。
下面的示例 Python 代码使用 dnspython 模块查询 SRV 记录,检索访问该服务所需的主机和端口:
1 2 3 4 5 6 7
import dns.resolver a = dns.resolver.query("_mysql._tcp.marathon.mesos",dns.rdatatype.SRV) for i in a.response.answer: for j in i.items: print j.target print j.port
以下是示例设置中的输出:
1 2
mysql-4huw5-s16.marathon.slave.mesos. 31172
因此,可以推断 MySQL 服务在主机名为 mysql-4huw5-s16.marathon.slave.mesos 的从属节点的端口 31172 上运行。
可将一种类似逻辑直接包含在应用程序配置中,或者可以使用该数据设置应用程序配置所需的相关环境变量。例如,可以将 MYSQL_TCP_ADDR 和 MYSQL_TCP_PORT 分别设置为目标和端口返回的值。
联络相关人员IBM Linux Technology Center (LTC) 是一个 IBM 开源软件开发人员团队,他们与 Linux 开源开发社区合作开展工作。LTC 是一个 Linux 技术能力中心。请联系我们。