在 RHEL 7.1 little endian 上设置 Mesos/Marathon 集群-3
 
- UID
- 1066743
|

在 RHEL 7.1 little endian 上设置 Mesos/Marathon 集群-3
使用 mesos-DNS 发现和连接服务
mesos-DNS 创建应用程序来对 Mesos 集群中运行的每个应用程序建立 IP 地址和端口号映射。
Mesos-DNS 可在 网站上获得。它需要 Go 编译器,如果 Go 编译器可用,在任何平台上构建它都很简单。
源代码本身包含一个示例配置文件,该文件可在 网站上找到。
以下是用于该设置的示例配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| {
"zk": "zk://192.168.122.48:2181/mesos",
"masters": ["192.168.122.48:5050"],
"refreshSeconds": 60,
"ttl": 60,
"domain": "mesos",
"port": 53,
"resolvers": ["8.8.8.8"],
"timeout": 5,
"listener": "0.0.0.0",
"SOAMname": "ns1.mesos",
"SOARname": "root.ns1.mesos",
"SOARefresh": 60,
"SOARetry": 600,
"SOAExpire": 86400,
"SOAMinttl": 60,
"dnson": true,
"httpon": true,
"httpport": 8125,
"externalon": true,
"IPSources": ["netinfo", "mesos", "host"],
"EnforceRFC952": false
}
|
其中:
- zk 是运行 ZooKeeper 的位置
- masters 是运行主节点的位置
- domain 是 Mesos 集群的域名
- port 是 Mesos DNS 端口
- listener 是绑定到 mesos-dns 的 IP
- resolver 是外部 DNS 服务器
- httpport:将运行 mesos-dns HTTP API 的端口
有关 mesos-DNS 配置参数的更多信息,请参阅 网站。
您可以在任何主机上运行 mesos-dns 目录或通过 Marathon 框架运行它。例如:
这将通过 Marathon 启动 mesos-dns。
这将通过 Marathon 启动 mesos-dns。
1
2
3
4
5
6
7
8
| # cat mesos-dns.json
{
"cmd": "<path>/mesos-dns -config=<path>/config.json",
"cpus": 1.0,
"mem": 1024,
"id": "mesos-dns",
"instances": 1,
}
|
使用以下命令直接在主机上运行 mesos-dns:
1
| # mesos-dns -v=1 -config=<path_to_config_json>
|
使用以下格式对该服务命令:
1
| <service-name>.<framework>.<domain-name>
|
因此,MySQL 服务 DNS 名称将是 mysql.marathon.mesos
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 技术能力中心。请联系我们。 |
|
|
|
|
|