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": 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的高可用服务自动发现和负载均衡相关推荐
- 高可用集群下的负载均衡(8):pacemaker + corosync + haproxy 实现高可用
实验环境 server1 和 server2 是调度器,server3 和 server4 是服务器 [1]调度器server1 server2 关闭 keepalived 和 httpd,并打开pc ...
- 配置高可用的循环复用DNS负载均衡
配置高可用的循环复用DNS负载均衡 提供:ZStack社区 前言 如何利用云主机提供商的全球部署来最合理的分布你的应用?这个话题在技术圈充满争议,不过DNS(即,IP转发列表)应该算是一个好方案.特别 ...
- e盾服务端源码_gRPC服务注册发现及负载均衡的实现方案与源码解析
今天聊一下gRPC的服务发现和负载均衡原理相关的话题,不同于Nginx.Lvs或者F5这些服务端的负载均衡策略,gRPC采用的是客户端实现的负载均衡.什么意思呢,对于使用服务端负载均衡的系统,客户端会 ...
- gRPC服务注册发现及负载均衡的实现方案与源码解析
今天聊一下gRPC的服务发现和负载均衡原理相关的话题,不同于Nginx.Lvs或者F5这些服务端的负载均衡策略,gRPC采用的是客户端实现的负载均衡.什么意思呢,对于使用服务端负载均衡的系统,客户端会 ...
- 什么是负载均衡?什么是高可用?说说常见的负载均衡案例
一. 什么是负载均衡? 什么是负载均衡? 记得第一次接触 Nginx 是在实验室,那时候在服务器部署网站需要用 Nginx .Nginx 是一个服务组件,用来反向代理.负载平衡和 HTTP 缓存等.那 ...
- 想实现高可用?先搞定负载均衡原理
在互联网大行其道的今天,随着业务的迅猛增长,技术上我们常常要面对高并发,大流量. 图片来自 Pexels 为了实现高可用,高性能我们采用了很多的技术手段,负载均衡就是其中之一.作为外部流量与内部应用的 ...
- 高可用集群下的负载均衡(7):haproxy + keepalived 实现高可用负载均衡
实验环境 server1 和 server2 是调度器,server3 和 server4 是服务器 一.调度器中进行配置 haproxy+keepalived server1 与server2 均要 ...
- RPC-BDY(5)-服务自动注销、负载均衡
by BDY -2022.7.22 文章目录 一.负载均衡 二.服务自动注销 三.知识 总结 一.负载均衡 1.loadBalancer接口 public interface LoadBalancer ...
- 高可用集群下的负载均衡(6):haproxy实现访问不同资源的负载均衡(日志、监控、acl访问控制的配置)
8.7am 2 1.haproxy的日志管理 [1]修改日至配置文件 [root@server2 haproxy]# pwd /etc/haproxy [root@server2 haproxy]# ...
最新文章
- object-c中的继承
- RIP学习---网络工程
- WebRTC Linux ADM 实现中的符号延迟加载机制
- UCenter 表结构
- 一些常见的HTTP的请求状态码
- 箱线图怎么判断异常值_异常数值识别(检测)
- PAT (Basic Level) Practice1005 继续(3n+1)猜想
- WDCP(WDlinux Control Panel) mysql/add_user.php、mysql/add_db.php Authentication Loss
- labview计算机论文,毕业论文:基于Labview的信号发生器设计
- 远程控制客户端使用教程-multiDesk
- 单片机编程语言——C语言(2)
- 【前端学习-函数】js基础学习笔记
- 【SpringBoot项目No qualifying bean of type ‘×××Mapper‘ available:的错误解决】
- python opencv 画黑白棋盘
- Apache Camel入门教程
- Matlab影像处理二
- CV赛事|“华为云杯”2020深圳开放数据应用创新大赛•生活垃圾图片分类
- Beta阶段基于spec评论作品
- 室内导航--机器视觉、ROS、Goseek(二)Ubuntu 20.04 LTS 准备
- corelDRAW制作笔
热门文章
- yii2 html编辑器,浅析Yii2集成富文本编辑器redactor实例教程
- DE17 Finding Particular Solutions via Fourier Series
- 水稻细菌性条斑病的分割与严重程度估计方法
- 【java】创建一个Frame,字体的颜色可以用按钮改变
- 输入一行字符,用Java分别统计出其中英文字母、空格、数字和其他字符的个数。
- Tensorflow2.0数据和部署(二)——基于设备的模型与TensorFlow Lite
- Datawhale 零基础入门CV赛事-Task5 模型集成
- 自己写cache server之网络框架处理——对比mysql、Oracle(上)
- Android仿人人客户端(v5.7.1)——对从服务器端(网络)获取的图片进行本地双缓存处理(流程图或活动图)...
- selenium java api_selenium_java常用API操作