MongoDB安裝組態(RedHat/CentOS)


本教學介紹如何在Red Hat Enterprise Linux或CentOS Linux版本6和7上使用.rpm軟體包來安裝 MongoDB 社群版。 雖然Red Hat包含自己的MongoDB軟體包,但安裝最新 MongoDB社群版還要自己手動安裝。

平台支援: 本安裝指南僅支援64位元系統。有關詳細資訊,請參閱平台支援。MongoDB 3.2不支援Red Hat Enterprise Linux 5。

mongodb-org-server包提供了一個使用/etc/mongod.conf組態檔案啟動 mongod 的初始化指令碼。

由軟體包提供的預設的 /etc/mongod.conf 組態檔案的 bind_ip 預設設定為 127.0.0.1。 在初始化副本集合之前,根據環境的需要修改此設定。

安裝MongoDB社群版

本安裝指南僅支援64位元系統。有關詳細資訊,請參閱平台支援。請參考以下步驟一步一步地來完成。

第一步:組態包管理系統(yum)

建立一個 /etc/yum.repos.d/mongodb-org-3.4.repo 檔案,以便可以使用 yum 命令直接安裝 MongoDB。

MongoDB版本3.0中更改:MongoDB Linux軟體包位於以 3.0 開頭的新儲存庫中。

對於最新穩定發布的MongoDB

建立儲存庫檔案(使用命令:vi /etc/yum.repos.d/mongodb-org-3.4.repo),寫入如下內容:

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

第二步:安裝MongoDB軟體包和相關工具

要安裝最新的穩定版本(3.4)的MongoDB,請執行以下命令:

# sudo yum install -y mongodb-org

執行過程如下所示 -

安裝完成後,如下圖所示 -

執行MongoDB

大多數類Unix作業系統限制對談,以減少系統資源的使用。 這些限制可能會對 MongoDB 操作產生負面影響。有關詳細資訊,請參閱UNIX ulimit設定

組態SELinux

如果您使用SELinux,則必須組態SELinux以允許MongoDB在基於Red Hat Linux的系統(Red Hat Enterprise Linux或CentOS Linux)上啟動。

要組態SELinux,管理員有三個選項:

  • 如果SELinux處於強制模式,則可以存取MongoDB部署將使用的相關埠(例如27017)。 有關MongoDB預設埠的更多資訊,請參閱預設MongoDB埠。 對於預設設定,可以通過執行下面命令來實現 -
# semanage port -a -t mongod_port_t -p tcp 27017
  • 通過在/etc/selinux/config中將 SELINUX 設定為 disabled 來禁用SELinux。
SELINUX=disabled

以學習為目的,建議使用此項設定,但是必須重新啟動系統才能使更改生效。

  • /etc/selinux/config 中設定為許可模式,即,將SELinux設定為 permissive
SELINUX=permissive

上述設定完成後,必須重新啟動系統才能使更改生效。可以使用 setenforce 更改為允許模式。 setenforce 不需要重新啟動,但不持續。

或者,可以選擇在安裝Linux作業系統時不要安裝SELinux軟體包,或選擇刪除相關軟體包。這個選項是最具侵入性的,所以不推薦。

MongoDB範例預設將其資料檔案儲存在/var/lib/mongo目錄,及其紀錄檔檔案/var/log/mongodb中,並使用 mongod 使用者帳戶執行。可以在 /etc/mongod.conf 中指定備用紀錄檔和資料檔案目錄。 有關其他資訊,請參閱systemLog.pathstorage.dbPath

如果更改執行 MongoDB 進程的使用者,則必須修改 /var/lib/mongo/var/log/mongodb 目錄的存取控制許可權,以使此使用者能夠存取這些目錄。

啟動 MongoDB

可以通過發出以下命令來啟動 mongod 進程:

# sudo service mongod start

驗證MongoDB是否已成功啟動

可以通過檢查 /var/log/mongodb/mongod.log 中的紀錄檔檔案的內容來驗證 mongod 進程是否成功啟動,檢視此檔案應該會看到類似的內容 -

[root@localhost ~]# cat /var/log/mongodb/mongod.log
2017-06-29T04:36:57.410-0400 I CONTROL  [main] ***** SERVER RESTARTED *****
2017-06-29T04:36:57.695-0400 I CONTROL  [initandlisten] options: { command: [ "run" ], config: "/etc/mongod.conf", net: { bindIp: "127.0.0.1", port: 27017 }, processManagement: { fork: true, pidFilePath: "/var/run/mongodb/mongod.pid" }, storage: { dbPath: "/var/lib/mongo", journal: { enabled: true } }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log", quiet: true } }
2017-06-29T04:36:57.809-0400 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=256M,session_max=20000,eviction=(threads_min=4,threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),
... ...
2017-06-29T04:36:59.529-0400 I INDEX    [initandlisten] build index on: admin.system.version properties: { v: 2, key: { version: 1 }, name: "incompatible_with_version_32", ns: "admin.system.version" }
2017-06-29T04:36:59.529-0400 I INDEX    [initandlisten]          building index using bulk method; build may temporarily use up to 500 megabytes of RAM
2017-06-29T04:36:59.541-0400 I INDEX    [initandlisten] build index done.  scanned 0 total records. 0 secs
2017-06-29T04:36:59.542-0400 I COMMAND  [initandlisten] setting featureCompatibilityVersion to 3.4
2017-06-29T04:36:59.548-0400 I NETWORK  [thread1] waiting for connections on port 27017
[root@localhost ~]#

或者,使用以下命令 -

[root@localhost ~]# ps -aux|grep mongod
mongod     2169  2.7  3.9 971208 39804 ?        Sl   04:36   0:03 /usr/bin/mongod --quiet -f /etc/mongod.conf run
root       2376  0.0  0.0 112648   964 pts/0    R+   04:38   0:00 grep --color=auto mongod
[root@localhost ~]#

可以選擇確保通過發出以下命令,MongoDB 將在系統啟動後啟動 mongod 服務:

# sudo chkconfig mongod on

停止 MongoDB

根據需要,可以通過發出以下命令來停止 mongod 進程:

# sudo service mongod stop

重新啟動 MongoDB

根據需要,可以通過發出以下命令來重新啟動 mongod 進程:

# sudo service mongod restart

可以通過檢視 /var/log/mongodb/mongod.log 檔案中的輸出來跟蹤進程狀態的錯誤或重要資訊。

開始使用 MongoDB

進入 MongoDB 命令列,簡單地使用 -

[root@localhost ~]# mongo

## 檢視資料庫
> show dbs;

## 檢視資料庫版本
> db.version();

## 常用命令幫助
> db.help();

[root@localhost ~]# mongo
MongoDB shell version v3.4.5
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.5
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
        http://docs.mongodb.org/
Questions? Try the support group
        http://groups.google.com/group/mongodb-user
Server has startup warnings:
2017-06-29T04:36:58.888-0400 I CONTROL  [initandlisten]
2017-06-29T04:36:58.888-0400 I CONTROL  [initandlisten] ** WARNING: Access contr                                                                                        ol is not enabled for the database.
2017-06-29T04:36:58.888-0400 I CONTROL  [initandlisten] **          Read and wri                                                                                        te access to data and configuration is unrestricted.
2017-06-29T04:36:58.888-0400 I CONTROL  [initandlisten]
2017-06-29T04:36:58.892-0400 I CONTROL  [initandlisten]
2017-06-29T04:36:58.892-0400 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/                                                                                        mm/transparent_hugepage/enabled is 'always'.
2017-06-29T04:36:58.892-0400 I CONTROL  [initandlisten] **        We suggest set                                                                                        ting it to 'never'
2017-06-29T04:36:58.892-0400 I CONTROL  [initandlisten]
2017-06-29T04:36:58.892-0400 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/                                                                                        mm/transparent_hugepage/defrag is 'always'.
2017-06-29T04:36:58.892-0400 I CONTROL  [initandlisten] **        We suggest set                                                                                        ting it to 'never'
2017-06-29T04:36:58.892-0400 I CONTROL  [initandlisten]
>
> show dbs;
admin  0.000GB
local  0.000GB
> use local
switched to db local
> db.version()
3.4.5
>