最近在部署MongoDB Replica Set,馬上就到生產環境了,一想還沒有給數據庫設置用戶權限,配置的這一路踩了好多坑,希望對大家有幫助
1. 配置好mongodb replica set 安裝及三結點配置:
#下載地址: https://www.mongodb.com/download-center?jmp=nav#community 下載後直接解壓,安裝rpm包 啓動命令: mongod -f /home/root/mongoconf/mongodb_master.conf
#master.conf
dbpath=/home/root/mongodata/master
logpath=/home/root/mongolog/master.log
pidfilepath=/opt/mongodb/master.pid
#keyFile=/opt/mongodb/mongodb.key
directoryperdb=true
logappend=true
replSet=bbt
bind_ip= <ip>
port=27017
#auth=true
oplogSize=100
fork=true
noprealloc=true
#maxConns=4000
#arbiter.conf 仲裁配置 和主機在一個服務器
dbpath=/home/root/mongodata/arbiter
logpath=/home/root/mongolog/arbiter.log
pidfilepath=/opt/mongodb/arbiter.pid
#keyFile=/opt/mongodb/mongodb.key
directoryperdb=true
logappend=true
replSet=bbt
bind_ip=<ip>
port=27019
#auth=true
oplogSize=100
fork=true
noprealloc=true
#maxConns=4000
#slave.conf
dbpath=/home/root/mongodata/slave
logpath=/home/root/mongolog/slave.log
pidfilepath=/opt/mongodb/slave.pid
#keyFile=/opt/mongodb/mongodb.key
directoryperdb=true
logappend=true
replSet=testdb
bind_ip=<ip2>
port=27017
#auth=true
oplogSize=100
fork=true
noprealloc=true
#maxConns=4000
啓動後可任意找一個結點登錄:
mongo 172.31.138.31:27017
執行以下命令配置集羣:
cfg={ _id:"bbt", members:[ {_id:0,host:'172.31.138.31:27017',priority:2}, {_id:1,host:'172.31.138.30:27017',priority:1}, {_id:2,host:'172.31.138.31:27019',arbiterOnly:true}] };
rs.initiate(cfg)
rs.status() #查看集羣狀態
2.開始配置用戶權限前的準備
由於前面配置好後所有結點的MongoDB服務都啓動了,所以第二步先service mongod stop(所有結點都要停止服務) 注:這個命令不一定有效
此步驟可用
mongod -f /home/root/mongoconf/mongodb_master.conf --shutdown
3. 啓動其中一臺mongod服務, 正常啓動,不要開啓認證功能(#auth=true不要打開),並執行下面語句
1 use admin 2 #創建用戶管理權限 3 db.createUser( 4 { user: "admin", 5 pwd: "admin", 6 roles: [{ role: "userAdminAnyDatabase", db: "admin" }] 7 } 8 9 10 use test 11 #創建用戶操作權限(創建幾個都可以) 12 db.createUser({ user: "userrwadmin", pwd: "userrw@hswj0424", roles: [{ role: "readWrite", db: "bbt" }]}) 13 db.createUser({ user: "userradmin", pwd: "userr@hswj0424", roles: [{ role: "read", db: "bbt" }]})
4. 先在一臺機器上產生mongodb keyfile
openssl rand -base64 741 > /home/root/mongodb-keyfile
chmod 600 /home/root/mongodb-keyfile
5.將mongodb-keyfile文件拷貝到各個節點上 並且賦予權限 (沒有賦予權限的話mongo服務器不能啓動)
6. 修改mongo.conf
keyFile=/home/root/mongodb-keyfile
auth = true
7.重啓所有結點的mongod服務就ok了
8。操作驗證
這兩個是兩臺認證的user 和 pwd use admin db.auth('bbtadmin','mongo@hswj0424') use bbt db.auth('userrwadmin','userrw@hswj0424')
也可以可以使用mongo 172.31.138.31:27017 -u ‘userrwadmin’ -p ‘userrw@hswj0424’ --authenticationDatabase ‘bbt’ 去查看集合的內容
否則會報錯——“too many users are authenticated”
9.總結
1. 給admin庫添加用戶名和密碼時,只需要在一個結點上操作,只要配置好了replica set, 用戶名和密碼會同步到其他結點.
2. 關於用戶名密碼認證和結點之間認證.
前者是對於mongodb client而言,處於對每個庫的安全考慮,client端想操作數據庫,必須先用用戶名和密碼登錄,即配置文件中的auth=true;
而對於節點之間的認證,其實跟前面用戶名密碼認證是分離的,是讓各結點之間有一個key來保持通信,即數據的同步等,是對整個集羣成員的安全進行考慮,避免其他用戶給集羣胡亂添加成員.即配置文件中的keyFile;