Apache Mesos + Marathon和Java EE

幻灯片1_980 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 MesosMarathon就像安装VirtualBoxVagrantgit一样容易。

克隆下一个仓库:

git clone https://github.com/mesosphere/playa-mesos.git

只需从目录运行vagrant-up命令:

cd playa-mesos
vagrant up

第一次需要一些时间,因为它需要下载几个组件。

之后,您可以通过连接到MesosMarathon Web Console来检查它是否已正确安装。 http://10.141.141.10:5050http://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

仅此而已 ,现在我们安装了带有MesosphereHAProxy的 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呢?

$ PORTMesosphere将分配给要与之通信的节点的随机端口。 此端口用于确保使用重叠的端口分配的Marathon不能运行两个应用程序。

而且通过在群集中的每个主机上运行一个TCP代理,并将其在localhost上的静态端口透明地转发到运行该应用程序的主机,它还用于服务发现和负载平衡。 这样,客户端只需连接到该端口,发现的实现细节就被完全抽象掉了。

因此,我们要做的第一件事是修改TomEE的配置以从Marathon分配的随机端口开始,因此,我们创建了一个新的server.xml文件并将侦听端口设置为$ PORT

因此,如果端口是随机的,那么如果客户端不知道从哪个端口启动,该如何连接? 这是端口属性的目的。 在此属性中,我们设置为:当我连接到端口10000时,我想连接到已定义并部署到任何从站的应用程序,而与实例数无关。

是的,它可能有点复杂,但让我用一个简单的示例进行说明:

假设我有一个与以前相同的示例,但是有两个实例(instances = 2)。 两个TomEE实例都将在两个不同的从属设备(因此在不同的节点)和不同的端口中启动。 假设3145631457 。 那么我们如何连接到他们呢?

简单。 您可以使用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 MesosMarathon并不像您最初想象的那么难。

还要注意,这是一篇有关MesosJava EE的“ Hello World”文章,但是MesosMesosphere不仅限于服务的健康检查,运行Docker容器,Artifact Storage或定义依赖项,但我发现运行此功能一个简单的例子,帮助我在很大程度上阐明了中间层概念,这对于更复杂的场景是一个很好的起点。

翻译自: https://www.javacodegeeks.com/2015/04/apache-mesos-marathon-and-java-ee.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值