MongoDB分片

组件概念

1.路由服务-mongos
不要求副本集,每个mongos都是独⽴的,配置⼀摸⼀样
mongos没有数据⽬录,不存储数据
路由服务,提供代理,替⽤户向后去请求shard分⽚的数据,最终操作的节点
2.分⽚配置信息服务器-config
config服务在4.x之后强制要求必须是副本集
保存数据分配在哪个shard上
保存所有shard的配置信息
提供给mongos查询服务
3.⽚键-shard-key
数据放在哪个shard的分区规则
4.数据节点-shard
负责处理数据的节点,每个shard都是一个一主一从一仲裁的副本集

片键的类型

hash
区间

配置文件

shard:

sharding:
  clusterRole: shardsvr
rs.initiate()
rs.add("10.0.0.52:28200")
rs.addArb("10.0.0.53:28300")

config:

sharding:
  clusterRole: configsvr

mongos:

systemLog:
  destination: file
  logAppend: true
  path: /opt/mongos/log/mongos.log
processManagement:
  fork: true
  pidFilePath: /opt/mongos/pid/mongos.pid
  timeZoneInfo: /usr/share/zoneinfo
net:
  port: 60000
  bindIp: 127.0.0.1,$(ifconfig eth0|awk 'NR==2{print $2}')
sharding:
  configDB:
  configset/10.0.0.51:40000,10.0.0.52:40000,10.0.0.53:40000 #指定config集群

登录mongos添加shard信息

use admin
db.runCommand({addShard:‘shard1/10.0.0.51:28100,10.0.0.52:28200,10.0.0.53:28300’})
db.runCommand({addShard:‘shard2/10.0.0.52:28100,10.0.0.53:28200,10.0.0.51:28300’})
db.runCommand({addShard:‘shard3/10.0.0.53:28100,10.0.0.51:28200,10.0.0.52:28300’})
查看分片信息
db.runCommand({ listshards : 1 })
sh.status()

片键

  1. 创建一个库use admin db.runCommand( { enablesharding : "oldboy" } )
  2. 对hash集合创建索引use oldboy db.hash.ensureIndex( { id: "hashed" } )
  3. 集合开启片键use admin sh.shardCollection( "oldboy.hash",{ id: "hashed" } )

写入数据
use oldboy
for(i=1;i<10000;i++){db.hash.insert({“id”:i,“name”:“BJ”,“age”:18});}
db.hash.count()
9999

你可能感兴趣的:(MongoDB分片)