MongoDB分片及副本集配置說明

MongoDB分片及副本集配置說明

 

目錄html

MongoDB分片及副本集配置說明... 1sql

第一部分 副本集... 2mongodb

第一步 副本集部署... 3數據庫

第二步 副本集初始化(在哪一個端口下初始化都行). 4服務器

第三步 啓動仲裁服務器... 4spa

第二部分 分片... 5orm

第一步 開啓config服務器... 5server

第二步 開啓mongos服務器... 5htm

第三步 啓動mongod服務器... 5ip

第四步 分片配置... 6

第三部分 附錄... 7

1、分片介紹... 7

2、試驗配置說明... 8

第一步 開啓config服務器... 8

第二步 開啓mongos服務器... 8

第三步 啓動mongod服務器... 9

第四步 服務配置... 9

第五步 查看效果... 10

                                             第一部分 分片

圖例說明:本例用三臺機器做爲示例,他們的ip分別爲192.168.2.19六、192.168.2.19七、192.168.2.198, 每臺服務器上分別存放着config服務器(端口爲:20001)、 mongos服務器(端口爲:20000)、mongod服務器(端口爲:30001)、副本集服務器(端口:30002)。

 

在MongoDB裏面存在另外一種集羣,就是分片技術,跟sql server的表分區相似,咱們知道當數據量達到T級別的時候,咱們的磁盤,內存就吃不消了,針對這樣的場景咱們該如何應對。

                第一步 開啓config服務器

分別開啓三臺機器的config服務,各自端口都爲20001:

 

192.168.2.196下:

C:\mongocfig\bin\mongod --dbpath=C:\mongo30001\dataCfig  --port 20001

192.168.2.197下:

D:\mongocfig\bin\mongod --dbpath=D:\mongo30001\dataCfig  --port 20001

192.168.2.198下:

E:\mongocfig\bin\mongod --dbpath=E:\mongo30001\dataCfig  --port 20001

                第二步 開啓mongos服務器

分別開啓三臺機器的mongos服務,各自端口都爲20000:

192.168.2.196下:

    C:\mongos\bin\mongos –port 20000 --configdb=192.168.2.196:20001,192.168.2.197:20001,192.168.2.198:20001

192.168.2.197下:

    D:\mongos\bin\mongos –port 20000 --configdb=192.168.2.196:20001,192.168.2.197:20001,192.168.2.198:20001

192.168.2.198下:

   E:\mongos\bin\mongos –port 20000 --configdb=192.168.2.196:20001,192.168.2.197:20001,192.168.2.198:20001

                第三步 啓動mongod服務器

分別開啓三臺機器的mongod服務,各自端口都爲30001:

192.168.2.196下:

   C:\mongodb\bin\mongod --port 30001 --dbpath= C:\mongodb\data

192.168.2.197下:

   D:\mongodb\bin\mongod --port 30001 --dbpath= D:\mongodb\data

192.168.2.198下:

   E:\mongodb\bin\mongod --port 30001 --dbpath=E:\mongodb\data

                第四步 分片配置

配置192.168.2.196的分片:

C:\ mongos \bin\mongo  192.168.2.196:20000/admin

db.runCommand({"addshard":"192.168.2.196: 30001 ",allowLocal:true})

db.runCommand({"addshard":"192.168.2.197: 30001 ",allowLocal:true})

db.runCommand({"addshard":"192.168.2.198: 30001 ",allowLocal:true})

db.runCommand({"enablesharding":"marc"})

db.runCommand({"shardcollection":"marc.211010","key":{"_id":1}})


                          第二部分 副本集

副本集合介紹

簡述:副本集合(Replica Sets),是一個基於主/從複製機制的複製功能,但增長了自動故障轉移和恢復特性。一個集羣最多能夠支持7個服務器,而且任意節點均可以是主節點。全部的寫操做都被分發到主節點,而讀操做能夠在任何節點上進行。

創建一個副本集須要步驟:

1、須要啓動每一個節點,

2、而後進行初始化設置。在這裏,咱們將配置一組(三個節點, 他們的ip分別爲192.168.2.19六、192.168.2.19七、192.168.2.198),這是標準設置。

一旦mongod節點啓動,咱們將發出一個命令,以正確地初始化設置。幾秒鐘後,將選舉產生一個主節點,你就能夠開始寫和查詢集。

         第一步 副本集部署

副本集名稱:calisDms,先啓動三個節點:

啓動ip爲192.168.2.196:30001節點:

d:\mongo\bin\mongod --dbpath=d:\mongo30001\data  --port 30001 --replSet calisDms 

啓動ip爲192.168.2.197:30002的節點:

d:\mongo\bin\mongod --dbpath=d:\mongo30002\data  --port 30002 --replSet calisDms

啓動ip爲192.168.2.198:30003的節點:

d:\mongo\bin\mongod --dbpath=d:\mongo30003\data  --port 30003 --replSet calisDms  

         第二步 副本集初始化(在哪一個端口下初始化都行)

  2.1:d:\mongo\bin\mongo 192.168.2.196:30001/admin

  2.2:db.runCommand({"replSetInitiate":{"_id":"calisDms","members":[{"_id":1,"host":"192.168.2.196:30001"},{"_id":2,"host":"192.168.2.197:30001"},{"_id":3,"host":"192.168.2.198:30001"}]}})

         第三步 啓動仲裁服務器

192.168.2.196:30004,負責仲裁是master剩餘爲slaver。

3.1:d:\mongo\bin\mongod --dbpath=d:\mongozc\data  --port 30004 --replSet calisDms/192.168.2.196:30001

3.2:d:\mongo\bin\mongo 192.168.2.196:30001/admin

3.3:rs.addArb("192.168.2.196:30004")

3.4:查看集羣中服務器狀態:rs.status();stateStr爲服務狀態:(PRIMARY:主服務,SECONDARY:從服務,ARBITER:仲裁服務)


 

第三部分 附錄

         1、分片介紹

mongodb採用將集合進行拆分,而後將拆分的數據均攤到幾個片上的一種解決方案。

下面我對這張圖解釋一下:

人臉:表明客戶端。

 mongos:首先咱們要了解」片鍵「的概念,也就是說拆分集合的依據是什麼?按照什麼鍵值進行拆分集合,mongos就是一個路由服務器,它會根據管理員設置的「片鍵」將數據分攤到本身管理的mongod集羣,數據和片的對應關係以及相應的配置信息保存在"config服務器"上。

mongod:一個普通的數據庫實例,若是不分片的話,咱們會直接連上mongod;若是分片了,咱們則須要鏈接mongos服務器。

         2、試驗配置說明

本部分讓讀者更清楚分片的意義(具體生產環境配置,請參見三:生產環境下配置說明)。

首先咱們準備4個mongodb程序,我這裏是均攤在C,D,E,F盤上,固然你也能夠作多個文件夾的形式。

                第一步 開啓config服務器

先前也說了,mongos要把mongod之間的配置放到config服務器裏面,理所固然首先開啓它,我這裏就創建2222端口。

                第二步 開啓mongos服務器

這裏要注意的是咱們開啓的是mongos,不是mongod,同時指定下config服務器,這裏我就開啓D盤上的mongodb,端口3333。

                第三步 啓動mongod服務器

對分片來講,也就是要添加片了,這裏開啓E,F盤的mongodb,端口爲:4444,5555。

                第四步 服務配置

<1> 先前圖中也能夠看到,咱們client直接跟mongos打交道,也就說明咱們要鏈接mongos服務器,而後將4444,5555的mongod交給mongos,添加分片也就是addshard()。

這裏要注意的是,在addshard中,咱們也能夠添加副本集,這樣能達到更高的穩定性。

<2>片已經集羣了,可是mongos不知道該如何切分數據,也就是咱們先前所說的片鍵,在mongodb中設置片鍵要作兩步

①:開啓數據庫分片功能,命令很簡單 enablesharding(),這裏我就開啓test數據庫。

②:指定集合中分片的片鍵,這裏我就指定爲person.name字段。

                第五步 查看效果

好了,至此咱們的分片操做所有結束,接下來咱們經過mongos向mongodb插入10w記錄,而後經過printShardingStatus命令查看mongodb的數據分片狀況。

這裏主要看三點信息:

① shards: 咱們清楚的看到已經別分爲兩個片了,shard0000和shard0001。

② databases: 這裏有個partitioned字段表示是否分區,這裏清楚的看到test已經分區。

③ chunks: 這個頗有意思,咱們發現集合被砍成四段:

無窮小 —— jack0,jack0 ——jack234813,jack234813——jack9999,jack9999——無窮大。

分區狀況爲:3:1,從後面的 on shardXXXX也能看得出。

參考了《mongdb權威指南》

相關文章
相關標籤/搜索