首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

在 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 框架运行它。例如:
1
curl -X POST http://192.168.122.48:8080/v2/apps -d @mesos-dns.json -H "Content-type: application/json"




这将通过 Marathon 启动 mesos-dns。
1
curl -X POST http://192.168.122.48:8080/v2/apps -d @mesos-dns.json -H "Content-type: application/json"




这将通过 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 技术能力中心。请联系我们。
返回列表