MongoDB的安全與集群

MongoDB的安全與集群

一占键、安全和認(rèn)證

每個(gè)MongoDB實(shí)例中的數(shù)據(jù)庫都可以有許多用戶碗降。如果開啟了安全性檢查政恍,則只有數(shù)據(jù)庫認(rèn)證用戶才能執(zhí)行讀或者寫操作。
在認(rèn)證的上下文中雪标,MongoDB會(huì)將普通的數(shù)據(jù)作為admin數(shù)據(jù)庫處理。admin數(shù)據(jù)庫中的用戶被視為超級(jí)用戶(即管理員)溉跃。
在認(rèn)證之后村刨,管理員可以讀寫所有數(shù)據(jù)庫,執(zhí)行特定的管理命令撰茎,如listDatabases和shutdown嵌牺。
在開啟安全檢查之前,一定要至少有一個(gè)管理員賬號(hào)龄糊。

在admin數(shù)據(jù)庫中創(chuàng)建管理員賬號(hào):
use admin;
db.addUser(“root”,”root”);

在test數(shù)據(jù)庫中創(chuàng)建普通賬號(hào):
use test;
db.addUser(“zhangsan”,”123”);
db.addUser(“l(fā)isi”,”123”,true);
注意:用戶zhangsan逆粹,密碼為123,對(duì)test數(shù)據(jù)庫擁有讀寫權(quán)限
     用戶lisi炫惩,密碼為123僻弹,對(duì)test數(shù)據(jù)庫擁有只讀權(quán)限

重新啟動(dòng)數(shù)據(jù)庫服務(wù),并開啟安全檢查:
mongod --dbpath d:\mongo_data --auth

二他嚷、主從復(fù)制(主從集群)

主從復(fù)制是MongoDB最常用的復(fù)制方式蹋绽。這種方式非常靈活,可用于備份筋蓖、故障恢復(fù)卸耘、讀擴(kuò)展等。

002.png

最基本的設(shè)置方式就是建立一個(gè)主節(jié)點(diǎn)和一個(gè)或者多個(gè)從節(jié)點(diǎn)粘咖,每個(gè)從節(jié)點(diǎn)要知道主節(jié)點(diǎn)的地址鹊奖。

運(yùn)行mongod --master就啟動(dòng)了主服務(wù)器。
運(yùn)行mongod --slave --source master_address 則啟動(dòng)了從服務(wù)器涂炎,
其中master_address就是上面主節(jié)點(diǎn)的地址忠聚。

可以在一臺(tái)計(jì)算機(jī)上來模擬主節(jié)點(diǎn)和從節(jié)點(diǎn):

在D盤創(chuàng)建兩個(gè)目錄master和slave设哗,
master目錄作為主節(jié)點(diǎn)的數(shù)據(jù)文件的目錄,
slave目錄作為從節(jié)點(diǎn)的數(shù)據(jù)文件的目錄两蟀。

注意:主節(jié)點(diǎn)和從節(jié)點(diǎn)要指定不同的端口网梢。
啟動(dòng)主節(jié)點(diǎn):mongod --dbpath d:\master --port 10000 --master
啟動(dòng)從節(jié)點(diǎn):mongod --dbpath d:\slave --port 10001 --slave --source localhost:10000

啟動(dòng)成功后就可以連接主節(jié)點(diǎn)進(jìn)行操作了,而這些操作會(huì)同步到從節(jié)點(diǎn)赂毯。

三战虏、副本集

副本集就是有自動(dòng)故障恢復(fù)功能的主從集群。

主從集群和副本集最大的區(qū)別就是副本集沒有固定的“主節(jié)點(diǎn)”党涕;整個(gè)集群會(huì)選出一個(gè)“主節(jié)點(diǎn)”烦感,當(dāng)其掛掉后,又在剩下的從節(jié)點(diǎn)中選中其他節(jié)點(diǎn)為“主節(jié)點(diǎn)”膛堤,副本集總有一個(gè)活躍點(diǎn)(primary)和一個(gè)或多個(gè)備份節(jié)點(diǎn)(secondary)手趣。

以三個(gè)節(jié)點(diǎn)為例:

節(jié)點(diǎn)1:
HOST:localhost:10001
Log File:D:\mongodb\logs\node1\logs.txt
Data File:D:\mongodb\dbs\node1

節(jié)點(diǎn)2:
HOST:localhost:10002
Log File:D:\mongodb\logs\node2\logs.txt
Data File:D:\mongodb\dbs\node2

節(jié)點(diǎn)3:
HOST:localhost:10003
Log File:D:\mongodb\logs\node3\logs.txt
Data File:D:\mongodb\dbs\node3

啟動(dòng):

啟動(dòng)節(jié)點(diǎn)1:
mongod --dbpath D:\mongodb\dbs\node1 --logpath 
D:\mongodb\logs\node1\logs.txt --logappend --port 10001 --replSet 
hcx/localhost:10002  --master

啟動(dòng)節(jié)點(diǎn)2:
mongod --dbpath D:\mongodb\dbs\node2 --logpath 
D:\mongodb\logs\node2\logs.txt --logappend --port 10002 --replSet 
hcx/localhost:10001

啟動(dòng)節(jié)點(diǎn)3:  
mongod --dbpath D:\mongodb\dbs\node3 --logpath 
D:\mongodb\logs\node3\logs.txt --logappend --port 10003 --replSet 
hcx/localhost:10001,localhost:10002

初始化節(jié)點(diǎn)(只能初始化一次):

隨便登錄一個(gè)節(jié)點(diǎn),以10001為例
monogo localhost:10001/admin
db.runCommand({
db.runCommand({
"replSetInitiate":{
"_id":"hcx",
"members":[
{
    "_id":1,
    "host":"localhost:10001",
    "priority":3
},
{
    "_id":2,
    "host":"localhost:10002",
    "priority":2
},
{
    "_id":3,
    "host":"localhost:10003",
    "priority":1
}
]}});

查詢當(dāng)前主庫,登錄10002

mongo localhost:10002
db.$cmd.findOne ( {ismaster: 1 } ); 
10002.png

關(guān)閉10001服務(wù)Dos命令窗口, 登錄10002查詢當(dāng)前主庫

mongo localhost:10002
db.$cmd.findOne ( {ismaster: 1 } ); 
10021.png

四肥荔、分片(sharding)分布式存儲(chǔ)

分片(sharding)是指將數(shù)據(jù)拆分绿渣,將其分散存在不同的機(jī)器上的過程。有時(shí)也用分區(qū)(partitioning)來表示這個(gè)概念燕耿。將數(shù)據(jù)分散到不同的機(jī)器上中符,不需要功能強(qiáng)大的大型計(jì)算機(jī)就可以儲(chǔ)存更多的數(shù)據(jù),處理更多的負(fù)載誉帅。

MongoDB分片的基本思想就是將集合切分成小塊淀散。這些塊分散到若干片里面,每個(gè)片只負(fù)責(zé)總數(shù)據(jù)的一部分蚜锨。應(yīng)用程序不必知道哪片對(duì)應(yīng)哪些數(shù)據(jù)吧凉,甚至不需要知道數(shù)據(jù)已經(jīng)被拆分了,所以在分片之前要運(yùn)行一個(gè)路由進(jìn)程踏志,該進(jìn)程名為mongos阀捅。這個(gè)路由器知道所有數(shù)據(jù)的存放位置,所以應(yīng)用可以連接它來正常發(fā)送請(qǐng)求针余。對(duì)應(yīng)用來說饲鄙,它僅知道連接了一個(gè)普通的mongod。路由器知道數(shù)據(jù)和片的對(duì)應(yīng)關(guān)系圆雁,能夠轉(zhuǎn)發(fā)請(qǐng)求到正確的片上忍级。如果請(qǐng)求有了回應(yīng),路由器將其收集起來回送給應(yīng)用伪朽。

設(shè)置分片時(shí)轴咱,需要從集合里面選一個(gè)鍵,用該鍵的值作為數(shù)據(jù)拆分的依據(jù)。這個(gè)鍵稱為片鍵(shard key)朴肺。

{name:"zhangsan",age:1}

用個(gè)例子來說明這個(gè)過程:假設(shè)有個(gè)文檔集合表示的是人員窖剑。如果選擇名字("name")作為片鍵,第一片可能會(huì)存放名字以AF開頭的文檔戈稿,第二片存的GP的名字西土,第三片存的Q~Z的名字。隨著添加或者刪除片鞍盗,MongoDB會(huì)重新平衡數(shù)據(jù)需了,使每片的流量都比較均衡,數(shù)據(jù)量也在合理范圍內(nèi)般甲。

分片.png
003.png

步驟:

1肋乍、創(chuàng)建三個(gè)目錄,分別存放兩個(gè)mongod服務(wù)的數(shù)據(jù)文件和config服務(wù)的數(shù)據(jù)文件

目錄.png

2敷存、開啟config服務(wù)器 墓造。mongos要把mongod之間的配置放到config服務(wù)器里面,所以首先開啟它历帚,這里就使用2222端口滔岳。 命令為:

mongod --dbpath E:\sharding\config_node --port 2222

3杠娱、開啟mongos服務(wù)器 挽牢。這里要注意的是我們開啟的是mongos,端口3333摊求,同時(shí)指定下config服務(wù)器禽拔。命令為:

mongos --port 3333 --configdb=127.0.0.1:2222

4、啟動(dòng)mongod服務(wù)器 室叉。對(duì)分片來說睹栖,也就是要添加片了,這里開啟兩個(gè)mongod服務(wù)茧痕,端口分別為:4444野来,5555。命令為:

mongod --dbpath E:\sharding\mongod_node1 --port 4444
mongod --dbpath E:\sharding\mongod_node2 --port 5555

5踪旷、服務(wù)配置 曼氛。client直接跟mongos打交道,也就說明我們要連接mongos服務(wù)器令野,然后將4444舀患,5555的mongod交給mongos,添加分片也就是addshard()。

服務(wù)配置.png

6气破、開啟數(shù)據(jù)庫分片功能聊浅,命令很簡(jiǎn)單 enablesharding(),這里就開啟test數(shù)據(jù)庫。

7、指定集合中分片的片鍵低匙,這里就指定為person.name鍵旷痕。

7.png

8、通過mongos插入10w記錄努咐,然后通過printShardingStatus命令查看mongodb的數(shù)據(jù)分片情況苦蒿。

8.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市渗稍,隨后出現(xiàn)的幾起案子佩迟,更是在濱河造成了極大的恐慌,老刑警劉巖竿屹,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件报强,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡拱燃,警方通過查閱死者的電腦和手機(jī)秉溉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來碗誉,“玉大人召嘶,你說我怎么就攤上這事∠保” “怎么了弄跌?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)尝苇。 經(jīng)常有香客問我铛只,道長(zhǎng),這世上最難降的妖魔是什么糠溜? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任淳玩,我火速辦了婚禮,結(jié)果婚禮上非竿,老公的妹妹穿的比我還像新娘蜕着。我一直安慰自己,他們只是感情好红柱,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布承匣。 她就那樣靜靜地躺著,像睡著了一般豹芯。 火紅的嫁衣襯著肌膚如雪悄雅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天铁蹈,我揣著相機(jī)與錄音宽闲,去河邊找鬼众眨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛容诬,可吹牛的內(nèi)容都是我干的娩梨。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼览徒,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼狈定!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起习蓬,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤纽什,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后躲叼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體芦缰,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年枫慷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了让蕾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡或听,死狀恐怖探孝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情誉裆,我是刑警寧澤顿颅,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站找御,受9級(jí)特大地震影響元镀,放射性物質(zhì)發(fā)生泄漏绍填。R本人自食惡果不足惜霎桅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望讨永。 院中可真熱鬧滔驶,春花似錦、人聲如沸卿闹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽锻霎。三九已至著角,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旋恼,已是汗流浹背吏口。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人产徊。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓昂勒,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親舟铜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子戈盈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

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