如何在 CentOS 8 上安装 MongoDB

本教程的早期版本由Melissa Anderson编写

介绍

MongoDB,也称为Mongo,是许多现代 Web 应用程序中使用的开源文档数据库。它被归类为NoSQL 数据库,因为它不依赖于传统的基于表的关系数据库结构。

相反,它使用具有动态模式的类似 JSON 的文档,这意味着与关系数据库不同,MongoDB 在向数据库添加数据之前不需要预定义的模式。您可以随时根据需要随时更改架构,而无需使用更新的架构设置新数据库。

在本教程中,您将在 CentOS 8 服务器上安装 MongoDB,对其进行测试,并了解如何将其作为systemd服务进行管理

先决条件

要完成本教程,您需要一台运行 CentOS 8 的服务器。该服务器应具有具有管理权限的非 root 用户和配置为firewalld. 要进行设置,请遵循我们的 CentOS 8 初始服务器设置指南

第 1 步 – 安装 MongoDB

在标准 CentOS 存储库中没有可用的官方 MongoDB 包。为了在您的服务器上安装 Mongo,您需要添加一个指向 MongoDB 官方存储库的存储库文件。您的包管理器将在搜索包时读取此文件,并能够使用它来安装 Mongo 及其任何依赖项。

在本指南中,我们将使用 DNF 包管理器安装 Mongo,因此您需要将存储库文件添加到/etc/yum.repos.d/目录中。.repo在搜索包源时,DNF 会检查此目录中以后缀结尾的所有文件

您可以使用vi——默认安装在 CentOS 系统上的广泛使用的文本编辑器——来创建存储库文件,但vi对于没有使用它的用户来说可能有点不直观。作为替代方案,我们建议nano使用标准 CentOS 软件库提供的更加用户友好的编辑器。

nano使用 DNF安装,请运行以下命令:

  • sudo dnf install nano

在此安装过程中,系统会要求您确认是否要安装该软件。为此,请按y,然后ENTER

Output
Transaction Summary ================================================================================ Install 1 Package Total download size: 581 k Installed size: 2.2 M Is this ok [y/N]: y

安装完成后,运行以下命令创建并打开存储库文件进行编辑:

  • sudo nano /etc/yum.repos.d/mongodb-org.repo

然后将以下内容添加到空文件中。这将安装MongoDB 4.4(撰写本文时的最新版本):

/etc/yum.repos.d/mongodb-org.repo
[mongodb-org]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc

注意:您可以通过查阅数据库的官方文档来检查是否有更新版本的 MongoDB 可用。在 Web 浏览器中,导航到MongoDB 的RedHat 和 CentOS 安装说明配置包管理系统部分

在那里,您将找到一个代码块,其中包含最新版本 MongoDB 的存储库信息。如果与之前的文件内容不同,您可以复制该配置并将其添加到您的.repo文件中。

以下是每个指令的作用:

  • [mongodb-org]:.repo文件的第一行是一个单独的字符串,用括号括起来,作为存储库的标识符
  • name:该指令定义了一个人类可读的名称来描述存储库。您可以在此处输入您喜欢的任何名称,但为了清楚起见,您可以输入MongoDB Repository
  • baseurl: 这指向一个目录的 URL repodata,其中可以找到存储库的目录,其中包含存储库的元数据
  • gpgcheck: 将此指令设置为1告诉 DNF 包管理器在此存储库上启用 GPG 签名检查,要求它验证您要从中安装的任何包是否已损坏或篡改
  • enabled: 将此指令设置为1将告诉 DNF 将此存储库作为包源包含在内;将其设置为0将禁用此行为
  • gpgkey:此指令指定应导入以验证此存储库中的包的签名的 GPG 密钥的 URL

添加存储库信息后,保存并关闭文件。如果您曾经nano创建过 repo 文件,请按CTRL + XY来创建ENTER

在继续之前,您可以通过运行程序的repolist命令来测试 DNF 是否能够找到并使用此存储库

  • dnf repolist

如果存储库可用于您的服务器的包管理器,您会发现它列在输出中:

Output
repo id repo name AppStream CentOS-8 - AppStream BaseOS CentOS-8 - Base extras CentOS-8 - Extras mongodb-org MongoDB Repository

之后,您可以mongodb-org使用以下命令安装软件包:

  • sudo dnf install mongodb-org

再次,您将被要求通过按ythen来确认您要安装该软件包ENTERDNF 也可能会要求您确认导入 Mongo 的签名密钥;如果是这种情况,请再次按y,然后ENTER

命令完成后,MongoDB 将安装在您的服务器上。但是,在启动数据库之前,MongoDB 文档建议您禁用服务器上的透明大页面以优化性能。

第 2 步 – 禁用透明大页面以提高性能

CentOS 默认启用透明大页面 (THP),这是一种 Linux 内存管理系统。THP 使用超大内存页来减少翻译后备缓冲区查找对具有大量内存的机器的影响。但是,此系统会对数据库性能产生负面影响,MongoDB 文档建议您禁用 THP。

要在 CentOS 8 上禁用透明大页面,您可以创建一个systemd将在启动时禁用它单元文件。systemd是许多 Linux 操作系统中使用的初始化系统和软件套件,您可以使用它来控制服务器的许多方面。在 systemd 中,单元指的是系统知道如何操作和管理的任何资源。单元文件是定义这些资源之一的特殊配置文件。

/etc/systemd/system/具有sudo权限目录中创建此文件

  • sudo nano /etc/systemd/system/disable-thp.service

在该文件中,您需要添加几个单独的部分。您将添加的[Unit]一个部分是包含有关服务单元的一些一般信息部分。

添加以下突出显示的行:

/etc/systemd/system/disable-thp.service
[Unit]
Description=Disable Transparent Huge Pages (THP)
After=sysinit.target local-fs.target
Before=mongod.service

[Unit]节标题之后是以下选项:

  • Description:这为单元定义了一个人类可读的名称
  • After:这可确保disable-thp服务单元仅在两个指定目标 (预定义的systemd单元组)完成启动后才启动
  • Before: 此选项确保disable-thp服务始终mongod在 MongoDB 服务单元启动之前完成启动

接下来,将突出显示的[Service]部分添加到文件中:

/etc/systemd/system/disable-thp.service
. . .
Before=mongod.service

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null' 

本节的Type选项定义了这个单元将是一个oneshot类型进程,这意味着它将是一个一次性任务,systemd应该等待进程退出才能继续。

ExecStart选项用于指定将启动进程的命令的完整路径和任何参数。此处包含的命令将打开一个 shell 进程,然后在单引号之间运行该命令。此命令回显字符串never,然后将其通过管道传输到以下tee命令中。tee然后,命令将/sys/kernel/mm/transparent_hugepage/enabled文件重写never为唯一的内容,并将任何输出传递给/dev/null,一个空设备会立即丢弃写入其中的任何信息。这实际上将禁用 THP。

之后,添加此突出显示的[Install]部分:

/etc/systemd/system/disable-thp.service
. . .
ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null'

[Install]
WantedBy=basic.target

[Install]部分携带装置的安装信息。本节只有一个选项,WantedBy,它会在disable-thp启动时导致设备basic.target启动。

注意:如果您想了解有关systemd单元和服务的更多信息,我们鼓励您查看我们的了解 Systemd 单元和单元文件指南

添加完所有行后,整个服务单元文件应如下所示:

/etc/systemd/system/disable-thp.service
[Unit]
Description=Disable Transparent Huge Pages (THP)
After=sysinit.target local-fs.target
Before=mongod.service

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never | tee /sys/kernel/mm/transparent_hugepage/enabled > /dev/null'

[Install]
WantedBy=basic.target

完成后保存并关闭文件。然后,重新加载systemd以使您的系统知道新disable-thp服务:

  • sudo systemctl daemon-reload

接下来,启动disable-thp服务:

  • sudo systemctl start disable-thp.service

您可以通过检查/sys/kernel/mm/transparent_hugepage/enabled文件的内容来确认 THP 已被禁用

  • cat /sys/kernel/mm/transparent_hugepage/enabled

如果 THP 被成功禁用,never将在输出中用括号括起来:

Output
always madvise [never]

之后,启用该disable-thp服务,使其在服务器启动时自动启动并禁用 THP。请注意,此命令不包含.service在服务文件定义中。 systemctl如果它不存在,则会将此后缀附加到您自动传递的任何参数,因此没有必要包含它:

  • sudo systemctl enable disable-thp

disable-thp服务现在开始,每当服务器启动和禁用的MongoDB服务启动前THP。但是,您还需要采取另外一个步骤来确保 THP 在您的系统上保持禁用状态。

默认情况下,CentOS 8 还tuned安装并启用了一个内核调优工具。 tuned使用许多预配置的调整配置文件,可以提高许多特定用例的性能。您可以编辑这些配置文件或创建为您的系统定制的新配置文件。

tuned工具可能会影响您系统上的 THP 设置,因此 MongoDB 文档还建议您还创建自定义配置文件以确保 THP 不会意外启用。

首先创建一个新目录来保存自定义tuned配置文件:

  • sudo mkdir /etc/tuned/no-thp

在此目录中,创建一个名为 的配置文件tuned.conf

  • sudo nano /etc/tuned/no-thp/tuned.conf

将以下两个部分添加到文件中:

/etc/tuned/no-thp/tuned.conf
[main]
include=virtual-guest

[vm]
transparent_hugepages=never

第一部分 ,[main]必须包含在每个tuned配置文件中。在这里,我们只指定一个include语句,它将导致no-thp配置文件继承另一个tuned名为配置文件的特征virtual-guest

注意virtual-guest像这样继承配置文件的特性在许多情况下都有效,但可能并非对每种情况都是最佳的。我们鼓励您查看有关提供的tuned配置文件的文档,以确定继承另一个配置文件的特征是否更适合您的系统。

下一节指定了一个特殊的插件——vm它专门用于根据transparent_hugepages布尔选项后面的启用或禁用 THP

添加这些行后,保存并关闭文件。然后启用新的配置文件:

  • sudo tuned-adm profile no-thp

这样,您就在服务器上禁用了 THP。您现在可以启动 MongoDB 服务并测试数据库的功能。

第 3 步 – 启动 MongoDB 服务并测试数据库

步骤 1 中描述的安装过程会自动将 MongoDB 配置为作为受 控制的守护程序运行systemd,这意味着您可以使用各种systemctl命令管理 MongoDB 但是,此安装过程不会自动启动该服务。

运行以下systemctl命令启动MongoDB服务:

  • sudo systemctl start mongod

然后检查服务的状态:

  • sudo systemctl status mongod

此命令将返回如下输出,表明服务已启动并正在运行:

Output
● mongod.service - MongoDB Database Server Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2020-10-01 20:31:26 UTC; 19s ago Docs: https://docs.mongodb.org/manual Process: 14208 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=0/SUCCESS) Process: 14205 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb (code=exited, status=0/SUCCESS) Process: 14203 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb (code=exited, status=0/SUCCESS) Process: 14201 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb (code=exited, status=0/SUCCESS) Main PID: 14210 (mongod) Memory: 66.6M CGroup: /system.slice/mongod.service └─14210 /usr/bin/mongod -f /etc/mongod.conf

确认服务按预期运行后,启用MongoDB服务开机启动:

  • sudo systemctl enable mongod

您可以通过连接到数据库服务器并执行诊断命令来进一步验证数据库是否正常运行。以下命令将连接到数据库并输出其当前版本、服务器地址和端口。它还将返回 MongoDB 内部connectionStatus命令的结果

  • mongo --eval 'db.runCommand({ connectionStatus: 1 })'

connectionStatus将检查并返回数据库连接的状态。的值1用于ok在响应字段指示该服务器正在按预期:

Output
MongoDB shell version v4.4.1 connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("460fe822-2881-477c-b095-aa3ccb49702d") } MongoDB server version: 4.4.1 { "authInfo" : { "authenticatedUsers" : [ ], "authenticatedUserRoles" : [ ] }, "ok" : 1 }

另请注意,数据库在端口27017on 上运行127.0.0.1,本地环回地址代表localhost这是 MongoDB 的默认端口号。

接下来,我们将看看如何使用systemd.

第 4 步 – 管理 MongoDB 服务

如前所述,步骤 1 中描述的安装过程将 MongoDB 配置为作为systemd服务运行这意味着您可以systemctl像使用其他 CentOS 系统服务一样使用标准命令来管理它

回想一下,该systemctl status命令检查 MongoDB 服务的状态:

  • sudo systemctl status mongod

您可以通过键入以下内容随时停止该服务:

  • sudo systemctl stop mongod

要在服务停止时启动服务,请运行:

  • sudo systemctl start mongod

您还可以在服务器已经运行时重新启动它:

  • sudo systemctl restart mongod

在第 3 步中,您启用了 MongoDB 以随服务器自动启动。如果您想禁用此自动启动,请键入:

  • sudo systemctl disable mongod

然后重新启用它在引导时启动,enable再次运行命令:

  • sudo systemctl enable mongod

有关如何管理systemd服务的更多信息,请查看Systemd Essentials:使用服务、单元和日志

结论

在本教程中,您将官方 MongoDB 存储库添加到您的 DNF 存储库列表并安装了最新版本的数据库。然后您禁用透明大页面以优化数据库的性能,测试 Mongo 的功能,并练习一些systemctl命令。

作为立即的下一步,我们强烈建议您按照我们关于如何在 CentOS 8 上保护 MongoDB 的指南来加强 MongoDB 安装的安全性一旦它受到保护,您就可以配置 MongoDB 以接受远程连接

您可以在这些 DigitalOcean 社区文章中找到有关如何配置和使用 MongoDB 的更多教程我们还鼓励您查看官方MongoDB 文档,因为它是关于 MongoDB 提供的可能性的重要资源。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁