mongodb集羣與分片的配置說明

mongodb集羣與分片的配置說明

Shardingcluster介紹前端

這是一種能夠水平擴展的模式,在數據量很大時特給力,實際大規模應用通常會採用這種架構去構建monodb系統。linux


系統分爲須要三種角色:mongodb

Shard Server:mongod 實例,用於存儲實際的數據塊,實際生產環境中一個 shard server角色可由幾臺機器組個一個relica set承擔,防止主機單點故障數據庫

Config Server:mongod 實例,存儲了整個 Cluster Metadata,其中包括 chunk 信息。bash

Route Server:mongos 實例,前端路由,客戶端由此接入,且讓整個集羣看上去像單一數據庫,前端應用能夠透明使用。服務器

架構圖:架構

mongodb集羣與分片的配置說明

本系統環境架構圖:app

mongodb集羣與分片的配置說明

注:mongoDB集羣最好是奇數數個服務器,本例介紹的是三臺服務器ide

 

  1. 分別在3臺機器上運行一個mongod實例(稱爲mongod shard11,mongod shard12,mongod shard13)組成replica set1 ,做爲cluster的shard1post

  2. 分別在3臺機器上運行另外一個mongod實例(稱爲mongod shard21,mongod shard22,mongod shard23)組成replica set2 ,做爲cluster的shard2

  3. 分別在3臺機器運行一個mongod實例,做爲3個config server

  4. 分別在每臺機器運行一個mongos進程,用於客戶鏈接

主機

IP

端口信息

Server1

192.168.10.207

mongod shard11:27017

mongod shard12:27018

mongod shard1:20000

mongos1:30000

Server2

192.168.10.208

mongod shard11:27017

mongod shard12:27018

mongod shard1:20000

mongos1:30000

Server3

192.168.10.209

mongod shard11:27017

mongod shard12:27018

mongod shard1:20000

mongos1:30000

軟件準備

部署前請先關閉防火牆,由於防火牆有時候會屏蔽

1 安裝mongoDB軟件

下載mongodb

解壓tar zxvf mongodb-linux-***.tar

2 建立數據目錄

Server1:

 mkdir -p /data/shard11 mkdir -p /data/shard21 

Server2:

 mkdir -p /data/shard12 mkdir -p /data/shard22 

Server3:

 mkdir -p /data/shard13 mkdir -p /data/shard23 

配置replice sets(副本集):

  1. 配置shard1所用到的replicasets:

Server1:

 ./mongod -shardsvr -replSet shard1 -port 27017 -dbpath/data/shard11/ -oplogSize 100 -logpath /data/shard11.log -logappend --fork 

Server2:

 ./mongod -shardsvr -replSet shard1 -port 27017 -dbpath/data/shard12/ -oplogSize 100 -logpath /data/shard12.log -logappend --fork 

Server3:

 ./mongod -shardsvr -replSet shard1 -port 27017 -dbpath/data/shard13/ -oplogSize 100 -logpath /data/shard13.log -logappend –-fork 

初始化replica set

用mongo鏈接其中一個mongod(例如:./mongo 192.168.10.207:27017)執行:

 > config = {_id:"shard1",members:[{_id:0,host:'192.168.10.207:27017'},{_id:1,host:'192.168.10.208:27017'},{_id:2,host:'192.168.10.209:27017'}]}                                                   > rs.initiate(config); 

二、一樣的方法,配置shard2用到的replica sets:

Server1:

 ./mongod -shardsvr -replSet shard2 -port 27018 -dbpath/data/shard21/ -oplogSize 100 -logpath /data/shard21.log -logappend --fork 

Server2:

 ./mongod -shardsvr -replSet shard2 -port 27018 -dbpath/data/shard22/ -oplogSize 100 -logpath /data/shard22.log -logappend --fork 

Server3:

 ./mongod -shardsvr -replSet shard2 -port 27018 -dbpath/data/shard23/ -oplogSize 100 -logpath /data/shard23.log -logappend –-fork 

初始化replica set

用mongo鏈接其中一個mongod(例如:./mongo 192.168.10.207:27017)執行:

 > config ={_id:"shard2",members:[{_id:0,host:'192.168.10.207:27018'},{_id:1,host:'192.168.10.208:27018'},{_id:2,host:'192.168.10.209:27018'}]}                                               > rs.initiate(config); 

配置三臺config server:

Server1:

 ./mongod -configsvr -dbpath /data/config -port 20000 -logpath/data/config.log -logappend --fork 

Server2:

 ./mongod -configsvr -dbpath /data/config -port 20000 -logpath/data/config.log -logappend --fork 

Server3:

 ./mongod -configsvr -dbpath /data/config -port 20000 -logpath/data/config.log -logappend --fork 

配置mongos:

Server1

 ./mongos -configdb192.168.10.207:20000,192.168.10.208:20000,192.168.10.209:20000 -port 30000-chunkSize 5 -logpath /data/mongos.log -logappend --fork 

server2

 ./mongos -configdb192.168.10.207:20000,192.168.10.208:20000,192.168.10.209:20000 -port 30000-chunkSize 5 -logpath /data/mongos.log -logappend --fork 

server3

 ./mongos -configdb192.168.10.207:20000,192.168.10.208:20000,192.168.10.209:20000 -port 30000-chunkSize 5 -logpath /data/mongos.log -logappend --fork 

註釋:mongos不須要dbpath

配置分片:

  1. 鏈接mongos,並切換到admin ./mongo 192.168.10.207:30000/admin

 >db admi 

2.加入shards

若是shard是單臺服務器,用:

 >db.runCommand({ addshard :「[:]」}) 

若是shard是replica sets,用:

 >db.runCommand({ addshard : 「replicaSetName/[:],[:]..」}) 

如本機執行:

 >db.runCommand({ addshard :「shard1/192.168.10.207:27017,192.168.10.208:27017,192.168.10.209:27017″,name:」s1″,maxsize:20480}); 
 >db.runCommand({ addshard :「shard2/192.168.10.207:27018,192.168.10.208:27018, 192.168.10.209:27018″,name:」s2″,maxsize:20480}) 

註釋:

name爲用於置頂shard的名字,不指定的話系統自動分配

maxsize爲指定各個shard可用的最大磁盤空間

3.查看shard是否添加成功

 >db.runCommand({listshards:1}) 

若是列出了以上兩個你家的shards,表示添加成功

4.激活數據庫分片

 >db.runCommand({enablesharding:」」}) 

經過執行以上命令,可讓數據庫跨shard,若是不執行這步,數據庫只會存放在一個shard,一旦激活數據庫分片,數據庫中不一樣的 collection將被存放在不一樣的shard上,但一個collection仍舊存放在同一個shard上,要使單個collection也分片,還 需單獨對collection做些操做

如:

 >db.runCommand({enablesharding:"test"}) 

查看數否生效:

 >db.printShardingStatus()    sharding version: { "_id" : 1, "version" : 3 }     shards:        {  "_id" : "s1",  "host" :        "shard1/192.168.10.207:27017,192.168.10.208:27017,192.168.10.209:27017" }        {  "_id" : "s2",  "host" : "shard2/192.168.10.207:27018,192.168.10.208:27018,192.168.10.209:27018" }          databases:        {  "_id" : "admin",  "partitioned" : false,  "primary" : "config" }        {  "_id" : "test",  "partitioned" : true,  "primary" : "s1" } 

註釋:

一旦enable了個數據庫,mongos將會把數據庫裏的不一樣數據集放在不一樣的分片上。除非數據集被分片(下面會設置),不然一個數據集的全部數據將放在一個分片上。

Collecton分片:

要使單個collection也分片存儲,須要給collections指定一個分片key,以下:

 > db.runCommand( {shardcollection : 「」,key :  }) 

a. 分片的collection系統會自動建立一個索引(也可用戶提早建立好)
b. 分片的collection只能有一個在分片key上的惟一索引,其它惟一索引不被容許

分片collection例子:

 > db.runCommand({shardcollection:"test.c1",key:{id:1}}) > use test 

測試一下:

 > for(var i =0; i<20000; i++) db.c1.save({id:i,value:"111111"})              > db.c1.stats()              {         「sharded」 : true,         「ns」 : 「test.c1″,         「count」 : 200003,         「size」 : 25600384,         「avgObjSize」 : 128,         「storageSize」 : 44509696,         「nindexes」 : 2,         「nchunks」 : 15,         「shards」 : {                「s1″ : {                        「ns」 : 「test.c1″,                        「count」 : 141941,                        「size」 : 18168448,                        「avgObjSize」 : 128,                        「storageSize」 : 33327616,                        「numExtents」 : 8,                        「nindexes」 : 2,                        「lastExtentSize」 : 12079360,                        「paddingFactor」 : 1,                        「flags」 : 1,                        「totalIndexSize」 : 11157504,                        「indexSizes」 : {                                「_id_」 : 5898240,                                「id_1″ : 5259264                        },                        「ok」 : 1                },                「s2″ : {                        「ns」 : 「test.c1″,                        「count」 : 58062,                        「size」 : 7431936,                        「avgObjSize」 : 128,                        「storageSize」 : 11182080,                        「numExtents」 : 6,                        「nindexes」 : 2,                        「lastExtentSize」 : 8388608,                        「paddingFactor」 : 1,                        「flags」 : 1,                        「totalIndexSize」 : 4579328,                        「indexSizes」 : {                                「_id_」 : 2416640,                                「id_1″ : 2162688                        },                        「ok」 : 1                }         },         「ok」 : 1 } 

若是出現以上相同信息,爲系統部署正確

附錄:

mongod手冊:http://cn.docs.mongodb.org/manual/reference/mongod/

服務器狀態查詢手冊:http://cn.docs.mongodb.org/manual/reference/server-status/

數據庫統計參考手冊:http://cn.docs.mongodb.org/manual/reference/database-statistics/


此文章並不是轉載,我是看到不少地方總結出來寫的,可是裏面也有別人的經驗,只爲提供參考



2年前 / 0℃ /
相關文章
相關標籤/搜索