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

Mesosphere是汇集了轻松管理服务器集群作为一个单元技术组。在本指南中,我们将集中精力生产就绪的Mesosphere集群和准备。我们将使用六个的Ubuntu 14.04服务器,其中一半将被配置为主控服务器,并且其中一半将被指定为从属/工人的服务器。

介绍

Mesosphere是一种结合了多个组件的系统,以有效地管理现有操作系统层之上的服务器集群和高可用性部署。与CoreOS等系统不同,Mesosphere不是专门的操作系统,而是一套软件包。 在本指南中,我们将介绍如何在Mesosphere中配置高可用性集群。此配置将设置我们与故障转移,以防任何我们的主节点下来,以及一个从服务器池处理预定的任务。 我们将使用Ubuntu 14.04服务器来完成本指南。

先决条件和目标

在填写本指南,强烈建议您查看我们的介绍Mesosphere 。这是熟悉系统组成部分的一个好方法,并帮助您识别每个单元负责的内容。 在本教程中,我们将使用六个Ubuntu服务器。这满足Apache Mesos推荐在生产环境中至少有三个主机。它还提供了三个工作服务器或从属服务器池,当任务发送到集群时,将分配工作。 我们将使用将使用六台服务器zookeeper来跟踪主服务器的现任领导人。构建在其顶部的Mesos层将提供分布式同步和资源处理。它负责管理集群。 Marathon是集群的分布式初始化系统,用于将任务和手工工作安排到从服务器。 为了本指南,我们假设我们的机器具有以下配置:
主机名 功能 IP地址
master1 Mesos主人 192.0.2.1
master2 Mesos主人 192.0.2.2
master3 Mesos主人 192.0.2.3
slave1 Mesos从站 192.0.2.51
从站2 Mesos从站 192.0.2.52
slave3 Mesos从站 192.0.2.53
每个这些机器应该安装Ubuntu 14.04。您将要完成在我国上市的基本配置项的Ubuntu 14.04服务器初始设置指南 。 完成上述步骤后,请继续阅读本指南。

在服务器上安装Mesosphere

启动和运行集群的第一步是安装软件。幸运的是,Mesosphere项目维护了一个Ubuntu存储库,其中包含最新的包,易于安装。

将Mesosphere Repositories添加到您的主机

所有的主机(主机和从机)的,请完成以下步骤。 首先,将Mesosphere存储库添加到源列表。这个过程包括从Ubuntu密钥服务器下载Mesosphere项目的密钥,然后为我们的Ubuntu版本创建正确的URL。该项目提供了一种方便的方法:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv E56151BF
DISTRO=$(lsb_release -is | tr '[:upper:]' '[:lower:]')
CODENAME=$(lsb_release -cs)
echo "deb http://repos.mesosphere.io/${DISTRO} ${CODENAME} main" | sudo tee /etc/apt/sources.list.d/mesosphere.list

安装必要的组件

将Mesosphere存储库添加到系统后,必须更新本地软件包缓存以获取对新组件的访问权限:
sudo apt-get -y update
接下来,您需要安装必要的软件包。您需要的组件将取决于主机的角色。 为了您的主控主机,你需要的mesosphere元包。 这包括zookeepermesosmarathonchronos应用:
sudo apt-get install mesosphere
对于你的Minion主人,你只需要mesos包,这也拉动zookeeper作为一个依赖:
sudo apt-get install mesos

设置Mesos的Zookeeper连接信息

我们要做的第一件事是配置我们的zookeeper连接信息。这是允许我们的所有主机连接到正确的主服务器的底层,因此从这里开始是有意义的。 我们的主服务器将是我们的唯一成员zookeeper集群,但我们所有的服务器都需要一些配置才能使用协议进行通信。 定义此文件是/etc/mesos/zk 。 在所有的主机,请完成以下步骤。使用root权限打开文件:
sudo nano /etc/mesos/zk
在内部,您会发现默认情况下设置连接URL以访问本地实例。它将如下所示:
zk://localhost:2181/mesos
我们需要修改它以指向我们的三个主服务器。这是通过置换进行localhost与我们的第一个Mesos主服务器的IP地址。然后我们可以在端口规范之后添加逗号,并复制格式以将我们的第二和第三主人添加到列表中。 对于我们的指导,我们的主人有IP地址192.0.2.1192.168.2.2192.168.2.3 。使用这些值,我们的文件将如下所示:
zk://192.0.2.1:2181,192.0.2.2:2181,192.0.2.3:2181/mesos
该行必须开始zk://和结束/mesos 。 在这两者之间,你的主服务器的IP地址和zookeeper端口( 2181默认情况下)指定。 保存并在完成后关闭文件。 在每个主站和从站中使用相同的条目。这将帮助每个单独的服务器连接到正确的主服务器以与群集通信。

配置主服务器的Zookeeper配置

在您的服务器,我们需要做一些额外的zookeeper配置。 第一步是为每个主服务器定义一个唯一的ID号,从1到255。这是保存在/etc/zookeeper/conf/myid文件。立即打开:
sudo nano /etc/zookeeper/conf/myid
删除此文件中的所有信息,并将其替换为单个数字(从1到255)。每个主服务器必须具有唯一的编号。为了简单起见,最简单的方法是从1开始工作。我们将使用1,2和3作为我们的指南。 我们的第一个服务器将只有这个在文件中:
1
保存并在完成后关闭文件。在每个主服务器上执行此操作。 接下来,我们需要修改我们zookeeper配置文件,以我们的地图zookeeper ID,以实际的主机。这将确保服务可以从其使用的ID系统正确解析每个主机。 打开zookeeper现在配置文件:
sudo nano /etc/zookeeper/conf/zoo.cfg
在此文件中,您需要将每个ID映射到主机。主机规范将包括两个端口,第一个用于与领导者通信,第二个用于在需要新的领导者时处理选举。该zookeeper服务器由“服务器”后面跟着一个点和他们的身份证号码识别。 对于我们的指南,我们将使用每个功能的默认端口,我们的ID为1-3。我们的文件将如下所示:
server.1=192.168.2.1:2888:3888
server.2=192.168.2.2:2888:3888
server.3=192.168.2.3:2888:3888
在每个主服务器的配置文件中添加这些相同的映射。完成后保存并关闭每个文件。 就这样,我们的zookeeper配置完成。我们可以开始专注于Mesos和马拉松。

在主服务器上配置Mesos

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

修改仲裁以反映您的群集大小

首先,我们需要调整做出决定所需的法定人数。这将确定群集处于运行状态所需的主机数量。 法定人数应设置为使超过50%的主成员必须出席作出决定。然而,我们还想建立一些容错,使得如果我们所有的主控都不存在,集群仍然可以工作。 我们有三个大师,所以满足这两个要求的唯一的设置是两个的法定人数。由于初始配置假定单个服务器设置,所以仲裁当前设置为1。 打开仲裁配置文件:
sudo nano /etc/mesos-master/quorum
将值更改为“2”:
2
保存并关闭文件。在每个主服务器上重复此操作。

配置主机名和IP地址

接下来,我们将为每个主服务器指定主机名和IP地址。我们将使用主机名的IP地址,以便我们的实例无法正确解决问题。 对于我们的主服务器,IP地址需要放在这些文件中:
  • / etc / mesos-master / ip
  • / etc / mesos-master / hostname
首先,在添加每个主节点的单独IP地址/etc/mesos-master/ip文件。请记住为每个服务器更改此值以匹配适当的值:
echo 192.168.2.1 | sudo tee /etc/mesos-master/ip
现在,我们可以将此值复制到主机名文件:
sudo cp /etc/mesos-master/ip /etc/mesos-master/hostname
在每个主服务器上执行此操作。

在主服务器上配置Marathon

现在Mesos已经配置好了,我们可以配置Marathon,Mesosphere的集群初始化系统实现。 Marathon将在每个主主机上运行,但只有领先的主服务器将能够实际调度作业。其他Marathon实例将透明地代理对主服务器的请求。 首先,我们需要为每个服务器的Marathon实例再次设置主机名。同样,我们将使用我们已经在文件中的IP地址。我们可以将其复制到我们需要的文件位置。 但是,我们需要的Marathon配置目录结构不是自动创建的。我们将必须创建该目录,然后我们可以复制该文件:
sudo mkdir -p /etc/marathon/conf
sudo cp /etc/mesos-master/hostname /etc/marathon/conf
接下来,我们需要定义列表zookeeper主人翁的马拉松赛将连接到信息和调度。 这是相同的zookeeper ,我们已经使用了Mesos连接字符串,这样我们就可以复制文件。 我们需要把它放在一个名为master
sudo cp /etc/mesos/zk /etc/marathon/conf/master
这将允许我们的Marathon服务连接到Mesos集群。但是,我们也希望马拉松存储在它自己的状态信息zookeeper 。 为此,我们将使用其他的zookeeper连接文件为基础,只需修改端点。 首先,将文件复制到Marathon zookeeper位置:
sudo cp /etc/marathon/conf/master /etc/marathon/conf/zk
接下来,在编辑器中打开该文件:
sudo nano /etc/marathon/conf/zk
我们需要在此文件中修改的唯一部分是端点。我们将它更改/mesos/marathon
zk://192.0.2.1:2181,192.0.2.2:2181,192.0.2.3:2181/marathon
这是我们需要为我们的Marathon配置做的。

配置服务初始化规则和重新启动服务

接下来,我们将重新启动主服务器的服务,以使用我们已经配置的设置。 首先,我们需要确保我们的主服务器只运行Mesos主进程,而不是运行从进程。我们可以停止任何当前运行的slave进程(这可能会失败,但是没关系,因为这只是为了确保进程停止)。我们还可以确保服务器在引导时不通过创建覆盖文件启动从属进程:
sudo stop mesos-slave
echo manual | sudo tee /etc/init/mesos-slave.override
现在,我们需要做的是重新启动zookeeper ,这将建立我们的主选。然后我们可以启动我们的Mesos主机和马拉松进程:
sudo restart zookeeper
sudo start mesos-master
sudo start marathon
为了得到什么,你刚才设置一个高峰,请在Web浏览器的主服务器的一个端口处5050
http://192.168.2.1:5050
您应该看到主Mesos界面。你可能会被告知你被重定向到活跃的主人,取决于你是否连接到当选的领导人。无论哪种方式,屏幕看起来都类似于: Mesos主界面 这是您的群集的视图。没有太多可以看到,因为没有从节点可用,没有任务启动。 我们还配置了Marathon,Mesosphere长期运行的任务控制器。这将在端口8080上您的任何大师: 马拉松主界面 我们将简要介绍一旦我们设置了从属设备,如何使用这些接口。

配置从服务器

现在我们已经配置了主服务器,我们可以开始配置我们的从服务器。 我们已经与我们的主人服务器的配置我们的Minionzookeeper连接信息。 Minion本身不经营自己的zookeeper实例。 我们可以停止任何zookeeper过程目前我们从节点上运行,并创建一个覆盖文件,以便在服务器重启时不会自动启动:
sudo stop zookeeper
echo manual | sudo tee /etc/init/zookeeper.override
接下来,我们要创建另一个覆盖文件,以确保Mesos主进程不在我们的从服务器上启动。我们还将确保它当前停止(如果进程已经停止,此命令可能会失败,这不是问题):
echo manual | sudo tee /etc/init/mesos-master.override
sudo stop mesos-master
接下来,我们需要设置IP地址和主机名,就像我们为主服务器所做的那样。这涉及到将每个节点的IP地址到一个文件,这时候下/etc/mesos-slave目录。我们将使用它作为主机名,以便通过Web界面轻松访问服务:
echo 192.168.2.51 | sudo tee /etc/mesos-slave/ip
sudo cp /etc/mesos-slave/ip /etc/mesos-slave/hostname
同样,使用每个从服务器的第一个命令的单独的IP地址。这将确保它绑定到正确的接口。 现在,我们有所有的部分,以开始我们的MesosMinion。我们只需要打开服务:
sudo start mesos-slave
在每台从机上执行此操作。 要查看是否在集群中的Minion成功注册自己,回到你的主服务器的一个端口处5050
http://192.168.2.1:5050
您应该在界面中看到活动从站的数量为“3”: Mesos三个Minion 您还可以看到接口中的可用资源已更新,以反映从机的池资源: Mesos资源 要获取有关每台从机的其他信息,您可以单击界面顶部的“从站”链接。这将给您每个机器的资源贡献的概述,以及到每个从站的页面的链接: Mesos从属页

在Mesos和Marathon上启动服务

Marathon是Mesosphere的实用程序,用于调度长时间运行的任务。很容易将Marathon看作Mesosphere集群的初始化系统,因为它可以处理启动和停止服务,调度任务,并确保应用程序在故障时恢复运行。 您可以通过几种不同的方式向Marathon添加服务和任务。我们只会覆盖基本服务。 Docker容器将在未来的指南中处理。

通过Web界面启动服务

在集群上快速运行服务的最直接的方法是通过Marathon Web界面添加应用程序。 首先,访问您的一个主服务器上的Marathon Web界面。记住,马拉松接口在端口8080
http://192.168.2.1:8080
从这里,您可以点击右上角的“新应用程序”按钮。这将弹出一个叠加层,您可以在其中添加有关新应用程序的信息: 马拉松新应用程序 在字段中填写应用程序的要求。强制性的唯一字段是:
  • 编号 :由用户选择,以确定一个过程的唯一ID。这可以是任何你想要的,但必须是唯一的。
  • 命令 :这是将通过马拉松运行的实际命令。这是将被监视并在其失败时重新启动的进程。
使用此信息,您可以设置一个简单的服务,只打印“hello”,睡眠10秒钟。我们称之为“hello”: 马拉松简单的应用程序 当您返回到界面时,服务将从“部署”转到“正在运行”: 马拉松应用程序运行 每10秒左右,“任务/实例”读数将随着睡眠量的通过而从“1/1”变为“0/1”,服务停止。 Marathon然后自动重新启动任务。我们可以在端口在Mesos Web界面更清晰地看到这个过程中5050
http://192.168.2.1:5050
在这里,您可以看到过程完成和重新启动: Mesos重启任务 如果你点击“Sandbox”然后点击“stdout”任何任务,你可以看到正在产生的“hello”输出: Mesos输出

通过API启动服务

我们还可以通过Marathon的API提交服务。这涉及传入包含overlay所包含的所有字段的JSON对象。 这是一个相对简单的过程。同样,只有必填字段id的进程标识符和cmd包含实际的命令来运行。 因此,我们可以创建一个名为JSON文件hello.json有这样的信息:
nano hello.json
在内部,最低限度规格如下:
{
    "id": "hello2",
    "cmd": "echo hello; sleep 10"
}
这个服务会正常工作。但是,如果我们真的想模拟我们在Web UI中创建的服务,我们必须添加一些额外的字段。这些是在Web UI中默认的,我们可以在这里复制:
{
    "id": "hello2",
    "cmd": "echo hello; sleep 10",
    "mem": 16,
    "cpus": 0.1,
    "instances": 1,
    "disk": 0.0,
    "ports": [0]
}
完成后保存并关闭JSON文件。 接下来,我们可以使用Marathon API提交它。我们的目标是在我们的港口硕士马拉松的服务之一, 8080和端点/v2/apps 。 该数据有效载荷是我们的JSON文件,我们可以读到curl通过使用-d标志和@标志来指示文件。 提交的命令将如下所示:
curl -i -H 'Content-Type: application/json' -d@hello2.json 192.168.2.1:8080/v2/apps
如果我们看看Marathon界面,我们可以看到它已成功添加。它似乎有我们的第一个服务完全相同的属性: 马拉松两项服务 可以以与第一服务完全相同的方式监视和访问新服务。

结论

在这一点上,您应该有一个生产就绪的Mesosphere集群开始运行。我们在这一点上只讨论了基本配置,但您应该能够看到利用Mesosphere系统的可能性。 在以后的指南中,我们将介绍如何在集群上部署Docker容器以及如何更深入地使用一些工具。