構建帶安全驗證的Mongo複製集(Windows環境下NT服務方式)

首先到Mongo官網下載Windows版ZIP包https://www.mongodb.com/download-center/community,釋放到D:\MongoDB\bin,可能需要安裝VC2015運行環境,嫌麻煩可以裝MSI版本。

1、在MongoDB下新建data目錄,以及其下的目錄結構
D:\MongoDB
|-bin
|-data
  |-cfg
  |-db
    |-rs1
    |-rs2
    |-rs3
  |-log

2、在MongoDB\data\cfg下新建3個配置文件,內容如下
dbpath=D:\MongoDB\data\db\rs1
logpath=D:\MongoDB\data\log\rs1.log
journal=true
port=20010  #另外兩個分別改爲20020,20030
replSet=rs0

#keyFile=D:\MongoDB\data\cfg\keyfile

#可以用openssl命令生成keyfile,例如openssl rand -base64 -out d:\MongoDB\data\cfg\keyFile 765

#openssl下載地址http://gnuwin32.sourceforge.net/packages/openssl.htm
#openssl更多用法參與https://www.cnblogs.com/pluslius/p/9936327.html

3、註冊3個NT服務,分別使用3個不同配置
D:\MongoDB\bin\mongod --config "D:\MongoDB\data\cfg\rs1.cfg" --serviceName "MongoDB_01" --serviceDisplayName "MongoDB_01" --install
D:\MongoDB\bin\mongod --config "D:\MongoDB\data\cfg\rs2.cfg" --serviceName "MongoDB_02" --serviceDisplayName "MongoDB_02" --install
D:\MongoDB\bin\mongod --config "D:\MongoDB\data\cfg\rs3.cfg" --serviceName "MongoDB_03" --serviceDisplayName "MongoDB_03" --install

4、從客戶端進入並設置主從節點
mongo --port 20010

rs.initiate()
rs.conf()

rs.add("localhost:20020")        #從節點
rs.addArb("localhost:20030")  #仲裁節點

#查看狀態
rs.status()

#退出主節點,進從節點
mongo --port 20020
#同步,允許從節點讀寫
rs.slaveOk()

5、建立驗證
#在主節點創建用戶名
mongo --port 20010

#創建用戶(MongoDB中內置了很多角色)
#role:表示角色,db:表示當前角色針對哪個數據庫有效。
#比如設置了admin 那麼這個用戶的權限範圍只在admin數據庫有效。
use admin
db.createUser(
  {
    user: "admin",
    pwd: "admin",
    roles: [ { role: "root", db: "admin" } ]
  }
)

#然後我們可以給具體的數據裏設置授權用戶了(用戶名密碼可以自己搞個複雜點的)
use vad_db
db.createUser({  
    "user" : "mydbuser",  
    "pwd": "abc123",  
    "roles" : [   
        {role: "readWrite", db: "mydb" }  
     ]},  
    { w: "majority" , wtimeout: 5000 }   

#停止所有的服務,注意順序,防止主庫變更
net stop MongoDB_03
net stop MongoDB_02
net stop MongoDB_01

#修改配置文件中的keyFile項去註釋,再重啓服務
net start MongoDB_01
net start MongoDB_02
net start MongoDB_03

6、使用KeyFile開啓複製集驗證(自動開啓安全驗證)
#連接到主節點(mongo --port 20010 -u admin -p admin)
show dbs    #不帶用戶密碼參數啓動時應該無反應,或提示無權限
use admin  #不帶用戶密碼參數啓動時用db.auth驗證
db.auth("admin", "admin")
show dbs    #這時應該正常顯示庫列表

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