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

简介

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

在本指南中,我们将介绍如何在 Mesosphere 中配置高可用集群。这个配置将使我们在任何主节点出现故障时具有故障转移功能,并且还会有一组从服务器来处理被调度的任务。

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

先决条件和目标

在完成本指南之前,强烈建议您先阅读我们的 Mesosphere 简介。这是一个熟悉系统组件并帮助您识别每个单元责任的好方法。

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

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

出于本指南的目的,我们假设我们的机器具有以下配置:

主机名功能IP 地址
master1Mesos 主节点192.0.2.1
master2Mesos 主节点192.0.2.2
master3Mesos 主节点192.0.2.3
slave1Mesos 从节点192.0.2.51
slave2Mesos 从节点192.0.2.52
slave3Mesos 从节点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 元包。这包括 zookeepermesosmarathonchronos 应用程序:

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.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。这些 ID 号将保存在 /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。这些步骤应该在每台主服务器上执行。

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

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

仲裁应该设置为使超过 50% 的主节点必须出席做出决策。然而,我们还希望建立一些容错性,以便如果我们的所有主节点都不在,集群仍然可以正常运行。

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

打开仲裁配置文件:

sudo nano /etc/mesos-master/quorum

将值更改为 “2”:

2

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

配置主机名和 IP 地址

接下来,我们将为每台主服务器指定主机名和 IP 地址。我们将使用 IP 地址作为主机名,以便我们的实例不会在解析时出现问题。

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

  • /etc/mesos-master/ip
  • /etc/mesos-master/hostname

首先,在 /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 的集群化 init 系统实现。

Marathon 将在每个主机上运行,但只有领先的主服务器才能实际调度作业。其他 Marathon 实例将透明地代理请求到主服务器。

首先,我们需要为每个服务器的 Marathon 实例再次设置主机名。同样,我们将使用 IP 地址,我们已经在一个文件中拥有。我们可以将其复制到我们需要的文件位置。

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

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

接下来,我们需要定义 Marathon 将连接到的 zookeeper 主节点列表,以获取信息和调度。这是我们一直在为 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,这将设置我们的主节点选举。然后我们可以启动我们的 Mesos 主进程和 Marathon 进程:

sudo restart zookeeper
sudo start mesos-master
sudo start marathon

要查看您刚刚设置的内容,请在您的浏览器中访问其中一个主服务器的 5050 端口:

http://192.168.2.1:5050

您应该会看到主要的 Mesos 界面。根据您是否连接到选举领导者,您可能会被告知正在被重定向到活动主节点或不是。无论如何,屏幕看起来会类似于这样:

!Mesos 主界面

这是您集群的当前视图。目前没有可用的从属节点和未启动的任务,所以没有太多可见的内容。

我们还配置了 Marathon,Mesosphere 的长时间运行任务控制器。这将在任何主服务器的 8080 端口上可用:

!Marathon 主界面

一旦我们设置好从属节点,我们将简要介绍如何使用这些界面。

配置从属服务器

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

我们已经使用主服务器的 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 三个从属节点

您还可以看到界面中的可用资源已更新,以反映您的从属机器的汇总资源:

!Mesos 资源

要获取有关每个从属机器的其他信息,您可以点击界面顶部的 “从属节点” 链接。这将为您提供每台机器的资源贡献概述,以及指向每个从属机器页面的链接:

!Mesos 从属节点页面

在 Mesos 和 Marathon 上启动服务

Marathon 是 Mesosphere 用于调度长时间运行任务的实用程序。很容易将 Marathon 视为 Mesosphere 集群的 init 系统,因为它处理启动和停止服务、调度任务,并确保应用程序在关闭后重新启动。

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

通过 Web 接口启动服务

在集群上快速启动服务的最直接方式是通过 Marathon web 接口添加应用程序。

首先,访问其中一个主服务器上的 Marathon web 接口。请记住,Marathon 接口位于 8080 端口:

http://192.168.2.1:8080

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

!Marathon new app

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

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

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

!Marathon simple app

当您返回到界面时,服务将从 “Deploying” 变为 “Running”:

!Marathon app running

大约每 10 秒,“Tasks/Instances” 读数将从 “1/1” 变为 “0/1”,因为休眠时间过去了,服务停止了。然后 Marathon 会自动重新启动任务。我们可以在 Mesos web 接口的 5050 端口更清楚地看到这个过程:

http://192.168.2.1:5050

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

!Mesos restart task

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

!Mesos output

通过 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 提交它。目标是我们其中一个主服务器的 Marathon 服务,端口为 8080,端点为 /v2/apps。数据有效负载是我们的 JSON 文件,我们可以使用 curl-d 标志和 @ 标志将其读入 curl

提交的命令如下:

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

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

!Marathon two services

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

结论

到目前为止,您应该已经拥有一个可投入生产的 Mesosphere 集群。目前我们只涵盖了基本配置,但您应该能够看到利用 Mesosphere 系统的可能性。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/816358.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux学习:文件属性

在操作文件的时候,经常需要获取文件的属性,比如类型、权限、大小、所有者等等, 这些信息对于比如文件的传输、管理等是必不可少的,而这些信息 这三个函数的功能完全一样,区别是:stat( )参数是一个文件的名字…

网络篇05 | 应用层 http/https

网络篇05 | 应用层 http/https 01 HTTP请求报文协议(Request)1)Request简述2)请求行(首行)3)请求头(Request Headers)4)空行5)正文(Re…

【机器学习300问】67、均方误差与交叉熵误差,两种损失函数的区别?

一、均方误差(Mean Squared Error, MSE) 假设你是一个教练,在指导学生射箭。每次射箭后,你可以测量子弹的落点距离靶心的差距(误差)。MSE就像是计算所以射击误差的平方后的平均值。它强调了每一次偏离靶心的…

ARM v8 Cortex R52内核 04 时钟和复位 Clocking and Resets

ARM v8 Cortex R52内核 04 时钟和复位 Clocking and Resets 4.1 Clock and clock enables 时钟和时钟使能 Cortex-R52处理器具有一个单一的时钟,驱动着所有的触发器和RAM。各种输入,包括复位输入,都有同步逻辑使它们可以与处理器时钟异步操…

appium控制手机一直从下往上滑动

用于使用Appium和Selenium WebDriver在Android设备上滚动设置应用程序的界面。具体来说,它通过WebDriverWait和expected_conditions等待元素出现,然后使用ActionChains移动到该元素并执行滚动动作。在setUp中,它初始化了Appium的WebDriver和c…

Android中的Zygote进程介绍

在Android系统中,Zygote是一个特殊的进程,主要负责孵化(fork)新的应用进程,从而加速应用的启动过程。Zygote进程是系统启动过程中创建的第一个进程,它会在系统启动时被初始化并一直运行在后台。 以下是Zyg…

如何在MacOS上使用OpenHarmony SDK交叉编译?

本文以cJSON三方库为例介绍如何通过OpenHarmony的SDK在Mac平台进行交叉编译。 环境准备 SDK准备 我们可以通过 openHarmony SDK 官方发布渠道下载对应mac版本的SDK,当前OpenHarmony MAC版本的SDK有2种,一种是x86架构,另一种是arm64&#x…

【HTML】HTML简介

参考资料:https://html.spec.whatwg.org/#introduction 在最初的五年(1990-1995)中,HTML经历了一系列修订和扩展,最初主要由欧洲核子研究组织(CERN)托管,随后由互联网工程任务组&am…

Anaconda在Ubuntu下的安装与简单使用

一、参考资料 ubuntu16.04下安装&配置anacondatensorflow新手教程 二、安装Anaconda 下载 Miniconda镜像1 or Miniconda镜像2 # 下载 wget Miniconda3-py39_4.10.3-Linux-x86_64.sh# 安装 bash Miniconda3-py39_4.10.3-Linux-x86_64.sh一路yes 安装过程中的选项 Do you …

做一个后台项目的架构

后台架构的11个维度 架构1:团队协助基础工具链的选型和培训架构2:搭建微服务开发基础设施架构3:选择合适的RPC框架架构4:选择和搭建高可用的注册中心架构5:选择和搭建高可用的配置中心架构6:选择和搭建高性…

Hudi-ubuntu环境搭建

hudi-ubuntu环境搭建 运行 1.编译Hudi #1.把maven安装包上传到服务器 # 官网下载安装包 https://archive.apache.org/dist/maven/maven-3/ scp -r D:\Users\zh\Desktop\Hudi\compressedPackage\apache-maven-3.6.3-bin.tar.gz zhangheng10.8.4.212:/home/zhangheng/hudi/com…

Spring+SpringMVC的知识总结

一:技术体系架构二:SpringFramework介绍三:Spring loC容器和核心概念3.1 组件和组件管理的概念3.1.1什么是组件:3.1.2:我们的期待3.1.3Spring充当组件管理角色(IOC)3.1.4 Spring优势3.2 Spring Ioc容器和容器实现3.2.1普通和复杂容器3.2.2 SpringIOC的容器介绍3.2.3 Spring IOC…

字符串常量池(StringTable)

目录 String的基本特性 String的内存分配 字符串拼接操作 intern()的使用 String的基本特性 String:字符串,使用一对""引起来表示 String声明为final的,不可被继承 String实现了Serializable接口:表示字符串是支持…

考试酷基本功修炼课学习历程_FPGA成长篇

本文为明德扬原创文章,转载请注明出处!作者:明德扬学员:考试酷账号:11167760 我是硬件工程师,日常工作中主要跟数字电路、模拟电路、嵌入式系统打交道,当然也会涉及到FPGA,但是苦于…

排序算法-基数排序

基数排序是一种非比较排序算法,它将待排序的数字按照位数进行排序。基数排序的思想是先按照个位数进行排序,然后按照十位数进行排序,接着按照百位数进行排序,以此类推,直到最高位排序完成。 基数排序的步骤如下&#x…

设计模式代码实战-桥接模式

1、问题描述 小明家有一个万能遥控器,能够支持多个品牌的电视。每个电视可以执行开机、关机和切换频道的操作,请你使用桥接模式模拟这个操作。 输入示例 6 0 2 1 2 0 4 0 3 1 4 1 3 输出示例 Sony TV is ON TCL TV is ON Switching Sony TV channel S…

【菜狗学前端】原生Ajax笔记(包含原生ajax的get/post传参方式、返回数据等)

这回图片少,给手动替换了~祝看得愉快,学的顺畅!哈哈 一 原生ajax经典四步 (一) 原生ajax经典四步 第一步:创建网络请求的AJAX对象(使用XMLHttpRequest) JavaScript let xhr new XMLHttpRequest() 第二…

QQ农场-phpYeFarm添加数据教程

前置知识 plugin\qqfarm\core\data D:\study-project\testweb\upload\source\plugin\qqfarm\core\data 也就是plugin\qqfarm\core\data是一个缓存文件,如果更新农场数据后,必须要删除才可以 解决种子限制(必须要做才可以添加成功) 你不更改加入了id大于2000直接删除种子 D…

Vulnhub靶机 DC-2渗透详细过程

VulnHub靶机 DC-2 打靶 目录 VulnHub靶机 DC-2 打靶一、将靶机导入到虚拟机当中二、攻击方式主机发现端口扫描服务探针爆破目录web渗透信息收集扫描探针登录密码爆破SSH远程登录rbash提权 一、将靶机导入到虚拟机当中 靶机地址: https://www.vulnhub.com/entry/dc…

进制转换总结

目录 其它进制转十进制 十进制转其它进制 二八十六进制间转换 2进制(BIN): 0,1,满2进1.以0b或0B开头。8进制(OCT): 0-7 ,满8进1.以数字0o或者0O开头表示。 10进制(DEC): 0-9,满10进1。 16进制(HEX): 0-9及A(10)-F(15),满16进…