mongodb带认证的副本集搭建
Mongodb副本集帶用戶認證的
概述
本次實驗是在一臺虛擬機上做的,正式環境一定要分開實現,以免影響服務的正常使用和性能。
準備工作:
操作系統:centos7.2
Mongodb版本:3.4.1
服務器ip:192.168.1.11
Mongodb服務端口: 27017、27018、27019
?
1、???? 首先將下載好的mongodb的安裝包上傳到服務器上
?? mongodb-linux-x86_64-rhel70-3.4.1.tgz
?
2、???? 創建所用到的目錄
??? # mkdir /data/{master,slave,arbiter}
??? # mkdir /data/log/mongodb/{master,slave,arbiter} -p
?
3、???? 將剛上傳的mogodb的安裝包解壓到/data目錄并重命名為mongodb
# tar xf mongodb-linux-x86_64-rhel70-3.4.1.tgz
# mv mongodb-linux-x86_64-rhel70-3.4.1?? mongodb
?
4、???? 分別在/data的相應目錄下創建master、slave、arbiter的配置文件
# cat? master.conf
?systemLog:
? destination: file
? logAppend: true
? path: /data/log/mongodb/master/mongodb.log
storage:
? dbPath: /data/master
? journal:
??? enabled: true
processManagement:
? fork: true? # fork and run in background
? pidFilePath: /var/run/mongod.pid
net:
? port: 27017
?# bindIp: 0.0.0.0? # Listen to local interface only, comment to listen on all interfaces.
replication:
?? replSetName: rs1
?? oplogSizeMB: 5000
security:
?keyFile: "/data/mongodb.key"
?clusterAuthMode: "keyFile"
?authorization: "enabled"
# cat? slave.conf
systemLog:
? destination: file
? logAppend: true
? path: /data/log/mongodb/slave/mongodb.log
storage:
? dbPath: /data/slave
? journal:
??? enabled: true
processManagement:
? fork: true? # fork and run in background
? pidFilePath: /var/run/mongod.pid
net:
? port: 27018
?# bindIp: 0.0.0.0? # Listen to local interface only, comment to listen on all interfaces.
replication:
? replSetName: rs1
? oplogSizeMB: 5000
security:
? keyFile: "/data/mongodb.key"
? clusterAuthMode: "keyFile"
? authorization: "enabled"
?
# cat? arbiter.conf
systemLog:
? destination: file
? logAppend: true
? path: /data/log/mongodb/arbiter/mongodb.log
storage:
? dbPath: /data/arbiter
? journal:
??? enabled: true
processManagement:
? fork: true? # fork and run in background
? pidFilePath: /var/run/mongod.pid
net:
? port: 27019
?# bindIp: 0.0.0.0? # Listen to local interface only, comment to listen on all interfaces.
replication:
? replSetName: rs1
? oplogSizeMB: 5000
security:
? keyFile: "/data/mongodb.key"
? clusterAuthMode: "keyFile"
? authorization: "enabled"
?
5、???? 由于需要認證,使用keyFile進行授權連接replica sets
創建mongodb.key
# openssl rand -base64 666 > mongodb.key # chmod 600 mongodb.keyMongodb.key里面密碼的長度不能超過1024,否則會報錯。
?
將生成的mongodb.key文件分別拷貝到其他服務器上。
?
6、???? 啟動服務
??? 啟動服務沒有先后順序
??? # mongod -f /data/arbiter/arbiter.conf
# mongod -f /data/master/master.conf
# mongod -f /data/slave/slave.conf
?
7、???? 配置主,備,仲裁節點
?? 連接任意一個節點,這里以2017端口為例:
?? # mongo 192.168.1.11:27017
?? >use admin
?? >cfg={_id:"rs1",members:[{_id:0,host:'192.168.1.11:27017',priority:2},{_id:1,host:'192.168.1.11:27018',priority:1},{_id:2,host:'192.168.1.11:27019',arbiterOnly:true}]};
?? > rs.initiate(cfg)????????? #使配置生效
?
# cfg是可以任意的名字,當然最好不要是mongodb的關鍵字,conf,config都可以。最外層的_id表示replica set的名字,members里包含的是所有節點的地址以及優先級。優先級最高的即成為主節點,即這里的'192.168.1.11:27017'。特別注意的是,對于仲裁節點,需要有個特別的配置——arbiterOnly:true。這個千萬不能少了,不然主備模式就不能生效。
上面的命令執行成功會返回1.
?
8、???? 接下來是在主上進行一系列的操作,創建用戶。Mongo默認沒有管理用戶。
# mongo 192.168.1.11:27017
>use admin
>db.createUser({user:"hqmg",pwd:"huoqiu123",roles:[{role:"userAdminAnyDatabase",db:"admin"},{role:"clusterAdmin",db:"admin"}]});
?
額,報錯了。原因是沒有執行認證操作。
>db.auth("hqmg","huoqiu123")
這下好了,可以放心的執行操作了
>show dbs
admin?? 0.000GB
local?? 0.000GB
?????
9、???? 創建數據庫并創建用戶,為用戶賦予不同的權限,常用的兩種:
read: 只讀權限; readWrite:讀寫權限
- 數據庫用戶角色:read、readWrite;
- 數據庫管理角色:dbAdmin、dbOwner、userAdmin;
- 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
- 備份恢復角色:backup、restore;
- 所有數據庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
- 超級用戶角色:root // 這里還有幾個角色間接或直接提供了系統超級用戶的訪問(dbOwner 、userAdmin、userAdminAnyDatabase)
- 內部角色:__system
Read:允許用戶讀取指定數據庫
readWrite:允許用戶讀寫指定數據庫
dbAdmin:允許用戶在指定數據庫中執行管理函數,如索引創建、刪除,查看統計或訪問system.profile
userAdmin:允許用戶向system.users集合寫入,可以找指定數據庫里創建、刪除和管理用戶
clusterAdmin:只在admin數據庫中可用,賦予用戶所有分片和復制集相關函數的管理權限。
readAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀權限
readWriteAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的讀寫權限
userAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的userAdmin權限
dbAdminAnyDatabase:只在admin數據庫中可用,賦予用戶所有數據庫的dbAdmin權限。
root:只在admin數據庫中可用。超級賬號,超級權限
用戶和授權認證是跟隨數據庫的,在那個庫里面創建的用戶,就要在那里授權認證。
!創建一個測試庫,并分別創建只讀、讀寫的用戶。
?????? 如果是新的庫,要先登陸admin庫,進行認證后才可以操作
?????? # mongo? 192.168.1.11:27017 –uhqmg ?-phuoqiu123
?????? >use saturn
?????? 創建讀寫用戶:
?????? >db.createUser({user:"cuishuai",pwd:"cuishuai123",roles:[{role:"readWrite",db:"saturn"}]})
???????
??????? 創建只讀用戶:
?????? >db.createUser({user:"azui",pwd:"azui123",roles:[{role:"read",db:"saturn"}]})
?
10、?? 修改用戶權限
有兩種方式,一種是db.grantRolesToUser在原有基礎上追加,一種是db.updateUser替換原有的角色。
1)>db.grantRolesToUser("azui",[{role:"readWrite",db:"saturn"}])
2) >db.updateUser("azui",{roles:[{role:"readWrite",db:"saturn"}]})
11、?? 刪除用戶權限
>db.revokeRolesFromUser("azui",[{role:"readWrite",db:"saturn"}])
?
12、oplog讀權限
????
Oplog是一種特殊的Capped collections,特殊之處在于它是系統級Collection,記錄了數據庫的所有操作,集群之間依靠Oplog進行數據同步。Oplog的全名是local.oplog.rs,位于local數據下。由于local數據不允許創建用戶,如果要訪問Oplog需要借助其它數據庫的用戶,并且賦予該用戶訪問local數據庫的權限:
?
1)修改現有用戶,使其具有oplog的讀權限:
> db.grantRolesToUser("azui",[{role:"read",db:"local"}])
?
2)創建新用戶:
>db.creatUser({user:"azui",pwd:"azui123",roles:[{role:"read",db:"saturn"},{role:"read",db:"local"}]})
})
3)查詢過程:
>use? saturn
>db.auth('azui','azui123')
>use local
>db.oplog.rs.find()
?
13、?? 接下來還有重要的一步,日志分割,使用的是logrotate做的。
# cat /etc/logrotate.d/mongodb
/data/log/mongodb/arbiter/mongodb.log{
???????????? daily
???????????? dateext
???????????? compress
???????????? delaycompress
???????????? copytruncate
???????????? create 0644 root root
???????????? rotate 5
???????????? size 500M
}
/data/log/mongodb/master/mongodb.log{
???????????? daily
???????????? dateext
???????????? compress
???????????? delaycompress
???????????? copytruncate
???????????? create 0644 root root
???????????? rotate 5
???????????? size 500M
}
/data/log/mongodb/slave/mongodb.log{
???????????? daily
???????????? dateext
???????????? compress
???????????? delaycompress
???????????? copytruncate
???????????? create 0644 root root
???????????? rotate 5
???????????? size 500M
}
?
添加周期計劃任務:
# crontab –e
0 */3 * * *? /usr/sbin/logrotate? /etc/logrotate.d/mongodb 2>&1 >>/dev/null
?
14、?? 編寫刪除腳本
# cat rmlog.sh
#!/bin/bash
dir1=/data/log/mongodb/arbiter
dir2=/data/log/mongodb/master
dir3=/data/log/mongodb/slave
find $dir1 -mtime +7 -name "*2017*" -exec rm -rf {} \;
find $dir2 -mtime +7 -name "*2017*" -exec rm -rf {} \;
find $dir3 -mtime +7 -name "*2017*" -exec rm -rf {} \;
# chmod +x rmlog.sh
添加周期計劃任務:
# crontab –e
??? 0 */3 * * * /root/cuishuai/rmlog.sh? 2>&1 >>/dev/null
轉載于:https://www.cnblogs.com/cuishuai/p/7193349.html
總結
以上是生活随笔為你收集整理的mongodb带认证的副本集搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cf831D(dp)
- 下一篇: Windows 2012 下Redmin