如何在 Ubuntu 14.04 上配置生产就绪的 Mesosphere 集群如何在 Ubuntu 14.04 上配置生产就绪的 Mesosphere 集群如何在 Ubuntu 14.04 上配置生产就绪的 Mesosphere 集群如何在 Ubuntu 14.04 上配置生产就绪的 Mesosphere 集群
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

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

介绍

Mesosphere 是一个结合了许多组件的系统,可以在现有操作系统层之上有效地管理服务器集群和高可用性部署。与 CoreOS 等系统不同,Mesosphere 不是专门的操作系统,而是一组软件包。

在本指南中,我们将介绍如何在 Mesosphere 中配置高可用性集群。此配置将为我们设置故障转移,以防万一我们的任何主节点出现故障,以及一个从属服务器池来处理计划的任务。

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

先决条件和目标

在您完成本指南之前,强烈建议您查看我们对 Mesosphere 的介绍。这是熟悉系统组成部分并帮助您确定每个单元负责的内容的好方法。

在本教程中,我们将使用六台 Ubuntu 服务器。这满足了 Apache Mesos 的建议,即在生产环境中至少拥有三个主节点。它还提供了一个包含三个工作服务器或从属服务器的池,当任务被发送到集群时,它们将被分配工作。

我们将使用的六台服务器将使用 zookeeper 来跟踪主服务器的当前领导者。在此之上构建的 Mesos 层将提供分布式同步和资源处理。它负责管理集群。集群的分布式初始化系统 Marathon 用于调度任务并将工作交给从属服务器。

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

Hostname Function IP Address
master1 Mesos master 192.0.2.1
master2 Mesos master 192.0.2.2
master3 Mesos master 192.0.2.3
slave1 Mesos slave 192.0.2.51
slave2 Mesos slave 192.0.2.52
slave3 Mesos slave 192.0.2.53

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

完成上述步骤后,请继续阅读本指南。

在服务器上安装 Mesosphere

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

将 Mesosphere 存储库添加到您的主机

在所有主机(主机和从机)上,完成以下步骤。

首先,将 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 元包。这包括 zookeeper、mesos、marathon 和 chronos 应用程序:

sudo apt-get install mesosphere

对于您的从属主机,您只需要 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.1、192.168.2.2 和 192.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 服务器由 \server 后跟一个点和它们的 ID 号标识。

对于我们的指南,我们将为每个功能使用默认端口,我们的 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 和 Marathon。

在主服务器上配置 Mesos

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

修改 Quorum 以反映您的集群大小

首先,我们需要调整做出决定所需的法定人数。这将确定集群处于正常运行状态所需的主机数量。

法定人数应设置为必须有超过 50% 的主要成员出席才能做出决定。然而,我们也想建立一些容错能力,这样如果我们所有的主节点都不存在,集群仍然可以运行。

我们有三个主人,所以满足这两个要求的唯一设置是两个法定人数。由于初始配置假定单个服务器设置,因此仲裁当前设置为一个。

打开仲裁配置文件:

sudo nano /etc/mesos-master/quorum

将值更改为“2”:

2

保存并关闭文件。在每个主服务器上重复此操作。

配置主机名和 IP 地址

接下来,我们将为每个主服务器指定主机名和 IP 地址。我们将使用 IP 地址作为主机名,这样我们的实例就不会在正确解析时遇到问题。

对于我们的主服务器,IP 地址需要放在这些文件中:

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

首先,在 /etc/mesos-master/ip 文件中添加每个主节点的独立 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

接下来,我们需要定义 Marathon 将连接到的 zookeeper masters 列表以获取信息和调度。这与我们一直用于 Mesos 的 zookeeper 连接字符串相同,因此我们只需复制该文件即可。我们需要将它放在一个名为 master 的文件中:

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

这将允许我们的 Marathon 服务连接到 Mesos 集群。但是,我们还希望 Marathon 将自己的状态信息存储在 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 主进程,而不运行从进程。我们可以停止任何当前正在运行的从属进程(这可能会失败,但没关系,因为这只是为了确保进程停止)。我们还可以通过创建覆盖文件来确保服务器不会在启动时启动从属进程:

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

现在,我们需要做的就是重新启动 zookeeper,这将设置我们的 master 选举。然后我们可以启动我们的 Mesos master 和 Marathon 进程:

sudo restart zookeeper
sudo start mesos-master
sudo start marathon

要了解您刚刚设置的内容,请在您的 Web 浏览器中访问您的主服务器之一的端口 5050:

http://192.168.2.1:5050

您应该会看到 Mesos 主界面。 You may be told you are being redirected to the active master depending on whether you connected to the elected leader or not.无论哪种方式,屏幕看起来都类似于:

这是当前集群的视图。没什么可看的,因为没有可用的从节点,也没有启动任务。

我们还配置了 Mesosphere 的长期运行任务控制器 Marathon。这将在您的任何 master 上的 8080 端口可用:

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

配置从属服务器

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

我们已经使用主服务器的 zookeeper 连接信息配置了从服务器。从站本身不运行自己的 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 地址。这将确保它被绑定到正确的接口。

现在,我们已经准备好启动 Mesos 从节点的所有部分。我们只需要开启服务:

sudo start mesos-slave

在您的每台从机上执行此操作。

要查看您的从属服务器是否成功地在您的集群中注册了自己,请返回您位于端口 5050 的主服务器之一:

http://192.168.2.1:5050

您现在应该在界面中看到“3”处的活动从站数量:

您还可以看到界面中的可用资源已更新,以反映您的从机的池化资源:

要获得有关每台从机的更多信息,您可以单击界面顶部的“从机”链接。这将为您提供每台机器资源贡献的概览,以及指向每个从机的页面的链接:

在 Mesos 和 Marathon 上启动服务

Marathon 是 Mesosphere 用于安排长时间运行任务的实用程序。很容易将 Marathon 视为 Mesosphere 集群的初始化系统,因为它处理启动和停止服务、调度任务以及确保应用程序在出现故障时恢复运行。

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

通过 Web 界面启动服务

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

首先,访问您的其中一台主服务器上的 Marathon Web 界面。请记住,Marathon 接口位于端口 8080 上:

http://192.168.2.1:8080

从这里,您可以单击右上角的“新应用程序”按钮。这将弹出一个叠加层,您可以在其中添加有关新应用程序的信息:

根据您的应用程序的要求填写字段。唯一必填的字段是:

  • ID:用户选择的唯一 ID,用于标识进程。这可以是您想要的任何内容,但必须是唯一的。
  • 命令:这是将由 Marathon 运行的实际命令。这是将被监视并在失败时重新启动的进程。

使用此信息,您可以设置一个简单的服务,它只打印“hello”并休眠 10 秒。我们将其称为“hello”:

回到界面,服务会从“Deploying”转为“Running”:

每 10 秒左右,“任务/实例”读数将从“1/1”变为“0/1”,因为睡眠量已过且服务停止。Marathon 然后会再次自动重新启动任务。我们可以在 5050 端口的 Mesos web 界面中更清楚地看到这个过程:

http://192.168.2.1:5050

在这里,您可以看到进程完成并重新启动:

如果在任何任务上单击“Sandbox”,然后单击“stdout”,您可以看到生成的“hello”输出:

通过 API 启动服务

我们也可以通过 Marathon 的 API 提交服务。这涉及传入一个 JSON 对象,其中包含叠加层包含的所有字段。

这是一个相对简单的过程。同样,唯一需要的字段是用于进程标识符的 id 和包含要运行的实际命令的 cmd。

所以我们可以使用以下信息创建一个名为 hello.json 的 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 上我们 master 的 Marathon 服务之一,端点是 /v2/apps。数据负载是我们的 JSON 文件,我们可以通过使用 -d 标志和 @ 标志来指示文件,将其读入 curl。

提交的命令将如下所示:

curl -i -H 'Content-Type: application/json' -d@hello2.json 192.168.2.1:8080/v2/apps

如果我们查看 Marathon 界面,我们可以看到它已成功添加。它似乎与我们的第一个服务具有完全相同的属性:

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

结论

此时,您应该已经启动并运行了一个生产就绪的 Mesosphere 集群。我们此时只介绍了基本配置,但您应该能够看到利用 Mesosphere 系统的可能性。

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

©2015-2025 艾丽卡 support@alaica.com