前置文章:
MongoDB-基礎使用(一),該文主要介紹MongoDB概念注暗、安裝坛缕、庫/集合(表)/文檔(行)操作;
MongoDB-基礎使用(二)捆昏,該文主要介紹了MongoDB索引赚楚、基本API操作;
零骗卜、本文綱要
一宠页、MongoDB 復制(副本集)
- 角色
- 數(shù)據(jù)復制
- 副本集特點
- 創(chuàng)建副本集
- 副本集數(shù)據(jù)讀寫操作
- 副本集選舉原則
二、分片集群-Sharded Cluster
- 分片集群組成
- 分片集群架構(gòu)
- 分片集群的創(chuàng)建
三寇仓、安全認證
- 保障MongoDB安全
- MongoDB安全認證-單實例環(huán)境
- MongoDB安全認證-副本集環(huán)境
- MongoDB安全認證-分片集群環(huán)境
一举户、MongoDB 復制(副本集)
1. 角色
主要成員(Primary) / 副本成員(Replicate) / 仲裁者(Arbiter)
① 數(shù)據(jù)承載節(jié)點(主 | 從);
② 仲裁節(jié)點(可選)遍烦。
仲裁者(Arbiter):不保留任何數(shù)據(jù)的副本敛摘,只具有投票選舉作用。
當然也可以將仲裁服務器維護為副本集的一部分乳愉,即副本成員同時也可以是仲裁者兄淫。
2. 數(shù)據(jù)復制
主節(jié)點:記錄在其上的所有操作 oplog
;
從節(jié)點:定期輪詢主節(jié)點獲取這些操作蔓姚,然后對自己的數(shù)據(jù)副本執(zhí)行這些操作捕虽,從而保證從節(jié)點的數(shù)據(jù)與主節(jié)點一致。
3. 副本集特點
a坡脐、N 個節(jié)點的集群泄私;
b、任何節(jié)點可作為主節(jié)點备闲;
c晌端、所有寫入操作都在主節(jié)點上;
d恬砂、自動故障轉(zhuǎn)移咧纠;
e、自動恢復泻骤。
4. 創(chuàng)建副本集
① 創(chuàng)建主節(jié)點
Ⅰ 建立存放數(shù)據(jù)和日志的目錄
mkdir -p /mongodb/replica_sets/myrs_27017/log
mkdir -p /mongodb/replica_sets/myrs_27017/data/db
Ⅱ 新建或修改配置文件
vim /mongodb/replica_sets/myrs_27017/mongod.conf
與單機MongoDB配置文件不同的地方是新增了 replication.replSetName
屬性的配置漆羔,如下:
systemLog:
#MongoDB發(fā)送所有日志輸出的目標指定為文件
destination: file
#mongod或mongos應向其發(fā)送所有診斷日志記錄信息的日志文件的路徑
path: "/mongodb/replica_sets/myrs_27017/log/mongod.log"
#當mongos或mongod實例重新啟動時梧奢,mongos或mongod會將新條目附加到現(xiàn)有日志文件的末尾。
logAppend: true
storage:
#mongod實例存儲其數(shù)據(jù)的目錄演痒。storage.dbPath設置僅適用于mongod亲轨。
dbPath: "/mongodb/replica_sets/myrs_27017/data/db"
journal:
#啟用或禁用持久性日志以確保數(shù)據(jù)文件保持有效和可恢復。
enabled: true
processManagement:
#啟用在后臺運行mongos或mongod進程的守護進程模式鸟顺。
fork: true
#指定用于保存mongos或mongod進程的進程ID的文件位置惦蚊,其中mongos或mongod將寫入其PID
pidFilePath: "/mongodb/replica_sets/myrs_27017/log/mongod.pid"
net:
#服務實例綁定所有IP,有副作用讯嫂,副本集初始化的時候蹦锋,節(jié)點名字會自動設置為本地域名,而不是ip
#bindIpAll: true
#服務實例綁定的IP
bindIp: localhost,192.168.0.2
#bindIp
#綁定的端口
port: 27017
replication:
#副本集的名稱
replSetName: myrs
Ⅲ 啟動節(jié)點服務
bin/mongod -f replica_sets/myrs_27017/mongod.conf
② 創(chuàng)建副本節(jié)點
Ⅰ 建立存放數(shù)據(jù)和日志的目錄
mkdir -p /mongodb/replica_sets/myrs_27018/log
mkdir -p /mongodb/replica_sets/myrs_27018/data/db
Ⅱ 新建或修改配置文件
vim /mongodb/replica_sets/myrs_27018/mongod.conf
只要將對應的日志/數(shù)據(jù)存放目錄端姚,端口號修改成副本節(jié)點的即可晕粪。具體內(nèi)容此處省略吼和。
Ⅲ 啟動節(jié)點服務
bin/mongod -f replica_sets/myrs_27018/mongod.conf
③ 創(chuàng)建仲裁節(jié)點
Ⅰ 建立存放數(shù)據(jù)和日志的目錄
mkdir -p /mongodb/replica_sets/myrs_27019/log
mkdir -p /mongodb/replica_sets/myrs_27019/data/db
Ⅱ 新建或修改配置文件
vim /mongodb/replica_sets/myrs_27019/mongod.conf
只要將對應的日志/數(shù)據(jù)存放目錄滤蝠,端口號修改成副本節(jié)點的即可沸毁。具體內(nèi)容此處省略削罩。
Ⅲ 啟動節(jié)點服務
bin/mongod -f replica_sets/myrs_27019/mongod.conf
④ 初始化配置副本集和主節(jié)點
連接至主節(jié)點客戶端:
bin/mongo --host=180.76.159.126 --port=27017
初始化新的副本集:
rs.initiate()
myrs:SECONDARY> #此處鍵入 enter 即可
myrs:PRIMARY>
⑤ 查看副本集的配置內(nèi)容 & 狀態(tài)
rs.config() #查看配置內(nèi)容
rs.status() #查看狀態(tài)
⑥ 添加副本從節(jié)點 & 仲裁節(jié)點
分別是 rs.add("IP:PORT")
和 rs.addArb("IP:PORT")
# 添加副本集從節(jié)點
rs.add("180.76.159.126:27018")
# 添加副本集仲裁節(jié)點
rs.addArb("180.76.159.126:27019")
5. 副本集數(shù)據(jù)讀寫操作
① 各節(jié)點特點
Ⅰ 主節(jié)點
可讀可寫尤泽。
Ⅱ 從節(jié)點
默認未配置不可讀兴蒸,需先配置寡键,如下:
# 登錄至從節(jié)點
bin/mongo --host 180.76.159.126 --port
# 配置讀權(quán)限
rs.slaveOk()
# 也可以是 rs.slaveOk(true)
# 或者 db.getMongo().setSlaveOk()
# 取消讀權(quán)限
rs.slaveOk(false)
Ⅲ 仲裁節(jié)點
不存放業(yè)務數(shù)據(jù)讹弯,僅存放副本集配置等數(shù)據(jù)洞渤。
② SpringDataMongoDB連接副本集
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
配置文件application.yml阅嘶,如下:
spring:
#數(shù)據(jù)源配置
data:
mongodb:
# 主機地址
# host: 180.76.159.126
# 數(shù)據(jù)庫
# database: articledb
# 默認端口是27017
# port: 27017
#也可以使用uri連接
#uri: mongodb://192.168.40.134:27017/articledb
# 副本集的連接字符串
uri: mongodb://180.76.159.126:27017,180.76.159.126:27018,180.76.159.126:27019/articledb?connect=replicaSet&slaveOk=true&replicaSet=myrs
6. 副本集選舉原則
① 主節(jié)點選舉的觸發(fā)條件
a、主節(jié)點故障载迄;
b讯柔、主節(jié)點網(wǎng)絡不可達(默認心跳信息為10秒);
c护昧、人工干預(rs.stepDown(600))魂迄。
② 選舉原則
a、票數(shù)最高惋耙,且獲得"大多數(shù)"投票(N / 2 + 1)捣炬;
b、滿足一绽榛,則取操作日志 oplog
數(shù)據(jù)最新湿酸。
③ 優(yōu)先級
可以通過設置優(yōu)先級(priority)來設置獲取更多投票的可能性。
優(yōu)先級即權(quán)重灭美,取值為0-1000推溃。
從節(jié)點操作:
#先將配置導入cfg變量
cfg=rs.conf()
#然后修改值(ID號默認從0開始,從rs.conf()結(jié)果查看當前節(jié)點的"_id")
cfg.members[1].priority=2
#重新加載配置
rs.reconfig(cfg)
注意:當副本集不能滿足"大多數(shù)"的情況冲粤,將不對外提供寫服務美莫,已經(jīng)是故障狀態(tài)了页眯。
二梯捕、分片集群-Sharded Cluster
1. 分片集群組成
a厢呵、Shard:用于存儲實際的數(shù)據(jù)塊,實際生產(chǎn)環(huán)境中一個shard server角色可由幾臺機器組個一個replica set承擔傀顾,防止主機單點故障襟铭;
b、Query Routers:mongos充當查詢路由器短曾,在客戶端應用程序和分片群集之間提供接口寒砖;
c、Config Server:mongod實例嫉拐,存儲了整個 ClusterMetadata哩都,其中包括 chunk信息;
注意:從MongoDB 3.4開始婉徘,必須將Config Server配置服務器部署為副本集(CSRS)漠嵌。
2. 分片集群架構(gòu)
① 兩個分片節(jié)點副本集
a、副本集1
Primary:27018盖呼;
Secondary:27118儒鹿;
Arbiter:27218。
b几晤、副本集2
Primary:27318约炎;
Secondary:27418;
Arbiter:27518蟹瘾。
② 一個配置節(jié)點副本集
Primary:27019圾浅;
Secondary:27119;
Secondary:27219憾朴。
③ 兩個路由節(jié)點
Router1:27017狸捕;
Router2:27018。
3. 分片集群的創(chuàng)建
① 創(chuàng)建副本集
具體過程同上伊脓,配置文件略有不同府寒,增加了 sharding.clusterRole
的配置,如下:
systemLog:
#MongoDB發(fā)送所有日志輸出的目標指定為文件
destination: file
#mongod或mongos應向其發(fā)送所有診斷日志記錄信息的日志文件的路徑
path: "/mongodb/sharded_cluster/myshardrs01_27018/log/mongod.log"
#當mongos或mongod實例重新啟動時报腔,mongos或mongod會將新條目附加到現(xiàn)有日志文件的末尾株搔。
logAppend: true
storage:
#mongod實例存儲其數(shù)據(jù)的目錄。storage.dbPath設置僅適用于mongod纯蛾。
dbPath: "/mongodb/sharded_cluster/myshardrs01_27018/data/db"
journal:
#啟用或禁用持久性日志以確保數(shù)據(jù)文件保持有效和可恢復纤房。
enabled: true
processManagement:
#啟用在后臺運行mongos或mongod進程的守護進程模式。
fork: true
#指定用于保存mongos或mongod進程的進程ID的文件位置翻诉,其中mongos或mongod將寫入其PID
pidFilePath: "/mongodb/sharded_cluster/myshardrs01_27018/log/mongod.pid"
net:
#服務實例綁定所有IP炮姨,有副作用捌刮,副本集初始化的時候,節(jié)點名字會自動設置為本地域名舒岸,而不是ip
#bindIpAll: true
#服務實例綁定的IP
bindIp: localhost,192.168.0.2
#bindIp
#綁定的端口
port: 27018
replication:
#副本集的名稱
replSetName: myshardrs01
sharding:
#分片角色
clusterRole: shardsvr
② 創(chuàng)建配置節(jié)點副本集
具體過程同副本集創(chuàng)建绅作,增加了 sharding.clusterRole
的配置,如下:
systemLog:
#MongoDB發(fā)送所有日志輸出的目標指定為文件
destination: file
#mongod或mongos應向其發(fā)送所有診斷日志記錄信息的日志文件的路徑
path: "/mongodb/sharded_cluster/myconfigrs_27019/log/mongod.log"
#當mongos或mongod實例重新啟動時蛾派,mongos或mongod會將新條目附加到現(xiàn)有日志文件的末尾俄认。
logAppend: true
storage:
#mongod實例存儲其數(shù)據(jù)的目錄。storage.dbPath設置僅適用于mongod洪乍。
dbPath: "/mongodb/sharded_cluster/myconfigrs_27019/data/db"
journal:
#啟用或禁用持久性日志以確保數(shù)據(jù)文件保持有效和可恢復眯杏。
enabled: true
processManagement:
#啟用在后臺運行mongos或mongod進程的守護進程模式。
fork: true
#指定用于保存mongos或mongod進程的進程ID的文件位置壳澳,其中mongos或mongod將寫入其PID
pidFilePath: "/mongodb/sharded_cluster/myconfigrs_27019/log/mongod.pid"
net:
#服務實例綁定所有IP
#bindIpAll: true
#服務實例綁定的IP
bindIp: localhost,192.168.0.2
#綁定的端口
port: 27019
replication:
replSetName: myconfigrs
sharding:
clusterRole: configsvr
③ 創(chuàng)建路由節(jié)點
Ⅰ 準備存放數(shù)據(jù)和日志的目錄
mkdir -p /mongodb/sharded_cluster/mymongos_27017/log
Ⅱ 新建或修改配置文件
vi /mongodb/sharded_cluster/mymongos_27017/mongos.conf
mongos.conf 如下:
systemLog:
#MongoDB發(fā)送所有日志輸出的目標指定為文件
destination: file
#mongod或mongos應向其發(fā)送所有診斷日志記錄信息的日志文件的路徑
path: "/mongodb/sharded_cluster/mymongos_27017/log/mongod.log"
#當mongos或mongod實例重新啟動時岂贩,mongos或mongod會將新條目附加到現(xiàn)有日志文件的末尾。
logAppend: true
processManagement:
#啟用在后臺運行mongos或mongod進程的守護進程模式巷波。
fork: true
#指定用于保存mongos或mongod進程的進程ID的文件位置萎津,其中mongos或mongod將寫入其PID
pidFilePath: /mongodb/sharded_cluster/mymongos_27017/log/mongod.pid"
net:
#服務實例綁定所有IP,有副作用褥紫,副本集初始化的時候姜性,節(jié)點名字會自動設置為本地域名,而不是ip
#bindIpAll: true
#服務實例綁定的IP
bindIp: localhost,192.168.0.2
#bindIp
#綁定的端口
port: 27017
sharding:
#指定配置節(jié)點副本集
configDB: myconfigrs/180.76.159.126:27019,180.76.159.126:27119,180.76.159.126:27219
Ⅲ 啟動登錄mongos
#啟動
bin/mongos -f sharded_cluster/mymongos_27017/mongos.conf
#登錄
bin/mongo --host 180.76.159.126 --port 27017
Ⅳ 在路由節(jié)點上進行分片配置操作
# 添加分片
sh.addShard("myshardrs01/192.168.0.2:27018,180.76.159.126:27118,180.76.159.126:27218")
sh.addShard("myshardrs02/192.168.0.2:27318,180.76.159.126:27418,180.76.159.126:27518")
# 查看分片狀態(tài)
sh.status()
# 開啟分片功能
sh.enableSharding("db_name[.collection_name]"[,{"key": order_value}]")
sh.enableSharding("articledb")
# 集合分片
# 分片規(guī)則一:哈希策略(推薦使用)
# 使用nickname作為片鍵髓考,根據(jù)其值的哈希值進行數(shù)據(jù)分片
sh.shardCollection("articledb.comment",{"nickname":"hashed"})
# 分片規(guī)則二:范圍策略
# 使用作者年齡字段作為片鍵部念,按照年齡的值進行分片
# sh.shardCollection("articledb.author",{"age":1})
# 顯示集群的詳細信息
db.printShardingStatus()
# 查看均衡器是否工作(需要重新均衡時系統(tǒng)才會自動啟動)
sh.isBalancerRunning()
# 查看當前Balancer狀態(tài)
sh.getBalancerState()
注意:如果添加分片失敗,需要先移除氨菇,再進行添加
# 使用管理員賬戶
use admin
# 移除添加失敗的分片
db.runCommand( { removeShard: "myshardrs02" } )
注意:
a儡炼、一個集合只能指定一個片鍵,否則報錯查蓉;
b乌询、一旦對一個集合分片,分片鍵和分片值就不可改變豌研;
④ 添加第二個路由節(jié)點
注意:第二個路由節(jié)點配置好配置文件妹田,直接啟動即可使用。無需再執(zhí)行添加分片操作鹃共,其可以通過Config Server配置服務器得到對應的信息鬼佣。
⑤ SpringDataMongDB連接分片集群
application.yml如下:
spring:
#數(shù)據(jù)源配置
data:
mongodb:
# 主機地址
# host: 180.76.159.126
# 數(shù)據(jù)庫
# database: articledb
# 默認端口是27017
# port: 27017
#也可以使用uri連接
# uri: mongodb://192.168.40.134:28017/articledb
# 連接副本集字符串
# uri: mongodb://180.76.159.126:27017,180.76.159.126:27018,180.76.159.126:27019/articledb?connect=replicaSet&slaveOk=true&replicaSet=myrs
#連接路由字符串
uri: mongodb://180.76.159.126:27017,180.76.159.126:27117/articledb
三、安全認證
1. 保障MongoDB安全
a霜浴、使用新端口晶衷,默認端口為27017;
b、設置mongodb的網(wǎng)絡環(huán)境晌纫,部署至內(nèi)網(wǎng)税迷;
c、開啟安全認證锹漱;
2. MongoDB安全認證-單實例環(huán)境
① 啟用訪問控制
a箭养、實例啟動添加 --auth
;
bin/mongod -f single/mongod.conf --auth
b凌蔬、在mongod.conf配置文件中加入如下內(nèi)容:
security:
#開啟授權(quán)認證
authorization: enabled
這樣配置啟動時可以不加 --auth
露懒。
啟用訪問控制后登錄方式:
# 【方式一】 先連接再認證
bin/mongo --host 180.76.159.126 --port 27017
# 使用有權(quán)限的庫
use db_name
# 認證賬戶
db.auth("role_name","password")
# 【方式二】 連接時直接認證
bin/mongo --host 180.76.159.126 --port 27017 --authenticationDatabase db_name -u role_name -p password
② 配置角色權(quán)限
// 查詢所有角色權(quán)限(僅用戶自定義角色)
> db.runCommand({ rolesInfo: 1 })
// 查詢所有角色權(quán)限(包含內(nèi)置角色)
> db.runCommand({ rolesInfo: 1, showBuiltinRoles: true })
// 查詢當前數(shù)據(jù)庫中的某角色的權(quán)限
> db.runCommand({ rolesInfo: "<rolename>" })
// 查詢其它數(shù)據(jù)庫中指定的角色權(quán)限
> db.runCommand({ rolesInfo: { role: "<rolename>", db: "<database>" } }
// 查詢多個角色權(quán)限
> db.runCommand(
{
rolesInfo: [
"<rolename>",
{ role: "<rolename>", db: "<database>" },
...
]
}
)
Ⅰ 管理員角色相關操作
# 切換至admin庫
use admin
# 【一】 創(chuàng)建角色
# 創(chuàng)建myRoot用戶
# 系統(tǒng)的超級管理員 myRoot
db.createUser(
{
user: "myRoot",
pwd: "123456",
roles: [ { role: "root", db: "admin" } ]
}
)
# 創(chuàng)建myUserAdmin用戶
# 專門用來管理admin庫的賬號 myUserAdmin 闯冷,只用來作為用戶權(quán)限的管理
db.createUser(
{
user: "myUserAdmin",
pwd: "123456",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
# 【二】 查詢角色
# 查看已經(jīng)創(chuàng)建了的用戶的情況:
db.system.users.find()
# 【三】 刪除角色
db.dropUser("myUserAdmin")
# 【四】 修改角色密碼
db.changeUserPassword("myRoot", "56789")
# 登錄認證
use admin
db.auth("myRoot","123456")
db.auth("myRoot","56789")
Ⅱ 普通用戶角色相關操作
# 切換至對應庫
use db_name
# 創(chuàng)建普通角色
db.createUser(
{
user: "stone",
pwd: "123456",
roles: [ { role: "readWrite", db: "db_name" } ]
}
)
# 測試是否可用
db.auth("stone","123456")
角色 | 權(quán)限說明 |
---|---|
read | 可以讀取指定數(shù)據(jù)庫中任何數(shù)據(jù)砂心。 |
readWrite | 可以讀寫指定數(shù)據(jù)庫中任何數(shù)據(jù),包括創(chuàng)建蛇耀、重命名辩诞、刪除集合。 |
readAnyDatabase | 可以讀取所有數(shù)據(jù)庫中任何數(shù)據(jù)(除了數(shù)據(jù)庫config和local之外)纺涤。 |
readWriteAnyDatabase | 可以讀寫所有數(shù)據(jù)庫中任何數(shù)據(jù)(除了數(shù)據(jù)庫config和local之外)译暂。 |
userAdminAnyDatabase | 可以在指定數(shù)據(jù)庫創(chuàng)建和修改用戶(除了數(shù)據(jù)庫config和local之外)。 |
dbAdminAnyDatabase | 可以讀取任何數(shù)據(jù)庫以及對數(shù)據(jù)庫進行清理撩炊、修改外永、壓縮、 獲取統(tǒng)計信息拧咳、執(zhí)行檢查等操作(除了數(shù)據(jù)庫config和local之外)伯顶。 |
dbAdmin | 可以讀取指定數(shù)據(jù)庫以及對數(shù)據(jù)庫進行清理、修改骆膝、壓縮祭衩、 獲取統(tǒng)計信息、執(zhí)行檢查等操作阅签。 |
userAdmin | 可以在指定數(shù)據(jù)庫創(chuàng)建和修改用戶掐暮。 |
clusterAdmin | 可以對整個集群或數(shù)據(jù)庫系統(tǒng)進行管理操作。 |
backup | 備份MongoDB數(shù)據(jù)最小的權(quán)限政钟。 |
restore | 從備份文件中還原恢復MongoDB數(shù)據(jù)(除了system.profile集合)的權(quán)限路克。 |
root | 超級賬號,超級權(quán)限养交。 |
③ SpringDataMongoDB連接認證
application.yml
spring:
#數(shù)據(jù)源配置
data:
mongodb:
# 主機地址
# host: 180.76.159.126
# 數(shù)據(jù)庫
# database: articledb
# 默認端口是27017
# port: 27017
#帳號
# username: stone
#密碼
# password: 123456
#單機有認證的情況下精算,也使用字符串連接
uri: mongodb://stone:123456@180.76.159.126:27017/articledb
3. MongoDB安全認證-副本集環(huán)境
① 對副本集執(zhí)行訪問控制需要的配置
a、副本集和共享集群的各個節(jié)點成員之間使用內(nèi)部身份驗證层坠,可以使用密鑰文件或x.509證書殖妇;
b、使用客戶端連接到mongodb集群時破花,開啟訪問授權(quán)谦趣。
在keyfile身份驗證中疲吸,副本集中的每個mongod實例都使用keyfile的內(nèi)容作為共享密碼,只有具有正確密鑰文件的mongod或者mongos實例可以連接到副本集前鹅。
密鑰文件的內(nèi)容必須在6到1024個字符之間摘悴,并且在unix/linux系統(tǒng)中文件所有者必須有對文件至少有讀的權(quán)限。
② 通過主節(jié)點添加一個管理員帳號
# 切換至admin庫
use admin
# 【一】 創(chuàng)建角色
# 創(chuàng)建myRoot用戶
# 系統(tǒng)的超級管理員 myRoot
db.createUser(
{
user: "myRoot",
pwd: "123456",
roles: [ { role: "root", db: "admin" } ]
}
)
③ 創(chuàng)建副本集認證的key文件
[root@bobohost ~]# openssl rand -base64 90 -out ./mongo.keyfile
[root@bobohost ~]# chmod 400 ./mongo.keyfile
[root@bobohost ~]# ll mongo.keyfile
注意:所有副本集節(jié)點都必須要用同一份keyfile舰绘,一般是在一臺機器上生成蹂喻,然后拷貝到其他機器上。且必須有讀的權(quán)限捂寿,否則將來會報錯口四。
④ 修改配置文件指定keyfile
副本集的各個配置文件都需要修改,添加如下內(nèi)容:
# /mongodb/replica_sets/myrs_27017/mongod.conf
security:
#KeyFile鑒權(quán)文件
keyFile: /mongodb/replica_sets/myrs_27017/mongo.keyfile
#開啟認證方式運行
authorization: enabled
⑤ 啟動副本集在主節(jié)點上添加普通賬號
#先用管理員賬號登錄
#切換到admin庫
use admin
#管理員賬號認證
db.auth("myRoot","123456")
#切換到要認證的庫
use articledb
#添加普通用戶
db.createUser(
{
user: "stone",
pwd: "123456",
roles: [ { role: "readWrite" } ]
}
)
⑥ SpringDataMongoDB連接副本集
application.yml如下配置:
spring:
#數(shù)據(jù)源配置
data:
mongodb:
#副本集有認證的情況下秦陋,字符串連接
uri: mongodb://bobo:123456@180.76.159.126:27017,180.76.159.126:27018,180.76.159.126:27019/articledb?connect=replicaSet&slaveOk=true&replicaSet=myrs
4. MongoDB安全認證-分片集群環(huán)境
① 創(chuàng)建副本集認證的key文件
[root@bobohost ~]# openssl rand -base64 90 -out ./mongo.keyfile
[root@bobohost ~]# chmod 400 ./mongo.keyfile
[root@bobohost ~]# ll mongo.keyfile
將該文件分別拷貝到多個目錄中:
echo '/mongodb/sharded_cluster/myshardrs01_27018/mongo.keyfile
/mongodb/sharded_cluster/myshardrs01_27118/mongo.keyfile
/mongodb/sharded_cluster/myshardrs01_27218/mongo.keyfile
/mongodb/sharded_cluster/myshardrs02_27318/mongo.keyfile
/mongodb/sharded_cluster/myshardrs02_27418/mongo.keyfile
/mongodb/sharded_cluster/myshardrs02_27518/mongo.keyfile
/mongodb/sharded_cluster/myconfigrs_27019/mongo.keyfile
/mongodb/sharded_cluster/myconfigrs_27119/mongo.keyfile
/mongodb/sharded_cluster/myconfigrs_27219/mongo.keyfile
/mongodb/sharded_cluster/mymongos_27017/mongo.keyfile
/mongodb/sharded_cluster/mymongos_27117/mongo.keyfile' | xargs -n 1 cp -v /root/mongo.keyfile
echo指令將前面的參數(shù)傳遞到后面指令蔓彩,-n 1
每次傳遞一個參數(shù)值。
拼湊成:cp -v /root/mongo.keyfile /mongodb/sharded_cluster/myshardrs01_27018/mongo.keyfile
驳概。
② 修改配置文件指定keyfile
/mongodb/sharded_cluster/myshardrs01_27018/mongod.conf
security:
#KeyFile鑒權(quán)文件
keyFile: /mongodb/sharded_cluster/myshardrs01_27018/mongo.keyfile
#開啟認證方式運行
authorization: enabled
此處注意mongos的配置稍有不同赤嚼,如下:
security:
#KeyFile鑒權(quán)文件
keyFile: /mongodb/sharded_cluster/mymongos_27017/mongo.keyfile
③ 創(chuàng)建帳號和認證
# 通過localhost登錄任意一個mongos路由
[root@bobohost db]# /usr/local/mongodb/bin/mongo --port 27017
# 使用admin庫
use admin
# 創(chuàng)建一個管理員帳號
db.createUser(
{
user: "myRoot",
pwd: "123456",
roles: [ { role: "root", db: "admin" } ]
}
)
# 使用admin庫
use admin
# 認證管理賬戶
db.auth("myRoot","123456")
# 使用要授權(quán)用戶使用的庫
use db_name
# 創(chuàng)建一個普通權(quán)限帳號
db.createUser(
{
user: "stone",
pwd: "123456",
roles: [ { role: "readWrite" } ]
}
)
# 認證普通用戶
db.auth("stone","123456")
④ SpringDataMongoDB連接認證
'username:password@hostname/dbname' 格式,application.yml配置文件如下:
spring:
#數(shù)據(jù)源配置
data:
mongodb:
# 分片集群有認證的情況下顺又,字符串連接
uri: mongodb://bobo:123456@180.76.159.126:27017,180.76.159.126:27117/articledb
四更卒、結(jié)尾
以上即為MongoDB-基礎使用(三)的全部內(nèi)容,感謝閱讀稚照。