1. 程式人生 > >Mongodb 騰訊雲部署

Mongodb 騰訊雲部署

原來一直使用的團隊部署的mongodb或者雲服務商的,今天嘗試部署學習一下。

MongoDB 是一個基於分散式檔案儲存的資料庫。由 C++ 語言編寫。旨在為 WEB 應用提供可擴充套件的高效能資料儲存解決方案。MongoDB 是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。

本文在騰訊雲上嘗試部署mongodb。
環境:Linux(ubuntu 16.04)

1 解壓進入mongodb目錄下

tar -vxf mongodb-linux-x86_64-ubuntu1604-3.6.5.tgz
cd mongodb-linux-x86_64-ubuntu1604-3.6.5

2建立資料夾存放資料和log

mkdir -p data/db
touch mongodb.log

3 執行mongodb

3.1 直接執行

cd bin
./mongod -dbpath=./../data/db -logpath=./../mongodb.log -logappend -port=27017 -fork
  • –dbpath:指定儲存資料的資料夾
  • –logpath:指定日誌儲存檔案(將不會輸出到控制檯)
  • –port指定埠,如果不寫的話,預設是27017
  • –fork代表後臺執行

出現這個log 說明啟動成功了。

2018-05-24T09:31:40.549
+0800 I NETWORK [initandlisten] waiting for connections on port 27017

3.2 通過配置檔案啟動

./mongod -f mongodb.conf 

mongodb.conf:

port = 27017 
dbpath = ./../data/db 
logpath = log/mongod.log
logappend=true

4 連線

4.1 本地訪問

在bin資料夾下執行

./mongo localhost:27000

即可連線到mongodb
Mongod 控制檯出現這個log 說明連結成功

2018-05-24T09
:35:09.415+0800 I NETWORK [listener] connection accepted from 127.0.0.1:36834 #1 (1 connection now open) 2018-05-24T09:35:09.416+0800 I NETWORK [conn1] received client metadata from 127.0.0.1:36834 conn1: { application: { name: "MongoDB Shell" }, driver: { name: "MongoDB Internal Client", version: "3.6.5" }, os: { type: "Linux", name: "Ubuntu", architecture: "x86_64", version: "16.04" } }

敲擊回車進入到mongodb shell模式

4.2 公網訪問

預設情況下mongodb 是無法通過外網連結訪問。
我們可以通過在建立mongodb.conf檔案並配置bind_ip 支援外網訪問。當值得注意的是我們開啟外網訪問後,很容易受到攻擊。
1 修改mongodb預設埠
2 設定 mongodb訪問許可權
mongodb.conf

port = 27017 
dbpath = ./../data/db
logpath = ./../mongodb.log
logappend=true
bind_ip = 雲主機內網ip
fork=true

在騰訊雲上不能直接繫結到公網ip,我們繫結到內網ip,即可實現公網的訪問。個人猜測公網ip是對映過來的,所以對於雲主機而言公網ip是不可見的。
執行:
./mongod -f mongodb.conf

./mongo xxx.xx.xx.xxx:27017
在本地linux開發機上即可連線到雲伺服器上的mongodb

5 修改mongodb預設配置

5.1 修改mongodb預設埠

我們可以修改 -port= 引數 或更改conf中port 配置mongodb預設埠

5.2 繫結mongodb例項

bind_ip = 127.0.0.1 將mongodb例項繫結到本地server
bind_ip = 127.0.0.1, 172.28.31.255 將本地server繫結的內網ip

PS: 可以使用該命令檢視linux 外網ip :curl icanhazip.com

5.3 開啟認證

因為mongodb 預設執行環境為安全,即執行在內網環境中外網無法訪問,所以安全模式是預設沒有開啟的。

5.3.1 新增管理員賬戶

這裡我們為資料庫新增管理員賬戶

use admin
db.createUser(
   {
     user: "appAdmin",
     pwd: "password",
     roles:
       [
         { role: "readWriteAnyDatabase", db: "admin" },
       ]
   }
)

這裡我們就建立了一個管理員賬戶,現在嘗試開啟驗證
PS:role 這裡是使用者身份,mongodb提供了非常豐富的使用者身份,readWriteAnyDatabase我們在admin建立了一個具有所有資料庫讀寫許可權的賬戶,具體可參閱第8.1節

5.3.2重啟server

在命令啟動新增–auth 引數 或在配置中新增auth=true
重新啟動伺服器。

5.3.3 普通方式連線

./mongo xxx.xx.xx.xxx:27017 

連線接mongodb
測試許可權是否啟動:

 use test
switched to db test
>  show collections 
2018-05-29T10:11:38.833+0800 E QUERY    [thread1] Error: listCollections failed: {
    "ok" : 0,
    "errmsg" : "not authorized on test to execute command { listCollections: 1.0, filter: {}, $db: \"test\" }",
    "code" : 13,
    "codeName" : "Unauthorized"
} :

報錯說明安全模式已經啟用了

5.3.4 以賬戶密碼方式連線

使用者只能在使用者所在資料庫登入,包括管理員賬號。

./mongo  xxx.xx.xx.xxx:27017 
use admin
db.auth("admin","helloworld")//管理賬戶必須要在admin中才能驗證
>1 出現1說明驗證成功
use test
show collections 

沒有報錯說明驗證通過

6 測試

use admin
db.auth("admin","helloworld")
use test2 //建立一個數據庫
db.test2.insert({"hello":"world"})//插入一條資料
db.createUser(
   {
     user: "test2user",
     pwd: "password",
     roles:
       [
         { role: "readWrite", db: "test2" },
       ]
   }
)
//建立新資料庫普通賬戶(如果沒有建立使用者管理員許可權,需要將auth關掉建立)
use test2
db.auth("test2user", "password")
show collections

7 執行

Mongodb 可在linux 配置後臺執行。
此測試採用supervisor 軟體後臺執行
配置:

[program:mongodb]
directory=/home/xxxx/mongodb/mongodb-linux-x86_64-ubuntu1604-3.6.5
command= /home/xxxx/mongodb/mongodb-linux-x86_64-ubuntu1604-3.6.5/bin/mongod  -f /home/xxxx/mongodb/mongodb-linux-x86_64-ubuntu1604-3.6.5/bin/mongodb.conf
autostart=true
startsecs=3
autorestart=true
startretries=3
user=root
redirect_stderr=true
stdout_logfile_maxbytes=20MB
stdout_logfile_backups=20
stdout_logfile =/home/xxxx/mongodb/mongodb-linux-x86_64-ubuntu1604-3.6.5/logs/mongodb.log

8 參考資料

8.1 role 身份

roles:指定使用者的角色,可以用一個空陣列給新使用者設定空角色;在roles欄位,可以指定內建角色和使用者定義的角色。role裡的角色可以選:
1. 資料庫使用者角色:read、readWrite;
2. 資料庫管理角色:dbAdmin、dbOwner、userAdmin;
3. 叢集管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 備份恢復角色:backup、restore;
5. 所有資料庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超級使用者角色:root

8.2 mongodb 常用命令

1 建立資料庫 use yourDB
2 查詢所有資料庫 show dbs
3 建立使用者 createUser
4 刪除使用者 show collections
5 插入資料 db.test2.insert

8.3 參考連結