`
m635674608
  • 浏览: 5005190 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Mesos:服务发现与负载均衡

 
阅读更多

Mesos: Service Discovery & Load Balancing

这一章主要探讨是Mesos关于服务发现与应用的负载均衡的解决方案,主要侧重对服务发现与负载均衡进行讲解,需要明白的一点,Mesos作为 两层架构,Marathon作为Mesos的systemd服务,服务发现功能只需要向marathon提供即可,marathon启动的k8s、 Cloud Foundry都用自身的服务发现功能。

1、Service Discovery with Marathon-Bridge and HAProxy

服务发现的功能实现是为Dcos系统中的服务提供便捷的网络通信,它的侧重点在于对服务进行注册,更新,查询等功能,服务发现的实现方法较多, 主要有DNS、集中式服务路由、应用内部实现服务注册/服务发现等方式,Dcos服务发现功能采用的是Mesos-DNS策略,有关Mesos-DNS的 具体介绍详见上一篇文章。
通过Mesos-DNS的服务发现策略,可以通过辅助脚本利用Marathon REST API定时(通过linux crond服务)产生HAProxy 配置文件,通过diff 生成的hapxoy配置文件与已有的haproxy,来判断是否进行reload haproxy操作。

Mesos-slave默认想master提供的端口资源的范围是31000-32000,当marathon启动一个task 实例时,所在的mesos-slave会随意给其绑定一个或多个在其范围内的端口。需要注意的是应用绑定的实际端口(即mesos-slave分配给它的 端口)和应用在配置时所指定的形式端口(这是以后直接访问的应用端口)之间的区别,形式端口(即应用端口)是应用运行在marathon的一种命名空间, 不是直接绑定的,也就是说其他服务也可以绑定这样一个端口,只是服务不同而已,它间接的被负载均衡器所使用。

服务发现功能,允许marathon上的应用可以通过配置的端口与其他marathon应用进行通信,这样做的好处就是,无需知道实际分配的端口是 多少,例如: python的wsgi服务(配置时你指定的是80)需要跟mysql(配置时你指定的327)进行通信,这样你可以直接与localhost:327进 行通信即可。

HAProxy会把请求路由到具体的服务节点上,如果此服务路径不可达,它将继续将路由到下一个服务节点。需要注意的是,目前服务发现功能只支持marathon上的应用。

使用 HAProxy

Marathon附带一个简单的被叫做 haproxy-marathon-bridge 的shell脚本以及更高级的Python脚本 servicerouter.py(这个脚本在marathon/bin下面)。两个脚本都可以将Marathon的REST API列表中正在运行的任务推送到HAproxy的设置文件中,HAproxy是一个轻量级的TCP/HTTP的代理。haproxy- marathon-bridge提供了一个最小设置功能。 而servicerouter.py支持如SSL卸载,sticky连接和虚拟主机的负载均衡的更高级的功能。

负载均衡实现原理就是上述提及的,通过辅助脚本(这里是使用haproxy-marathon-bridge)利用Marathon REST API定时(通过linux crond服务)产生HAProxy 配置文件,通过diff 生成的hapxoy配置文件与已有的haproxy,来判断是否进行reload haproxy操作。

下图描述了在一个集群分别在两个节点安装同一服务,SVC1和SVC2,分配配置的应用端口是1111和2222,可以看到实际分配给它们的是31100和31200。

现有集群应用

当slave2节点上的SVC2服务通过localhost:2222连接SVC1服务时,HAProxy将把请求转发到第一配置项SVC1的slave1节点。

HAProxy请求转发

如果slave1节点挂了,下一次对Localhost:2222的请求,将被转发到slave2上。

HAProxy转发

haproxy与Marathon的桥接

通过 haproxy-marathon-bridge脚本从Marathon生成一个HAProxy配置在leader.mesos:8080运行:

$ ./bin/haproxy-marathon-bridge leader.mesos:8080 > /etc/haproxy/haproxy.cfg

重新加载HAProxy配置而不中断现有的连接:

$ haproxy -f haproxy.cfg -p haproxy.pid -sf $(cat haproxy.pid)

配置脚本并重新加载可以通过Cron经常触发来跟踪拓扑变化。如果一个节点在重新加载时消失, HAProxy的健康检查将抓住它并停止向这个node发送traffic 。

为了方便这个设置,haproxy-marathon-bridge 脚本以另一种方式可以调用安装脚本本身,HAProxy和定时任务每分钟ping一次的Marathon服务,如果有任何改变将立刻刷新HAProxy。

$ ./bin/haproxy-marathon-bridge install_haproxy_system leader.mesos:8080

Marathon需要ping的列表存按行存储在 /etc/haproxy-marathon-bridge/marathons

脚本安装在 /usr/local/bin/haproxy-marathon-bridge

-cronjob安装在/etc/cron.d/haproxy-marathon-bridge 注意需要用root来运行。

所提供的只是一个基本的示例脚本。

servicerouter.py

通过servicerouter.py脚本从Marathon生成一个HAProxy配置在leader.mesos:8080运行:

$ ./bin/servicerouter.py --marathon http://leader.mesos:8080 --haproxy-config /etc/haproxy/haproxy.cfg

如果有任何变化,将会刷新haproxy.cfg,这样HAproxy将会重新自动加载。

servicerouter.py有许多额外的功能,像sticky 会话,HTTP到HTTPS的重定向,SSL卸载,VHost支持和模板功能。

2、Service Discovery with Bamboo and HAProxy

场景:当你在Mesos集群上部署的了一系列的微服务,而这些服务能够以HTTP方式通过访问特定的URL来对外提供服务或者对内进行通信。

  • Mesos 集群上通过Marathon框架启动应用(服务),Marathon通过健康检查(healthcheck)跟踪它们的状态
  • Bamboo通过监听Marathon event以更新HAProxy配置文件
  • HAProxy ACL规则通过Bamboo进行配置,其能够根据请求的特征,如URL规则、hostname、HTTP headers,来匹配应用服务。

处理流程

Bamboo的处理流程跟上述的方案是异曲同工的。

优点:
1. 允许任意URL与服务进行对应
2. 允许通过HTTP Header与服务进行对应
3. 及时的触发Marathon event来促使HAProxy进行改变
4. HAProxy heavy lifting
不足:
1. 对于非HTP不适用
2. 内部需要有HAProxy故障切换机制除非能够实现SmartStack架构的服务
3. 内部非流量都邹另外的hop(HAProxy)

实现

1、安装HAProxy和Bamboo

HAProxy

HAProxy的安装可以使用如下方式:
apt-get install haproxy

Bamboo

Bamboo项目地址,你可以通过构建脚本来制作deb或者rpm的软件包,当然也可以通过build container进行构建deb 软件包

docker build -fDockerfile-deb -t bamboo-build .
docker run -it -v $(pwd)/output:/output bamboo-build
# package ends up as output/bamboo_1.0.0-1_all.deb

需要注意的是,需要修改/var/bamboo/production.json来修改对应的Marathon、HAProxy、Zookeeper的hostname,然后重启bamboo,通过retsart bamboo-server

2、在marathon上部署应用

编辑ghost.json文件,填入下述配置:

{"id":"ghost-0","container":{"type":"DOCKER","docker":{"image":"ghost","network":"BRIDGE","portMappings":[{"containerPort":2368}]}},"env":{},"instances":1,"cpus":0.5,"mem":256,"healthChecks":[{"path":"/"}]}

然后使用curl -X POST -H "Content-Type: application/json" http://marathon.mesos:8080/v2/apps -d@ghost.json即可部署该应用,可以看到marathon UI

Marathon UI

3、Bamboo配置rules

可以定义rules来告诉HAProxy如何去proxy:

rules

首先,在/etc/hosts添加一行,这样就可以匹配Host Header:

# ip of HAProxy192.168.99.100 ghost.local
  • 1
  • 2

访问Bamboo UI,通常是http://haproxy:8000, 然后添加对应的name:ghost-0,如下图:

Bamboo

查看一下是否添加成功:

这里写图片描述

ok!可以访问http://ghosts.local/

local

参考文档:
1、Service Discovery mesosphere
2、marathon-lb github
3、Service Discovery pi
4、Bamboo-haproxy-marathonbamboo
5、数人科技mesosphere中文文档

 

 

http://www.zoues.com/2016/01/17/mesos-service-discovery-and-load-balancing/

分享到:
评论

相关推荐

    Mesos.in.Action.2016.5.pdf

    本章详细介绍了如何使用Marathon来部署和管理容器化的应用程序,包括配置服务发现、负载均衡以及容错恢复等方面的内容。 **第8章:使用Chronos管理定时任务** Chronos是Mesos生态中的一个用于调度定时任务的工具。...

    mesos运行测试结果分析

    - **关键点:** Marathon的加入不仅增强了Mesos的功能,还提供了更灵活的服务发现和负载均衡机制,这对于提高系统的稳定性和可用性具有重要意义。 #### 四、测试结果与分析 通过对四个实验的结果进行对比分析,...

    HTTP反向代理、负载均衡软件Traefik.zip

    Træfɪk 是一个新型的http反向代理、负载均衡软件,能轻易的部署微服务. 它支持多种后端 (Docker, Swarm, Mesos/Marathon, Consul, Etcd, Zookeeper, BoltDB, Rest API, file...) ,可以对配置进行自动化、...

    marathon-lb-1.4.3.tar.gz

    Marathon-LB是Mesosphere公司开发的一个用于Mesos和Marathon框架的负载均衡器,它提供了高可用性和可扩展性的服务发现与负载均衡解决方案。在分析`marathon-lb-1.4.3.tar.gz`这个压缩包时,我们可以深入探讨Marathon...

    Mesos container在360广告系统的应用.pdf

    - **Marathon-LB**:基于HAProxy的服务发现机制,提高了服务的可用性和负载均衡能力。 - **Mesos-DNS**:通过DNS实现服务发现,简化了服务间的调用流程。 #### 结论 通过采用Mesos容器技术,360广告系统不仅解决了...

    kubernetes-endpoint-proxy:用于负载均衡Kubernetes端点的HAProxy。 对于在Mesos上运行Kubernetes尤其有用

    Kubernetes端点代理用于负载均衡Kubernetes端点的HAProxy。 对于在Mesos / Mesosphere DCOS上运行Kubernetes尤其有用。 这是因为在Kubernetes群集中,服务的端点端口和IP地址可能会更改。 该代理将监视端点中etcd的...

    藏经阁-基于Mesos搭建PaaS平台你可能需要修的路.pdf

    * 服务发现和负载均衡:QAE提供了一个服务发现和负载均衡系统,方便用户对应用进行管理。 延迟发布: 延迟发布是指在应用发布时,等待一段时间后再发布应用。这可以避免容器的重叠,确保业务的连续性。QAE提供了一...

    藏经阁-Mesos,数据中心操作系统的核心.pdf

    Mesosphere DC/OS是Mesos的一个发行版,提供了命令行和图形界面、包裹管理、服务发现、负载均衡、调试、日志和监控、用户管理、安全性加强等功能。DC/OS支持超大规模,支持模块化自定义和扩展,并且是开源的。 ...

    mesos集群在centos部署文档.pdf

    这个过程涉及了 Docker 的安装、Zookeeper 集群的搭建、Mesos 的部署以及 Marathon 的使用,还有 HAProxy 作为负载均衡器的角色。在实际操作中,确保每个步骤都按照最佳实践进行,以保证集群的稳定性和可靠性。同时...

    docker-mesos-haproxy:Mesos HAProxy Docker 镜像

    Mesos HAProxy Bridge (CentoOS 7 + Supervisor) 这是一个带有 Mesos HAProxy 负载均衡器桥容器,用于实现 / 部署。 它基于 docker 镜像,我们在其中实现了插件,用于在配置文件更改时自动重新加载。 HAProxy 将在对...

    掌握Docker容器编排:深入探索多种选项

    - **服务发现与负载均衡**:确保客户端请求能被自动分配到可用的服务实例。 - **弹性伸缩**:根据实际负载情况动态调整服务实例的数量。 - **故障恢复**:自动检测并替换失败的服务实例。 - **资源管理**:高效地...

    容器集群k8s从入门到精通导学大纲资料.pdf

    * 负载均衡:如果一个服务起动了多个容器,能够自动实现请求的负载均衡 * 版本回退:如果发现新发布的程序版本有问题,可以立即回退到原来的版本 * 存储编排:可以根据容器自身的需求自动创建存储卷 Kubernetes ...

    微服务部署示例项目(高可用负载、配置中心、服务注册发现治理、API网关、-microservice-deploy.zip

    通过负载均衡技术,可以确保在多台服务器间分发请求,防止单点故障。例如,使用Nginx或Kubernetes等工具,可以实现服务间的智能路由,确保即使某台服务器出现问题,系统仍能正常运行。 2. **配置中心**:配置中心是...

    DCOS之marathon技术文档

    DCOS之Marathon技术文档详细介绍了Marathon的安装、配置、应用部署、高可用设置、SSL和基础认证配置、服务发现、负载均衡以及应用迁移等方面的知识。 首先,Marathon是一个为Apache Mesos集群提供长服务运行的框架...

    服务器集群.ppt.ppt

    1. **负载均衡**:在服务器集群中,负载均衡器是关键组件,它负责将来自用户的请求分发到集群中的各个服务器,避免单点过载,确保服务的稳定性和响应速度。负载均衡可以通过多种算法实现,如轮询、最少连接数、IP...

    微服务架构引入的问题及解决方案.docx

    - **服务端发现**:客户端将请求发送给服务网关,服务网关负责服务发现和负载均衡。 #### 三、微服务怎样部署?更新?扩容? 1. **服务编排** - **定义**:服务编排是指通过自动化的方式管理和协调多个服务实例...

    从无到有搭建中小型互联网公司后台服务架构与运维架构(龙果学院)最新源码

    - **负载均衡**:通过Nginx或Ribbon等工具实现请求在多个服务实例间均匀分布,提高系统并发处理能力。 - **API Gateway**:作为系统的统一入口,负责路由请求、鉴权、限流等功能,降低前端与后端服务之间的耦合。 - ...

Global site tag (gtag.js) - Google Analytics