这是Ed Ropple重新发布的来宾博客文章。 Ed是Localytics的平台工程师。 他的野心是使其他软件开发人员能够提高生产率,减少出错。 您可以在这里找到他的原始文章。
自从2月左右在Localytics开始学习以来,我发现自己陷入了一大堆新事物。 我之前的操作经验更多是“作为系统管理员来开发人员,”而不是与流行语兼容的DevOps Ninja Powers。 不过,在Localytics,我一直在快速提升这些水平,我想谈谈一些有趣的东西。 但是我们需要先弄清楚我们要公开的内容,它可能会在结束之前出现在公司博客上,所以我将闲聊一下我正在做的事情时间:设置一个Mesos集群,并使用一个或两个副项目的应用程序填充它。
什么是Mesos?
你很高兴地问,虚构我的想象力! Mesos是一个计算管理框架,它诞生于UC Berkeley的AMP实验室。 Mesos和其他平台即服务(PaaS)项目背后的想法是将整个数据中心,它的整个套件和组合带走,并将其视为一个单一的异构计算环境。 应用程序不能在服务器上运行(可以,但可以,但只能在一定时间后运行); 相反,它们在整个该死的数据中心上运行。 还有其他一些与Mesos相似的工具,其中包括Deis和Flynn 。 所有这些都深深地吸引了Google Omega论文 ,您应该阅读该论文 ,因为Google会大量进行此类工作。 各种集群选项之间的差异在很大程度上是范围上的-Mesos比Deis和Flynn雄心勃勃,而且每个项目都选择了适合自己的工具。
您还将在此过程中看到对马拉松的引用。 它是Mesos的调度程序,其行为有点像一个初始化系统,它为系统提供了很多功能。 我会继续添加它。
我在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 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中提供一些配置。
无论如何,用流浪者配置重新配置 ,再次启动服务器,您就应该在本地主机:8080上运行Marathon。 (我还在端口8080之间添加了一个向前/向端口的端口,并在Vagrantfile中将 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