要构建一个 MongoDB Sharding Cluster(集群),需要三种角色:
Shard Server: mongod 实例,用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个relica set承担,防止主机单点故障
Config Server: mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。
Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一数据库
MongoDB架构
![](https://i-blog.csdnimg.cn/blog_migrate/c1e01d9d158b04cbae769ba01c797e57.png)
- 分别在3台机器运行一个mongod实例(称为mongod shard11,mongod shard12,mongod shard13)组织replica set1,作为cluster的shard1
- 分别在3台机器运行一个mongod实例(称为mongod shard21,mongod shard22,mongod shard23)组织replica set2,作为cluster的shard2
- 每台机器运行一个mongod实例,作为3个config server
- 每台机器运行一个mongs进程,用于客户端连接
系统环境:Ubuntu10.2
MongoDB版本:Mongodb1.81
由于没有现实中没有实际这么多台服务,这个配置我就只在一台Ubuntu服务器中完成配置,其它机器配置应该是一样。在有真实机器的环境中注意各个服务器之间的MongoDB的版本一定要一致,不然可能会出现rs.initiate(config)不能正确添加的问题
首先分配shard
1. mongodb端口 10001和10011 为一组shard,和一组Replica Set
步骤:
1)$ mkdir -p /usr/MonogoData/shard1_10001
2)$ mkdir -p/usr/MonogoData/shard1_10011
3)
运行完成后,进入任意一个MongoDB端口,配置Replica Set
config={_id:'shard1',members:[{_id:0,host:'192.168.0.182:10001'},{_id:1,host:'192.168.0.182:10011'}]}
rs.initiate(config)
rs.status()
![](https://i-blog.csdnimg.cn/blog_migrate/5a951611c64125c30e472ab0e18df9a4.png)
接下来配置第2组shard
1)$ mkdir -p /usr/MonogoData/shard3_10003
2)$ mkdir -p/usr/MonogoData/shard3_10033
3)
$ ~/liaoyong/down/mongodb1.8.2/bin/mongod --fork --shardsvr --port 10003 --dbpath /usr/MonogoData/shard3_10003/ --logpath /usr/MonogoData/shard3_10003/log.log --replSet shard3 --rest运行完成后,进入任意一个MongoDB端口,配置Replica Set
config={_id:'shard3',members:[{_id:0,host:'192.168.0.182:10003'},{_id:1,host:'192.168.0.182:10033'}]}
rs.initiate(config)
rs.status()
![](https://i-blog.csdnimg.cn/blog_migrate/14b772681cb00505ee0120eb22dc3874.png)
好了,现在开始配置1台Mongodb Config
$ mkdir -p /usr/MonogoData/Config_20001
查看是否mongodb的进程都起来了
下面接着配置Mongs
$ mkdir -p /usr/MonogoData/master
--configdb "192.168.0.182:20001"
进入Mongos
$ ~/liaoyong/down/mongodb1.8.2/bin/mongo --port 40000
>use admin
>db.runCommand({ addshard:'shard3/192.168.0.182:10003,192.168.0.182:10033' })
>db.runCommand({listshards:1})
![](https://i-blog.csdnimg.cn/blog_migrate/a1a6b75878f2d60e5565a878284158cd.png)
接下来进行切片
db.runCommand({shardcollection:'liaoyongdb.test',key:{_id:1}}) #指定切片数据的表
printShardingStatus()
![](https://i-blog.csdnimg.cn/blog_migrate/4b1e69b19bbf624f99665c8779bf4c85.png)
我这里由于是同一台电脑,我插入了1百w数据的时候,内存都用完了,下面就是大家自己试试了。
希望能帮助大家共同学习MongoDB。