RELATEED CONSULTING
相关咨询
选择下列产品马上在线沟通
服务时间:8:30-17:00
你可能遇到了下面的问题
关闭右侧工具栏

新闻中心

这里有您想知道的互联网营销解决方案
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 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 实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。


分享名称:mongodb分片群集怎么配置?
浏览地址:http://scpingwu.com/article/iipdio.html