05. 部署 MongoDB 分片集群

作者: 闫军辉 | 来源:发表于2020-06-16 06:59 被阅读0次

简介

复制集仅仅解决了高可用和数据安全的痛点, 整个架构的写入性能会局限于主节点, 而且单个副本集限制在12节点以内, 当业务发展到一定规模, 终将到达副本集的天花板,再加上垂直扩展的成本考虑, 就有了基于副本集之上构建了一个支持横向扩展的分片集群架构.
分片集群是将数据"均匀"的分布到各个数据节点, 会根据请求数据所处节点来调度所有的读写操作, 因此, 不再有任何一个节点会成为整个集群的瓶颈. 当然, 与复制集相对比, 分片集群要更复杂.

为保证最低限度的高可用和数据安全, 生产环境给出如下建议:

  • 至少要有 3 个或以上 Config 节点, 以保证所有的数据分片信息的数据安全
  • 至少要有 2 个或以上 Shard 节点, 以保证所有分片数据的冗余安全
  • 每一个 Shard 节点, 均由 一个三成员的复制集构成
  • 至少要有 2 个或以上 Mongos 节点, 以保证路由调度的性能和高可用
  • 以上节点均需单独部署, 以避免各服务互相抢占资源,导致性能无法满足需求

满足以上条件, 那我们至少需要 3(Config) + 3(Replication)*2(Shard) + 2(Mongos) = 11 台机器
当然为了控制成本, 在满足性能需求的前提下, 也可以有选择的将以上服务共同部署

分片集群最小生产架构分片集群最小生产架构

架构规划

在开始之前一定要把各服务器信息汇总一个表格, 做好规划, 然后按照表格信息去配置服务器

计算机名 IP 角色 replSetName
shard-01_01 192.168.31.201 shard 成员一 节点一 replData_01
shard-01_02 192.168.31.202 shard 成员一 节点二
shard-01_03 192.168.31.203 shard 成员一 节点三
shard-02_01 192.168.31.204 shard 成员二 节点一 replData_02
shard-02_02 192.168.31.205 shard 成员二 节点二
shard-02_03 192.168.31.206 shard 成员二 节点三
mongos-01 192.168.31.207 mongos 节点一
mongos-02 192.168.31.208 mongos 节点二
config-01 192.168.31.209 config 节点一 replConfig
config-02 192.168.31.210 config 节点二
config-03 192.168.31.211 config 节点三

部署 Shard

根据 04. 副本集 配置两组副本集作为两个 Shard 成员, 注意区分两组 Shard 的 replSetName
我们分别把 replSetName 设置为 replData_01replData_02

Shard成员中每个Mongod实例, 需要增加以下配置, 以支持分片集群

sharding:
   clusterRole: shardsvr

部署 Config

根据 04. 副本集 配置一组 Config, 注意设置 ConfigreplSetName, 我们这里设置为 replConfig
Config 的复制集 初始化参数需要增加 configsvr: true .

rs.initiate(
{
    _id: "replConfig",
    version: 1,
    configsvr: true,
    members: [
    {_id:0,host:"192.168.31.209:27017"},
    {_id:1,host:"192.168.31.210:27017"},
    {_id:2,host:"192.168.31.211:27017"}
    ]
});

部署 Mongos

  1. 安装 Mongos 服务
rpm -ivh https://repo.mongodb.org/yum/redhat/6/mongodb-org/4.2/x86_64/RPMS/mongodb-org-mongos-4.2.6-1.el6.x86_64.rpm
  1. 配置

创建 /data/mongodb/mongos.conf 文件, 配置内容如下

systemLog:
  destination: file
  logAppend: true
  path: /data/mongodb/mongos.log

security:
  keyFile: /data/mongodb/mongo.key  //config 复制集的Key

replication:
   localPingThresholdMs: 10

# network interfaces
net:
  port: 27000
  bindIp: 0.0.0.0

sharding:
   configDB: replConfig/192.168.31.209:27017,192.168.31.210:27017,192.168.31.211:27017 
   # Config 复制集各节点信息
  1. 启动 Mongos
nohup /usr/bin/mongos -f /data/mongodb/mongos.conf >/dev/null 2>&1 &
  1. 添加分片成员
use admin;
db.auth("root", "123456")
sh.addShard("replData_01/192.168.31.201:27017,192.168.31.202:27017,192.168.31.203:27017");
sh.addShard("replData_02/192.168.31.204:27017,192.168.31.205:27017,192.168.31.206:27017");

  1. 查看状态
sh.status();
集群状态信息集群状态信息

测试

use admin;
db.auth("root", "123456");
use sdb;
sh.enableSharding("sdb")
db.number.insert({"n":0,"name":"张三"});
db.number.ensureIndex({"n":1})
sh.shardCollection("sdb.number",{"n":1})
var arr=[];
for(var i=0;i<100000;i++){
  var name = "name_" + i
  arr.push({"n":i,"name":name});
}
db.number.insertMany(arr);

这时候, 我们可以另外开一个终端实时查看分片状态

use admin;
db.auth("root", "123456");
sh.status();
分片实时状态分片实时状态

相关文章

  • 05. 部署 MongoDB 分片集群

    简介 复制集仅仅解决了高可用和数据安全的痛点, 整个架构的写入性能会局限于主节点, 而且单个副本集限制在12节点以...

  • 【MongoDB】— CentOS76部署mongodb分片集群

    CentOS76部署mongodb分片集群Sharding Cluster通过多节点和多实例部署。 1分片集群规划...

  • mongoDB(三) mongoDB分片集群

    mongoDB分片集群 介绍 解决数据分片,防止数据丢失生产环境需要擦用分片+副本集的部署方式 组成部分 rout...

  • Mongodb分片集群搭建

    MongoDb分片集群搭建 基于mongodb3.6 分片集群的权限控制 Brief: 内部通过keyfile控制...

  • Mongodb分片集群部署

    Mongodb分片概括 分片在多台服务器上分布数据的方法, Mongodb使用分片来支持具有非常大的数据集和高吞吐...

  • MongoDB分片集群部署

    一、环境说明: 1、操作系统:CentOS Linux release 7.4.1708 2、mongodb版本:...

  • Mongodb分片集群部署

    Mongodb分片概括 分片在多台服务器上分布数据的方法, Mongodb使用分片来支持具有非常大的数据集和高吞吐...

  • MongoDB分片集群搭建

    本文主要介绍了mongoDB分片集群概念,以及分片集群搭建过程,方便下次参考。 概念 分片(sharding)是一...

  • MongoDB 存储引擎

    简单回顾 上次我们说到了关于 mongodb 的集群,分为主从集群和分片集群,对于分片集群中的分片这里需要注意如下...

  • 分片集群中的分片集合

    分片集群中的分片集合 MongoDB 中 分片集群有专门推荐的模式,例如 分片集合 它是一种基于分片键的逻辑对文档...

网友评论

    本文标题:05. 部署 MongoDB 分片集群

    本文链接:https://www.haomeiwen.com/subject/mozkxktx.html