使用.tgz Tarball 在 Red Hat 或 CentOS 上安装 MongoDB 社区

在本页面

Overview

使用本教程,可以使用下载的.tgz tarball 在 Red Hat Enterprise Linux,CentOS Linux 或 Oracle Linux [1]上手动安装 MongoDB 3.6 Community Edition。

MongoDB Version

本教程将安装 MongoDB 3.6 Community Edition。要安装其他版本的 MongoDB 社区,请使用此页面左上角的版本下拉菜单选择该版本的文档。

Installation Method

如本文档所述,虽然可以通过下载的.tgz tarball 手动安装 MongoDB,但建议尽可能使用系统上的yum软件包 Management 器来安装 MongoDB。使用程序包 Management 器会自动安装所有必需的依赖项,并提供示例mongod.conf文件来帮助您入门,并简化以后的升级和维护任务。

➤有关说明,请参见使用 yum Package Manager 安装 MongoDB

Considerations

Platform Support

MongoDB 3.6 Community Edition 支持x86_64体系结构上的 Red Hat Enterprise Linux(RHEL),CentOS Linux 和 Oracle Linux [1]的以下 64 位 版本:

  • RHEL/CentOS/Oracle 8(从 MongoDB Enterprise 3.6.17 开始)

  • RHEL/CentOS/Oracle 7

  • RHEL/CentOS/Oracle 6

MongoDB 仅支持这些平台的 64 位版本。

有关更多信息,请参见Supported Platforms

[1](12) MongoDB 仅支持运行 Red Hat 兼容内核(RHCK)的 Oracle Linux。 MongoDB 不支持 Unbreakable Enterprise Kernel(UEK)。

Windows Subsystem for Linux (WSL) - Unsupported

MongoDB 不支持 Linux 的 Windows 子系统(WSL)。

Production Notes

在生产环境中部署 MongoDB 之前,请考虑Production Notes文档,该文档提供了生产 MongoDB 部署的性能注意事项和配置建议。

安装 MongoDB 社区版

Prerequisites

使用以下命令安装 MongoDB 社区.tgz tarball 所需的依赖项:

sudo yum install libcurl openssl

Procedure

请按照以下步骤从.tgz手动安装 MongoDB Community Edition。

下载 MongoDB .tgz 压缩包。

MongoDB 下载中心下载适用于您系统的 tarball。

从下载的存档中提取文件。

例如,从系统 Shell 程序中,您可以使用tar命令提取:

tar -zxvf mongodb-linux-*-3.6.19.tgz

确保二进制文件位于 PATH 环境变量中列出的目录中。

MongoDB 二进制文件位于 tarball 的bin/目录中。您可以:

  • 将二进制文件复制到PATH变量中列出的目录中,例如/usr/local/bin(使用适当的安装目录更新/path/to/the/mongodb-directory/)
sudo cp /path/to/the/mongodb-directory/bin/* /usr/local/bin/
  • PATH变量中列出的目录(例如/usr/local/bin)创建指向二进制文件的符号链接(使用适当的安装目录更新/path/to/the/mongodb-directory/):
sudo ln -s  /path/to/the/mongodb-directory/bin/* /usr/local/bin/

运行 MongoDB 社区版

Prerequisites

ulimit

大多数类 Unixos 都限制了会话可能使用的系统资源。这些限制可能会对 MongoDB 的运行产生负面影响。有关更多信息,请参见UNIX ulimit 设置

Directory Paths

使用默认目录

默认情况下,MongoDB 使用mongod用户帐户运行,并使用以下默认目录:

  • /var/lib/mongo(数据目录)

  • /var/log/mongodb(日志目录)

  • ➤如果您是通过程序包 Management 器安装的,

    • 将创建默认目录,并将这些目录的所有者和组设置为mongod
  • ➤如果通过下载压缩包进行安装,

    • 未创建默认的 MongoDB 目录。要创建 MongoDB 数据和日志目录:
sudo mkdir -p /var/lib/mongo
sudo mkdir -p /var/log/mongodb

默认情况下,MongoDB 使用mongod用户帐户运行。创建后,将这些目录的所有者和组设置为mongod

sudo chown -R mongod:mongod <directory>
使用非默认目录

要使用默认目录以外的数据目录和/或日志目录:

  • 创建一个或多个新目录。

  • 编辑配置文件/etc/mongod.conf,并相应地修改以下字段:

  • storage.dbPath指定新的数据目录路径(例如/some/data/directory)

  • systemLog.path指定新的日志文件路径(例如/some/log/directory/mongod.log)

  • 确保运行 MongoDB 的用户有权访问一个或多个目录:

sudo chown -R mongod:mongod <directory>

如果您更改运行 MongoDB 进程的用户,则必须向新用户授予对这些目录的访问权限。

Configure SELinux

Important

如果 SELinux 处于enforcing模式,则必须为 MongoDB 自定义 SELinux 策略。

当前的 SELinux 策略不允许 MongoDB 进程访问/sys/fs/cgroup,这是确定系统上可用内存所必需的。如果打算以enforcing模式运行 SELinux,则需要对 SELinux 策略进行以下调整:

  • 确保您的系统已安装checkpolicy软件包:
sudo yum install checkpolicy
  • 创建一个自定义策略文件mongodb_cgroup_memory.te
cat > mongodb_cgroup_memory.te <<EOF
module mongodb_cgroup_memory 1.0;

require {
    type cgroup_t;
    type mongod_t;
    class dir search;
    class file { getattr open read };
}

#============= mongod_t ==============
allow mongod_t cgroup_t:dir search;
allow mongod_t cgroup_t:file { getattr open read };
EOF
  • 创建完成后,通过运行以下三个命令来编译并加载自定义策略模块:
checkmodule -M -m -o mongodb_cgroup_memory.mod mongodb_cgroup_memory.te
semodule_package -o mongodb_cgroup_memory.pp -m mongodb_cgroup_memory.mod
sudo semodule -i mongodb_cgroup_memory.pp

现在,将 SELinux 设置为enforcing,MongoDB 进程就可以访问正确的文件。

Important

如果 SELinux 处于enforcing模式,则在以下两种情况下,您还需要进一步自定义 SELinux 策略:

非默认 MongoDB 目录路径
  • 更新 SELinux 策略以允许mongod服务使用新目录:
semanage fcontext -a -t <type> </some/MongoDB/directory.*>

在适当的地方指定以下类型之一:

  • mongod_var_lib_t用于数据目录

  • mongod_log_t用于日志文件目录

  • mongod_var_run_t用于 pid 文件目录

Note

确保在目录末尾包含.*

  • 为新目录更新 SELinux 用户策略:
chcon -Rv -u system_u -t <type> </some/MongoDB/directory>

在适当的地方指定以下类型之一:

  • mongod_var_lib_t用于数据目录

  • mongod_log_t用于日志目录

  • mongod_var_run_t用于 pid 文件目录

  • 将更新的 SELinux 策略应用于目录:

restorecon -R -v </some/MongoDB/directory>

For examples:

Tip

  • 根据您的用户权限,您可能需要使用sudo来执行这些操作。

  • 对于semanage fcontext操作,请确保在目录末尾包含.*

  • 如果使用非默认的 MongoDB 数据路径/mongodb/data
semanage fcontext -a -t mongod_var_lib_t '/mongodb/data.*'
chcon -Rv -u system_u -t mongod_var_lib_t '/mongodb/data'
restorecon -R -v '/mongodb/data'
  • 如果使用非默认的 MongoDB 日志目录/mongodb/log(例如,日志文件路径为/mongodb/log/mongod.log):
semanage fcontext -a -t mongod_log_t '/mongodb/log.*'
chcon -Rv -u system_u -t mongod_log_t '/mongodb/log'
restorecon -R -v '/mongodb/log'
非默认 MongoDB 端口

Tip

根据您的用户权限,您可能需要使用sudo来执行该操作。

semanage port -a -t mongod_port_t -p tcp <portnumber>
可选。禁止 FTDC 警告

当前的 SELinux 策略不允许 MongoDB 进程打开并为Diagnostic Parameters(FTDC)读取/proc/net/netstat。这样,审核日志可能包含许多有关无法访问此路径的消息。

要跟踪建议的修复程序,请参阅https://github.com/fedora-selinux/selinux-policy-contrib/pull/79

(可选)作为临时解决方案,您可以手动调整 SELinux 策略:

  • 确保您的系统已安装checkpolicy软件包:
sudo yum install checkpolicy
  • 创建一个自定义策略文件mongodb_proc_net.te
cat > mongodb_proc_net.te <<EOF
module mongodb_proc_net 1.0;

require {
    type proc_net_t;
    type mongod_t;
    class file { open read };
}

#============= mongod_t ==============
allow mongod_t proc_net_t:file { open read };
EOF
  • 创建完成后,通过运行以下三个命令来编译并加载自定义策略模块:

Tip

根据您的用户权限,您可能需要使用sudo来执行semodule操作。

checkmodule -M -m -o mongodb_proc_net.mod mongodb_proc_net.te
semodule_package -o mongodb_proc_net.pp -m mongodb_proc_net.mod
semodule -i mongodb_proc_net.pp

Procedure

请按照以下步骤在系统上运行 MongoDB Community Edition。这些说明假定您使用的是默认设置。

创建数据和日志目录。

创建一个目录,MongoDB 实例将在该目录中存储其数据。例如:

sudo mkdir -p /var/lib/mongo

创建一个目录,MongoDB 实例将在该目录中存储其日志。例如:

sudo mkdir -p /var/log/mongodb

启动 MongoDB 进程的用户必须具有对这些目录的读写权限。例如,如果您打算自己运行 MongoDB:

sudo chown `whoami` /var/lib/mongo     # Or substitute another user
sudo chown `whoami` /var/log/mongodb   # Or substitute another user

Run MongoDB.

要运行 MongoDB,请在系统提示符下运行mongod进程。

mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork

有关命令行选项--dbpath--logpath的详细信息,请参见Options

确认 MongoDB 已成功启动。

通过检查日志文件/var/log/mongodb/mongod.log中以下行的进程输出,验证 MongoDB 是否已成功启动:

[initandlisten] waiting for connections on port 27017

您可能会在过程输出中看到非严重警告。只要您看到上面显示的日志行,就可以在对 MongoDB 进行初始评估时安全地忽略这些警告。

开始使用 MongoDB。

在与mongod相同的主机上启动mongo shell。您可以在没有任何命令行选项的情况下运行mongo shell,以使用默认端口 27017 连接到在 localhost 上运行的mongod

mongo

有关使用mongo shell 连接的更多信息,例如连接到在不同主机和/或端口上运行的mongod实例,请参见Mongo 壳牌

为了帮助您开始使用 MongoDB,MongoDB 提供了各种驱动程序版本的入门指南。有关可用版本,请参见Getting Started

Additional Information

默认情况下,localhost 绑定

默认情况下,MongoDB 在bindIp设置为127.0.0.1的情况下启动,该绑定到 localhost 网络接口。这意味着mongod仅可以接受来自同一计算机上运行的 Client 端的连接。远程 Client 端将无法连接到mongod,并且mongod将无法初始化replica set,除非将此值设置为有效的网络接口。

可以配置此值:

  • 在带有bindIp的 MongoDB 配置文件中,或者

  • 通过命令行参数--bind_ip

Warning

绑定到非 localhost(例如可公开访问)的 IP 地址之前,请确保已保护群集免受未经授权的访问。有关安全建议的完整列表,请参见Security Checklist。至少考虑enabling authentication加强网络基础设施

有关配置bindIp的更多信息,请参见MongoDB 配置强化