marathon的高可用服务自动发现和负载均衡
上一篇我们说谈了docker+zookeeper+mesos+marathon集群,本篇我们来谈谈marathon的集群和自动发现服务。
marathon的服务自动发现和负载均衡有两种,1是mesos-dns,2是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": ,
"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
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= --net=host docker.io/mesosphere/marathon-lb sse -m http://docker-master1:8080 -m http://docker-master2:8080 -m http://docker-master3:8080 --group external
3.2.2 通过marathon部署
{
"id": "marathon-lb",
"instances": ,
"constraints": [["hostname", "UNIQUE"]],
"container": {
"type": "DOCKER",
"docker": {
"image": "docker.io/mesosphere/marathon-lb",
"privileged": true,
"network": "HOST"
}
},
"args": ["sse", "-m","http://docker-master1:8080", "-m","http://docker-master2:8080", "-m","http://docker-master3:8080","--group", "external"]
}
curl -X POST http://docker-master1:8080/v2/apps -d@/root/marathon-lb.json -H "Content-type:application/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": "nginx-app",
"labels": {
"HAPROXY_GROUP":"external",
"HAPROXY_0_VHOST":"test.nginx.com"
},
"cpus": 0.5,
"mem": 64.0,
"instances": ,
"constraints": [["hostname", "UNIQUE"]],
"container": {
"type": "DOCKER",
"docker": {
"image": "nginx",
"privileged": false,
"network": "BRIDGE",
"portMappings": [
{ "containerPort": , "hostPort": , "servicePort": , "protocol": "tcp"}
]
}
}
}
发布APP
curl -X POST http://docker-master1:8080/v2/apps -d@/root/nginx.json -H "Content-type:application/json"
3.3.2 访问app
先设置DNS或者hosts文件:
192.168.20.213 test.nginx.com
用浏览器通过http和https访问虚拟主机,发现服务已经启动,实际上是marathon-lb内置的haproxy对test-app的三个实例配置的web服务集群:
http://test.nginx.com
https://test.nginx.com
对于marathon-lb,可以同时部署多台,然后用DNS轮询或者keepalived虚拟IP实现高可用。\
3.3.3 查看haproxy配置文件和状态
http:/test.nginx.com:9090/_haproxy_getconfig
http://test.nginx.com:9090/haproxy?stats
marathon的高可用服务自动发现和负载均衡的更多相关文章
- 基于marathon-lb的服务自发现与负载均衡
参考文档: Marathon-lb介绍:https://docs.mesosphere.com/1.9/networking/marathon-lb/ 参考:http://www.cnblogs.co ...
- Flume 高可用配置案例+load balance负载均衡+ 案例:日志的采集及汇总
高可用配置案例 (一).failover故障转移 在完成单点的Flume NG搭建后,下面我们搭建一个高可用的Flume NG集群,架构图如下所示: (1)节点分配 Flume的Agent和Colle ...
- MySQL 高可用:mysql+Lvs+Keepalived 负载均衡及故障转移
系统信息: mysql主库 mysql从库 VIP 192.168.1.150 mysql 主主同步都设置 auto-increment-offset,auto-increment-increment ...
- 构建高可用集群Keepalived+Haproxy负载均衡
重点概念vrrp_script中节点权重改变算法vrrp_script 里的script返回值为0时认为检测成功,其它值都会当成检测失败:weight 为正时,脚本检测成功时此weight会加到pri ...
- 服务发现与负载均衡 dubbo zk原理
服务发现与负载均衡 拓展阅读 : dubbo 原理概念图 2016-03-03 杜亦舒 性能与架构 性能与架构 性能与架构 微信号 yogoup 功能介绍 网站性能提升与架构设计 内容整理自文章“实施 ...
- 阿里云应用高可用服务 AHAS 流控降级实现 SQL 自动防护功能
在影响系统稳定性的各种因素中,慢 SQL 是相对比较致命的,可能会导致 CPU.LOAD 异常.系统资源耗尽.线上生产环境出现慢 SQL 往往有很多原因: 硬件问题.如网络速度慢,内存不足,I/O 吞 ...
- 基于docker+etcd+confd + haproxy构建高可用、自发现的web服务
基于docker+etcd+confd + haproxy构建高可用.自发现的web服务 2016-05-16 15:12 595人阅读 评论(0) 收藏 举报 版权声明:本文为博主原创文章,未经博主 ...
- 【云计算】mesos+marathon 服务发现、负载均衡、监控告警方案
Mesos-dns 和 Marathon-lb 是mesosphere 官网提供的两种服务发现和负载均衡工具.官方的文档主要针对DCOS,针对其它系统的相关中文文档不多,下面是我在Centos7上的安 ...
- Redis Sentinel 高可用服务搭建
阅读目录: 关于 Redis 的概念 关于 Redis Sentinel 的概念 搭建 Redis Server(master) 搭建 Redis Server(slave) 搭建 Redis Sen ...
随机推荐
- Linux中epoll+线程池实现高并发
服务器并发模型通常可分为单线程和多线程模型,这里的线程通常是指“I/O线程”,即负责I/O操作,协调分配任务的“管理线程”,而实际的请求和任务通常交由所谓“工作者线程”处理.通常多线程模型下,每个线程 ...
- 3.Appium运行时出现:Original error: Android devices must be of API level 17 or higher. Please change your device to Selendroid or upgrade Android on your device
参考博客:https://blog.csdn.net/niubitianping/article/details/52624417 1.错误信息:Original error: Android dev ...
- 1.Appium环境搭建
1.安装node.js (1)去node官网下载,根据操作系统的不同选择不同对应的版本(https://nodejs.org/en/download/) (2)下载对应的版本后进行安装,一直下一步直至 ...
- WIN10下搭建react-native开发Android环境
最近公司要求使用react-native进行移动端开发,据说macOS上开发坑会少的多,但我们是windows,莫法,直接抗吧!周末配置环境遇到很多问题,谨以此文做个记录... 准备 安装Chocol ...
- CentOS 添加新硬件硬盘,扩展空间而无需重启虚拟机
运行如下命令,通过重新扫描 SCSI (注:Small Computer System Interface 小型计算机系统接口)总线并添加 SCSI 设备,系统就可以扩展操作系统的物理卷磁盘空间,而且 ...
- 一.jQuery源码解析之总体架构
(function (window, undefined) { //构建jQuery对象 var document = window.document, navigator = window.navi ...
- SpringBoot入门(2)
一.上一篇 上一篇最后说到,可以把启动类放到非上级目录“@Componentscan这个注解后面指定扫描的包名(value=“com.zbb”)”,这里的value是一个数组,我们可以写多个目录,进行 ...
- httpclient pool帮助类
摘自爬虫类 用于频繁请求减少网络消耗 import java.io.IOException; import java.io.InterruptedIOException; import java.i ...
- tensorflow 基本函数(1.tf.split, 2.tf.concat,3.tf.squeeze, 4.tf.less_equal, 5.tf.where, 6.tf.gather, 7.tf.cast, 8.tf.expand_dims, 9.tf.argmax, 10.tf.reshape, 11.tf.stack, 12tf.less, 13.tf.boolean_mask
1. tf.split(3, group, input) # 拆分函数 3 表示的是在第三个维度上, group表示拆分的次数, input 表示输入的值 import tensorflow ...
- Maven - Deploy war in Tomcat 7 & 8
This article will explain on how to deploy a war fine in to Tomcat 7 through maven build. Note : I h ...