MongoDB集群分片部署

MongoDB中使用分片集群结构分布:

三个主要组件:

  • Shard:

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

  • Config Server:

    mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。

  • Query Routers:

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

 

Shard 分片服,实例存储实际数据:

一个片区应该分布在不同机器上,片区采用副本集模式

副本集(replica set): 分为三个节点,主服,备服,仲裁服。在实际部署时,为了避免单点故障,同一个副本集中的成员,应该部署在不同主机上。

 

 

启动命令:

mongod –replSet=rs-test1 –dbpath=/data/mongodb/mongodb-4.4.2/shard1/db27017/ –port=27017 –logpath=/data/mongodb/mongodb-4.4.2/shard1/db27017/mongo.log –bind_ip=0.0.0.0 —shardsvr –fork

mongod –replSet=rs-test1 –dbpath=/data/mongodb/mongodb-4.4.2/shard1/db27018/ –port=27018 –logpath=/data/mongodb/mongodb-4.4.2/shard1/db27018/mongo.log –bind_ip=0.0.0.0 –shardsvr –fork

mongod –replSet=rs-test1 –dbpath=/data/mongodb/mongodb-4.4.2/shard1/db27019/ –port=27019 –logpath=/data/mongodb/mongodb-4.4.2/shard1/db27019/mongo.log –bind_ip=0.0.0.0 –shardsvr –fork

  初始化:
  mongo 127.0.0.1:27019

  cfg={_id:”rs-test1″, members:[{_id:0, host:’127.0.0.1:27017′, arbiterOnly:true},{_id:1, host:’127.0.0.1:27018′, priority:2},{_id:2, host:’127.0.0.1:27019′, priority:1}]};
  rs.initiate(cfg);

  //查看副本集状态
  rs.status()

ConfigServer 配置服

存储集群所有节点、分片数据路由信息。默认需要配置3个Config Server节点。

这里也应该是副本集模式,测试使用一个实例

mongod –replSet=rs-test-conf –dbpath=/data/mongodb/mongodb-4.4.2/dbconfig/ –port=27020 –logpath=/data/mongodb/mongodb-4.4.2/dbconfig/mongo.log –bind_ip=0.0.0.0  –fork —configsvr

  初始化:
    mongo 127.0.0.1:27020
    cfg={_id:”rs-test-conf”, members:[{_id:0, host:’127.0.0.1:27020′, priority:2}]};
    rs.initiate(cfg);

 

Mongos 路由

提供对外应用访问,所有操作均通过mongos执行。一般有多个mongos节点。数据迁移和数据自动平衡。

 部署多个mongos实例可支持高可用性和可扩展性。一个常见的模式是在每个应用程序服务器上部署一个 mongos实例。

在每个应用服务器上部署一个 mongos实例可以减少应用程序和mongos之间的网络延迟。

另外,也可以在专用主机上部署 mongos实例。大型部署适用,因为它使客户端应用程序服务器的数量与mongos节点的数量脱钩,可以更好地控制mongod实例服务的连接数。

mongos –port 27030 —configdb=rs-test-conf/127.0.0.1:27020 –logpath=/data/mongodb/mongodb-4.4.2/route.log –bind_ip=0.0.0.0  –fork

  添加分片:
  mongo 127.0.0.1:27030

  use admin;
  sh.addShard(“rs-test1/127.0.0.1:27017”);
  sh.addShard(“rs-test1/127.0.0.1:27018”);
  sh.addShard(“rs-test1/127.0.0.1:27019”);

  查看状态:
  sh.status()

 

Tags: