本教程的早期版本由 Melissa Anderson 编写。
介绍
MongoDB,也称为 Mongo,是一个开源文档数据库,用于许多现代 Web 应用程序。 它被归类为 NoSQL 数据库,因为它不依赖于传统的基于表的关系数据库结构。
相反,它使用具有动态模式的类 JSON 文档,这意味着与关系数据库不同,MongoDB 在将数据添加到数据库之前不需要预定义模式。 您可以随时根据需要随时更改模式,而无需使用更新的模式设置新数据库。
在本教程中,您将在 CentOS 8 服务器上安装 MongoDB,对其进行测试,并学习如何将其作为 systemd
服务进行管理。
先决条件
要完成本教程,您需要一台运行 CentOS 8 的服务器。 此服务器应具有具有管理权限的非 root 用户和配置为 firewalld
的防火墙。 要进行此设置,请按照我们的 CentOS 8 初始服务器设置指南进行操作。
第 1 步 — 安装 MongoDB
标准 CentOS 存储库中没有可用的官方 MongoDB 软件包。 为了在您的服务器上安装 Mongo,您需要添加一个指向 MongoDB 官方 repo 的存储库文件。 然后,您的包管理器将在搜索包时读取此文件,并能够使用它来安装 Mongo 及其任何依赖项。
在本指南中,我们将使用 DNF 包管理器安装 Mongo,因此您需要将存储库文件添加到 /etc/yum.repos.d/
目录。 DNF 在搜索包源时会检查此目录中以 .repo
后缀结尾的所有文件。
您可以使用 vi
(一种广泛使用的文本编辑器,默认安装在 CentOS 系统上)来创建存储库文件,但 vi
对于没有使用它的用户来说可能有点不直观. 作为替代方案,我们推荐 nano
,这是标准 CentOS 存储库中提供的更加用户友好的编辑器。
要使用 DNF 安装 nano
,请运行以下命令:
sudo dnf install nano
在此安装过程中,系统会要求您确认是否要安装该软件。 为此,请按 y
,然后按 ENTER
:
OutputTransaction 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 + X
、Y
,然后按 ENTER
。
在继续之前,您可以通过运行程序的 repolist
命令测试 DNF 是否能够找到并使用此存储库:
dnf repolist
如果您的服务器的包管理器可以使用存储库,您会在输出中找到它:
Outputrepo 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
同样,系统会要求您通过按 y
然后按 ENTER
来确认是否要安装该软件包。 DNF 也可能会要求您确认导入 Mongo 的签名密钥; 如果是这种情况,请再次按 y
,然后按 ENTER
。
命令完成后,MongoDB 将安装在您的服务器上。 但是,在启动数据库之前,MongoDB 文档建议您在服务器上禁用透明大页面以优化性能。
第 2 步 — 禁用透明大页面以提高性能
CentOS 默认启用透明大页面 (THP),这是一种 Linux 内存管理系统。 THP 使用超大内存页面来减少翻译后备缓冲区查找对具有大量内存的计算机的影响。 但是,此系统可能会对数据库性能产生负面影响,MongoDB 文档建议 禁用 THP。
要在 CentOS 8 上禁用透明大页面,您可以创建一个 systemd
单元文件,该文件将在启动时禁用它。 systemd
是用于许多 Linux 操作系统的初始化系统和软件套件,您可以使用它来控制服务器的许多方面。 在 systemd 中,unit 是指系统知道如何操作和管理的任何资源。 单元文件是定义这些资源之一的特殊配置文件。
使用 sudo
权限在 /etc/systemd/system/
目录中创建此文件:
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
服务单元只有在两个指定的 targets -systemd
单元的预定义组 - 完成启动后才会启动Before
:此选项确保disable-thp
服务始终在 MongoDB 服务单元mongod
启动之前完成启动
接下来,将突出显示的 [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
,当basic.target
启动时,会导致disable-thp
单元启动。
注意:如果您想了解有关 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
将在输出中括在括号中:
Outputalways madvise [never]
之后,启用 disable-thp
服务,以便在服务器启动时自动启动并禁用 THP。 请注意,此命令在服务文件定义中不包括 .service
。 systemctl
会将此后缀附加到您自动传递的任何参数(如果它不存在),因此没有必要包含它:
sudo systemctl enable disable-thp
现在,只要您的服务器启动并在 MongoDB 服务启动之前禁用 THP,disable-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
配置文件继承另一个名为 virtual-guest
的 tuned
配置文件的特征。
注意:像这样继承virtual-guest
配置文件的特性在很多情况下都可以工作,但它可能不是对每种情况都是最佳的。 我们鼓励您查看 提供的已调整配置文件 上的此文档,以确定继承另一个配置文件的特征是否更适合您的系统。
下一节指定了一个特殊的插件 - 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
将检查并返回数据库连接的状态。 响应中 ok
字段的 1
值表明服务器正在按预期工作:
OutputMongoDB 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 }
另外,请注意,数据库在 127.0.0.1
上的端口 27017
上运行,本地环回地址表示 localhost。 这是 MongoDB 的默认端口号。
接下来,我们将看看如何使用 systemd
管理 MongoDB 服务器实例。
第 4 步 — 管理 MongoDB 服务
如前所述,步骤 1 中描述的安装过程将 MongoDB 配置为作为 systemd
服务运行。 这意味着您可以像使用其他 CentOS 系统服务一样使用标准的 systemctl
命令来管理它。
回想一下 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 提供的可能性的一个很好的资源。