MongoDB-基礎使用(三)

前置文章:
MongoDB-基礎使用(一),該文主要介紹MongoDB概念注暗、安裝坛缕、庫/集合(表)/文檔(行)操作;
MongoDB-基礎使用(二)捆昏,該文主要介紹了MongoDB索引赚楚、基本API操作;

零骗卜、本文綱要

一宠页、MongoDB 復制(副本集)

  1. 角色
  2. 數(shù)據(jù)復制
  3. 副本集特點
  4. 創(chuàng)建副本集
  5. 副本集數(shù)據(jù)讀寫操作
  6. 副本集選舉原則

二、分片集群-Sharded Cluster

  1. 分片集群組成
  2. 分片集群架構(gòu)
  3. 分片集群的創(chuàng)建

三寇仓、安全認證

  1. 保障MongoDB安全
  2. MongoDB安全認證-單實例環(huán)境
  3. MongoDB安全認證-副本集環(huán)境
  4. 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)容,感謝閱讀稚照。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蹂空,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子锐锣,更是在濱河造成了極大的恐慌腌闯,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雕憔,死亡現(xiàn)場離奇詭異姿骏,居然都是意外死亡,警方通過查閱死者的電腦和手機斤彼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門分瘦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人琉苇,你說我怎么就攤上這事嘲玫。” “怎么了并扇?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵去团,是天一觀的道長。 經(jīng)常有香客問我,道長土陪,這世上最難降的妖魔是什么昼汗? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮鬼雀,結(jié)果婚禮上顷窒,老公的妹妹穿的比我還像新娘。我一直安慰自己源哩,他們只是感情好鞋吉,可當我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著励烦,像睡著了一般谓着。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上崩侠,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天漆魔,我揣著相機與錄音,去河邊找鬼却音。 笑死,一個胖子當著我的面吹牛矢炼,可吹牛的內(nèi)容都是我干的系瓢。 我是一名探鬼主播,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼句灌,長吁一口氣:“原來是場噩夢啊……” “哼夷陋!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起胰锌,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤骗绕,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后资昧,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酬土,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年格带,在試婚紗的時候發(fā)現(xiàn)自己被綠了撤缴。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡叽唱,死狀恐怖屈呕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情棺亭,我是刑警寧澤虎眨,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響嗽桩,放射性物質(zhì)發(fā)生泄漏钟鸵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一涤躲、第九天 我趴在偏房一處隱蔽的房頂上張望棺耍。 院中可真熱鬧,春花似錦种樱、人聲如沸蒙袍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽害幅。三九已至,卻和暖如春岂昭,著一層夾襖步出監(jiān)牢的瞬間以现,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工约啊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留邑遏,地道東北人。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓恰矩,卻偏偏與公主長得像记盒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子外傅,可洞房花燭夜當晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1 MongoDB 特點 面向集合存儲:MongoDB 是面向集合的纪吮,數(shù)據(jù)以 collection 分組存儲。每個...
    羽墨_99e8閱讀 612評論 0 0
  • MySQL體系結(jié)構(gòu) 庫:database 表:table 列:column 行:row MongoDB體系結(jié)構(gòu) 庫...
    我要笑閱讀 331評論 0 1
  • 概述 MongoDB 是一個跨平臺的萎胰,以 JSON 為數(shù)據(jù)模型的文檔數(shù)據(jù)庫,是當前 NoSQL 數(shù)據(jù)庫產(chǎn)品中最熱門...
    吾等斬去紅塵時閱讀 2,136評論 0 0
  • 第1章 關系型與非關系型 第2章 mongo和mysql數(shù)據(jù)對比 第3章 MongoDB特點 第4章 mongo應...
    被運維耽誤的廚子閱讀 1,348評論 0 3
  • 默認情況下技竟,MongoDB實例啟動運行時是沒有啟用用戶訪問權(quán)限控制的冰肴,也就是說,在實例本機服務器上都可以隨意連接到...
    dev_winner閱讀 427評論 0 0