MongoDB极简教程 · Mongo · NoSQLmongoDB

05. 部署 MongoDB 分片集群

2020-06-16  本文已影响0人  闫军辉

简介

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

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

满足以上条件, 那我们至少需要 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();
分片实时状态分片实时状态
上一篇 下一篇

猜你喜欢

热点阅读