如何在 Ubuntu 14.04 上配置生产就绪的 Mesosphere 群集

介绍

Mesosphere是一个系统,它结合了许多组件,以有效地管理服务器集群和高可用部署在现有操作系统层上。

在本指南中,我们将讨论如何在中层层配置一个高度可用的群集. 这种配置将使我们在任何我们的主节点失效的情况下设置故障,以及一群奴隶服务器来处理计划中的任务。

我们将使用Ubuntu 14.04服务器为本指南。

前提和目标

在您完成本指南之前,强烈建议您查看我们的(https://andsky.com/tech/tutorials/an-introduction-to-mesosphere)。

在本教程中,我们将使用六个Ubuntu服务器,这符合Apache Mesos的建议,为生产环境至少有三位大师。

我们将使用的六个服务器将使用zookeeper来跟踪主服务器的当前领导者。基于此构建的Mesos层将提供分布式同步和资源处理。它负责管理群集。

为了本指南,我们将假设我们的机器具有以下配置:

HostnameFunctionIP Address
master1Mesos master192.0.2.1
master2Mesos master192.0.2.2
master3Mesos master192.0.2.3
slave1Mesos slave192.0.2.51
slave2Mesos slave192.0.2.52
slave3Mesos slave192.0.2.53

每个机器都应该安装Ubuntu 14.04 您将需要完成我们 Ubuntu 14.04 初始服务器安装指南中列出的基本配置项目。

当您完成上述步骤后,继续使用本指南。

在服务器上安装 Mesosphere

让您的集群运行的第一步是安装该软件. 幸运的是,Mesosphere项目维护了一个Ubuntu存储库,具有最新的包,易于安装。

向您的主机添加 Mesosphere Repositories

在所有主人(主人和奴隶)上,完成以下步骤。

首先,将Mesosphere存储库添加到您的源列表中. 这个过程涉及从Ubuntu键服务器下载Mesosphere项目的密钥,然后为我们的Ubuntu版本制作正确的URL。

1sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E56151BF
2DISTRO=$(lsb_release -is | tr '[:upper:]' '[:lower:]')
3CODENAME=$(lsb_release -cs)
4echo "deb http://repos.mesosphere.io/${DISTRO} ${CODENAME} main" | sudo tee /etc/apt/sources.list.d/mesosphere.list

安装必要的组件

您在系统中添加了 Mesosphere 存储库后,必须更新本地包缓存以获取新组件的访问:

1sudo apt-get -y update

接下来,您需要安装必要的包,您需要的组件将取决于主机的角色。

对于你的 master 主机,你需要的就是mesosphere meta 包,其中包括zookeeper,mesos,marathonchronos的应用程序:

1sudo apt-get install mesosphere

对于你的奴隶主机,你只需要mesos包,这也引入了动物护理员作为依赖:

1sudo apt-get install mesos

设置为 Mesos 的 Zookeeper 连接信息

我们要做的第一件事是配置我们的动物护理员连接信息,这是我们的所有主机都可以连接到正确的主服务器的底层,所以从这里开始是有意义的。

我们的主服务器将是我们动物护理员群集的唯一成员,但我们所有的服务器都需要某种配置才能使用协议进行通信。

在您的所有主机中,完成以下步骤: 打开带 root 特权的文件:

1sudo nano /etc/mesos/zk

在内部,您会发现连接 URL 默认设置为访问本地实例。

1zk://localhost:2181/mesos

我们需要修改这一点,以指向我们的三个主服务器。这就是通过用我们第一个Mesos主服务器的IP地址代替localhost来完成的。

对于我们的指南,我们的大师有192.0.2.1,192.168.2.2192.168.2.3的IP地址。

1zk://192.0.2.1:2181,192.0.2.2:2181,192.0.2.3:2181/mesos

该行必须从zk://开始,并以/mesos结束,在此间,您的主服务器的IP地址和zookeeper端口(默认情况下是2181)被指定。

保存并关闭文件,当你完成。

在每个主人和奴隶中使用这个相同的输入,这将有助于每个单独的服务器连接到正确的主服务器,以与集群进行通信。

配置主服务器的 Zookeeper 配置

在您的 master 服务器上,我们需要做一些额外的zookeeper配置。

第一个步骤是为每个主服务器定义一个独特的ID号码,从1到255,这是存储在 /etc/zookeeper/conf/myid 文件中。

1sudo nano /etc/zookeeper/conf/myid

删除此文件中的所有信息,并用一个单一的数字取代它,从1到255. 每个主服务器都必须有一个独特的号码. 为了简单,最容易的是从1开始,并向上工作。

我們的第一個伺服器只會在檔案中有這一點:

11

完成后,保存并关闭文件,在您的每个主服务器上执行此操作。

接下来,我们需要修改我们的zookeeper配置文件以将我们的zookeeper ID 映射到实际主机上,这将确保该服务能够正确地从其使用的ID系统中解决每个主机。

现在打开zookeeper配置文件:

1sudo nano /etc/zookeeper/conf/zoo.cfg

在此文件中,您需要将每个ID地图到一个主机。主机规格将包括两个端口,第一个用于与领导者通信,第二个用于处理需要新领导者时的选举。

对于我们的指南,我们将使用每个函数的默认端口,我们的ID为1 - 3。

1server.1=192.168.2.1:2888:3888
2server.2=192.168.2.2:2888:3888
3server.3=192.168.2.3:2888:3888

将这些相同的映射添加到您主服务器的每个配置文件中. 完成后保存并关闭每个文件。

这样,我们的动物护理员配置就完成了,我们可以开始专注于梅索斯和马拉松。

在主服务器上配置 Mesos

接下来,我们将在三个主服务器上配置Mesos,这些步骤应在每个主服务器上执行。

更改定数以反映您的集群大小

首先,我们需要调整决策所需的定数,这将决定集群在运作状态所需的主机数量。

定数应设定,以便超过50%的主成员必须出席决策,但是,我们也希望建立一些错误容忍,以便如果我们的所有主人不在场,集群仍然可以运作。

我们有三个大师,所以唯一满足这两个要求的设置是两个的定数,因为初始配置假定一个服务器设置,因此定数目前设置为一个。

打开 quorum 配置文件:

1sudo nano /etc/mesos-master/quorum

将值更改为2:

12

保存并关闭文件. 重复在您的每个主服务器上。

设置主机名和IP地址

接下来,我们将为每个主服务器指定主机名和 IP 地址,我们将使用主机名的 IP 地址,以便我们的实例无法正确解决问题。

对于我们的主服务器,需要将IP地址放置在以下文件中:

  • /etc/mesos-master/ip
  • /etc/mesos-master/主机名

首先,在 /etc/mesos-master/ip 文件中添加每个主节点的个别 IP 地址,请记住对每个服务器进行更改以匹配相应的值:

1echo 192.168.2.1 | sudo tee /etc/mesos-master/ip

现在,我们可以将此值复制到主机名文件:

1sudo cp /etc/mesos-master/ip /etc/mesos-master/hostname

在每个主服务器上执行此操作。

在主服务器上设置马拉松

现在Mesos已配置,我们可以配置Maraton,Mesosphere的集群 init系统实现。

马拉松将在我们每个主主机上运行,但只有领先的主服务器才能实际安排工作,其他马拉松实例将透明地向主服务器代理请求。

首先,我们需要为每个服务器的Marathon实例重新设置主机名称. 再次,我们将使用IP地址,我们已经在一个文件中。

然而,我们需要的 Marathon 配置目录结构不会自动创建,我们将不得不创建目录,然后我们可以复制文件:

1sudo mkdir -p /etc/marathon/conf
2sudo cp /etc/mesos-master/hostname /etc/marathon/conf

接下来,我们需要定义马拉松将连接的动物护理师大师的列表,以便提供信息和日程安排。这是我们一直在使用的动物护理师连接字符串,所以我们可以简单地复制文件。

1sudo cp /etc/mesos/zk /etc/marathon/conf/master

这将允许我们的马拉松服务连接到梅索斯群集,但我们也希望马拉松将自己的状态信息存储在动物护理员中,为此,我们将使用另一个动物护理员连接文件作为基础,只需修改终端点。

首先,将文件复制到 Marathon zookeeper 位置:

1sudo cp /etc/marathon/conf/master /etc/marathon/conf/zk

接下来,在您的编辑器中打开文件:

1sudo nano /etc/marathon/conf/zk

我们需要在这个文件中修改的唯一部分是终点. 我们将它从 /mesos 更改为 /marathon:

1zk://192.0.2.1:2181,192.0.2.2:2181,192.0.2.3:2181/marathon

这就是我们需要为我们的马拉松配置所做的。

设置服务启动规则和重新启动服务

接下来,我们将重新启动主服务器的服务,以使用我们已经配置的设置。

首先,我们需要确保我们的主服务器只运行Mesos主流程,而不是运行奴隶流程,我们可以阻止任何正在运行的奴隶流程(这可能会失败,但这没关系,因为这只是为了确保该流程被阻止)。

1sudo stop mesos-slave
2echo manual | sudo tee /etc/init/mesos-slave.override

现在,我们所需要做的就是重新启动动物护理员,这将设置我们的大师选择,然后我们可以开始我们的Meso大师和马拉松过程:

1sudo restart zookeeper
2sudo start mesos-master
3sudo start marathon

要获得你刚刚设置的顶峰,请访问您的网页浏览器中的一个主服务器在端口 5050:

1http://192.168.2.1:5050

你应该看到Meso的主要界面,你可能会被告知你正在被重定向到活跃的主人,这取决于你是否连接到被选中的领导者。

Mesos main interface

这是当前集群的视图,没有太多可见之处,因为没有可用的奴隶节点,也没有开始的任务。

我们还配置了Maraton,Mesosphere的长期任务控制器,可以在您的任何大师的端口8080提供:

Marathon main interface

我们将简要介绍如何使用这些接口,一旦我们有我们的奴隶设置。

配置奴隶服务器

现在我们已经配置了主服务器,我们可以开始配置我们的奴隶服务器。

我们已经配置了我们的奴隶与我们的主人服务器的动物护理员连接信息,而奴隶本身并不运行自己的动物护理员实例。

我们可以阻止当前在我们的奴隶节点上运行的任何动物护理员过程,并创建一个重置文件,以便在服务器重新启动时不会自动启动:

1sudo stop zookeeper
2echo manual | sudo tee /etc/init/zookeeper.override

接下来,我们要创建另一个重置文件,以确保Meso主流程不会在我们的奴隶服务器上启动。

1echo manual | sudo tee /etc/init/mesos-master.override
2sudo stop mesos-master

接下来,我们需要设置IP地址和主机名称,就像我们对我们的主服务器一样。这涉及将每个节点的IP地址放入一个文件中,这次是在/etc/mesos-slave目录下。

1echo 192.168.2.51 | sudo tee /etc/mesos-slave/ip
2sudo cp /etc/mesos-slave/ip /etc/mesos-slave/hostname

再次,使用每个奴隶服务器的个别IP地址为第一个命令,这将确保它被绑定到正确的界面。

现在,我们有所有的地方开始我们的Mesos奴隶,我们只需要打开服务:

1sudo start mesos-slave

在你的每个奴隶机器上做这件事。

要查看你的奴隶是否成功地在你的集群中注册,请返回你的主服务器中的一个在端口 5050:

1http://192.168.2.1:5050

您现在应该在接口中看到活跃的奴隶数量为3:

Mesos three slaves

您还可以看到界面中的可用资源已更新,以反映您的奴隶机器的集合资源:

Mesos resources

要获取有关每个奴隶机器的更多信息,您可以点击接口顶部的奴隶链接,这将为您提供每个机器的资源贡献的概述,以及每个奴隶的页面链接:

Mesos slaves page

在梅索和马拉松开始服务

马拉松很容易被认为是马拉松群集的 init 系统,因为它处理启动和停止服务,计划任务,并确保应用程序如果下跌时重新出现。

您可以以几种不同的方式将服务和任务添加到 Marathon. 我们只会涵盖基本服务. Docker 容器将在未来的指南中处理。

通过 Web 界面启动服务

在集群中快速运行服务的最直接的方式是通过Marathon Web 界面添加应用程序。

首先,请访问您主服务器中的 Marathon Web 接口. 请记住, Marathon 接口位于端口 8080:

1http://192.168.2.1:8080

从这里,你可以点击右上角的新应用按钮. 这将出现一个重叠,你可以添加有关你的新应用程序的信息:

Marathon new app

填写您的应用程序要求的字段. 唯一强制的字段是:

  • ID :用户选择的唯一ID来识别一个进程. 这可以是任何你想要的,但必须是唯一的。
  • 命令 :这是马拉松所执行的实际命令。

使用这些信息,你可以设置一个简单的服务,只打印你好和睡眠10秒。

Marathon simple app

当您返回接口时,服务将从部署转到运行:

Marathon app running

每10秒左右,任务/实例读取将从1/10/1随着睡眠量过渡和服务停止,马拉松然后自动重新启动任务。

1http://192.168.2.1:5050

在这里,您可以看到完成和重新启动的过程:

Mesos restart task

如果你点击沙盒,然后在任意任务中stdout,你可以看到生成的你好输出:

Mesos output

通过 API 启动服务

我们还可以通过Marathon的API提交服务,这涉及通过包含覆盖的所有字段的JSON对象。

再次,唯一需要的字段是id用于过程标识符和cmd,其中包含要运行的实际命令。

因此,我们可以创建一个名为hello.json的JSON文件,其中包含以下信息:

1nano hello.json

内部,纯粹的最低规格将看起来像这样:

1{
2    "id": "hello2",
3    "cmd": "echo hello; sleep 10"
4}

但是,如果我们真的想模仿我们在Web UI中创建的服务,我们必须添加一些额外的字段,这些字段在Web UI是默认的,我们可以在这里复制它们:

1{
2    "id": "hello2",
3    "cmd": "echo hello; sleep 10",
4    "mem": 16,
5    "cpus": 0.1,
6    "instances": 1,
7    "disk": 0.0,
8    "ports": [0]
9}

完成后保存并关闭 JSON 文件。

接下来,我们可以使用Marathon API提交它. 目标是我们大师的Marathon服务之一在端口 8080,终端点是 /v2/apps. 数据负载是我们的JSON文件,我们可以通过使用 -d旗帜与 @旗帜来读入 curl,以表示一个文件。

要提交的命令将看起来像这样:

1curl -i -H 'Content-Type: application/json' [email protected] 192.168.2.1:8080/v2/apps

如果我们看看马拉松的界面,我们可以看到它已经成功地添加了,它似乎具有与我们的第一个服务完全相同的属性:

Marathon two services

新的服务可以与第一个服务完全相同的方式进行监控和访问。

结论

在这一点上,你应该有一个生产准备的中层群集并运行,我们目前只涵盖了基本的配置,但你应该能够看到利用中层系统的可能性。

在未来的指南中,我们将介绍如何在您的集群中部署 Docker 容器,以及如何更深入地使用一些工具。

Published At
Categories with 技术
Tagged with
comments powered by Disqus