使用.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] | (1,2) 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 进程的用户,则必须向新用户授予对这些目录的访问权限。
- 如果强制配置 SELinux。参见Configure SELinux。
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 目录(对于 RHEL 7.0),和/或
-
您不是使用默认的 MongoDB 端口 **。
非默认 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,除非将此值设置为有效的网络接口。
可以配置此值:
Warning
绑定到非 localhost(例如可公开访问)的 IP 地址之前,请确保已保护群集免受未经授权的访问。有关安全建议的完整列表,请参见Security Checklist。至少考虑enabling authentication和加强网络基础设施。
有关配置bindIp的更多信息,请参见MongoDB 配置强化。