文档章节

MongoDB 集群(四)

lyg945
 lyg945
发布于 2016/11/21 22:40
字数 848
阅读 100
收藏 2

MongoDB Sharding集群

 

Diagram of a sample sharded cluster for production purposes.  Contains exactly 3 config servers, 2 or more ``mongos`` query routers, and at least 2 shards. The shards are replica sets.

sharding通过将数据集分布于多个也称作分片(shard)的节点上来降低单节点的访问压力。每个分片都是一个独立的数据库,所有的分片组合起来构成一个逻辑上的完整意义的数据库。因此,分片机制降低了每个分片的数据操作量及需要存储的数据量

A。shards:分片,即数据结点,存储数据和执行计算。为了保证高可用和数据一致性,生产环境中shards应该做成 replicasets(防止丢失数据)。集群中有一个primary shards,执行非分片的任务。

B。mongos(query routers):查询路由,负责client的连接,并把任务分给shards,然后收集结果。一个集群中可以有多个query routers(replica sets),以分担客户端请求(负载均衡)。

C。config server:配置服务器。保存了集群的元数据(比如数据放在哪个shards上),query router通过config server中的配置信 息决定把任务分配到哪个shards上。从3.2开始,config servers可以做成replica sets

shares:

    node1  mongodb.conf

  • dbpath=/usr/data/mongodb/shares/shares/node1/data/db
  • logpath=/usr/data/mongodb/shares/shares/node1/log/mongodb.log
  • logappend=true
  • fork=true
  • bind_ip=192.168.1.1
  • port=27033
  • replSet=shareset
     

    node2 mongodb.conf

  • dbpath=/usr/data/mongodb/shares/shares/node2/data/db
  • logpath=/usr/data/mongodb/shares/shares/node2/log/mongodb.log
  • logappend=true
  • fork=true
  • bind_ip=192.168.1.1
  • port=27034
  • replSet=shareset

    node3 mongodb.conf

  • dbpath=/usr/data/mongodb/shares/shares/node3/data/db
  • logpath=/usr/data/mongodb/shares/shares/node3/log/mongodb.log
  • logappend=true
  • fork=true
  • bind_ip=192.168.1.1
  • port=27035
  • replSet=shareset

启动并初始化副本集:rs.initiate({"_id":"shareset",members:[{"_id":1,"host":"192.168.1.1:27033"},{"_id":2,"host":"192.168.1.1:27034"},{"_id":3,"host":"192.168.1.1:27035"}]})

config: 

   config  mongodb.conf

  • dbpath=/usr/data/mongodb/shares/config/data/db
  • logpath=/usr/data/mongodb/shares/config/log/mongodb.log
  • logappend=true
  • fork=true
  • bind_ip=192.168.1.1
  • port=27032
  • configsvr=true
  • replSet=configset

   config1 mongodb.conf

  • dbpath=/usr/data/mongodb/shares/config1/data/db
  • logpath=/usr/data/mongodb/shares/config1/log/mongodb.log
  • logappend=true
  • fork=true
  • bind_ip=192.168.1.1
  • port=27031
  • configsvr=true
  • replSet=configset

 启动并初始化副本集:rs.initiate({"_id":"configset",members:[{"_id":1,"host":"192.168.1.1:27032"},{"_id":2,"host":"192.168.1.1:27031"}]})

mongos:

    mongodb.conf

  • #dbpath=/usr/data/mongodb/shares/mongos/data/db
  • logpath=/usr/data/mongodb/shares/mongos/log/mongodb.log
  • logappend=true
  • fork=true
  • bind_ip=192.168.1.1
  • port=27030
  • configdb=configset/192.168.1.1:27031,192.168.1.1:27032
  • #replSet=mongosconfig
     

启动  mongos --config mongodb.conf

把分片shares加入到集群,并观察状态

  • mongos> sh.addShard("shareset/192.168.1.1:27033")
  • { "shardAdded" : "shareset", "ok" : 1 }
  • mongos> sh.status()
  • --- Sharding Status --- 
  •   sharding version: {
  •     "_id" : 1,
  •     "minCompatibleVersion" : 5,
  •     "currentVersion" : 6,
  •     "clusterId" : ObjectId("583407ec56229b3fb91c7d4e")
  • }
  •   shards:
  •     {  "_id" : "shareset",  "host" : "shareset/192.168.1.1:27033,192.168.1.1:27034,192.168.1.1:27035" }
  •   active mongoses:
  •     "3.2.11" : 1
  •   balancer:
  •     Currently enabled:  yes
  •     Currently running:  no
  •     Failed balancer rounds in last 5 attempts:  0
  •     Migration Results for the last 24 hours: 
  •         No recent migrations
  •   databases:
     

设置数据库分片

在设置集合分片之前,必须设置要分片的数据库。连接mongos:

mongo --host <hostname of machine running mongos> --port <port mongos listens on>

执行:

sh.enableSharding("<database>")或者db.runCommand( { enableSharding: <database> } )

设置集合分片

1)确定集合的shard key。如果集合已经有数据,那么在shard key上创建index。如果没有数据,集群会自动为shard key创建索引

2)将集合加入分片

sh.shardCollection("<database>.<collection>", shard-key-pattern)

如:

sh.shardCollection("records.people", { "zipcode": 1, "name": 1 } )  shard key 为zipcode,如果有相同的zipcode再根据name来分

sh.shardCollection("people.addresses", { "state": 1, "_id": 1 } )      同上

sh.shardCollection("assets.chairs", { "type": 1, "_id": 1 } )               同上

sh.shardCollection("events.alerts", { "_id": "hashed" } )                  hash分片

 

 

 

备注

  mongoos没有副本集,假如挂了,应用都不能用了

 

 查看分片信息,分片是作用到集合上(表上)  看到区间,分片在哪个地方,哪个字段上

   db.chunks.find().toArray() 

   db.collection.find().toArray();

   db.database.find().toArray();  primary 数据库没有指定分片,会找主的分片进行存储               sh.status();

db.spring.status();

 

© 著作权归作者所有

上一篇: 区分来源
lyg945

lyg945

粉丝 39
博文 28
码字总数 15849
作品 0
上海
后端工程师
私信 提问
加载中

评论(0)

MongoDB集群部署(副本集模式)

一、需求背景 1、现状描述 (1)、针对近期出现的mongodb未授权的安全问题,导致mongodb数据会被非法访问。应安全平台部的要求,需要对所有mongodb进行鉴权设置,目前活动侧总共有4台,用于某X...

workming
2018/06/29
0
0
《阿里巴巴MongoDB4.0高级实战:基于Java Spring Boot 2.0》运维、监控、聚合、集群、监控等高级面试题

《阿里巴巴MongoDB4.0高级实战》阿里巴巴技术大牛 资深专家P9叶翔、专家徐雷. NoSQL排名第一!最流行的NoSQL数据库;谷歌、阿里巴巴、蚂蚁金服、腾讯、百度等一线互联网公司必备技能。 本系列...

徐雷frank
2018/11/01
0
0
在CentOS7上部署MongoDB分片群集

MongoDB分片概述 在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。 当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读...

xuyan184004
2018/09/19
0
0
MongoDB集群部署 - 带访问控制的分片副本集

1. 前言   Ceilometer将meter、event等数据保存在MongoDB中,之前将MongoDB部署在控制节点上,使用三副本模式,时间长了发现meter数据爆炸式增长,区区2T的磁盘捉襟见肘,而想删除旧数据,...

Sai18
2018/08/16
0
0
使用Docker和Kubernetes将MongoDB作为微服务运行

原文:Running MongoDB as a Microservice with Docker and Kubernetes 作者:Andrew Morgan 译者:徐雷 MongoDB是NoSQL排名第一的数据库,Docker是最流行的容器引擎,Kubernetes是谷歌开源的...

徐雷frank
2019/03/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Elasticsearch:shard 分配感知

osc_lnhxmt4i
13分钟前
16
0
Elasticsearch:分布式计分

osc_rnx2cje5
14分钟前
15
0
vue-element-admin中public中json中的代码没有打包到线上

解决的办法 将public中的文件放到static中,修改对应的路径,就可以解决这个bug了

osc_8hhlaimy
17分钟前
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部