Mesos-dns 和 Marathon-lb 是mesosphere 官网提供的两种服务发现和负载均衡工具。官方的文档主要针对DCOS,针对其它系统的相关中文文档不多,下面是我在Centos7上的安装说明和使用总结。
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等信息。
2.1 安装
从下述地址下载mesos-dns二进制文件:
https://github.com/mesosphere/mesos-dns/releases
重命名为mesos-dns
chmod +x mesos-dns
按照官方文档编写config.json,填入zk、master等相关信息
2.2 启动
2.2.1 命令行方式
mesos-dns -config config.json
2.2.2 也可以用marathon部署
#mesos-dns.json
{
"id": "mesos-dns",
"cpus": 0.5,
"mem": 128.0,
"instances": 3,
"constraints": [["hostname", "UNIQUE"]],
"cmd": "/opt/mesos-dns/mesos-dns -config /opt/mesos-dns/config.json"
}
#向marathon发送部署内容
curl -i -H 'Content-Type: application/json' 172.31.17.71:8080/v2/apps -d@mesos-dns.json
图中的mesos-dns是通过marathon部署的mesos-dns,共两个实例。
2.3 使用方法
注:slave4是安装了mesos-dns的主机名
2.3.1 查找app的ip
dig test-app.marathon.mesos +short @slave4
172.17.0.2
2.3.2 查找app所在节点的IP
dig test-app.marathon.slave.mesos +short @slave4
172.31.17.33
172.31.17.31
172.31.17.32
2.3.3 查找app服务端口号
dig SRV _test-app._tcp.marathon.mesos +short @slave4
0 0 31234 test-app-s3ehn-s11.marathon.slave.mesos.
0 0 31846 test-app-zfp5d-s10.marathon.slave.mesos.
0 0 31114 test-app-3xynw-s12.marathon.slave.mesos.
3. marathon-lb
Marathon-lb既是一个服务发现工具,也是负载均衡工具,它集成了haproxy,自动获取各个app的信息,为每一组app生成haproxy配置,通过servicePort或者web虚拟主机提供服务。
要使用marathonn-lb,每组app必须设置HAPROXY_GROUP标签。
Marathon-lb运行时绑定在各组app定义的服务端口(servicePort,如果app不定义servicePort,marathon会随机分配端口号)上,可以通过marathon-lb所在节点的相关服务端口访问各组app。
例如:marathon-lb部署在slave5,test-app 部署在slave1,test-app 的servicePort是10004,那么可以在slave5的 10004端口访问到test-app提供的服务。
由于servicePort 非80、443端口(80、443端口已被marathon-lb中的 haproxy独占),对于web服务来说不太方便,可以使用 haproxy虚拟主机解决这个问题:
在提供web服务的app配置里增加HAPROXY_{n}_VHOST(WEB虚拟主机)标签,marathon-lb会自动把这组app的WEB集群服务发布在marathon-lb所在节点的80和443端口上,用户设置DNS后通过虚拟主机名来访问。
3.1 安装
#下载marathon-lb镜像
docker pull docker.io/mesosphere/marathon-lb
可以通过docker run运行,也可以通过marathon部署到mesos集群里。
3.2 运行
3.2.1 命令行运行
docker run -d --privileged -e PORTS=9090 --net=host docker.io/mesosphere/marathon-lb sse -m http://master1_ip:8080 -m http://master2_ip:8080 -m http://master3_ip:8080 --group external
3.2.2 通过marathon部署
{
"id": "marathon-lb",
"instances": 3,
"constraints": [["hostname", "UNIQUE"]],
"container": {
"type": "DOCKER",
"docker": {
"image": "docker.io/mesosphere/marathon-lb",
"privileged": true,
"network": "HOST"
}
},
"args": ["sse", "-m","http://master1_ip:8080", "-m","http://master2_ip:8080", "-m","http://master3_ip:8080","--group", "external"]
}
curl -i -H 'Content-Type: application/json' 172.31.17.71:8080/v2/apps -d@marathon-lb.json
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服务集群:
对于marathon-lb,可以同时部署多台,然后用DNS轮询或者keepalived虚拟IP实现高可用。
相关推荐
Mastering Mesos - Dipa Dubhashi,非常不错的资源!!!,可惜现在不能0资源分分享了,搞什么鬼!
Mesos-DNS在群集中启用基于的服务发现。 兼容性 mesos-N标签标志着对特定Mesos版本的支持开始,同时保持了与先前主要版本的向后兼容性。 正在安装 官方发行的二进制文件在中可用。 建造 从源代码构建master分支应该...
使用 Mesos/Marathon/Demios 编排 Docker 介绍 关于 Mesos 云时代的应用 从静态分区到弹性共享 经过测试的物理环境 操作系统:Ubuntu 12.04.4 LTS amd64(3.11.0-15-generic / 8Cores / 8GB RAM) 流浪者:1.6.5 ...
Apache Mesos(mesos-1.11.0.tar.gz、mesos-1.11.0.zip) 将 CPU、内存、存储和其他计算资源从机器(物理或虚拟)中抽象出来,使容错和弹性分布式系统能够轻松构建和有效运行。 Apache Mesos 是使用与 Linux 内核...
mc —一个简单的Mesos-DNS客户端 这是一个用Python编写的简单的客户端。 将其用作CLI工具,如下所示: $ ./mc.py localhost redis.marathon.mesos $ Discovered redis.marathon.mesos running on 10.141.141.10:...
mesos-APIproto是用于mesos调度程序的新HTTP API的模型 请参阅 API 的完整以获取更多信息,并参阅史诗以获取有关实施进度的详细信息。 安装 首先获取go依赖: $ go get github.com/jimenez/mesos-APIproto/... ...
马拉松磅 Marathon-lb是通过使用应用程序状态来管理HAProxy的工具。 HAProxy是一种快速,高效,经过考验的高可用性负载均衡器,具有许多高级功能,可为许多备受瞩目的网站提供支持。特征无状态设计:不直接依赖任何...
docker-mesos-marathon-screencast 的截屏视频中使用的脚本。入门如果您想为自己复制演示。 脚本包含在此 repo 中。 你会需要: 安装 使用您的主launch.sh的 IP 地址更新launch.sh 用你的主人的 IP 地址更新.mesos....
开源项目-vektorlab-mesos-cli.zip,Featureful commandline interface for Apache Mesos.
mesos-spark-源码.rar
我想在 CoreOS 上运行 marathon-mesos-deimos 设置( )。 我被 Ebay 使用主机 docker 设置( )。 我想同时享受 CoreOS 和 mesos 资源管理,未来希望 kubernetes ( )。 先决条件 舰队控制 流浪汉 虚拟机 Python ...
sample-fluentd-on-mesos-docker, 在 Mesos Docker 马拉松上,Fluentd Mesos Docker 马拉松上的 Fluentd这是一个在 mesos,Docker 和马拉松上运行的fluentd示例。概述 PrerequireVagrant 1.4.1 ( 我只检查了这个版本...
MARATHON_ADDRESS - 默认设置为127.0.0.1 MARATHON_PORT - 默认设置为8080用法基本的docker run -d -p 80:80 -p 443:443 -e MARATHON_ADDRESS="my.marathon.org" -e MARATHON_PORT="MyPort" million12/mesos-hapro
部署文档(mesos+zk+marathon).docx
mesos-deb-packaging, 用于 Debian,Ubuntu,CentOS,RHEL和Fedora的Mesos软件包 Mesos Debian封装构建脚本,用创建一个Mesos软件包,以便在集群中简单安装。Mesos是一个集群管理器,它可以跨分布式应用程序或者框架...
设置流浪汉/普拉亚准备(Mesos-DNS) 部署方式相互作用演示版来自主持人: http PUT http://10.141.141.10:8080/v2/groups < mesos-dns/system.jsonhttp POST http://10.141.141.10:8080/v2/groups < m-shop....
资源来自pypi官网。 资源全名:nagios-mesos-0.2.5.tar.gz
一旦你的 vagrant 机器在安装了 mesos 和 marathon 的情况下运行,你可以继续以下部分。 构建图像 为了能够使用 docker 执行示例,目录docker-image包含构建和创建 docker 实例所需的步骤。 运行图像 为了在马拉松...
Use the Marathon and Chronos frameworks to manage multiple applications Work with Mesos and Docker Integrate Mesos with Spark and other big data frameworks Use networking features in Mesos for ...
无业游民的贴心马拉松集群使用Vagrant,Virtualbox和Ansible创建的Mesos和Marathon群集,可在任何主机操作系统上使用。 使用安装在来宾操作系统中的Ansible,因此不需要支持Ansible的主机操作系统。 即,它可以在...