介绍
Mesosphere是一个系统,它结合了许多组件,以有效地管理服务器集群和高可用部署在现有操作系统层上。
在本指南中,我们将讨论如何在中层层配置一个高度可用的群集. 这种配置将使我们在任何我们的主节点失效的情况下设置故障,以及一群奴隶服务器来处理计划中的任务。
我们将使用Ubuntu 14.04服务器为本指南。
前提和目标
在您完成本指南之前,强烈建议您查看我们的(https://andsky.com/tech/tutorials/an-introduction-to-mesosphere)。
在本教程中,我们将使用六个Ubuntu服务器,这符合Apache Mesos的建议,为生产环境至少有三位大师。
我们将使用的六个服务器将使用zookeeper
来跟踪主服务器的当前领导者。基于此构建的Mesos层将提供分布式同步和资源处理。它负责管理群集。
为了本指南,我们将假设我们的机器具有以下配置:
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 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
,marathon
和chronos
的应用程序:
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.2
和192.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的主要界面,你可能会被告知你正在被重定向到活跃的主人,这取决于你是否连接到被选中的领导者。
这是当前集群的视图,没有太多可见之处,因为没有可用的奴隶节点,也没有开始的任务。
我们还配置了Maraton,Mesosphere的长期任务控制器,可以在您的任何大师的端口8080
提供:
我们将简要介绍如何使用这些接口,一旦我们有我们的奴隶设置。
配置奴隶服务器
现在我们已经配置了主服务器,我们可以开始配置我们的奴隶服务器。
我们已经配置了我们的奴隶与我们的主人服务器的动物护理员
连接信息,而奴隶本身并不运行自己的动物护理员
实例。
我们可以阻止当前在我们的奴隶节点上运行的任何动物护理员
过程,并创建一个重置文件,以便在服务器重新启动时不会自动启动:
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
:
您还可以看到界面中的可用资源已更新,以反映您的奴隶机器的集合资源:
要获取有关每个奴隶机器的更多信息,您可以点击接口顶部的奴隶
链接,这将为您提供每个机器的资源贡献的概述,以及每个奴隶的页面链接:
在梅索和马拉松开始服务
马拉松很容易被认为是马拉松群集的 init 系统,因为它处理启动和停止服务,计划任务,并确保应用程序如果下跌时重新出现。
您可以以几种不同的方式将服务和任务添加到 Marathon. 我们只会涵盖基本服务. Docker 容器将在未来的指南中处理。
通过 Web 界面启动服务
在集群中快速运行服务的最直接的方式是通过Marathon Web 界面添加应用程序。
首先,请访问您主服务器中的 Marathon Web 接口. 请记住, Marathon 接口位于端口 8080
:
1http://192.168.2.1:8080
从这里,你可以点击右上角的新应用
按钮. 这将出现一个重叠,你可以添加有关你的新应用程序的信息:
填写您的应用程序要求的字段. 唯一强制的字段是:
- ID :用户选择的唯一ID来识别一个进程. 这可以是任何你想要的,但必须是唯一的。
- 命令 :这是马拉松所执行的实际命令。
使用这些信息,你可以设置一个简单的服务,只打印你好
和睡眠10秒。
当您返回接口时,服务将从部署
转到运行
:
每10秒左右,任务/实例
读取将从1/1
到0/1
随着睡眠量过渡和服务停止,马拉松然后自动重新启动任务。
1http://192.168.2.1:5050
在这里,您可以看到完成和重新启动的过程:
如果你点击沙盒
,然后在任意任务中stdout
,你可以看到生成的你好
输出:
通过 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
如果我们看看马拉松的界面,我们可以看到它已经成功地添加了,它似乎具有与我们的第一个服务完全相同的属性:
新的服务可以与第一个服务完全相同的方式进行监控和访问。
结论
在这一点上,你应该有一个生产准备的中层群集并运行,我们目前只涵盖了基本的配置,但你应该能够看到利用中层系统的可能性。
在未来的指南中,我们将介绍如何在您的集群中部署 Docker 容器,以及如何更深入地使用一些工具。