文章目录
  1. 1. 分片简介
  2. 2. 什么时候用到分片
  3. 3. 片键
  4. 4. 建立分片步骤
  5. 5. 其他操作指令
  6. 6. 其他

分片简介

分片是指将数据拆分,将其分散存在不同机器上的过程.有时也叫分区.将数据分散在不同的机器上,不需要功能强大的大型计算机就可以存储更多的数据,处理更大的负载.

MongoDB支持自动分片,可以摆脱手动分片的管理.集群自动切分数据,做负载均衡.


MongoDB分片的基本思想就是将集合切分成小块.这些块分散到若干片里面,每个片只负责总数据的一部分.应用程序不必知道

哪片对应哪些数据,甚至不需要知道数据已经被拆分了,所以在分片之前要运行一个路由进程,进程名mongos,这个路由器知道

所有数据的存放位置,所以应用可以连接它来正常发送请求.对应用来说,它仅知道连接了一个普通的mongod.路由器知道和片的

对应关系,能够转发请求到正确的片上.如果请求有了回应,路由器将其收集起来回送给应用.

在没有分片的时候,客户端连接mongod进程,分片时客户端会连接mongos进程.mongos对应用隐藏了分片的细节.

什么时候用到分片

1机器的磁盘空间不足
2单个的mongoDB服务器已经不能满足大量的插入操作
3想通过把大数据放到内存中来提高性能

片键

设置分片时,需要从集合里面选一个键,用该键的值作为数据拆分的依据.这个键成为片键.

假设有个文档集合表示的是人员,如果选择名字”name”做为片键,第一篇可能会存放名字以A-F开头的文档.第二片存G-P开头的文档,第三篇存Q-Z的文档.随着增加或删除片,MongoDB会重新平衡数据,是每片的流量比较均衡,数据量也在合理范围内(如流量较大的片存放的数据或许会比流量下的片数据要少些)

建立分片步骤

  1. 创建一个配置服务器

    mongod --dbpath "e:\mongo\dbs\config" --port 20000 --logpath "e:\mongo\logs\config\log.txt" --rest
    
  2. 创建路由服务器,并且连接配置服务器

    mongos --port 30000 --configdb 127.0.0.1:20000 --logpath "e:\mongo\logs\mongos\log.txt"
    
  3. 添加2个分片数据库

    mongod --dbpath "e:\mongo\dbs\1111" --port 1111 --logpath "e:\mongo\logs\1111\log.txt" --rest
    mongod --dbpath "e:\mongo\dbs\1112" --port 1112 --logpath "e:\mongo\logs\1112\log.txt" --rest
    
  4. 利用路由为集群添加分片(允许本地访问)

    db.runCommand({addshard:"127.0.0.1:1111",allowLocal:true})
    db.runCommand({addshard:"127.0.0.1:1112",allowLocal:true})
    

其他操作指令

  1. 打开数据分片功能,为数据库blog打开分片功能

    db.runCommand({"enablesharding":"blog"})
    
  2. 对集合user进行分片

    db.runCommand({"shardcollection":"blog.user","key":{"_id":1}})
    
  3. 查看配置库对于分片服务器的配置存储

    db.printShardingStatus()
    
  4. 查看集群对集合user的自动分片机制配置信息

    mongos> db.shards.find()
    
  5. 删除片

    db.runCommand({"removeshard":"127.0.0.1:10001"})
    

其他

  1. 保险起见的配置服务器集群

    设置多个配置服务器

    mongod --dbpath "e:\mongo\dbs\config" --port 20000 --logpath "e:\mongo\logs\config\log.txt" --rest
    mongod --dbpath "e:\mongo\dbs\config1" --port 20001 --logpath "e:\mongo\logs\config1\log.txt" --rest
    mongod --dbpath "e:\mongo\dbs\config2" --port 20002 --logpath "e:\mongo\logs\config2\log.txt" --rest
    

    将路由器和配置服务器连接起来

    mongos --port 30000 --configdb 127.0.0.1:20000,127.0.0.1:20001,127.0.0.1:20002 --logpath "e:\mongo\logs\mongos\log.txt"
    
  2. 分片与副本集一起使用

    如要添加副本集refactor,其中包含一个服务器127.0.0.1:10000(还有别的服务器),就可以用下列命令将其添加到集群中:

    db.runCommand({"addshard":"refactor/127.0.0.1:10000"})
    

    如果127.0.0.1:10000服务器挂了,mongos会知道它所连接的是一个副本集,并会使用新的主节点.

文章目录
  1. 1. 分片简介
  2. 2. 什么时候用到分片
  3. 3. 片键
  4. 4. 建立分片步骤
  5. 5. 其他操作指令
  6. 6. 其他