上一篇我们说谈了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": 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

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://docker-master1:8080 -m http://docker-master2:8080 -m http://docker-master3: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://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": 3,
"constraints": [["hostname", "UNIQUE"]],
"container": {
"type": "DOCKER",
"docker": {
"image": "nginx",
"privileged": false,
"network": "BRIDGE",
"portMappings": [
{ "containerPort": 80, "hostPort": 0, "servicePort": 0, "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

转载于:https://www.cnblogs.com/harlanzhang/p/9856359.html

marathon的高可用服务自动发现和负载均衡相关推荐

  1. 高可用集群下的负载均衡(8):pacemaker + corosync + haproxy 实现高可用

    实验环境 server1 和 server2 是调度器,server3 和 server4 是服务器 [1]调度器server1 server2 关闭 keepalived 和 httpd,并打开pc ...

  2. 配置高可用的循环复用DNS负载均衡

    配置高可用的循环复用DNS负载均衡 提供:ZStack社区 前言 如何利用云主机提供商的全球部署来最合理的分布你的应用?这个话题在技术圈充满争议,不过DNS(即,IP转发列表)应该算是一个好方案.特别 ...

  3. e盾服务端源码_gRPC服务注册发现及负载均衡的实现方案与源码解析

    今天聊一下gRPC的服务发现和负载均衡原理相关的话题,不同于Nginx.Lvs或者F5这些服务端的负载均衡策略,gRPC采用的是客户端实现的负载均衡.什么意思呢,对于使用服务端负载均衡的系统,客户端会 ...

  4. gRPC服务注册发现及负载均衡的实现方案与源码解析

    今天聊一下gRPC的服务发现和负载均衡原理相关的话题,不同于Nginx.Lvs或者F5这些服务端的负载均衡策略,gRPC采用的是客户端实现的负载均衡.什么意思呢,对于使用服务端负载均衡的系统,客户端会 ...

  5. 什么是负载均衡?什么是高可用?说说常见的负载均衡案例

    一. 什么是负载均衡? 什么是负载均衡? 记得第一次接触 Nginx 是在实验室,那时候在服务器部署网站需要用 Nginx .Nginx 是一个服务组件,用来反向代理.负载平衡和 HTTP 缓存等.那 ...

  6. 想实现高可用?先搞定负载均衡原理

    在互联网大行其道的今天,随着业务的迅猛增长,技术上我们常常要面对高并发,大流量. 图片来自 Pexels 为了实现高可用,高性能我们采用了很多的技术手段,负载均衡就是其中之一.作为外部流量与内部应用的 ...

  7. 高可用集群下的负载均衡(7):haproxy + keepalived 实现高可用负载均衡

    实验环境 server1 和 server2 是调度器,server3 和 server4 是服务器 一.调度器中进行配置 haproxy+keepalived server1 与server2 均要 ...

  8. RPC-BDY(5)-服务自动注销、负载均衡

    by BDY -2022.7.22 文章目录 一.负载均衡 二.服务自动注销 三.知识 总结 一.负载均衡 1.loadBalancer接口 public interface LoadBalancer ...

  9. 高可用集群下的负载均衡(6):haproxy实现访问不同资源的负载均衡(日志、监控、acl访问控制的配置)

    8.7am 2 1.haproxy的日志管理 [1]修改日至配置文件 [root@server2 haproxy]# pwd /etc/haproxy [root@server2 haproxy]# ...

最新文章

  1. object-c中的继承
  2. RIP学习---网络工程
  3. WebRTC Linux ADM 实现中的符号延迟加载机制
  4. UCenter 表结构
  5. 一些常见的HTTP的请求状态码
  6. 箱线图怎么判断异常值_异常数值识别(检测)
  7. PAT (Basic Level) Practice1005 继续(3n+1)猜想
  8. WDCP(WDlinux Control Panel) mysql/add_user.php、mysql/add_db.php Authentication Loss
  9. labview计算机论文,毕业论文:基于Labview的信号发生器设计
  10. 远程控制客户端使用教程-multiDesk
  11. 单片机编程语言——C语言(2)
  12. 【前端学习-函数】js基础学习笔记
  13. 【SpringBoot项目No qualifying bean of type ‘×××Mapper‘ available:的错误解决】
  14. python opencv 画黑白棋盘
  15. Apache Camel入门教程
  16. Matlab影像处理二
  17. CV赛事|“华为云杯”2020深圳开放数据应用创新大赛•生活垃圾图片分类
  18. Beta阶段基于spec评论作品
  19. 室内导航--机器视觉、ROS、Goseek(二)Ubuntu 20.04 LTS 准备
  20. corelDRAW制作笔

热门文章

  1. yii2 html编辑器,浅析Yii2集成富文本编辑器redactor实例教程
  2. DE17 Finding Particular Solutions via Fourier Series
  3. 水稻细菌性条斑病的分割与严重程度估计方法
  4. 【java】创建一个Frame,字体的颜色可以用按钮改变
  5. 输入一行字符,用Java分别统计出其中英文字母、空格、数字和其他字符的个数。
  6. Tensorflow2.0数据和部署(二)——基于设备的模型与TensorFlow Lite
  7. Datawhale 零基础入门CV赛事-Task5 模型集成
  8. 自己写cache server之网络框架处理——对比mysql、Oracle(上)
  9. Android仿人人客户端(v5.7.1)——对从服务器端(网络)获取的图片进行本地双缓存处理(流程图或活动图)...
  10. selenium java api_selenium_java常用API操作