Linux 安裝並配置最新的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 <[email protected]>"
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. |