MongoDB單機搭建
MongoDB集羣搭建
MongoDB集羣添加驗證
今天主要介紹的是給集羣加上用戶的驗證
主機 | 角色 |
---|---|
10.0.86.220 | 主節點 |
10.0.86.210 | 從節點 |
10.0.86.240 | 仲裁節點 |
這裏對配置文件進行一下說明:
MongoDB服務支持命令行配置參數和配置文件兩種啓動方式, 爲便於管理, 推薦使用配置文件進行服務參數的配置. 自Mongo2.6版起, 官方推薦使用YAML格式的配置參數: MongoDB官方YAML配置文件參數說明; 舊版配置文件格式依然可用但不建議使用: .MongoDB官方舊版配置文件參數說明
我這裏用的是舊版的格式,有興趣也可以嘗試yaml格式,
下面是本集羣使用的配置文件mongod.conf:
port=27017 #端口
dbpath= /usr/local/sdb/mongodb-linux-x86_64-4.0.9/db #數據庫存文件存放目錄
logpath= /usr/local/sdb/mongodb-linux-x86_64-4.0.9/mongodb.log #日誌文件存放路徑
logappend=true #使用追加的方式寫日誌
fork=true #不以守護程序的方式啓用,即不在後臺運行
replSet=sdb #Replica Set的名字 集羣名稱
maxConns=100 #最大同時連接數
> #auth=true #啓用驗證
> #keyFile=/usr/local/sdb/mongodb-linux-x86_64-4.0.9/access.key
journal=true #每次寫入會記錄一條操作日誌(通過journal可以重新構造出寫入的數據)。
#即使宕機,啓動時wiredtiger會先將數據恢復到最近一次的checkpoint點,然後重放後續的journal日誌來恢復。
storageEngine=wiredTiger #存儲引擎有mmapv1、wiretiger、mongorocks
bind_ip = 10.0.86.220 #這樣就可外部訪問了,例如從win10中去連虛擬機中的MongoDB
和以前的配置一樣,只是加了auth和keyFile的屬性,暫時先註釋掉
確定你集羣正常啓動的狀態,現在開始添加集羣用戶
集羣配置完成後, 仍然在主節點的mongo控制檯中添加三個用戶:數據庫管理員, 集羣管理員和訪問特定數據庫的用戶.
在一個節點執行就可以
在bin目錄下
./mongo 10.0.86.220 #進入mongo控制檯
> use admin #使用內置的admin庫
> db.createUser({user:"admin",pwd:"admin",roles:[{role:"readWriteAnyDatabase",db:"admin"},
{role:"dbAdminAnyDatabase",db:"admin"},{role:"userAdminAnyDatabase",db:"admin"}]})
> db.createUser( #創建集羣管理員
{
user:"cluster",
pwd:"cluster",
roles:[{role:"clusterAdmin",db:"admin"},{role:"clusterManager",db:"admin"},{role:"clusterMonitor",db:"admin"}]
}
)
> use testdb #切換到testdb數據庫,不用事先創建
> db.createUser( #創建特定庫的特定用戶
{
user:"test",
pwd:"test",
roles:[{role:"readWrite",db:"testdb"},{role:"dbAdmin",db:"testdb"},{role:"userAdmin",db:"testdb"}]
}
)
> use admin
> db.system.users.find() #查看創建的用戶
-
MongoDB的用戶和數據庫是綁定的, 必須指定某個用戶歸屬於哪個數據庫, 即在roles字段的每個role中指定db字段.
-
數據庫管理員通常需要具有讀寫,管理任意數據庫和管理任意用戶的role, 後續可以登錄此用戶進行數據庫和用戶的增刪改查.
-
集羣管理員通常需要具有集羣管理和集羣監控的role, 只有集羣管理員可以關閉集羣.
-
普通用戶根據用途不同可以對特定或者多個數據庫擁有各種不同的role, 本例中的test用戶既可以讀寫testdb庫, 同時也是testdb庫的管理員.
-
主節點上添加的用戶應該能夠在從節點上查詢到(需要先鍵入rs.slaveOk()命令).
開啓用戶認證
用戶添加完成後需要關閉所有節點(先關閉仲裁和從節點, 再關閉主節點, 避免主節點切換)
生成keyFile(keyFile的用途是作爲所有mongod後臺進程允許加入集羣的憑證, 所有集羣中的節點共用一個keyFile, 避免其他mongod加入集羣):
在一個節點執行
openssl rand -base64 756 > /mgrs/conf/access.key #生成keyFile, keyFile的長度必須在6-1024個字符之間
chmod 400 /mgrs/conf/access.key #keyFile文件權限爲只讀
scp /usr/local/sdb/access.key [email protected]:/usr/local/sdb #用scp將keyFile複製到其他服務器
scp/usr/local/sdb/access.key [email protected]:/usr/local/sdb
取消三個節點上的auth和keyFile的註釋:
依次啓動主節點, 從節點和仲裁節點
在配置文件中修改:
spring:
data:
mongodb:
uri: mongodb://test:[email protected]:27017,10.0.86.210:27017/testdb?replicaSet=sdb&slaveOk=true&readPreference=secondaryPreferred