Apache Mesos是一个开放源代码群集管理器,可在分布式应用程序或框架之间提供有效的资源隔离和共享。
Apache Mesos从计算机(物理或虚拟)上提取CPU,内存,存储和其他计算资源,从而使容错和弹性的分布式系统易于构建和有效运行。 它在计算机内部使用应用程序的动态分配。
总之, Apache Mesos由主服务器和从服务器组成。 主机负责将工作分配给多个从属,并了解每个从属的状态。 对于容错,您可能拥有多个主机。
然后,我们有负责执行应用程序的从站。 从站通过容器(cgroup)隔离执行程序和任务(应用程序)。
因此,每个从站都提供其资源,而Apache Mesos负责调度哪个从站将执行它。 请注意,如果每个从站都具有足够的资源来执行它,那么它可以执行多个任务。
例如,假设一个从站具有4个CPU(为简化起见,我将不考虑其他参数),那么它可以执行1个任务(4个CPU),2个任务(2个CPU)……
但是Apache Mesos仅管理资源,但是要构建PaaS,我们需要更多类似服务发现或扩展功能的东西。 这就是马拉松比赛的目的 。
Marathon是在A pache Mesos之上运行的框架,并提供:
- 运行Linux二进制文件
- 集群范围的流程主管
- 服务发现和负载平衡(HAProxy)
- 自动化的软件和硬件故障处理
- 部署和扩展
- REST友好
但是使用Marathon的主要优点之一是它可以简化并自动执行所有常见任务。
因此, Marathon的主要任务是将应用程序部署到不同的组件,因此,如果一个组件失败,则将有其他从属服务传入的通信。 但是,此外, Marathon将负责将应用程序重新分配给另一个从站,以便每个应用程序的从站数量保持恒定。
在开发人员机器上安装Apache Mesos和Marathon就像安装VirtualBox , Vagrant和git一样容易。
克隆下一个仓库:
git clone https://github.com/mesosphere/playa-mesos.git
只需从目录运行vagrant-up命令:
cd playa-mesos
vagrant up
第一次需要一些时间,因为它需要下载几个组件。
之后,您可以通过连接到Mesos和Marathon Web Console来检查它是否已正确安装。 http://10.141.141.10:5050和http://10.141.141.10:8080
下一步是安装HAProxy 。 尽管不是必需的,但是如果要执行服务发现和负载平衡,则“需要” HAProxy 。
运行vagrant ssh 。
安装HAProxy
sudo apt-get install haproxy
下载haproxy-marathon-bridge脚本:
wget https://raw.githubusercontent.com/mesosphere/marathon/master/bin/haproxy-marathon-bridge
chmod 755 haproxy-marathon-bridge./haproxy_marathon_bridge localhost:8080 > haproxy.cfg
haproxy -f haproxy.cfg -p haproxy.pid -sf $(cat haproxy.pid)
并配置HAproxy 。 为了避免每次拓扑更改时都必须手动运行此命令,可以运行:
./haproxy_marathon_bridge install_haproxy_system localhost:8080
它会安装脚本本身, HAProxy和一个cronjob ,它每分钟一次ping指定的Marathon服务器之一,并在发生任何更改时刷新HAProxy 。
仅此而已 ,现在我们安装了带有Mesosphere和HAProxy的 Apache Mesos 。 现在该部署Java EE应用程序服务器了。 在这种情况下,我们将使用Apache TomEE 。
我们唯一需要做的就是将JSON文档作为POST发送到http://10.141.141.10:8080/v2/apps
{"id": "projectdemo","cmd": "cd apache-tomee-plus* && sed \"s/8080/$PORT/g\" < ./conf/server.xml > ./conf/server-mesos.xml && ./bin/catalina.sh run -config ./conf/server-mesos.xml","mem": 256,"cpus": 0.5,"instances": 1,"ports":[10000],"constraints": [["hostname", "UNIQUE"]],"uris": ["http://ftp.cixug.es/apache/tomee/tomee-1.7.1/apache-tomee-1.7.1-plus.tar.gz"]
}
该JSON文档将使Marathon在一个节点上部署该应用程序。 让我们解释每个属性:
id:是应用程序的id,这里没有太多秘密。
cmd :选择节点就绪时将执行的命令。 在这种情况下,请注意,我们正在创建server-mesos.xml文件,它是server.xml文件的修改版本,但将8080端口替换为$ PORT var。 现在就足够了。 最后,它使用server-mesos.xml配置文件启动TomEE 。
mem :节点中将需要的内存。
cpus :节点中将需要的Cpu资源。
instance :我们要复制此应用程序的节点数。 在这种情况下,只有一个,因为我们在本地运行。
ports :哪个端口将所有应用程序实例分组。 基本上,此端口由
HAProxy路由到正确的实例。 我们将在下一段中深入解释。
约束 :约束控制应用程序的运行位置,以优化容错能力或位置。 在这种情况下,我们设置每个应用程序应该在不同的从属设备中。 使用这种方法可以避免端口冲突。
uris :设置要在执行cmd部分之前执行的URI 。 在已知压缩算法的情况下,它会自动解压缩。 因此,您可以直接在cmd中执行cd命令,而不必手动将其解压缩。
因此,让我解释一下这里发生的事情或Mesosphere的作用:
首先,读取JSON文档并检查哪个从站具有可以处理此服务的节点。 在这种情况下,只需找到一个即可。 (实例= 1)。
找到后,将下载uri元素,将其解压缩,然后执行在中指定的命令
当前目录中的cmd属性。
就这样。 但是,等待什么是端口和$ PORT呢?
$ PORT是Mesosphere将分配给要与之通信的节点的随机端口。 此端口用于确保使用重叠的端口分配的Marathon不能运行两个应用程序。
而且通过在群集中的每个主机上运行一个TCP代理,并将其在localhost上的静态端口透明地转发到运行该应用程序的主机,它还用于服务发现和负载平衡。 这样,客户端只需连接到该端口,发现的实现细节就被完全抽象掉了。
因此,我们要做的第一件事是修改TomEE的配置以从Marathon分配的随机端口开始,因此,我们创建了一个新的server.xml文件并将侦听端口设置为$ PORT 。
因此,如果端口是随机的,那么如果客户端不知道从哪个端口启动,该如何连接? 这是端口属性的目的。 在此属性中,我们设置为:当我连接到端口10000时,我想连接到已定义并部署到任何从站的应用程序,而与实例数无关。
是的,它可能有点复杂,但让我用一个简单的示例进行说明:
假设我有一个与以前相同的示例,但是有两个实例(instances = 2)。 两个TomEE实例都将在两个不同的从属设备(因此在不同的节点)和不同的端口中启动。 假设31456和31457 。 那么我们如何连接到他们呢?
简单。 您可以使用Marathon的IP和将要访问该特定服务器的随机端口( http://10.141.141.10:31456/ ),也可以使用全局定义的端口( http://10.141.141.10:10000 / ),在这种情况下, HAProxy将路由到一个实例(取决于负载平衡规则)。
请注意,这对我们如何在Marathon内的应用程序之间进行通信有很大的影响,因为如果需要在Marathon内部署的应用程序之间进行内部通信,则只需知道该全局端口,因为可以将主机设置为HAProxy来设置localhost将解决它。 因此,从Marathon应用程序中,我们可以简单地使用http:// localhost:10000 /与TomEE通信,因为HAProxy随后会将请求路由到实际运行该服务实例的主机和端口。 在下一张图片中,您可以看到Marathon的仪表板以及如何部署应用程序。 请注意,您可以看到已部署应用程序的IP和端口。 您可以通过单击它或使用Marathon IP (与该链接中提供的相同)但使用端口10000进行访问 。 请记住, HAProxy每分钟都会更新一次,因此,如果它通过使用随机端口而不是使用端口10000起作用,则可能需要等待一段时间才能刷新HAProxy数据库。
这就是全部,正如您可能会看到的, Apache Mesos和Marathon并不像您最初想象的那么难。
还要注意,这是一篇有关Mesos和Java EE的“ Hello World”文章,但是Mesos和Mesosphere不仅限于服务的健康检查,运行Docker容器,Artifact Storage或定义依赖项,但我发现运行此功能一个简单的例子,帮助我在很大程度上阐明了中间层概念,这对于更复杂的场景是一个很好的起点。
翻译自: https://www.javacodegeeks.com/2015/04/apache-mesos-marathon-and-java-ee.html