配置mongodb分片群集

配置mongodb分片群集

Sharding cluster介紹

這是一種可以水平擴展的模式,在數據量很大時特給力,數據量很大時一般會採用這種架構去構建monodb系統。

要構建一個 MongoDB Sharding Cluster,需要三種角色:

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

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

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

Sharding架構圖:

實際環境架構

本例架構示例圖:

1. 分別在10.10.1.[107~109]機器運行一個mongod實例(稱為mongod shard11,mongod shard12,mongod shard13)組織replica set1,作為cluster的shard1

2. 分別在10.10.1.[107~109]機器運行一個mongod實例(稱為mongod shard21,mongod shard22,mongod shard23)組織replica set2,作為cluster的shard2

3. 分別在10.10.2.[89~91]機器運行一個mongod實例(稱為mongod shard31,mongod shard32,mongod shard33)組織replica set3,作為cluster的shard3

4. 分別在10.10.2.[89~91]機器運行一個mongod實例(稱為mongod shard41,mongod shard42,mongod shard43)組織replica set4,作為cluster的shard4

5. 1.107、1.108、2.89機器運行一個mongod實例,作為3個config server

6. 每臺機器運行一個mongs進程,用於客戶端連接

主機

IP

端口信息

Server1

10.10.1.107

mongod shard11:27017


mongod shard21:27018


mongod config1:20000


mongs1:30000


Server2

10.10.1.108

mongod shard12:27017


mongod shard22:27018


mongod config2:20000


mongs2:30000


Server3

10.10.1.109

mongod shard13:27017


mongod shard23:27018


mongs3:30000


Server4

10.10.2.89

mongod shard31:27017


mongod shard41:27018


mongod config3:20000


mongs4:30000


Server5

10.10.2.90

mongod shard32:27017


mongod shard42:27018


mongs5:30000


Server6

10.10.2.91

mongod shard33:27017


mongod shard43:27018


mongs6:30000


各節點hosts文件添加

#shard1

10.10.1.107 MongoDB_shard11.itings.com

10.10.1.108 MongoDB_shard12.itings.com

10.10.1.109 MongoDB_shard13.itings.com

#shard2

10.10.1.107 MongoDB_shard21.itings.com

10.10.1.108 MongoDB_shard22.itings.com

10.10.1.109 MongoDB_shard23.itings.com

#shard3

10.10.2.89 MongoDB_shard31.itings.com

10.10.2.90 MongoDB_shard32.itings.com

10.10.2.91 MongoDB_shard33.itings.com

#shard4

10.10.2.89 MongoDB_shard41.itings.com

10.10.2.90 MongoDB_shard42.itings.com

10.10.2.91 MongoDB_shard43.itings.com

#config1

10.10.1.107 MongoDB_config1.itings.com

10.10.1.108 MongoDB_config2.itings.com

10.10.2.89 MongoDB_config3.itings.com

#mongos

10.10.1.107 MongoDB_mongos1.itings.com

10.10.1.108 MongoDB_mongos2.itings.com

10.10.1.109 MongoDB_mongos3.itings.com

10.10.2.89 MongoDB_mongos4.itings.com

10.10.2.90 MongoDB_mongos5.itings.com

10.10.2.91 MongoDB_mongos6.itings.com

軟件準備

1. 安裝monodb軟件

wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.4.9.tgz

tar xvzf mongodb-linux-x86_64-2.4.9.tgz

mv mongodb-linux-x86_64-2.4.9 /usr/local/mongodb

安裝好後,目錄結構如下:

tree mongodb-linux-x86_64-2.4.9

mongodb-linux-x86_64-1.6.2

|-- GNU-AGPL-3.0

|-- README

|-- THIRD-PARTY-NOTICES

`-- bin

|-- bsondump

|-- mongo

|-- mongod

|-- mongodump

|-- mongoexport

|-- mongofiles

|-- mongoimport

|-- mongorestore

|-- mongos

|-- mongosniff

`-- mongostat

1 directory, 14 files

2. 創建數據目錄

根據本例sharding架構圖所示,在各臺sever上創建shard數據文件目錄

Server1:

mkdir -p /data/mongodb/data/shard11

mkdir -p /data/mongodb/data/shard21

Server2:

mkdir -p /data/mongodb/data/shard12

mkdir -p /data/mongodb/data/shard22

Server3:

mkdir -p /data/mongodb/data/shard13

mkdir -p /data/mongodb/data/shard23

Server4:

mkdir -p /data/mongodb/data/shard31

mkdir -p /data/mongodb/data/shard41

Server5:

mkdir -p /data/mongodb/data/shard32

mkdir -p /data/mongodb/data/shard42

Server6:

mkdir -p /data/mongodb/data/shard33

mkdir -p /data/mongodb/data/shard43

配置relica sets

1. 配置replica sets:

Server1:

/usr/local/mongodb/bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data/mongodb/data/shard11 --oplogSize 8192 --logpath /data/mongodb/data/shard11.log --logappend --fork

/usr/local/mongodb/bin/mongod --shardsvr --replSet shard2 --port 27018 --dbpath /data/mongodb/data/shard21 --oplogSize 8192 --logpath /data/mongodb/data/shard21.log --logappend --fork

Server2:

/usr/local/mongodb/bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data/mongodb/data/shard12 --oplogSize 8192 --logpath /data/mongodb/data/shard12.log --logappend --fork

/usr/local/mongodb/bin/mongod --shardsvr --replSet shard2 --port 27018 --dbpath /data/mongodb/data/shard22 --oplogSize 8192 --logpath /data/mongodb/data/shard22.log --logappend --fork

Server3:

/usr/local/mongodb/bin/mongod --shardsvr --replSet shard1 --port 27017 --dbpath /data/mongodb/data/shard13 --oplogSize 8192 --logpath /data/mongodb/data/shard13.log --logappend --fork

/usr/local/mongodb/bin/mongod --shardsvr --replSet shard2 --port 27018 --dbpath /data/mongodb/data/shard23 --oplogSize 8192 --logpath /data/mongodb/data/shard23.log --logappend --fork

Server4:

/usr/local/mongodb/bin/mongod --shardsvr --replSet shard3 --port 27017 --dbpath /data/mongodb/data/shard31 --oplogSize 8192 --logpath /data/mongodb/data/shard31.log --logappend --fork

/usr/local/mongodb/bin/mongod --shardsvr --replSet shard4 --port 27018 --dbpath /data/mongodb/data/shard41 --oplogSize 8192 --logpath /data/mongodb/data/shard41.log --logappend --fork


Server5:

/usr/local/mongodb/bin/mongod --shardsvr --replSet shard3 --port 27017 --dbpath /data/mongodb/data/shard32 --oplogSize 8192 --logpath /data/mongodb/data/shard32.log --logappend --fork

/usr/local/mongodb/bin/mongod --shardsvr --replSet shard4 --port 27018 --dbpath /data/mongodb/data/shard42 --oplogSize 8192 --logpath /data/mongodb/data/shard42.log --logappend --fork


Server6:

/usr/local/mongodb/bin/mongod --shardsvr --replSet shard3 --port 27017 --dbpath /data/mongodb/data/shard33 --oplogSize 8192 --logpath /data/mongodb/data/shard33.log --logappend --fork

/usr/local/mongodb/bin/mongod --shardsvr --replSet shard4 --port 27018 --dbpath /data/mongodb/data/shard43 --oplogSize 8192 --logpath /data/mongodb/data/shard43.log --logappend --fork

初始化replica set

用mongo連接其中一個mongod,執行:

/usr/local/mongodb/bin/mongo --host 10.10.1.107 --port 27017

config = {_id: 'shard1', members: [

{_id: 0, host: 'MongoDB_shard11.itings.com:27017'},

{_id: 1, host: 'MongoDB_shard12.itings.com:27017'},

{_id: 2, host: 'MongoDB_shard13.itings.com:27017'}]

}

rs.initiate(config);

/usr/local/mongodb/bin/mongo --host 10.10.1.107 --port 27018

config = {_id: 'shard2', members: [

{_id: 0, host: 'MongoDB_shard21.itings.com:27018'},

{_id: 1, host: 'MongoDB_shard22.itings.com:27018'},

{_id: 2, host: 'MongoDB_shard23.itings.com:27018'}]

}

rs.initiate(config);

初始化節點

/usr/local/mongodb/bin/mongo --host 10.10.2.89 --port 27017

config = {_id: 'shard3', members: [

{_id: 0, host: 'MongoDB_shard31.itings.com:27017'},

{_id: 1, host: 'MongoDB_shard32.itings.com:27017'},

{_id: 2, host: 'MongoDB_shard33.itings.com:27017'}]

}

rs.initiate(config);

/usr/local/mongodb/bin/mongo --host 10.10.2.89 --port 27018

初始化節點

config = {_id: 'shard4', members: [

{_id: 0, host: 'MongoDB_shard41.itings.com:27018'},

{_id: 1, host: 'MongoDB_shard42.itings.com:27018'},

{_id: 2, host: 'MongoDB_shard43.itings.com:27018'}]

}

rs.initiate(config);

配置三臺config server

Server1機器

mkdir -p /data/mongodb/data/config

啟動configserver1

/usr/local/mongodb/bin/mongod --configsvr --dbpath /data/mongodb/data/config --port 20000 --logpath /data/mongodb/data/config.log --logappend --fork

Server2機器

mkdir -p /data/mongodb/data/config

啟動configserver2

/usr/local/mongodb/bin/mongod --configsvr --dbpath /data/mongodb/data/config --port 20000 --logpath /data/mongodb/data/config.log --logappend --fork

Server4機器

mkdir -p /data/mongodb/data/config

啟動configserver3

/usr/local/mongodb/bin/mongod --configsvr --dbpath /data/mongodb/data/config --port 20000 --logpath /data/mongodb/data/config.log --logappend --fork


配置mongs

所有機器都啟動mongos

/usr/local/mongodb/bin/mongos --configdb MongoDB_config1.itings.com:20000,MongoDB_config2.itings.com:20000,MongoDB_config3.itings.com:20000 --port 30000 --chunkSize 5 --logpath /data/mongodb/data/mongos.log --logappend --fork

#mongs不需要dbpath

Configuring the Shard Cluster

連接到其中一個mongos進程,並切換到admin數據庫做以下配置

1. 連接到mongs,並切換到admin

/usr/local/mongodb/bin/mongo MongoDB_mongos1.itings.com:30000/admin

2. 加入shards

db.runCommand( { addshard : "shard1/MongoDB_shard11.itings.com:27017,MongoDB_shard12.itings.com:27017,MongoDB_shard13.itings.com:27017",name:"s1"} );

db.runCommand( { addshard : "shard2/MongoDB_shard21.itings.com:27018,MongoDB_shard22.itings.com:27018,MongoDB_shard23.itings.com:27018",name:"s2"} );

db.runCommand( { addshard : "shard3/MongoDB_shard31.itings.com:27017,MongoDB_shard32.itings.com:27017,MongoDB_shard33.itings.com:27017",name:"s3"} );

db.runCommand( { addshard : "shard4/MongoDB_shard41.itings.com:27018,MongoDB_shard42.itings.com:27018,MongoDB_shard43.itings.com:27018",name:"s4"} );

獲得分片概要信息:

db.printShardingStatus();

3. 可選參數

Name:用於指定每個shard的名字,不指定的話系統將自動分配

maxSize:指定各個shard可使用的最大磁盤空間,單位megabytes

樣例:

db.runCommand( { addshard : "shard1/MongoDB_shard11.itings.com:27017,MongoDB_shard12.itings.com:27017,MongoDB_shard13.itings.com:27017",name:"s1",maxSize: 512000} );


獲得分片概要信息:

db.printShardingStatus();

db.user.getShardDistribution();

db.runCommand( { listshards : 1 } );

查看各collection的狀態

db.printCollectionStats()

激活分片樣例

db.runCommand({"enablesharding" : "kaola_play"});

db.runCommand( { shardcollection : "kaola_play.user",key : {_id: 1} } );

附錄:mongodb運行模式介紹

Ø 單機模式

Ø Replication模式,這又可分為Master-Slave Replication和Replica Sets

Ø Sharding模式

1. 單機模式

這裡有目前的mongodb 1.6.2版本作介紹,mongodb安裝後目錄結構如下圖所示非常簡單,所佔空間也不到100M

通過執行bin/mongod –dbpath 就可以啟動mongodb實例(暫且也稱為實例),與mysql類似,一個mongodb實例裡可以創建多個數據庫。同一臺主機也可以起多個mongodb實例

1. Replication模式

MongoDB提供在sever之間異步數據複製功能,用於failover和數據冗餘。從1.6版本起多了replica sets功能,1.6版本之前只有Master/Slave replication結構

Ø Mster-Slave Relication 跟mysql的M/S結構很類似

Ø Relica Sets 1.6版本開始推出的新功能,能自動故障切換


關於Mster-Slave Relication和 Relica Sets,怎麼選擇呢?

Which should I use?

Ø if using <v1.6>

Ø if need automatic fail-over and recovery (easy administration): replica sets 想做倒自動故障切換,那就用replica sets

Ø if using --auth (security) or --slavedelay : for now, master/slave 想指定slave延遲時間,就用M/S

Ø if using sharding : either, but replica sets are best for clusters that are not small 用sharding架構時

Ø if risk averse : master/slave (replica sets are new to v1.6.0) 顧慮風險的話,用m/s

個人理解,從1.6版本推出relica sets開始,逐漸推薦用relica sets這種模式,能自動故障恢復,sharding模式中也會用到

2. Sharding模式

這是一種可以水平擴展的模式,在數據量很大時特給力,一般企業級應用中都會採用這種架構去構建monodb系統。

要構建一個 MongoDB Sharding Cluster,需要三種角色:

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

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

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

Sharding架構圖:


配置mongodb分片群集


"/<v1.6>


分享到:


相關文章: