成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

初識(shí)MongoDB分片

Nino / 2759人閱讀

摘要:復(fù)制一份,命名為,修改文件內(nèi)容如下注意改為我們第一步創(chuàng)建的目錄,端口號(hào)改為這個(gè)隨意,只要該端口沒(méi)被占用即可,表示這是一個(gè)配置服務(wù)器,另外由于我們的配置服務(wù)器要做成備份集,所以要設(shè)置。

分片是指將數(shù)據(jù)拆分,拆分后存放在不同的機(jī)器上的過(guò)程,以此來(lái)降低單個(gè)服務(wù)器的壓力,同時(shí)也解決單個(gè)服務(wù)器硬盤(pán)空間不足的問(wèn)題,讓我們可以用廉價(jià)的機(jī)器實(shí)現(xiàn)高性能的數(shù)據(jù)架構(gòu)。有的小伙伴不理解分片和副本集的差異,一言以蔽之:副本集上每個(gè)備份節(jié)點(diǎn)存儲(chǔ)的數(shù)據(jù)都是相同的,分片上存儲(chǔ)的數(shù)據(jù)則是不同的。好了,本文我們就先來(lái)看看分片環(huán)境的搭建。

本文是MongoDB系列的第十八篇文章,了解前面的文章有助于更好的理解本文:


1.Linux上安裝MongoDB
2.MongoDB基本操作
3.MongoDB數(shù)據(jù)類(lèi)型
4.MongoDB文檔更新操作
5.MongoDB文檔查詢(xún)操作(一)
6.MongoDB文檔查詢(xún)操作(二)
7.MongoDB文檔查詢(xún)操作(三)
8.MongoDB查看執(zhí)行計(jì)劃
9.初識(shí)MongoDB中的索引
10.MongoDB中各種類(lèi)型的索引
11.MongoDB固定集合
12.MongoDB管道操作符(一)
13.MongoDB管道操作符(二)
14.MongoDB中MapReduce使用
15.MongoDB副本集搭建
16.MongoDB副本集配置
17.MongoDB副本集其他細(xì)節(jié)


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

準(zhǔn)備三臺(tái)已經(jīng)裝好了MongoDB的服務(wù)器,地址分別是:

192.168.248.128
192.168.248.135
192.168.248.136

本文使用的MongoDB版本為3.4.9

規(guī)劃

首先我們需要三臺(tái)配置服務(wù)器,配置服務(wù)器相當(dāng)于集群的大腦,配置服務(wù)器中保存著集群和分片的元數(shù)據(jù),即每個(gè)分片都包含了哪些數(shù)據(jù)信息,這些數(shù)據(jù)都是保存在配置服務(wù)器中的,我這里將開(kāi)啟三個(gè)配置服務(wù)器實(shí)例,這三個(gè)配置服務(wù)器將運(yùn)行在三個(gè)MongoDB服務(wù)器上,地址分別如下:

192.168.248.128:20000
192.168.248.135:20000
192.168.248.136:20000

接下來(lái)需要一個(gè)Mongos實(shí)例,Mongos對(duì)請(qǐng)求進(jìn)行路由,Mongos扮演的角色有點(diǎn)類(lèi)似于一個(gè)門(mén)面,我們以后訪(fǎng)問(wèn)的時(shí)候,直接訪(fǎng)問(wèn)Mongos即可,再由Mongos將請(qǐng)求路由到不同的分片上去,Mongos在啟動(dòng)時(shí)會(huì)去訪(fǎng)問(wèn)配置服務(wù)器,它將從配置服務(wù)器中獲取數(shù)據(jù)的存儲(chǔ)信息,Mongos我將啟動(dòng)在如下服務(wù)器上:  

192.168.248.128:30000

最后需要三個(gè)分片實(shí)例,三個(gè)分片依然運(yùn)行在三臺(tái)服務(wù)器上,如下:

192.168.248.128:27017
192.168.248.135:27017
192.168.248.136:27017
搭建配置服務(wù)器

配置服務(wù)器中不需要太多的空間和資源,因?yàn)榕渲梅?wù)器上保存的只是數(shù)據(jù)的分布表,不保存具體的數(shù)據(jù),具體的數(shù)據(jù)都保存在分片上,配置服務(wù)器中1KB的空間約為200MB的真實(shí)數(shù)據(jù)。注意,從MongoDB3.4開(kāi)始,配置服務(wù)器要做成集群的方式。

由于配置服務(wù)器是獨(dú)立的mongod進(jìn)程,所以我們可以像啟動(dòng)普通的MongoDB服務(wù)一樣啟動(dòng)配置服務(wù)器,只是這里的配置不同罷了。

我這里以192.168.248.128服務(wù)器為例來(lái)講述配置服務(wù)器的配置啟動(dòng),另外兩臺(tái)服務(wù)器如法炮制即可:

1.在mongodb解壓目錄下創(chuàng)建db20000文件夾,用來(lái)存儲(chǔ)配置服務(wù)器中的數(shù)據(jù)。
2.復(fù)制一份mongodb.conf,命名為mongodb20000.conf,修改文件內(nèi)容如下:

dbpath=/opt/mongodb/db20000
logpath=/opt/mongodb/logs/mongodb20000.log
port=20000
fork=true
configsvr=true
replSet=rs

注意dbpath改為我們第一步創(chuàng)建的目錄,端口號(hào)改為20000(這個(gè)隨意,只要該端口沒(méi)被占用即可),configsvr表示這是一個(gè)配置服務(wù)器,另外由于我們的配置服務(wù)器要做成備份集,所以要設(shè)置replSet。

3.做好前兩步之后,執(zhí)行如下命令啟動(dòng)配置服務(wù)器:

mongod -f /opt/mongodb/bin/mongodb20000.conf

最后,在另外兩臺(tái)服務(wù)器上重復(fù)上面三個(gè)步驟。

三臺(tái)服務(wù)器上都啟動(dòng)成功之后,參考我們之前的[MongoDB副本集搭建]()一文,將這三臺(tái)配置服務(wù)器配成一個(gè)副本集,副本集的配置我這里就不再贅述。

搭建Mongos

Mongos實(shí)例我們可以啟動(dòng)在任意一臺(tái)服務(wù)器上,我這里就啟動(dòng)在192.168.248.128上,Mongos的配置步驟如下:

1.復(fù)制一份mongodb.conf,命名為mongos.conf,修改內(nèi)容:

logpath=/opt/mongodb/logs/mongos.log
port=30000
fork=true
configdb=rs/192.168.248.128:20000,192.168.248.135:20000,192.168.248.136:20000

因?yàn)閙ongos中不需要保存數(shù)據(jù),所以不需要dbpath,端口號(hào)改為30000,configdb表示三個(gè)配置服務(wù)器的地址,注意最前面的rs表示配置服務(wù)器副本集的名稱(chēng)。

2.配置完成后,執(zhí)行如下命令啟動(dòng)mongos:

mongos -f /opt/mongodb/bin/mongos.conf
搭建三個(gè)分片

三個(gè)分片實(shí)際上就是三個(gè)普通的MongoDB服務(wù)器,給大家看下我的配置文件:

dbpath=/opt/mongodb/db
logpath=/opt/mongodb/logs/mongodb.log
port=27017
fork=true
shardsvr=true

注意多了個(gè)shardsvr表示這是一個(gè)分片服務(wù)器。
然后在三臺(tái)服務(wù)器上分別執(zhí)行如下命令啟動(dòng)分片:

mongod -f /opt/mongodb/bin/mongodb.conf
添加分片

上面三個(gè)步驟完成之后,我們就進(jìn)入到mongos的shell命令行了,如下:

mongo --port=30000

然后我們可以通過(guò)如下命令查看一下分片的當(dāng)前狀態(tài):

sh.status()

執(zhí)行結(jié)果如下(部分):

--- Sharding Status ---
  sharding version: {
}
  shards:
  databases:

shards表示分片服務(wù)器,目前還沒(méi)有,databases表示分片的庫(kù),目前也還沒(méi)有,接下來(lái)我們通過(guò)如下命令添加分片服務(wù)器:

sh.addShard("192.168.248.128:27017")
sh.addShard("192.168.248.135:27017")
sh.addShard("192.168.248.136:27017")

添加三個(gè)分片服務(wù)器,然后再執(zhí)行sh.status(),結(jié)果如下(部分):

--- Sharding Status ---
  sharding version: {
}
  shards:
        {  "_id" : "shard0000",  "host" : "192.168.248.128:27017",  "state" : 1 }
        {  "_id" : "shard0001",  "host" : "192.168.248.135:27017",  "state" : 1 }
        {  "_id" : "shard0002",  "host" : "192.168.248.136:27017",  "state" : 1 }
  databases:
        {  "_id" : "test",  "primary" : "shard0000",  "partitioned" : false }
設(shè)置集合分片

接下來(lái)我們來(lái)設(shè)置集合的分片,首先執(zhí)行如下命令表示給某個(gè)數(shù)據(jù)庫(kù)分片:

sh.enableSharding("sang")

對(duì)集合分片時(shí),需要選擇一個(gè)片鍵,片鍵實(shí)際上就是集合中的一個(gè)鍵,MongoDB將根據(jù)這個(gè)片鍵來(lái)拆分?jǐn)?shù)據(jù),我們需要先對(duì)片鍵建立索引,如下:

db.c1.ensureIndex({x:1})

然后以x為片鍵,對(duì)c1集合進(jìn)行分片,如下:

sh.shardCollection("sang.c1",{x:1})

做完這些之后,再執(zhí)行sh.status()命令,查看目前狀態(tài),結(jié)果如下(部分):

--- Sharding Status ---
  sharding version: {
}
  shards:
        {  "_id" : "shard0000",  "host" : "192.168.248.128:27017",  "state" : 1 }
        {  "_id" : "shard0001",  "host" : "192.168.248.135:27017",  "state" : 1 }
        {  "_id" : "shard0002",  "host" : "192.168.248.136:27017",  "state" : 1 }
  databases:
        {  "_id" : "test",  "primary" : "shard0000",  "partitioned" : false }
        {  "_id" : "sang",  "primary" : "shard0001",  "partitioned" : true }
                sang.c1
                        shard key: { "x" : 1 }
                        unique: false
                        balancing: true
                        chunks:
                                shard0001       1
                        { "x" : { "$minKey" : 1 } } -->> { "x" : { "$maxKey" : 1 } } on : shard0001 Timestamp(1, 0)

做完上面這些之后,我們?cè)僮鰞蓚€(gè)操作:

1.設(shè)置自動(dòng)分片:

sh.setBalancerState(true)

2.設(shè)置chunksize,chunksize這一項(xiàng)是用來(lái)指定chunk的大小的,為了方便測(cè)試分片效果,我們把chunksize指定為1MB,即當(dāng)這個(gè)分片中插入的數(shù)據(jù)大于1M時(shí)開(kāi)始進(jìn)行數(shù)據(jù)分片

db.settings.save({_id:"chunksize",value:1})

OK,做好這些之后,大功告成。

測(cè)試

測(cè)試方式很簡(jiǎn)單,我們直接在mongos的命令行向sang的c1集合中插入50000條數(shù)據(jù),然后再查看這些數(shù)據(jù)的分布,就知道分片有沒(méi)有成功了:

for(var i=0;i<50000;i++){db.c1.insert({x:Math.random()*1000000,name:"hahah"+i})}

然后執(zhí)行db.c1.stats(),結(jié)果如下:

{
"sharded" : true,
"capped" : false,
"ns" : "sang.c1",
"count" : 50000,
"size" : 2688890,
"storageSize" : 1781760,
"totalIndexSize" : 1978368,
"avgObjSize" : 53,
"nindexes" : 2,
"nchunks" : 5,
"shards" : {
        "shard0000" : {
                "ns" : "sang.c1",
                "size" : 926504,
                "count" : 17229,
                "avgObjSize" : 53,
                "storageSize" : 462848,
                "capped" : false,
                "nindexes" : 2,
                "totalIndexSize" : 516096,
                "indexSizes" : {
                        "_id_" : 184320,
                        "x_1" : 331776
                },
                "ok" : 1
        },
        "shard0001" : {
                "ns" : "sang.c1",
                "size" : 392593,
                "count" : 7299,
                "avgObjSize" : 53,
                "storageSize" : 667648,
                "capped" : false,
                "nindexes" : 2,
                "totalIndexSize" : 737280,
                "indexSizes" : {
                        "_id_" : 253952,
                        "x_1" : 483328
                },
                "ok" : 1
        },
        "shard0002" : {
                "ns" : "sang.c1",
                "size" : 1369793,
                "count" : 25472,
                "avgObjSize" : 53,
                "storageSize" : 651264,
                "capped" : false,
                "nindexes" : 2,
                "totalIndexSize" : 724992,
                "indexSizes" : {
                        "_id_" : 237568,
                        "x_1" : 487424
                },
                "ok" : 1
        }
}
}

OK,看到如上結(jié)果,說(shuō)明我們的數(shù)據(jù)已經(jīng)分布在三個(gè)分片服務(wù)器中了。

好了,MongoDB中分片環(huán)境的搭建我們就先說(shuō)到這里,小伙伴們有問(wèn)題歡迎留言討論。

參考資料:

1.《MongoDB權(quán)威指南第2版》

更多資料請(qǐng)關(guān)注公眾號(hào):

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/19160.html

相關(guān)文章

  • 兩年了,我寫(xiě)了這些干貨!

    摘要:開(kāi)公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來(lái)越多時(shí),大家搜索起來(lái)就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章系列處理登錄請(qǐng)求前后端分離一使用完美處理權(quán)限問(wèn)題前后端分離二使用完美處理權(quán)限問(wèn)題前后端分離三中密碼加鹽與中異常統(tǒng)一處理 開(kāi)公眾號(hào)差不多兩年了,有不少原創(chuàng)教程,當(dāng)原創(chuàng)越來(lái)越多時(shí),大家搜索起來(lái)就很不方便,因此做了一個(gè)索引幫助大家快速找到需要的文章! Spring Boo...

    huayeluoliuhen 評(píng)論0 收藏0
  • MongoDB教程合集

    摘要:磕磕絆絆,我們的系列教程終于落下帷幕,從月第一篇開(kāi)始到現(xiàn)在,中間有一段時(shí)間開(kāi)小差,不過(guò)還好沒(méi)有爛尾。好了,這里我再把本系列的所有文章羅列出來(lái),以供小伙伴們搜索查看。 磕磕絆絆,我們的MongoDB系列教程終于落下帷幕,從11月21第一篇開(kāi)始到現(xiàn)在,中間有一段時(shí)間開(kāi)小差,不過(guò)還好沒(méi)有爛尾。好了,這里我再把本系列的所有文章羅列出來(lái),以供小伙伴們搜索查看。 1.Linux上安裝Mongo...

    FingerLiu 評(píng)論0 收藏0
  • Java操作MongoDB

    摘要:也可以修改查到的所有數(shù)據(jù),如下羅貫中三國(guó)演義刪可以刪除查到的一條數(shù)據(jù),如下羅貫中也可以刪除查到的所有數(shù)據(jù)羅貫中里邊還有其他的查詢(xún)條件,都是見(jiàn)名知意,不贅述。 之前我們介紹的MongoDB的操作都是在shell命令中寫(xiě)的,在項(xiàng)目開(kāi)發(fā)時(shí)我們當(dāng)然都是用程序去操作MongoDB的,本文我們來(lái)看看如何用Java代碼操作MongoDB。 本文是MongoDB系列的第十九篇文章,了解前面的文章有...

    Jeffrrey 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<