您的位置:首页 > 其它

mesos-dns & marathon-lb

2016-06-08 11:43 239 查看
Mesos-dns 和 Marathon-lb 是mesosphere 官网提供的两种服务发现和负载均衡工具。


1. Mesos服务发现与负载均衡

默认情况下,mesos
marathon会把app发布到随机节点的随机端口上,当mesos slaves和app越来越多的时候,想查找某组app就变得困难。

mesos提供了两个工具:mesos-dns和marathon-lb。mesos-dns是一个服务发现工具,marathon-lb不仅是服务发现工具,还是负载均衡工具。


2. mesos-dns

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 记录以保证为最新状态。
在某一DNS 域A 中,当某一框架B 启动某一任务C,Mesos-DNS 就会为hostname 为C.B.A 生成一条记录(A),对应的ip
有下述两中情况:
1、任务执行的容器所提供的网络ip(这个网络是mesos 容器提供的)
2、任务在某一slave 节点执行的ip
需要解释的A.B.C 即为taks.framework.domain 这样的命名规则,例如,当mesos 使用marathon 框架执行jenkins 任务,这样就可以知道其域名,即为:jenkins.marathon.mesos.

SOA 记录
除了task.framework.domain 记录,Mesos-DNS 通常还会产生一个A记录task.framework.slave.domain,即为task 执行的slave 节点的ip。例如,jenkins.marathon.slave.mesos 的A 记录将运行marathon 框架的jenkins应用的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 启动的任务jenkins。


2.1 使用方法

注:lk-dcos-2是安装了mesos-dns的主机名,测试的app名为nginx-test。


2.1.1 查找app的ip

centos7安装dig:yum -y install bind-utils

dig nginx-test.marathon.mesos +short
10.132.47.25
10.132.47.26


2.3.2 查找app所在节点的IP

dig nginx-test.marathon.slave.mesos +short

10.132.47.25
10.132.47.26


2.3.3 查找app服务端口号

dig SRV _nginx-test._tcp.marathon.mesos +short

0 0 3734 nginx-test-d1o9k-s0.marathon.mesos.

0 0 16016 nginx-test-jin7r-s2.marathon.mesos.

0 0 19683 nginx-test-m9whb-s0.marathon.mesos.

0 0 24465 nginx-test-58msf-s2.marathon.mesos.


3. marathon-lb

Marathon-lb既是一个服务发现工具,也是负载均衡工具,它集成了haproxy,自动获取各个app的信息,为每一组app生成haproxy配置,通过servicePort或者web虚拟主机提供服务。

要使用marathonn-lb,每组app必须设置HAPROXY_GROUP标签。

Marathon-lb运行时绑定在各组app定义的服务端口(servicePort)上,可以通过marathon-lb所在节点的服务端口访问各组app。

对于提供web服务的app,可以增加一个HAPROXY_{n}_VHOST(WEB虚拟主机)标签,marathon-lb会自动把这组app的WEB集群服务发布在marathon-lb所在节点的80和443端口上,用户设置DNS后通过虚拟主机名来访问。


3.3 使用方法

下面使用marathon-lb对http服务进行服务发现和负载均衡:


3.3.1 发布app

# 先创建app的json配置信息

一定要加上HAPROXY_GROUP标签,对于web服务,可以加上VHOST标签,让marathon-lb设置WEB虚拟主机;

对于web服务,servicePort设置为0即可,marathon-lb会自动把web服务集群发布到80、443上;

{

"id": "test-app",

"labels": {

"HAPROXY_GROUP":"external",

"HAPROXY_0_VHOST":"test-app.gkkxd.com"

},

"cpus": 0.5,

"mem": 64.0,

"instances": 3,

"constraints": [["hostname", "UNIQUE"]],

"container": {

"type": "DOCKER",

"docker": {

"image": "httpd",

"privileged": false,

"network": "BRIDGE",

"portMappings": [

{
"containerPort": 80, "hostPort": 0, "servicePort": 0, "protocol": "tcp"}

]

}

}

}

#发布app

curl -i -H 'Content-Type: application/json' 172.31.17.71:8080/v2/apps -d@test-app.json


3.3.2 访问app

先设置DNS或者hosts文件:

172.31.17.34 test-app.gkkxd.com

用浏览器通过http和https访问虚拟主机,发现服务已经启动,实际上是marathon-lb内置的haproxy对test-app的三个实例配置的web服务集群:

http://test-app.gkkxd.com

https://test-app.gkkxd.com



对于marathon-lb,可以同时部署多台,然后用DNS轮询或者keepalived虚拟IP实现高可用。
http://www.cnblogs.com/hahp/p/5396302.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  meso-dns marathon-lb