架构师进阶之三Zookeeper,Mesos以及Marathon
1.Mesos
Apache Mesos是一个集群管理器,可跨分布式应用程序或框架提供有效的资源隔离和共享。它位于应用程序层和操作系统之间,可以更加轻松地在大规模集群环境中更有效地部署和管理应用程序。它可以在动态共享节点池上运行许多应用程序
Apache Mesos将CPU,内存,存储和其他计算资源从机器(物理或虚拟)中抽象出来,使容错和弹性分布式系统能够轻松构建并有效运行。
ZookerKeeper:单独部署,集群模式,主要负责leader选举,在master down掉的时候选举新的master。
配置举例如下:
master1 | 172.16.10.28 | jdk-8u144、marathon-1.4.6、mesos-1.6.1、zookeeper-3.4.12 |
master2 | 172.16.10.44 | jdk-8u144、mesos-1.6.1、zookeeper-3.4.12 |
master3 | 172.16.10.45 | jdk-8u144、mesos-1.6.1、zookeeper-3.4.12 |
slave1 | 172.16.10.46 | jdk-8u144、mesos-1.6.1、docker |
slave1 | 172.16.10.47 | jdk-8u144、mesos-1.6.1、docker |
2 Marathon
Marathon是一个mesos框架,能够支持运行长服务,使用marathon向mesos发送任务(编写REST api部署新的任务)。
默认情况下,mesos marathon会把app发布到随机节点的随机端口上,当mesos slaves和app越来越多的时候,想查找某组app就变得困难
Marathon特性:
- 高可用性。Marathon作为主动/被动群集运行,领导者选举可以实现100%的正常运行时间。
- 多个容器运行时。Marathon拥有对Mesos容器(使用cgroups)和Docker的一流支持。
- 有状态的应用。Marathon可以将持久存储卷绑定到您的应用程序。您可以运行MySQL和Postgres等数据库,并由Mesos占用存储空间。
- 美丽而强大的UI。
- 制约因素。这些允许例如每个机架,节点等仅放置应用程序的一个实例。
- 服务发现和负载平衡。几种方法可用。
- 健康检查。使用HTTP或TCP检查评估应用程序的运行状况。
- 活动订阅。提供HTTP端点以接收通知 - 例如,与外部负载均衡器集成。
- 指标。以JSON格式在/ metrics查询它们或将它们推送到诸如graphite,statsd和Datadog之类的系统。
- 完整的REST API,易于集成和编写脚本
3 Marathon-lb
为了解决Marathon部署任务的时候,随机节点,随机端口的问题,官方建议使用两个工具:mesos-dns和marathon-lb。mesos-dns是一个服务发现工具,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。