mesos服务器(集群)_具有流浪者和厨师的虚拟Mesos集群

mesos服务器(集群)

这是Ed Ropple重新发布的来宾博客文章。 Ed是Localytics的平台工程师。 他的野心是使其他软件开发人员能够提高工作效率,减少出错的可能性。 您可以在这里找到他的原始文章

二月左右在Localytics开始学习以来,我发现自己陷入了一大堆新事物。 我之前的操作经验更多是“开发人员以系统管理员的身份登场”,而不是流行语兼容的DevOps Ninja Powers。 不过,在Localytics,我一直在快速提升这些水平,我想谈谈一些有趣的东西。 但是我们需要先弄清楚我们要公开的内容,它可能会在结束之前出现在公司博客上,所以我将继续讨论我在做的事情。时间:设置一个Mesos集群,并使用一个或两个副项目的应用程序填充它。

什么是Mesos?

你很高兴地问,我的想象力虚增了! Mesos是一个计算管理框架,它诞生于UC Berkeley的AMP实验室。 Mesos和其他平台即服务(PaaS)项目背后的想法是将整个数据中心,它的整个套件和组合带走,并将其视为一个单一的异构计算环境。 应用程序不能在服务器上运行(可以,但是可以,但只能在一定时间后运行); 相反,它们在整个该死的数据中心上运行。 还有其他一些与Mesos相似的工具,其中包括DeisFlynn 。 所有这些都深深地吸引了Google Omega论文 ,您应该阅读该论文 ,因为Google大规模地进行了这些工作。 各种集群选项之间的差异在很大程度上是范围上的-Mesos比Deis和Flynn雄心勃勃,而且每个项目都选择了适合自己的工具。

您还将在此过程中看到对马拉松的引用。 它是Mesos的调度程序,其行为有点类似于init系统-它为系统提供了很多功能。 我会继续添加它。

在Mesos,Marathon和Docker上发现了这段视频,对于思考这些内容确实很有帮助,建议您观看。 我比他们有趣,但他们实际上知道自己在做什么。 (他们怎么敢。)

硬件

不幸的是,我家中没有数据中心。 我的意思是说,我已经考虑过要机架,但是在夏天,我已经为空调支付了足够的钱。 因此,我的可用硬件有所限制。 我以前的VM服务器(现在是Docker操场)是一台具有32GB RAM和几TB磁盘的Ivy Bridge i5,是该工作的最佳人选,但它也正在运行我的家庭VPN,我不想使机器超出我微薄的复苏能力。 (但是)因此,在本系列的第一篇文章中,我将在MacBook Pro上构建一个三节点Mesos群集。

入门

首先,我要在Github上进行mesos-experiments时上传我的东西。 我将标记每个帖子的状态; 这篇文章将包含blog-1和blog-2。

尽管Mesos是一个Apache项目,但是大多数有用的文档都位于Mesosphere的站点上。 中层是Mesos的商业分支。 他们的“学习”页面有些令人生畏。 就像,我知道所有单词的意思,但是如果我知道它们的意思都串在一起,我该死的。 但是不知道某事的第一件事从来没有阻止过我,所以我们继续前进。 因为我在OS X上使用Vagrant ,所以我很想让vagrant-mesos旋转一下,但这对我来说是一个真正的问题,因为它是预先构建的,我不知道自己在做什么。 所以,从汤到坚果。

Mesos提供了有关Ubuntu 14.04的说明,所以我继续前进,从互联网的深处抓住了一个盒子。

vagrant box add --name ubuntu-14.04-chef https://oss-binaries.phusionpassenger.com/vagrant/boxes/latest/ubuntu-14.04-amd64-vbox.box

(感谢您的配合,Phusion!您是我最了解的最好的公司。)

无论如何,这个无家可归的盒子里已经安装了Chef和Puppet。 我不是游击队,除非我要对付的游击队是Chef Server,因为我一生中已经受够了。 所以是Solo厨师。 让我们初始化一些流浪汉:

vagrant init

默认的Vagrantfile充满了注释,这些注释在我的流浪者生活中此时是我不需要或想要的,因此在删除了大约一个Pete的注释并让我逐渐学会一些厨师独奏之后,这就是我得到的:

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "ubuntu-14.04-chef"
  config.vm.synced_folder '.', '/vagrant', disabled: true
  config.vm.synced_fonder './scripts', '/opt/scripts'

  config.vm.provision "chef_solo" do |chef|
    chef.cookbooks_path = [ "./chef/cookbooks", "./chef/librarian-cookbooks" ]
    chef.add_recipe "edcanhack_mesos"

    chef.json = {}
  end
end

我们当中的精明人士会注意到,这是指不存在的厨师食谱。 我们当中的精明人士可能会感到震惊,谢谢,我已经明白了。 为了避免使您的视线发散,我将省略正在使用的系统设置的结缔组织(在回购中),而仅包括菜谱中有趣的部分1。

现在,配方非常简单:

include_recipe "ubuntu"
include_recipe "python"

MESOS_DEB_URL="http://downloads.mesosphere.io/master/ubuntu/14.04/mesos_0.19.0~ubuntu14.04%2B1_amd64.deb"
MESOS_EGG_URL="http://downloads.mesosphere.io/master/ubuntu/14.04/mesos-0.19.0_rc2-py2.7-linux-x86_64.egg"

case node[:platform]
when "ubuntu"
  %w"zookeeperd default-jre python-setuptools python-protobuf curl".each { |p| package p }
else
  raise "ubuntu only!"
end


remote_file "Mesos .deb" do
  source MESOS_DEB_URL
  path "/tmp/mesos.deb"
end
dpkg_package "Installing Mesos .deb" do
  source "/tmp/mesos.deb"
end


remote_file "Mesos .egg" do
  source MESOS_EGG_URL
  path "/tmp/mesos.egg"
end
bash "Installing Mesos .egg" do
  code "easy_install /tmp/mesos.egg"
end

根据Mesosphere的前提条件页面 ,这些是前提条件 。 显然,我还没有将其扩展到多服务器,因此我们暂时将运行它们称为单例集群的东西。 不幸的是,尽管您可以(不可避免地)在Chef中重新启动计算机,但是当您尝试(猜测我是如何发现)Vagrant时,它将丢失所有大理石,所以我们也将自己做。

vagrant up && vagrant halt && vagrant up # AND UP AND DOWN AND UP AND DOWN vagrant ssh -c "curl -i localhost:5050/master/health"

而且...现在我有一个机枪可以使用Mesos的盒子了。 (这是标签blog-1。)

HTTP/1.1 200 OK
Date: Fri, 11 Jul 2014 06:32:28 GMT
Content-Length: 0

App app app

因此,我以Scala Person的身份加入Localytics,现在我仍然如此,但是我通过做一些令人不舒服的Chef巫师,最终在很大程度上与Ruby相识。 不过,关于Rails仍然一无所知。 不过,对我而言,好消息是Mesosphere拥有一个将Play应用程序放置到Mesos集群上的教程。 因此,lemme开始吧。

如果您到目前为止已经单击了链接的弹幕,您可能知道Mesos使用了两级调度程序。 顶级调度程序是Mesos主服务器。 它的工作是在框架中运行的各个应用程序之间公平地(或不公平地,如果您愿意的话)分配资源。 框架为Mesos从属运行生成作业,将它们向上传递回主服务器,再向下传递至从属节点以运行它们。 Mesos附带了对Hadoop和Spark的支持以及分布式计算领域的许多其他流行方式。 Mesosphere还开发了自己的框架,称为Marathon,旨在执行长时间运行的任务。

中球层与Flynn,Deis和Heroku的不同之处在于,它不使用git push模型; 相反,您只需将其指向一个zip文件,它就可以完成它的工作。 Mesosphere有一个PlayHello项目,我们将首先开始。 不过,更紧迫的是,他们的教程的第1步说“去下载马拉松!” 而且我不愿意手动执行此操作,因此让我们将其放入“厨师食谱”中。 (而且,在我们进行此操作时, 请安装gem来安装marathon_client ,以便稍后使用…)

user "marathon"
remote_file "Marathon .tar.gz" do
  source MARATHON_URL
  path "/tmp/marathon.tar.gz"
end
bash "Installing Marathon" do
  code <<-ENDCODE
  tar xzf /tmp/marathon.tar.gz
  mv /tmp/marathon /opt/marathon
  chown -R marathon /opt/marathon
  ENDCODE
end
cookbook_file "Adding Marathon upstart script" do
  source "marathon_upstart.conf"
  path "/etc/init/marathon.conf"
end

再一次,老鹰眼将在其中看到一个cookbook_file指令。 blog-2标签包含一个“ marathon_upstart.conf”文件。 它起源于jalaziz要旨,它可以处理我几乎所有的事情-尽管它具有一些我从未见过的整洁的惯用技巧,例如它如何处理文件存在性测试(回想起来很明显,但对我来说是新的)。 我更新了它以使用Marathon的启动脚本,而不是直接调用它并切掉了一些无关紧要的地方。

该新贵脚本中的目录有些神奇,因为Mesos将一些内容转储到Marathon期望它们的位置的文件系统中。 当进入非单例集群时,我们需要在/ etc / default / marathon中提供一些配置。

无论如何,以无业游民的供应进行重新配置 ,再次启动服务器,您应该让Marathon在localhost:8080上运行。 (我还在端口8080之间添加了一个进/出端口,并将VRAMrantfile中的VM RAM升级到2GB。)单击友好的“新应用”按钮。

  • ID:你好测试
  • 命令: ./ Hello-* / bin / hello -Dhttp.port = $ PORT
  • 记忆体: 512
  • CPU: 0.5
  • 实例: 1
  • URI: http : //downloads.mesosphere.io/tutorials/PlayHello.zip

您应该会看到该应用程序的一个实例以及一个随机端口,以便继续运行。

第一次执行此操作时,我没有得到我想要的出色的已部署应用程序。 相反-什么都没有。 我的应用信息中出现了零个实例。 扩大规模,没有好处; 缩小,同上。 弄清楚我会为实例配置的RAM太少而对Vagrant进行了错误配置,因此将其提高了。 新的失败:该应用程序将启动并立即死亡。 通常,Mesos将其日志安装到$ MESOS_HOME ,但是(令人不快地)通过.deb软件包安装会将日志放置在…位置。 最终,我在/ tmp内的六个目录中跟踪了我的工作人员的输出,有一段时间我怀疑我的毅力,但是仍然继续。

看我找到了什么:

root@ubuntu-14:/tmp/mesos/slaves/20140712-044358-16842879-5050-1169-0/frameworks/20140711-071659-16842879-5050-1167-0000/executors/hello-test_0-1405141392233/runs/latest# cat stderr

的儿子:

WARNING: Logging before InitGoogleLogging() is written to STDERR
I0712 05:03:12.295583  3228 fetcher.cpp:73] Fetching URI 'http://downloads.mesosphere.io/tutorials/PlayHello.zip'
I0712 05:03:12.296902  3228 fetcher.cpp:123] Downloading 'http://downloads.mesosphere.io/tutorials/PlayHello.zip' to '/tmp/mesos/slaves/20140712-044358-16842879-5050-1169-0/frameworks/20140711-071659-16842879-5050-1167-0000/executors/hello-test_0-1405141392233/runs/4750cdfa-fcc2-44fb-a078-819edc3fdad7/PlayHello.zip'
sh: 1: unzip: not found

但! 解决了这个谜团之后,我们有了……库存的hello-world应用。

这是mesos-experiments中的blog-2标签,现在就可以这样做。 对于下一个技巧(和下一篇文章),我将构建一个单独的辅助从属服务器,并添加一些Vagrant魔术,以使其可扩展到任意数量的从属节点。

翻译自: https://www.javacodegeeks.com/2014/11/a-virtual-mesos-cluster-with-vagrant-and-chef.html

mesos服务器(集群)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值