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

八、參考文檔

mongoDB 官方docs.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章