Linux 安装并配置最新的MongoDB

  • 一、前言
  • 二、下载方式
  • 三、CentOS yum安装
  • 3.1 配置yum仓库源
  • 3.2安装
  • 四、配置
  • 4.1 mongod.conf 配置
  • 4.2 端口与ip
  • 4.3 安全认证
  • 4.4 *加入系统 service*
  • 4.5 配置防火墙
  • 4.6 配置 SELinux
  • 4.7 创建超级用户
  • 五、MongoDB 服务操作
  • 六、坑
  • 七、MongoDB社区版说明
  • 八、参考文档


一、前言

目前的稳定版本 是4.2.X,截止至20年4月初的最新是4.2.5,也推荐安装此版本,也可以尝鲜,安装4.3.Xunstable版本。目前最新的是4.3.5

本文主要讲解 CentOS 8 如何安装配置 MongoDB 4.2.5。

二、下载方式

  1. 官方下载
  2. 各 Linux 包管理安装
  3. 各系统对应的安装包安装
  4. 源码系统本地编译

三、CentOS yum安装

3.1 配置yum仓库源

配置mongodb-org-4.2版本的yum源

sudo vi /etc/yum.repos.d/mongodb-org-4.2.repo

编写内容如下:

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

3.2安装

执行 yum 指令安装

sudo yum install mongodb-org

提示信息如下

MongoDB Repository                                                                                                                                                      1.9 kB/s | 6.6 kB     00:03
Dependencies resolved.
========================================================================================================================================================================================================
 Package                                            Arch                             Version                                                            Repository                                 Size
========================================================================================================================================================================================================
Installing:
 mongodb-org                                        x86_64                           4.2.5-1.el8                                                        mongodb-org-4.2                            10 k
Installing dependencies:
 python2                                            x86_64                           2.7.16-12.module_el8.1.0+219+cf9e6ac9                              AppStream                                 109 k
 python2-libs                                       x86_64                           2.7.16-12.module_el8.1.0+219+cf9e6ac9                              AppStream                                 6.0 M
 python2-pip-wheel                                  noarch                           9.0.3-14.module_el8.1.0+219+cf9e6ac9                               AppStream                                 1.2 M
 python2-setuptools-wheel                           noarch                           39.0.1-11.module_el8.1.0+219+cf9e6ac9                              AppStream                                 289 k
 mongodb-org-mongos                                 x86_64                           4.2.5-1.el8                                                        mongodb-org-4.2                            15 M
 mongodb-org-server                                 x86_64                           4.2.5-1.el8                                                        mongodb-org-4.2                            25 M
 mongodb-org-shell                                  x86_64                           4.2.5-1.el8                                                        mongodb-org-4.2                            17 M
 mongodb-org-tools                                  x86_64                           4.2.5-1.el8                                                        mongodb-org-4.2                            62 M
Installing weak dependencies:
 python2-pip                                        noarch                           9.0.3-14.module_el8.1.0+219+cf9e6ac9                               AppStream                                 2.0 M
 python2-setuptools                                 noarch                           39.0.1-11.module_el8.1.0+219+cf9e6ac9                              AppStream                                 643 k
Enabling module streams:
 python27                                                                            2.7

Transaction Summary
========================================================================================================================================================================================================
Install  11 Packages

Total download size: 129 M
Installed size: 321 M

确认无误,按y安装

warning: /var/cache/dnf/mongodb-org-4.2-fddc3ec541fac48b/packages/mongodb-org-4.2.5-1.el8.x86_64.rpm: Header V3 RSA/SHA1 Signature, key ID 058f8b6b: NOKEY
MongoDB Repository                                                                                                                                                      862  B/s | 1.7 kB     00:01
Importing GPG key 0x058F8B6B:
 Userid     : "MongoDB 4.2 Release Signing Key <packaging@mongodb.com>"
 Fingerprint: E162 F504 A20C DF15 827F 718D 4B7C 549A 058F 8B6B
 From       : https://www.mongodb.org/static/pgp/server-4.2.asc
Is this ok [y/N]:

四、配置

注意,以下带*的小节为非必需项,因为 yum 安装、安装包安装会自动配置。

4.1 mongod.conf 配置

vi /etc/mongod.conf

4.2 端口与ip

MongoDB 安装完默认只能通过本地mongo shell访问,绑定当前设备的IP,让其它设备能够访问MongoDB,其中port为MongoDB监听的端口号。

# network interfaces
 net:
   port: 27017
   bindIp: 0.0.0.0  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.

4.3 安全认证

* 推荐在首次设置完超级管理员账号后开启

security:
  authorization: enabled

4.4 加入系统 service

注意:本小节不需要操作,yum 安装mongo-org时已经自动配置了。
创建 mongod 的 service 文件

sudo vi /usr/lib/systemd/system/mongod.service

添加以下内容

[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network.target

[Service]
User=mongod
Group=mongod
Environment="OPTIONS=-f /etc/mongod.conf"
EnvironmentFile=-/etc/sysconfig/mongod
ExecStart=/usr/bin/mongod $OPTIONS
ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb
ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb
ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb
PermissionsStartOnly=true
PIDFile=/var/run/mongodb/mongod.pid
Type=forking
# file size
LimitFSIZE=infinity
# cpu time
LimitCPU=infinity
# virtual memory size
LimitAS=infinity
# open files
LimitNOFILE=64000
# processes/threads
LimitNPROC=64000
# locked memory
LimitMEMLOCK=infinity
# total threads (user+kernel)
TasksMax=infinity
TasksAccounting=false
# Recommended limits for for mongod as specified in
# http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings

[Install]
WantedBy=multi-user.target

创建系统服务软链接

ln -s /usr/lib/systemd/system/mongod.service /etc/systemd/system/multi-user.target.wants/

重新加载系统服务

systemctl daemon-reload

4.5 配置防火墙

sudo firewall-cmd --add-port 27017/tcp --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports

4.6 配置 SELinux

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

有两种方式,第一种是关闭SELinux,也是最简单的方式。第二种是配置 SELinux 的安全策略。
(1)关闭 SELinux
临时关闭,重启失效

setenforce 0

永久关闭
打开 SELinux 配置文件

sudo vi /etc/selinux/config

修改 SELINUX 的值

SELINUX=disabled

重启生效,若不重启,配合方法一临时关闭。
(2)配置 SELinux 策略

确保你的系统安装了checkpolicy软件,可以简单通过yum 下载安装:

sudo yum install checkpolicy

创建一个mongo策略的文件 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
Job for mongod.service failed because the control process exited with error code.
See "systemctl status mongod.service" and "journalctl -xe" for details.

4.7 创建超级用户

mongo shell中,在admin数据库中添加一个具有userAdminAnyDatabase角色,以及readWriteAnyDatabase角色。

技巧
从mongo shell的4.2版本开始,可以使用方法passwordPrompt(),与各种用户身份验证/管理方法/命令等结合使用,以提示输入密码,而不是直接在方法/命令调用中明文指定密码。 但是,仍然可以像使用早期版本的mongo shell一样直接指定密码。(不安全)

use admin
db.createUser(
  {
    user: "jeremy",
    pwd: passwordPrompt(),  // or cleartext password
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)

在提示输入密码时,输入自己的管理员密码即可。然后结束mongod。

db.adminCommand( { shutdown: 1 } )

重启mongod

systemctl restart mongod

五、MongoDB 服务操作

启动服务

systemctl start mongod

关闭服务

systemctl stop mongod

重启服务

systemctl restart mongod

查看服务状态

systemctl status mongod

六、坑

启动服务失败,通过查看服务状态,得到退出状态码2,配置问题。

● mongod.service - MongoDB Database Server
   Loaded: loaded (/usr/lib/systemd/system/mongod.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Fri 2020-04-03 11:06:18 CST; 10min ago
     Docs: https://docs.mongodb.org/manual
  Process: 16855 ExecStart=/usr/bin/mongod $OPTIONS (code=exited, status=2)
  Process: 16853 ExecStartPre=/usr/bin/chmod 0755 /var/run/mongodb (code=exited, status=0/SUCCESS)
  Process: 16851 ExecStartPre=/usr/bin/chown mongod:mongod /var/run/mongodb (code=exited, status=0/SUCCESS)
  Process: 16849 ExecStartPre=/usr/bin/mkdir -p /var/run/mongodb (code=exited, status=0/SUCCESS)

查看配置文件

# network interfaces
 net:
   port: 27017
   bindIp: 0.0.0.0,::

觉得没问题,查看官方文档说明

net:
   port: <int>
   bindIp: <string>
   maxIncomingConnections: <int>
   wireObjectCheck: <boolean>
   ipv6: <boolean>

bindIp的传参是String,于是我加了‘’,OK。

# network interfaces
 net:
   port: 27017
   bindIp: ’0.0.0.0,::‘

七、MongoDB社区版说明

包名

说明

mongodb-org

一个元软件包,它将自动安装下面列出的四个组件软件包。

mongodb-org-server

包含mongod守护程序,关联的init脚本和配置文件(/etc/mongod.conf)。 您可以使用初始化脚本从配置文件启动mongod。 有关详细信息,请参阅运行MongoDB社区版。

mongodb-org-mongos

包含mongos守护程序。

mongodb-org-shell

包含mongo shell。

mongodb-org-tools

包含以下MongoDB工具: mongoimport bsondump, mongodump, mongoexport, mongofiles, mongorestore, mongostat, and mongotop.

八、参考文档

mongoDB 官方docs.