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.X
的unstable
版本。目前最新的是4.3.5
。
本文主要讲解 CentOS 8 如何安装配置 MongoDB 4.2.5。
二、下载方式
- 官方下载
- 各 Linux 包管理安装
- 各系统对应的安装包安装
- 源码系统本地编译
三、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. |
八、参考文档