monogo分片

b63bfd5d40377e5b6911af1532d41fb8d7a.jpg

一、概念

1)概述

可以满足MongoDB数据量大量增长的需求。

当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。

2)组件

下图展示了在MongoDB中使用分片集群结构分布:

fbd5883243ff3fa94e6c7fe506d274ae918.jpg

上图中主要有如下所述三个主要组件:

  • Shard:

用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障

  • Config Server:

mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。

  • Query Routers:

前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。

 

 

二、实际操作

分片结构端口分布如下:

Shard Server 1:27020

Shard Server 2:27021

Shard Server 3:27022

Config Server :27100

Route Process:27017

 

 

1、启动Shard Server

● 创建shard目录

 

# mkdir -p /www/mongoDB/shard/s0
# mkdir -p /www/mongoDB/shard/s1
# mkdir -p /www/mongoDB/shard/s2
# mkdir -p /www/mongoDB/shard/log

● 启动Shard

# /usr/local/mongoDB/bin/mongod --port 27020 --dbpath=/www/mongoDB/shard/s0 --logpath=/www/mongoDB/shard/log/s0.log --logappend --fork

# /usr/local/mongoDB/bin/mongod --port 27021 --dbpath=/www/mongoDB/shard/s1 --logpath=/www/mongoDB/shard/log/s1.log --logappend --fork
# /usr/local/mongoDB/bin/mongod --port 27022 --dbpath=/www/mongoDB/shard/s2 --logpath=/www/mongoDB/shard/log/s2.log --logappend --fork

2、启动Config Server

 

# mkdir -p /www/mongoDB/shard/config
# /usr/local/mongoDB/bin/mongod --port 27100 --dbpath=/www/mongoDB/shard/config --logpath=/www/mongoDB/shard/log/config.log --logappend --fork

注意:这里我们完全可以像启动普通mongodb服务一样启动,不需要添加—shardsvr和configsvr参数。因为这两个参数的作用就是改变启动端口的,所以我们自行指定了端口就可以。

 

3、启动Route Process

 

/usr/local/mongoDB/bin/mongos --port 27017 --configdb localhost:27100 --fork --logpath=/www/mongoDB/shard/log/route.log --chunkSize 500

说明:mongos启动参数中,chunkSize这一项是用来指定chunk的大小的,单位是MB,默认大小为200MB.

 

4、配置Sharding

使用MongoDB Shell登录到mongos,添加Shard节点

 

 

# /usr/local/mongoDB/bin/mongo admin --port 27017
MongoDB shell version: 2.0.7
connecting to: 127.0.0.1:40000/admin
> db.runCommand({ addshard:"localhost:27020" })
{ "shardAdded" : "shard0000", "ok" : 1 }
> db.runCommand({ addshard:"localhost:27021" })
{ "shardAdded" : "shard0001", "ok" : 1 }
> db.runCommand({ addshard:"localhost:27022" })
{ "shardAdded" : "shard0002", "ok" : 1 }

#设置分片存储的数据库

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

> db.runCommand({ shardcollection: "test.log", key: { id:1,time:1}})
{ "collectionsharded" : "test.log", "ok" : 1 }

5) 程序代码内无需太大更改,直接按照连接普通的mongo数据库那样,将数据库连接接入接口27017

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/weige1840/blog/2885343

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值