配置MongoDB叢集分區

來源:互聯網
上載者:User

轉載自http://my.oschina.net/zhzhenqin/blog/97268

現在網上很多教程都在講MongoDB分區配置,但大多都沒有經過實戰,胡亂轉載。而且用的MongoDB版本不同各種配置眼花寮亂,讓入門者莫衷一是。

最近我也做了MongoDB分區,貼出自己的配置。並且把需要注意的問題和大夥聊聊,不恰當的地方希望大家指正。 也同時希望讓後來者能繞過這些問題。

正式環境為了保證資料安全都要進行備份的,關於分區複製請見alibaba教程:http://www.taobaodba.com/html/525_525.html

我配置的叢集是測試用的,沒有複製。只是簡單的分區儲存資料進行測試。在測試的時候又分區,又複製,那麼多機器也麻煩。這一點網上的很多例子都是錯誤的,為此我也花了很多時間。

我配置完成後的結構圖為:

我的Mongo版本為:mongodb-linux-x86_64-2.0.8,電腦為普通Pc。

在這裡我要特別說明:

1.大資料情況下最好是64位機器,32位機器不能建立大於2GB的單個檔案。 小資料量無所謂 

2.叢集中的每台電腦的系統最好都是一樣的,不要32位,64位搭配 

      -- 我在開始做測試就是這樣,2台64,2台32.當注入300W左右的資料,索引大於3-4G時32位機器出錯了,32位系統上不能建立大於2GB的單個檔案。整個叢集癱瘓,我為此找了很長時間的原因

讓我們開始吧!

mongo從下載後解壓後的目錄結構如下:我們視安裝目錄為:${MONGO_INSTALL}

先在第一台電腦上在${MONGO_INSTALL}下分別執行:

1 mkdir -p /data/shard11
1 bin/mongod -shardsvr -port 27017 -dbpath=/data/shard11/ -logpath=/data/shard11.log --fork

再在另一台機器上也分別執行:

1 mkdir -p /data/shard12
1 bin/mongod -shardsvr -port 27017 -dbpath=/data/shard12/ -logpath=/data/shard12.log --fork

正常情況下你能啟動這兩個節點的。如果啟動不成功。那就是mkdir -p /data/shard11沒有成功建立。

在Ubuntu系統下你需要root許可權:

1 sudo mkdir /data/shard11
2 sudo chmod -R 777 /data/shard11

然後啟動。在終端中分別執行檢查Mongod進程是否成功啟動:

1 ps -ef |grep mongod

如果任何一台沒有啟動成功,重複上面的,直到找出原因。

OK,現在我們成功的分別在2太電腦上啟動了1個mongod執行個體,mongod是真正儲存資料的進程。進群中還需要一個設定管理員,用來儲存在各個節點中共用的配置資訊,儲存資料的元資訊[METADATA],也如上面我結構圖中config.

config不會佔用太多資源的。我們在其中任何一台上面啟動Mono的Config,shell如:

1 #config也是儲存少量資料的,不要忘了給它建立儲存資料的檔案夾
2 mkdir /data/config
1 bin/mongod -configsvr -dbpath=/data/config -port 20000 -logpath=/data/config.log --fork

也許你已經注意到,在2台shard的啟動參數中加了-shardsvr,在配置執行個體中加了-configsvr。 mongo就是這樣進行區分的。當然複製的配置應該是: -replSet setName。 setName就是複製叢集的別名。

當以上都啟動成功,我們可以開啟mongos服務了。在任何一台機器上執行:

1 #mongos進程不需要dbpath,但是需要logpath
2 #mongos啟動參數中,chunkSize這一項是用來指定chunk的大小的,單位是MB,預設大小為200MB
3 bin/mongos -configdb ip:20000 -port 30000 -chunkSize 512 -logpath=/data/mongos.log --fork

請注意上面的IP,這個IP應該是你啟動config的那台機器ip和port。 

如果順利的話,你也應該能輕鬆的啟動mongos進程的。可以執行查看:ps -ef |grep mongos

現在就剩下配置了。讓mongos進程知道哪些機器是需要加入到分區的。在任何一台機器上執行[mongosip為啟動mongos服務的機器IP]:

1 bin/mongo ip:30000/admin

注意後邊的admin,配置分區必須要連結admin集合。連結成功後你就可以把分區加入叢集:

1 db.runCommand({"addshard":"192.168.1.23:27017"})
2 db.runCommand({"addshard":"192.168.1.22:27017"})

上邊的兩個ip都是第一次啟動的shard的ip地址,不是config 。

如果順利,你應該能看到{ ”ok“ : 1}的字樣。這樣你就成功的把兩個shard加入了分區。現在你還需要制定分區的規則。

1 db.runCommand({"shardcollection":"dbname.tablename""key":{"primaryKey":1}})

最後你還需要啟用分區的設定。

1 db.runCommand({"enablesharding""ndmongo"})

OK,走到最後你應該成功的配置了分區。

現在你需要在剛才指定dbname和tablename插入一定數量的資料。測試叢集:

1 db.printShardingStatus()

你能看到類似如下的輸出[shard中有2台機器,並且databases也存在你的dbname的partitioned為true的資訊]:

現在你應該能體驗自己的分區了。

如果你的機器是64位的,你用我的配置應該很容易的就成功了。如果你用的32位的,你應該還要注意在啟動shard的時候加上: 

--journal

因為64位預設啟動開啟journal的,32位沒有。至於journal什麼作用我也不太清楚,讀者自己google吧。

因為我開始測試時用的機器32,64都有,出現了這麼多煩人的問題。 希望其他跟我一樣的人不要重蹈複轍。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.