mongodb分片

mongodb分片共有四个组件:mongos、config server、shard、replica set

mongos,数据库集群请求的入口,所有的请求都通过mongos进行协调,不需要在应用程序添加一个路由选择器,mongos自己就是一个请求分发中心,它负责把对应的数据请求请求转发到对应的shard服务器上。在生产环境通常有多mongos作为请求的入口,防止其中一个挂掉所有的mongodb请求都没有办法操作。

 

config server,顾名思义为配置服务器,存储所有数据库元信息(路由、分片)的配置。mongos本身没有物理存储分片服务器和数据路由信息,只是缓存在内存里,配置服务器则实际存储这些数据。mongos第一次启动或者关掉重启就会从 config server 加载配置信息,以后如果配置服务器信息变化会通知到所有的 mongos 更新自己的状态,这样 mongos 就能继续准确路由。在生产环境通常有多个 config server 配置服务器,因为它存储了分片路由的元数据,这个可不能丢失!就算挂掉其中一台,只要还有存货, mongodb集群就不会挂掉。

 

shard,这就是传说中的片了,用来将数据读写压力分散到不同的机器上,片越多,数据则越分散,数据吞吐量也会越高,需要的机器资源也会更多。通常情况下,需要将每个片做成副本集,以防止其中某个片出问题后则这个片上的数据不可用。

replica set(副本集),如果没有 replica set 是个不完整架构,假设其中的一个分片挂掉那四分之一的数据就丢失了,所以在高可用性的分片架构还需要对于每一个分片构建 replica set 副本集保证分片的可靠性。官方推荐的是一个replica set由3个副本组成,如果机器不够用,可以 2个副本 + 1个仲裁。

首先下载安装程序 官方下载地址

  1. 搭建configserver 
    由于configserver的重要性,强烈推荐由至少3台机器组成configserver副本集

    1. 解压并创建配置文件,并复制到3台机器上

    2. 配置文件中增加

      配置文件

      sharding:
      clusterRole: configsvr

    3. 启动所有实例,并登录其中一台机器,运行mongo程序(如果需要打开登录认证功能,参见:为MongoDB添加身份验证

    4. 执行初始化副本集脚本

      示例

      rs.initiate({
      _id: “candao_qc_config”,
      configsvr: true,
      members: [
      { _id : 0, host : “10.200.102.36:27117” ,“priority”:100 },
      { _id : 1, host : “10.200.102.41:27117”,“priority”:1 },
      { _id : 2, host : “10.200.102.45:27117”,“priority”:1 }
      ]
      })

    5. 等待初始化完成,此时configserver副本集就搭建完成了

  2. 搭建shard server
    每个shard负责存储集群的一部分数据,如果数据损坏,则会导致这部分数据丢失,重要性不言而喻,同样强烈推荐由至少3台机器组成副本集
    搭建副本集不在赘述,参见:副本集的搭建,与副本集不同的是,需要在每台机器的配置文件中添加如下配置:

    配置示例

    sharding:
    clusterRole: shardsvr

    想要分多少个片,就按述方法配置多少个副本集

  3. 配置mongos程序

    1. 创建mongos.conf

      配置示例

      net:
      port: 27017
      ##日志文件
      systemLog:
      destination: file
      path: “mongod.log”
      logAppend: true
      processManagement:
      ##以后台进程运行
      fork: true
      sharding:
      configDB: candao_qc_config/10.200.102.36:27117,10.200.102.45:27117,10.200.102.41:27117

    2. 启动mongos进程./mongos -f mongos.conf (通常可以启动多个,可以将mongos进程部署在部署项目的机器上)

  4. 在mongos上将配置好的分片副本集加入分片集群 (直接在bin下:./mongo)

    配置示例

    sh.addShard( “candao_qc_shard1/10.200.102.31:27027”);
    sh.addShard( “candao_qc_shard2/10.200.102.31:27028”);
    sh.addShard( “candao_qc_shard3/10.200.102.31:27029”);

  5. 将要分片的数据库开启分片 sh.enableSharding(“datacenter_qc”)

  6. 将表进行分片 sh.shardCollection(“datacenter_qc.order“, { “createTime”:1, “brandId”:1 } )

    至此,分片搭建完成,如果刚才分片的集合中有数据,此时需要等待后台进程将数据按照片键均匀地迁移到其他机器上

 

  1.  在工具或者程序中,需要用可读可写账号进行访问mongo的数据,这个时候,需要在configserver中进行创建原来的集群中的可读、可写的账号。

本文出自 “萌哥,卡恩” 博客,请务必保留此出处http://xjf721.blog.51cto.com/889836/1902034

IT文库 » mongodb分片
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址