mongodb分片概念和原理-實(shí)戰(zhàn)分片集群-創(chuàng)新互聯(lián)

一、分片

創(chuàng)新互聯(lián)公司主要從事網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)浦城,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220

分片是一種跨多臺(tái)機(jī)器分發(fā)數(shù)據(jù)的方法。MongoDB使用分片來支持具有非常大的數(shù)據(jù)集和高吞吐量操作的部署。

問題:

具有大型數(shù)據(jù)集或高吞吐量應(yīng)用程序的數(shù)據(jù)庫系統(tǒng)可能會(huì)挑戰(zhàn)單個(gè)服務(wù)器的容量。例如,高查詢率會(huì)耗盡服務(wù)器的CPU容量。工作集大小大于系統(tǒng)的RAM會(huì)強(qiáng)調(diào)磁盤驅(qū)動(dòng)器的I / O容量。

解決系統(tǒng)增長的方法有兩種:垂直和水平縮放。

垂直擴(kuò)展涉及增加單個(gè)服務(wù)器的容量,例如使用更強(qiáng)大的CPU,添加更多RAM或增加存儲(chǔ)空間量??捎眉夹g(shù)的局限性可能會(huì)限制單個(gè)機(jī)器對于給定工作負(fù)載而言足夠強(qiáng)大。此外,基于云的提供商基于可用的硬件配置具有硬性上限。結(jié)果,垂直縮放有實(shí)際的大值。

水平擴(kuò)展涉及劃分系統(tǒng)數(shù)據(jù)集并加載多個(gè)服務(wù)器,添加其他服務(wù)器以根據(jù)需要增加容量。雖然單個(gè)機(jī)器的總體速度或容量可能不高,但每臺(tái)機(jī)器處理整個(gè)工作負(fù)載的子集,可能提供比單個(gè)高速大容量服務(wù)器更高的效率。擴(kuò)展部署容量只需要根據(jù)需要添加額外的服務(wù)器,這可能比單個(gè)機(jī)器的高端硬件的總體成本更低。權(quán)衡是基礎(chǔ)架構(gòu)和部署維護(hù)的復(fù)雜性增加。

MongoDB支持通過分片進(jìn)行水平擴(kuò)展

二、分片集群概述

MongoDB分片群集包含以下組件:

分片:是一個(gè)獨(dú)立普通的mongod進(jìn)程,保存數(shù)據(jù)信息??梢允且粋€(gè)副本集也可以是單獨(dú)的一臺(tái)服務(wù)器。

mongos:起到一個(gè)路由的功能,供程序連接。本身不保存數(shù)據(jù),在啟動(dòng)時(shí)從配置服務(wù)器加載集群信息,開啟mongos進(jìn)程需要知道配置服務(wù)器的地址,指定configdb選項(xiàng)。

配置服務(wù)器:是一個(gè)獨(dú)立的mongod進(jìn)程,保存集群和分片的元數(shù)據(jù),即各分片包含了哪些數(shù)據(jù)的信息。最先開始建立,啟用日志功能。像啟動(dòng)普通的mongod一樣啟動(dòng)配置服務(wù)器,指定configsvr選項(xiàng)。不需要太多的空間和資源,配置服務(wù)器的1KB空間相當(dāng)于真是數(shù)據(jù)的200MB。保存的只是數(shù)據(jù)的分布表。當(dāng)服務(wù)不可用,則變成只讀,無法分塊、遷移數(shù)據(jù)。

交互圖如下:

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

MongoDB在集合級別對數(shù)據(jù)進(jìn)行分片,將集合數(shù)據(jù)分布在集群中的分片上。

1、鎖片鍵

為了在集合中分發(fā)文檔,MongoDB 使用分片鍵對集合進(jìn)行分區(qū)。分片鍵 由目標(biāo)集合中每個(gè)文檔中存在的不可變字段組成。

在分片集合時(shí)選擇分片鍵。分片后無法更改分片鍵的選擇。分片集合只能有一個(gè)分片 鍵。要對非空集合進(jìn)行分片,集合必須具有 以分片鍵開頭的索引。對于空集合,如果集合尚未具有指定分片鍵的適當(dāng)索引,MongoDB將創(chuàng)建索引。

分片鍵的選擇會(huì)影響分片群集的性能,效率和可伸縮性。具有最佳硬件和基礎(chǔ)結(jié)構(gòu)的群集可能會(huì)因選擇分片鍵而受到瓶頸。選擇分片鍵及其支持索引也會(huì)影響群集可以使用的分片策略。

2、大塊

MongoDB將分片數(shù)據(jù)劃分為塊。每個(gè)塊都具有基于分片鍵的包含較低且獨(dú)占的較高范圍 。

3、平衡器和偶數(shù)塊分配

為了在群集中的所有分片上實(shí)現(xiàn)塊的均勻分布,平衡器在后臺(tái)運(yùn)行以跨分片遷移塊。

4、Sharding的優(yōu)點(diǎn)

(1)讀寫

MongoDB的分布在整個(gè)的讀寫工作量 碎片將在分片集群,使每個(gè)碎片來處理群集操作的一個(gè)子集。通過添加更多分片,可以在群集中水平擴(kuò)展讀取和寫入工作負(fù)載。

對于包含分片鍵或復(fù)合分片鍵前綴mongos的查詢,可以在特定分片或分片集上定位查詢。這些目標(biāo)操作通常比向群集中的每個(gè)分片廣播更有效 。

(2)存儲(chǔ)容量

拆分分配整個(gè)數(shù)據(jù)碎片集群中,允許每個(gè)碎片以包含總簇?cái)?shù)據(jù)的子集。隨著數(shù)據(jù)集的增長,額外的分片會(huì)增加群集的存儲(chǔ)容量。

(3)高可用性

分片簇可以繼續(xù)執(zhí)行,即使一個(gè)或多個(gè)碎片是不可用的部分讀/寫操作。雖然在停機(jī)期間無法訪問不可用分片上的數(shù)據(jù)子集,但是針對可用分片的讀取或?qū)懭肴匀豢梢猿晒Α?/p>

備注:

(1)從MongoDB 3.2開始,您可以將配置服務(wù)器部署為副本集。只要大多數(shù)副本集可用,具有配置服務(wù)器副本集(CSRS)的分片群集就可以繼續(xù)處理讀取和寫入。

(2)在3.4版本中,MongoDB 刪除了對SCCC配置服務(wù)器的支持。

(3)在生產(chǎn)環(huán)境中,應(yīng)將各個(gè)分片部署為 副本集,從而提供更高的冗余和可用性。

5、分片集群注意事項(xiàng)

(1)分片集群基礎(chǔ)架構(gòu)要求和復(fù)雜性需要仔細(xì)規(guī)劃,執(zhí)行和維護(hù)。

(2)選擇分片密鑰時(shí)需要認(rèn)真考慮,以確保集群性能和效率。分片后不能更改分片鍵,也不能取消分片分片。

(3)Sharding具有一定的操作要求和限制。

(4)如果查詢不包括分片鍵或復(fù)合分片鍵的前綴 ,則mongos執(zhí)行廣播操作,查詢分 片群集中的所有分片。這些分散/收集查詢可以是長時(shí)間運(yùn)行的操作。

6、分片策略

MongoDB支持兩種分片策略,用于跨分片群集分發(fā)數(shù)據(jù)。

(1)散列分片

散列分片涉及計(jì)算分片鍵字段值的散列。然后,基于散列的分片鍵值為每個(gè)塊分配一個(gè)范圍。

(2)遠(yuǎn)程分片

遠(yuǎn)程分片涉及基于分片鍵值將數(shù)據(jù)劃分為范圍。然后根據(jù)分片鍵值為每個(gè)塊分配一個(gè)范圍

7、 MongoDB Sharding Cluster角色

(1) Shard Server

即存儲(chǔ)實(shí)際數(shù)據(jù)的分片每個(gè)Shard 可以是一個(gè)mongod 實(shí)例也可以是一組mongod 實(shí)例

構(gòu)成的Replica Set。為了實(shí)現(xiàn)每個(gè)Shard 內(nèi)部的auto-failoverMongoDB 官方建議每個(gè)Shard

為一組Replica Set。

(2)Config Server

為了將一個(gè)特定的collection 存儲(chǔ)在多個(gè)shard 中需要為該collection 指定一個(gè)shard key

例如{age: 1} shard key 可以決定該條記錄屬于哪個(gè)chunk。Config Servers 就是用來存儲(chǔ)

所有shard 節(jié)點(diǎn)的配置信息、每個(gè)chunk 的shard key 范圍、chunk 在各shard 的分布情況、

該集群中所有DB 和collection 的sharding 配置信息。

(3)Route Process

這是一個(gè)前端路由客戶端由此接入然后詢問Config Servers 需要到哪個(gè)Shard 上查詢或

保存記錄再連接相應(yīng)的Shard 進(jìn)行操作最后將結(jié)果返回給客戶端??蛻舳酥恍枰獙⒃?/p>

發(fā)給mongod 的查詢或更新請求原封不動(dòng)地發(fā)給Routing Process而不必關(guān)心所操作的記錄

存儲(chǔ)在哪個(gè)Shard 上。

三、分配集群搭建

1、環(huán)境準(zhǔn)備

(1)、數(shù)據(jù)庫環(huán)境

主機(jī)名

數(shù)據(jù)庫IP地址

數(shù)據(jù)庫版本

用途

系統(tǒng)

SQL_mongdb

172.169.18.128

mongodb4.0.3

配置3,路由1,分片2

cenots7.4

node01

172.169.18.162

mongodb4.0.3

路由1,分片2

centos7.4

node01

172.169.18.180

mongodb4.0.3

分片2

centos7.4

(2)暫時(shí)關(guān)閉防火墻和seliunx,測試完畢再開啟安全規(guī)則

(3)yum安裝mongdb4.0版本(省略)

同樣的,在node01和node02上安裝服務(wù)

在部署之前先明白片鍵的意義,一個(gè)好的片鍵對分片至關(guān)重要。片鍵必須是一個(gè)索引,數(shù)據(jù)根據(jù)這個(gè)片鍵進(jìn)行拆分分散。通過sh.shardCollection加會(huì)自動(dòng)創(chuàng)建索引。一個(gè)自增的片鍵對寫入和數(shù)據(jù)均勻分布就不是很好,因?yàn)樽栽龅钠I總會(huì)在一個(gè)分片上寫入,后續(xù)達(dá)到某個(gè)閥值可能會(huì)寫到別的分片。但是按照片鍵查詢會(huì)非常高效。隨機(jī)片鍵對數(shù)據(jù)的均勻分布效果很好。注意盡量避免在多個(gè)分片上進(jìn)行查詢。在所有分片上查詢,mongos會(huì)對結(jié)果進(jìn)行歸并排序。

(4)

框架圖

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

2、配置服務(wù)器的啟動(dòng)。(SQL_mongdb上開啟3個(gè),Port:21000、22000、2300)

備注:配置服務(wù)器必須開啟1個(gè)或則3個(gè),開啟2個(gè)則會(huì)報(bào)錯(cuò):

(1)創(chuàng)建目錄

[root@SQL_mongdb /]# mkdir -p /opt/mongodb/date1

[root@SQL_mongdb /]# mkdir -p /opt/mongodb/date2

[root@SQL_mongdb /]# mkdir -p /opt/mongodb/date3

(2)新建配置文件

[root@SQL_mongdb ~]# cat /etc/mongodb_21000.conf

#數(shù)據(jù)目錄

dbpath=/opt/mongodb/date1/

#日志文件

logpath=/opt/mongodb/mongodb_21000.log

#日志追加

logappend=true

#端口

port = 21000

#大連接數(shù)

maxConns = 50

pidfilepath = /opt/mongodb/mongo_21000.pid

#日志,redo log

journal = true

#刷寫提交機(jī)制

journalCommitInterval = 200

#守護(hù)進(jìn)程模式

fork = true

#刷寫數(shù)據(jù)到日志的頻率

syncdelay = 60

#storageEngine = wiredTiger

#操作日志,單位M

oplogSize = 1000

#命名空間的文件大小,默認(rèn)16M,大2G。

nssize = 16

noauth = true

unixSocketPrefix = /tmp

configsvr = true

replSet=jiangjj

bind_ip = 172.169.18.128

[root@SQL_mongdb ~]# cat /etc/mongodb_22000.conf

#數(shù)據(jù)目錄

dbpath= /opt/mongodb/date2/

#日志文件

logpath= /opt/mongodb/mongodb_22000.log

#日志追加

logappend=true

#端口

port = 22000

#大連接數(shù)

maxConns = 50

pidfilepath = /opt/mongodb/mongo_22000.pid

#日志,redo log

journal = true

#刷寫提交機(jī)制

journalCommitInterval = 200

#守護(hù)進(jìn)程模式

fork = true

#刷寫數(shù)據(jù)到日志的頻率

syncdelay = 60

#storageEngine = wiredTiger

#操作日志,單位M

oplogSize = 1000

#命名空間的文件大小,默認(rèn)16M,大2G。

nssize = 16

noauth = true

unixSocketPrefix = /tmp

configsvr = true

replSet=jiangjj

bind_ip = 172.169.18.128

[root@SQL_mongdb ~]# cat /etc/mongodb_23000.conf

#數(shù)據(jù)目錄

dbpath= /opt/mongodb/date3/

#日志文件

logpath= /opt/mongodb/mongodb_23000.log

#日志追加

logappend=true

#端口

port = 23000

#大連接數(shù)

maxConns = 50

pidfilepath = /opt/mongodb/mongo_23000.pid

#日志,redo log

journal = true

#刷寫提交機(jī)制

journalCommitInterval = 200

#守護(hù)進(jìn)程模式

fork = true

#刷寫數(shù)據(jù)到日志的頻率

syncdelay = 60

#storageEngine = wiredTiger

#操作日志,單位M

oplogSize = 1000

#命名空間的文件大小,默認(rèn)16M,大2G。

nssize = 16

noauth = true

unixSocketPrefix = /tmp

configsvr = true

replSet=jiangjj

bind_ip = 172.169.18.128

(3)啟動(dòng)配置文件(實(shí)例進(jìn)程)

[root@SQL_mongdb ~]# mongod -f /etc/mongodb_21000.conf

[root@SQL_mongdb ~]# mongod -f /etc/mongodb_22000.conf

[root@SQL_mongdb ~]# mongod -f /etc/mongodb_23000.conf

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

備注:

關(guān)閉進(jìn)程服務(wù)

# mongod -f /etc/mongodb_21000.conf --shutdown

如果非正常訪問,重新啟動(dòng)會(huì)報(bào)錯(cuò),必須要?jiǎng)h除mongd.lock后才能啟動(dòng)成功。

(4)將節(jié)點(diǎn)配置組成集群(副本集)

在任意節(jié)點(diǎn)啟動(dòng)配置,這里使用SQL_jiangjj節(jié)點(diǎn)

登錄數(shù)據(jù)庫

[root@SQL_mongdb ~]# mongo --host 172.169.18.128:21000

> use admin

> cfg={ _id:"jiangjj",members:[{_id:0,host:'172.169.18.128:21000',priority:3},{_id:1,host:'172.169.18.128:22000',priority:2},{_id:2,host:'172.169.18.128:23000',priority:1}] };

#配置生效命令

> rs.initiate(cfg)

3、路由配置(在SQL_mongodb和node01上各開啟1個(gè),port:3000)

路由服務(wù)器不保存數(shù)據(jù),把日志記錄一下即可

(1)在SQL_mongodb上新增配置文件

[root@SQL_mongdb ~]# vim /etc/mongodb_30000.conf

#日志文件

logpath = /opt/mongodb/mongodb_route.log

#日志追加

logappend = true

#端口

port = 30000

#大連接數(shù)

maxConns = 20000

#chunkSize=1

#綁定地址

bind_ip = 0.0.0.0

pidfilepath = /opt/mongodb/mongo_30000.pid

#必須是1個(gè)或則3個(gè)配置

configdb = jiangjj/172.169.18.128:21000,172.169.18.128:22000,172.169.18.128:23000

#configdb=127.0.0.1:20000  #報(bào)錯(cuò)

#守護(hù)進(jìn)程模式

fork = true

(2)開啟mongos

[root@SQL_mongdb ~]# mongos -f /etc/mongodb_30000.conf

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

(3)配置一個(gè)普通分片文件

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

查看狀態(tài)

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

按照上面的方法再到node01上開啟分片服務(wù)和路由服務(wù)(配置文件一樣),以及在node02上開啟分片服務(wù)。到此分片的配置服務(wù)器、路由服務(wù)器、分片服務(wù)器都已經(jīng)部署完成。

備注:分片其中一個(gè)配置,其他的類似

[root@node01 etc]# vim mongodb_60000.conf

#mongodb

dbpath=/opt/mongodb/date2/

logpath=/opt/mongodb_60000.log

pidfilepath=/opt/mongodb/mongodb_60000.pid

directoryperdb=true

logappend=true

bind_ip=172.169.18.162

port=60000

oplogSize=100

fork=true

noprealloc=true

4、配置分片:下面的操作都是在mongodb的命令行里執(zhí)行

(1)登陸路由服務(wù)器mongos 操作:

[root@SQL_mongdb ~]# mongo --port=30000

mongos> use admin

mongos> db.runCommand({addshard:'172.169.18.128:60000'})

mongos> db.runCommand({addshard:'172.169.18.162:60000'})

mongos> db.runCommand({addshard:'172.169.18.180:60000'})

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

#查看

mongos> sh.status()

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

(2)開啟分片功能:sh.enableSharding("庫名")、sh.shardCollection("庫名.集合名",{"key":1})

mongos> sh.enableSharding('jiangjj')

mongos> sh.status()

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

mongos> sh.shardCollection("jiangjj.text",{"name":1})

報(bào)錯(cuò)如下:

Cannot accept sharding commands if not started with --shardsvr

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

在分片配置文件中加入如下參數(shù):

shardsvr = true

重啟進(jìn)程后執(zhí)行上面的命令

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

查看:mongos> sh.status()

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

查看詳細(xì)信息:

mongos> sh.status({"verbose":1})

或則

mongos> db.printShardingStatus("vvvv")

或則

mongos> printShardingStatus(db.getSisterDB("config"),1)

#判斷是否是Sharding

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

5、測試查看

1、在路由Mongos端添加數(shù)據(jù)庫和數(shù)據(jù),如此

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

2、添加的數(shù)據(jù)庫分配到不聽的分片節(jié)點(diǎn)上

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

備注:這里我們做的都是單點(diǎn)的,要是一個(gè)分片壞了,則數(shù)據(jù)會(huì)丟失,我們可以利用副本集減少災(zāi)難

四、高可用:Sharding+Replset

1、在三個(gè)節(jié)點(diǎn)各自添加一個(gè)分片,port:50000,name:user01

其中一個(gè)集群分片,根據(jù)實(shí)際情況修改調(diào)整

#mongodb

dbpath=/opt/mongodb/date1/

logpath=/opt/mongodb_50000.log

pidfilepath=/opt/mongodb/mongodb_50000.pid

#keyFile=/opt/mongodb/mongodb.key  //節(jié)點(diǎn)間用戶驗(yàn)證文件,內(nèi)容必須一致,權(quán)限600,僅副本集模式有效

directoryperdb=true

logappend=true

replSet=user01

bind_ip=172.169.18.162

port=50000

#auth=true

oplogSize=100

fork=true

noprealloc=true

#maxConns=4000

shardsvr = true

2、將分片設(shè)置成副本集

登錄數(shù)據(jù)庫

[root@SQL ~]# mongo --host 172.169.18.128:50000

> use admin

> user01db={ _id:"user01",members:[{_id:0,host:'172.169.18.128:50000',priority:3},{_id:1,host:'172.169.18.162:50000',priority:2},{_id:2,host:'172.169.18.180:50000',priority:1}] };

#配置生效命令

> rs.initiate(user01db)

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

3、配置路由節(jié)點(diǎn)

[root@SQL_mongdb ~]# mongo --port=30000

切換到admin庫

mongos> use admin

#添加分片節(jié)點(diǎn)

mongos> sh.addShard("user01/172.169.18.128:50000")

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

備注:

#也可以直接在路由節(jié)點(diǎn)添加副本集

mongos>sh.addShard("user01/172.169.18.128:50000,172.169.18.162:50000,172.169.18.180:50000")

#查看集群信息

mongos> sh.status()

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

補(bǔ)充說明:均衡器

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

均衡器:均衡器負(fù)責(zé)數(shù)據(jù)遷移,周期性的檢查分片是否存在不均衡,如果不存在則會(huì)開始塊的遷移,config.locks集合里的state表示均衡器是否找正在運(yùn)行,0表示非活動(dòng)狀態(tài),2表示正在均衡。均衡遷移數(shù)據(jù)的過程會(huì)增加系統(tǒng)的負(fù)載:目標(biāo)分片必須查詢源分片的所有文檔,將文檔插入目標(biāo)分片中,再清除源分片的數(shù)據(jù)。可以關(guān)閉均衡器(不建議):關(guān)閉會(huì)導(dǎo)致各分片數(shù)據(jù)分布不均衡,磁盤空間得不到有效的利用。

查看狀態(tài):mongos> sh.getBalancerState()

關(guān)閉命令:mongos> sh.stopBalancer()

開啟命令:mongos> sh.setBalancerState(true)

4、在Mongos添加兩個(gè)數(shù)據(jù)庫user01和user02,添加數(shù)據(jù)測試副本集

分配在不同的分片節(jié)點(diǎn)上,查看的數(shù)據(jù)不同mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

5、分片數(shù)據(jù)庫遷移,刪除分片

刪除分片時(shí),必須確保該分片上的數(shù)據(jù)被移動(dòng)到其他分片中,對于以分片的集合,使用均衡器來遷移數(shù)據(jù)塊,對于非分片的集合,必須修改集合的主分片。

1)將shard0001分片上的數(shù)據(jù)庫jiangjj04遷移到user01集合分片上

mongos> use admin

mongos> db.runCommand({moveprimary:"jiangjj04",to:"user01"})

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

如下:

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

2、刪除分片:

#需要到admin下面刪除(需要執(zhí)行兩次)

mongos> db.runCommand({"removeshard":"jiangjj01"})

注意:MongoDB的分片不能刪除最后一個(gè),否則報(bào)如下錯(cuò)誤

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

3、刪除分片上的數(shù)據(jù)庫

mongos> use jsqdb

mongos> db.dropDatabase()

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

三、集群用戶驗(yàn)證設(shè)置

1、創(chuàng)建驗(yàn)證秘鑰文件

keyFile文件的作用: 集群之間的安全認(rèn)證,增加安全認(rèn)證機(jī)制KeyFile(開啟keyfile認(rèn)證就默認(rèn)開啟了auth認(rèn)證了,為了保證后面可以登錄,我已創(chuàng)建了用戶)

# cd /opt/mongodb/

#  touch .keyFile

#  chmod 600 .keyFile

# openssl rand -base64 102 > .keyFile

102:是文件大小

注意:創(chuàng)建keyFile前,需要先停掉副本集中所有主從節(jié)點(diǎn)的mongod服務(wù),然后再創(chuàng)建,否則有可能出現(xiàn)服務(wù)啟動(dòng)不了的情況。

2、在Mongos節(jié)點(diǎn)添加root賬號(hào)

mongos> use admin

mongos> db.createUser({

... user:'root',

... pwd:'123456',

... roles:[{role:'root',db:'admin'}]

... })

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

3、更新所有配置、分片節(jié)點(diǎn)配置文件,在路由配置文件只配置keyFile參數(shù)即可

keyFile=/home/data/.keyFile

auth=true

4、啟動(dòng)副本集,測試

登錄驗(yàn)證

root用戶

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

現(xiàn)在只有兩個(gè)路由節(jié)點(diǎn)端口30000有權(quán)訪問數(shù)據(jù)庫,其他節(jié)點(diǎn)訪問如下圖報(bào)錯(cuò)信息

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

在mongos節(jié)點(diǎn)給jiangjj01配置用戶

添加一個(gè)jiangjj用戶擁有讀寫權(quán)限

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

登錄Mongos節(jié)點(diǎn)驗(yàn)證成功。

mongodb分片概念和原理-實(shí)戰(zhàn)分片集群mongodb分片概念和原理-實(shí)戰(zhàn)分片集群

補(bǔ)充知識(shí)點(diǎn):

權(quán)限伸縮

1)如何增加權(quán)限

db.grantRolesToUser(

<user_name>,

[{role:<role_name>,db:<db_name>}])

注意:此方法接受2個(gè)參數(shù),而不是兩個(gè)對象, 而且如何權(quán)限重復(fù)不會(huì)覆蓋,新的會(huì)增加

例如:

db.grantRolesToUser('roleTest,[{role:'readWrite',db:'test'}])\

2)如何收縮權(quán)限

db.revokeRolesToUser(

<user_name>,

[{role:<role_name>,db:<db_name>}])

權(quán)限配置詳細(xì)請參考官方

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

文章題目:mongodb分片概念和原理-實(shí)戰(zhàn)分片集群-創(chuàng)新互聯(lián)
網(wǎng)站URL:http://muchs.cn/article18/poigp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、定制網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈、App開發(fā)、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)