apache mesos_Apache Mesos + Marathon和Java EE

apache mesos

幻灯片1_980 Apache Mesos是一个开放源代码群集管理器,可在分布式应用程序或框架之间提供有效的资源隔离和共享。

Apache Mesos从计算机(物理或虚拟)中提取CPU,内存,存储和其他计算资源,从而使容错和弹性的分布式系统易于构建和有效运行。 它在计算机内部使用应用程序的动态分配。

总之, Apache Mesos由主服务器和从服务器组成。 主机负责在多个从机之间分配工作,并了解每个从机的状态。 对于容错,您可能拥有多个主机。

然后,我们有负责执行应用程序的从站。 从站通过容器(cgroup)隔离执行者和任务(应用程序)。

因此,每个从站都提供其资源,而Apache Mesos负责计划哪个从站将执行它。 请注意,每个从站如果有足够的资源来执行一个任务,则可以执行多个任务。

第一

例如,假设一个从站具有4个CPU(为简化起见,我将不考虑其他参数),那么它可以执行1个任务(4个CPU),2个任务(2个CPU)……

但是Apache Mesos仅管理资源,但是要构建PaaS,我们需要更多类似服务发现或扩展功能的东西。 这就是马拉松比赛的目的

马拉松是在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: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

仅此而已 ,现在我们安装了带有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容器,工件存储或定义依赖项,但我发现运行此功能简单的例子,帮助了我这么多的澄清中间层的概念,这是开始的更复杂的情况好点。

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

apache mesos

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/337949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言表达式用法快来看看

点击上方蓝字关注我&#xff0c;了解更多咨询表达式是C语言的主体。在C语言中&#xff0c;表达式由操作符和操作数组成。最简单的表达式可以只含有一个操作数。根据表达式所含操作符的个数&#xff0c;可以把表达式分为简单表达式和复杂表达式两种&#xff0c;简单表达式是只含…

虚拟机间延迟测量_简单的类来测量延迟

虚拟机间延迟测量这是我编写的用于测量延迟的非常简单的类。 HDRHistogram不是劳斯莱斯解决方案&#xff0c;但是如果您只想在项目中添加一个类&#xff0c;那么效果就很好。 这是一个简单的测试程序&#xff0c;向您展示其用法&#xff1a; package util;public class Laten…

python导入模块报错_Python 导入上层目录模块报错

背景&#xff1a;当前demo.py 文件&#xff0c;所处目录 D:\py\test\TestCase&#xff0c;需要调用test 目录下的模块&#xff0c;尝试了 新建__init__.py 文件 import test.模块名的方法&#xff0c;无效.报错信息&#xff1a;D:\py\test\TestCase>python demo.pyTraceback…

java int 传引用吗_Java的参数传递是「值传递」还是「引用传递」?

关于Java传参时是引用传递还是值传递&#xff0c;一直是一个讨论比较多的话题。有人说Java中只有值传递&#xff0c;也有人说值传递和引用传递都是存在的&#xff0c;比较容易让人产生疑问。关于值传递和引用传递其实需要分情况看待。一、Java数据类型我们都知道&#xff0c;Ja…

rest接口自动化测试_REST服务的自动化测试

rest接口自动化测试尽管我是Java和Scala开发人员&#xff0c;但我仍然对软件测试充满热情。 如果更精确-Web应用程序。 开发Web应用程序并确保应用程序具有良好的质量真的很有趣。 当我开始职业生涯时&#xff0c;最流行的Web架构是MVC&#xff08;模型视图控件&#xff09;&a…

C语言中变量的存储类别

点击上方蓝字关注我&#xff0c;了解更多咨询在程序中经常会使用到变量&#xff0c;在C程序中可以选择变量的不同存储形式&#xff0c;其存储类别分为静态存储和动态存储。可以通过存储类修饰符来告诉编译器要处理什么样的类型变量&#xff0c;具体主要有自动&#xff08;auto&…

javafx 项目_JavaFX,Jigsaw项目和JEP 253

javafx 项目因此&#xff0c; Java 9可能会破坏您的代码 …… 如果您的项目使用JavaFX&#xff0c;则这尤其可能&#xff0c;因为许多自定义和自制控件都需要使用内部API。 借助Project Jigsaw&#xff0c;这些内容将无法在Java 9中访问。幸运的是&#xff0c; Oracle在几天前…

C语言结构体用法很多,坑也很多

点击上方蓝字关注我&#xff0c;了解更多咨询还在使用89年版C语言的Linux内核&#xff0c;现在终于要做出改变了。今天&#xff0c;Linux开源社区宣布&#xff0c;未来会把内核C语言版本升级到C11&#xff0c;预计5.18版之后生效&#xff0c;也就是今年5月。这个决定很突然&…

java 消息队列服务_ActiveMQ 消息队列服务

1 ActiveMQ简介1.1 ActiveMQ是什么ActiveMQ是一个消息队列应用服务器(推送服务器)。支持JMS规范。1.1.1 JMS概述全称&#xff1a;Java Message Service &#xff0c;即为Java消息服务&#xff0c;是一套java消息服务的API标准。(标准即接口)实现了JMS标准的系统&#xff0c;称之…

第一个C语言编译器是怎样编写的?

点击上方蓝字关注我&#xff0c;了解更多咨询以我们嵌入式开发中经常使用的C语言为例&#xff0c;我们来介绍一下第一个C语言编译器的来源。还是让我们回顾一下C语言历史&#xff1a;1970年Tomphson和Ritchie在BCPL&#xff08;一种解释型语言&#xff09;的基础上开发了B语言&…

java循坏_Java的坏功能是什么

java循坏总览 当您第一次学习开发时&#xff0c;您会看到关于不同功能的过分笼统的陈述&#xff0c;它们对于设计&#xff0c;性能&#xff0c;清晰度&#xff0c;可维护性都是不好的&#xff0c;感觉就像是黑客&#xff0c;或者他们只是不喜欢它。 这可能会得到现实世界经验的…

java 内存 开发 经验_有一到五年开发经验的JAVA程序员需要掌握的知识与技能!...

JAVA是一种平台&#xff0c;也是一种程序设计语言&#xff0c;如何学好程序设计不仅仅适用于JAVA&#xff0c;对C等其他程序设计语言也一样管用。有编程高手认为&#xff0c;JAVA也好C也好没什么分别&#xff0c;拿来就用。为什么他们能达到如此境界&#xff1f;我想是因为编程…

C语言fgets()函数:以字符串形式读取文件

点击上方蓝字关注我&#xff0c;了解更多咨询C语言 fgets() 函数从文本文件中读取一个字符串&#xff0c;并将其保存到内存变量中。fgets() 函数位于 <stdio.h> 头文件中&#xff0c;其使用格式如下&#xff1a;fgets(字符串指针,字符个数n,文件指针);格式说明&#xff1…

js文件 import java类_实现JS脚本导入JAVA类包

本例演示怎样通过JS脚本导入JAVA类包&#xff0c;我们创建JS引擎后&#xff0c;通过eval方法调用 getScript() ,JS脚本中importPackage(java.util)为导入包。package ajava.code.javase;import javax.script.ScriptEngineManager;import javax.script.ScriptEngine;import java…

摆脱冷气_摆脱匿名类

摆脱冷气我真的很喜欢编写和阅读lambda表达式-它们简洁&#xff0c;富于表现力和时尚&#xff08;来吧&#xff0c;这样就没关系了&#xff01;&#xff09;。 将此与匿名类进行比较。 这就是为什么我喜欢摆脱它们&#xff01; 在过去的几个月里&#xff0c;这种认识慢慢地实现…

深入了解C语言

点击上方蓝字关注我&#xff0c;了解更多咨询c语言在编程语言中是偏底层的语言&#xff0c;像JavaScript&#xff0c;以及java。都是在c语言的基础上编译出来的。像操作系统&#xff1a;unix &#xff0c;linux &#xff0c;windows都是依靠c语言开发出来的&#xff0c;使用c语…

java imageview的使用_Android使用控件ImageView加载图片的方法

在 Android 加载图片一般使用 ImageView&#xff0c;这里简单记录一下这个控件的使用方法。最简单就是在 xml 里直接使用 ImageView 标签&#xff1a;android:orientation"vertical"android:layout_width"fill_parent"android:layout_height"fill_par…

jaxb报错_JAXB做错了; 尝试Xembly

jaxb报错JAXB是一项具有10年历史的Java技术&#xff0c;它使我们能够将Java对象转换为XML文档&#xff08;编组&#xff09;和返回&#xff08;取消编组&#xff09;。 我认为这项技术基于setter和getter&#xff0c;并且通过将对象转换为被动数据结构而违反了面向对象编程的关…

C语言函数注意点有哪些?

点击上方蓝字关注我&#xff0c;了解更多咨询构成C程序的基本单位是函数 C语言程序是由函数构成的&#xff0c;不存在过程。函数名代表该函数的入口地址C语言函数可以嵌套调用&#xff0c;例如&#xff1a;fun(fun(x)) &#xff1b;于C语言中&#xff0c;子程序的…

java int转byte_Java将int转换为byte时的奇怪行为?

在Java中&#xff0c;a int是32位。A byte是8 bits。最原始的类型Java中的签名&#xff0c;byte&#xff0c;short&#xff0c;int&#xff0c;和long被编码在二进制补码。(char类型是无符号的&#xff0c;符号的概念不适用boolean。)在此数字方案中&#xff0c;最高有效位指定…