mongodb集群与分片的配置说明

Shardingcluster介绍

这是一种可以水平扩展的模式,在数据量很大时特给力,实际大规模应用一般会采用这种架构去构建monodb系统。

系统分为需要三种角色:

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

Config Server:mongod 实例,存储了整个 Cluster Metadata,其中包括 chunk 信息。

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

架构图:

本系统环境架构图:

注:mongoDB集群最好是奇数数个服务器,本例介绍的是三台服务器

  1. 分别在3台机器上运行一个mongod实例(称为mongod shard11,mongod shard12,mongod shard13)组成replica set1 ,作为cluster的shard1

  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); 

2、同样的方法,配置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℃ /
标签:mongodb集群 mongodb
上一篇下一篇

转载于:https://blog.51cto.com/fangwei009/1531390

mongodb集群与分片的配置说明相关推荐

  1. MongoDB集群之分片技术应用 —— 学习笔记

    课程链接:https://www.imooc.com/learn/501 一.什么是分片? 分片:将数据进行2拆分,将数据水平的分散到不同的服务器上. 二.为什么要分片? 架构上:读写均衡.去中心化 ...

  2. MongoDB集群之分片集群 Shard Cluster

    1.什么是分片 分片(sharding)是MongoDB用来将大型集合水平分割到不同服务器(或者复制集)上所采用的方法.不需要功能强大的大型计算机就可以存储更多的数据,处理更大的负载. 2.为什么要分 ...

  3. mongodb集群——配置服务器放分片meta信息,说明meta里包含了哪些数据信息

    在搭建分片之前,先了解下分片中各个角色的作用. ① 配置服务器.是一个独立的mongod进程,保存集群和分片的元数据,即各分片包含了哪些数据的信息.最先开始建立,启用日志功能.像启动普通的mongod ...

  4. 搭建mongodb集群(副本集+分片)

    完整的搭建mongodb集群(副本集+分片)的样例... 准备四台机器,各自是bluejoe1,bluejoe2,bluejoe3,以及bluejoe0 副本集及分片策略确定例如以下: 将创建3个副本 ...

  5. mongodb集群搭建详情分片+副本集

    在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置服务器等. 相关概念 mongodb集群架构图: 从图中可以看到有四个组件:mongos.config server.shard.repl ...

  6. mongodb 集群分片布署

    在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会出现一台机器硬件瓶颈问题的.而mongodb主打的就是海量数据架构,他不能解决海量数据怎么行!不行!"分片& ...

  7. mongodb集群原理

    一.架构 在大数据领域常常提到的4V特征中,Volume(数据量大)是首当其冲被提及的.由于单机垂直扩展能力的局限,水平扩展的方式则显得更加的靠谱.MongoDB 自带了这种能力,可以将数据存储到多个 ...

  8. 搭建高可用mongodb集群(二)—— 副本集

    2019独角兽企业重金招聘Python工程师标准>>> 在上一篇文章<搭建高可用MongoDB集群(一)--配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能 ...

  9. mongodb集群 java_MongoDB集群JavaAPI插入数据

    在完成了MongoDB集群的搭建工作之后(见 http://www.linuxidc.com/Linux/2012-01/50773.htm),需要做的就是建立一个数据库,建立表,设置分片主键来初始化 ...

最新文章

  1. html5 audio标志改变音量,HTML5之Audio(二)—— processor调节音量
  2. python标准库学习4
  3. 数据库基准测试:database bencnmark --生成大量随机测试数据
  4. MaximumGap的思想
  5. 二数和,三数和,四数和的优化总结
  6. stdafx.h的作用以及原理
  7. 【java/C# 服务器】IOS 配置推送证书 p12文件流程 - 勿以己悲
  8. nat,acl及单臂路由实验(ensp)
  9. python中idle怎么打开_为什么我的python脚本只打开IDLE?
  10. 设置桌面上计算机的图标更改,电脑如何修改桌面应用的图标
  11. Redis与数据库的数据一致性
  12. 虚拟机架设服务器u盘不显示盘符,【图文详解】怎么解决win7虚拟机无法识别U盘问题...
  13. 英文文献很难找,哪里可以找英文文献呢?
  14. php判断信用卡,php校验信用卡卡号代码
  15. Ubuntu下安装glad
  16. Javamail 发送163邮件
  17. Android获取天气预报Demo
  18. linux防火墙过滤规则
  19. 今日multi_turtlebot3尝试
  20. 常用的图数据库(Neo4j、FlockDB、AllegroGrap、GraphDB、InfiniteGraph、TITAN、OrientDb)

热门文章

  1. 对类Vue的MVVM前端库的实现
  2. JDK+Tomcat搭建JSP运行环境--JSP基础
  3. cocos2d-x 帧动画
  4. HDU 1003 Maxsum
  5. Hibernate映射关系总结篇
  6. 向mvc controller传递json数组
  7. vscode的 jsonp 配置文件
  8. web worker原理 SSE原理
  9. 理解正向代理和反向代理
  10. ASP.NET Web API 应用教程(一) ——数据流使用