使用配置文件啓動MongoDB

Ubuntu 16.04 (阿里雲ECS),MongoDB 4.0,

 

原來,已經寫了10篇MongoDB的隨筆了。可是,自己居然沒有使用配置文件啓動過MongoDB,對其更多的配置是不明白的。

昨天(180808)花了一些努力,終於,實現了使用配置文件啓動MongoDB、並且改進了隨機啓動腳本,本文便是對此過程進行的記錄。

 

注意,安裝方式很關鍵!安裝方式不同,可能會和本文介紹的內容存在差別,請讀者自行判別。本文使用的安裝方式Install MongoDB Community Edition on Ubuntu,其中的Using .deb Packages (Recommended)。

 

新發現,終於知道自己爲何可以在ECS上率性用上使用配置文件啓動MongoDB了!原來,在其/etc目錄中存在一個mongod.conf文件:

$ ls -l mongod.conf
-rw-r--r-- 1 root root 626 Jun 22 10:19 mongod.conf

本地開發環境和ECS都是使用相同的安裝方式,可是,剛剛檢查本地系統時卻沒有找到/etc/mongod.conf文件,檢查ECS上的mongod.conf的建立時間發現其建立時間爲Jun 22,那個時候俺還沒有購買ECS呢!運氣!哎,總靠運氣學習軟件、開發、編程可不是好事啊!學習,需要的是dig,不斷dig!

 

舊方式

安裝完畢後,mongod、mongo等命令會出現在/usr/bin中,可以使用whereis命令查看(命令很多,本文僅涉及到其中的mongod、mongo)。

 

由於安裝後/etc/下沒有配置文件,於是,自己一直使用命令行方式啓動MongoDB服務器。

後來,將MongoDB服務器啓動命令加入到了啓動腳本——簡單粗糙版:

/etc/init.d/中建立MongoDB服務器的啓動腳本,並手動在/etc/rc3.d/中建立腳本的軟連接(此時根本不知道什麼LBS信息,啓動腳本的編寫規範,直到現在自己也只是知道皮毛)。

下面是舊方式的啓動腳本mongo01:

1 #!/bin/sh
2 
3 # START MongoDB
4 # Data Directory: /home/log/ws/mdb/data0725
5 
6 # Only can be accessed from localhost/127.0.0.1
7 # Use the default port 27017
8 mongod --dbpath /home/username/ws/mdb/data0725 --logpath /home/username/ws/mdb/data0725/log --logappend --auth --directoryperdb &

前面看過的一篇博文中講,要是啓動腳本中沒有LBS信息的話,可能會導致服務無法啓動。還好,在上面的MongoDB服務啓動時一直是成功的。

注意,末尾添加 空格、&符號。

在代表運行級別3的/etc/rc3.d/目錄中建立啓動腳本的軟連接。

 

重啓,可以發現MongoDB服務器已經啓動了,如下:

sudo netstat -antp | grep mongod

ps -ef | grep mongod

 

做完上面的操作後,啓動MongoDB服務器的腳本已經被添加爲Linux服務了。

 

還可以使用service --status-all查看腳本對應服務的運行狀態:

[ + ] mongo01

中括號中是+號,表示服務已啓動。

 

從啓動腳本可以看到,數據文件存放於家目錄下的,日誌文件也是存放於其中。

在MongoDB服務器的啓動被添加爲Linux服務後,默認是使用root賬戶啓動的——可以看到ps -ef顯示進程的用戶爲root,這樣的權限太高,需要限制。

而自己之前使用登錄賬號啓動MongoDB時,MongoDB的進程爲登錄賬號。

Linux賬號、進程、進程相關的資源——各種文件(包括文件夾)之間存在什麼關係呢?

最佳實踐是怎樣的?配置文件放哪裏、數據文件放哪裏、日誌文件放哪裏、PID文件放哪裏、其它文件?

之前使用netstat -ano | grep mongod命令時,還可以看到一個/tmp/mongodb-27017.sock文件,這個文件又是做什麼用的呢?

 

總之,對於舊方式自己還是不太放心的,還需要改進,更專業的改進——把東西放到對的位置、安全的位置

 

新方式

介紹在阿里雲ECS上使用部署。

前面說了,在/etc/目錄下發現了一個mongod.conf文件——一個很好的起點,試着用這個文件啓動MongoDB服務,是可以的。

不過,看到Nginx等在/etc/中都有自己的目錄,於是,新建了mongod目錄,並把/etc/中的mongod.conf拷貝了進取,再按照自己的需要改改改。

 

首先要考慮的是數據庫存放位置,孤選擇了/home/目錄下建立一個mdb目錄,再在裏面建立各種MongoDB數據庫存放文件夾(放在/var/目錄下也可以吧?還是推薦方案?默認是放到/data/目錄下,可是,沒有/data/目錄)。

$ ls -l /home/mdb/
total 4
drwxr-xr-x 7 root root 4096 Aug 8 18:04 data0802

/home/mdb/下的data0802就是孤存放數據庫的目錄了,日誌文件存放在/var/log/mongodb/目錄下,日誌文件名和配置文件名同名——參考了uWSGI服務器的日誌文件命名。

還有PID文件,放到了/run/目錄下,也應該和配置文件同名(不包括擴展名)(/run/目錄下是否也建立一個mongodb目錄呢?)。

 

因此,有下面幾個文件是需要關注的:

/home/mdb/data0802

/etc/mongod/data0802.conf

/var/log/mongodb/data0802.log

/run/data0802.pid

 

配置文件如下:

# mongod.conf

# for documentation of all options, see:
#   http://docs.mongodb.org/manual/reference/configuration-options/

# Where and how to store data.
storage:
  dbPath: /home/mdb/data0802
  journal:
    enabled: true
  directoryPerDB: true
#  engine:
#  mmapv1:
#  wiredTiger:

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/data0802.log

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1

# how the process runs
processManagement:
  fork: true
  pidFilePath: /run/data0802.pid
  timeZoneInfo: /usr/share/zoneinfo

# set auth?
setParameter:
  enableLocalhostAuthBypass: false

security:
  authorization: enabled

#operationProfiling:

#replication:

#sharding:

## Enterprise-Only Options:

#auditLog:

#snmp:

 

在配置隨機啓動前,使用mongod測試下上面的配置文件吧!因爲是在/etc/目錄下,所以,需要添加sudo!

注意,在執行前請確保沒有其它MongoDB服務在運行,或者,不會和配置文件中描述的發生衝突。

$sudo mongod -f /etc/mongod/data0802.conf

注意,上面的配置文件用了絕對路徑。

 

不出意外,運行成功!

 

需要注意上面的配置文件中紫色的部分,那是自己在默認的配置文件上後來添加的,因爲啓動時遇到了很多警告或錯誤信息:

directoryPerDB: true

fork: true

security:

  authorization: enabled

 

可以從參考鏈接MongoDB Configuration File Options中找到它們代表的意義。

 

命令行啓動的參數 和 配置文件中的配置項 有對應關係,是否一一對應,暫不確定,,而且兩者的寫法也不太一樣。

比如,上面配置文件中的authorization:enabled,在命令行中只要寫爲--auth即可。

fork: true表示後臺啓動?其具體意義還需要dig。

 

不過,仍然堅定支持配置文件方式啓動。對於命令行中的選型對應的配置文件選項, 咱可以去參考的官文鏈接中去 查找——目前來看很easy。

 

下面,配置隨機啓動MongoDB服務——和舊方式是不同的。

在/etc/init.d/目錄中建立啓動腳本mongodb,如下:

 1 #!/bin/bash
 2 ### BEGIN INIT INFO
 3 # Provides:          mongodb
 4 # Required-start:    $local_fs $remote_fs $network $syslog
 5 # Required-Stop:     $local_fs $remote_fs $network $syslog
 6 # Default-Start:     2 3 4 5
 7 # Default-Stop:      0 1 6
 8 # Short-Description: starts the mongodb daemon
 9 # Description:       starts mongodb using start-stop-daemon
10 ### END INIT INFO
11 
12 mongod -f /etc/mongod/data0802.conf &

說明,沒有sudo,使用了絕對路徑,命令後面跟着 空格、&符號。

 

注意,啓動腳本中的LBS信息尚不確定,請大家謹慎使用。

 

再使用update-rc.d命令安裝此啓動腳本即可,安裝後,Linux服務就多了一項mongodb了!可以使用命令service --status-all查看其狀態。

安裝啓動腳本:

sudo update-rc.d mongodb defaults 10

 

好了,重啓,重啓後可以看到mongodb服務已經啓動,使用mongo命令也可以連接到MongoDB服務。

 

如果服務沒有啓動,那一定是出現了故障了!那麼,檢查日誌文件。日誌文件在哪兒?/var/log/mongodb/data0802.log。

 

參考鏈接

MongoDB Configuration File Options

PID文件介紹

 

附錄

1.命令行中使用配置文件啓動時的一些輸出

$ sudo mongod -f data0802.conf
2018-08-08T17:05:27.171+0800 I CONTROL [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
about to fork child process, waiting until server is ready for connections.
forked process: 5858
child process started successfully, parent exiting

 

2.使用mongo鏈接MongoDB服務器的一些輸出,其中的WARNING信息可以 促進 完善配置文件

$ mongo
MongoDB shell version v4.0.0
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.0
Server has startup warnings:
2018-08-08T17:05:27.184+0800 I STORAGE [initandlisten]
2018-08-08T17:05:27.184+0800 I STORAGE [initandlisten] ** WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine
2018-08-08T17:05:27.184+0800 I STORAGE [initandlisten] ** See http://dochub.mongodb.org/core/prodnotes-filesystem
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten]
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten] ** WARNING: You are running this process as the root user, which is not recommended.
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten]
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten]
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten] ** We suggest setting it to 'never'
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten]
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten] ** WARNING: soft rlimits too low. rlimits set to 7856 processes, 65535 files. Number of processes should be at least 32767.5 : 0.5 times number of files.
2018-08-08T17:05:28.285+0800 I CONTROL [initandlisten]

 

說明:

孤的配置文件中沒有使用默認的WiredTiger存儲引擎,而是使用了文件系統存儲的方式,會比較低效;

WARNING: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine

 

開始沒有開啓安全認證,後來添加了authorization: enabled選項,警告消失:

WARNING: Access control is not enabled for the database.

 

其它的WARNING尚未解決。

 

3.解決一下WARNING後使用mongo訪問MongoDB服務器的輸出

$ mongo
MongoDB shell version v4.0.0
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 4.0.0
>

 

後記

其實,新方式中的數據庫文件夾早已存在了,並且已經建立了兩個賬號,在做本文實踐時,直接拷貝了文件夾,結果,可以使用。只不過,因爲之前沒有選擇WiredTiger存儲引擎,所以,現在也是不可以的了。但是,通過數據導出、導入的方式可以將其中的數據轉存到另一個支持WiredTiger存儲引擎的數據庫中。

 

 

fork配置項說明:fork server process

Enable a daemon mode that runs the mongos or mongod process in the background.

使得mongod、mongo在後臺運行。

 

還有一個問題,怎麼設置、選擇啓動MongoDB的用戶和用戶組呢?需要新建嗎?怎麼新建?

 

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