概述

Shard

一个分片包含一个分片集群的一个分片数据子集。集群的碎片一起保存集群的整个数据集。 从MongoDB 3.6开始,分片必须部署为副本集,以提供冗余和高可用性。 用户、客户端或应用程序只能直接连接到一个分片来执行本地管理和维护操作。 在单个分片上执行查询只返回数据的子集。连接到mongos执行集群级操作,包括读或写操作

Config Servers(metadata)

配置服务器存储分片集群的元数据。元数据反映了分片集群中所有数据和组件的状态和组织。元数据包括每个分片上的块列表和定义块的范围。

mongos实例缓存这些数据,并使用它将读写操作路由到正确的分片。mongos会在集群的元数据发生变化时更新缓存,比如Chunk splitting或者添加一个shard。分片还从配置服务器读取块元数据。

配置服务器还存储身份验证配置信息,例如基于角色的访问控制或集群的内部身份验证设置。

MongoDB还使用配置服务器来管理分布式锁。

每个分片集群必须有自己的配置服务器。不要对不同的分片集群使用相同的配置服务器。

Mongos(router)

MongoDB mongos实例将查询和写入操作路由到分片集群中的分片。从应用程序的角度来看,Mongos为分片集群提供了唯一的接口。应用程序从不直接与碎片连接或通信。

mongos通过缓存配置服务器的元数据来跟踪哪个分片上有哪些数据。mongos使用元数据将操作从应用程序和客户端路由到mongod实例。mongos没有持久状态,消耗的系统资源最少。

最常见的做法是在与应用程序服务器相同的系统上运行mongos实例,但也可以在碎片或其他专用资源上维护mongos实例。

Mongo分片集群6.0.3版本 Sharding 模式部署_6.0.3版本


一、架构

OS: Centos 7.4

Mongos:10.xxxxx.43:28017

Config Server Replica Set:10.xxxxx.43:28018,10.xxxxx.44:28018,10.xxxxx.48:28018

Shard Replica Sets:10.xxxxx.43:28021,10.xxxxx.44:28021,10.xxxxx.48:28021


二.部署准备

下载mongodb-linux-x86_64-rhel70-6.0.3.tgz

下载地址:​​https://www.mongodb.com/try/download/community​


Shell工具mongosh-1.6.1-x64.msi

下载地址:​​https://www.mongodb.com/try/download/shell​

2.1 所有节点新建主目录

注:目录结构可以自定义

/bd01/mongo

2.2所有节点新建Config Server目录

mkdir  -p /bd01/mongo/csdata/{conf,log,data}

目录结构说明:

conf: 配置目录

log: 日志目录

data:数据目录

 

2.3 所有节点新建Shard 目录

mkdir -p  /bd01/mongo/shdata/{conf,log,data}

目录结构说明如2.2

 

2.4 mongos节点新建mongos目录

/bd01/mongo/mongos/{conf,log}

 

2.5 上传部署包

将部署包上传至所有节点/bd01/mongo/ 目录下,并解压。

mongo运行包说明:

Config Server和Shard都需要通过 mongod运行

mongos(Router)通过 mongos运行

Mongo分片集群6.0.3版本 Sharding 模式部署_mongodb_02


三、部署Shard集群

3.1 创建配置文件

在所有节点,创建配置文件/bd01/mongo/shdata/conf/mongodb.conf

systemLog:

  destination: file

  path: /bd01/mongo/shdata/logs/mongodb.log   

  logAppend: true

storage:

  journal:

    enabled: true

  dbPath: /bd01/mongo/shdata/data

  directoryPerDB: true

  #engine: wiredTiger

  wiredTiger:

    engineConfig:

      cacheSizeGB: 1

      directoryForIndexes: true

    collectionConfig:

      blockCompressor: zlib

    indexConfig:

      prefixCompression: true

net:

  bindIp: 0.0.0.0

  port: 28021

 

processManagement:

  timeZoneInfo: /usr/share/zoneinfo

 

#security:  

#  keyFile: /bd01/mongo/shdata/mongokeyfile.key

#  authorization: enabled

 

replication:

  oplogSizeMB: 2048

  replSetName: sh1

sharding:

  clusterRole: shardsvr

processManagement:

  fork: true

 

3.2 启动实例

进入/bd01/mongo目录

mongodb-linux-x86_64-rhel70-6.0.3/bin/mongod -f shdata/conf/mongodb.conf(所有节点都要执行)

启动成功后,会有如下提示

Mongo分片集群6.0.3版本 Sharding 模式部署_分片集群_03

3.3初始化副本集

使用mongosh 连接任意一个shard节点(只需在一个节点上执行)

注:mongosh通过<部署准备>中mongosh-1.6.1-x64.msi安装,也可以安装linux版本

​mongosh --host <hostname> --port <port>​

Mongo分片集群6.0.3版本 Sharding 模式部署_Sharding_04

初始化

配置解读,相关参数与shard配置文件对应关系:
1._id: 对应的名字为:replSetName

2.Members数组中的id,可以按序定义

3.host: 对应config 的IP和端口

rs.initiate(

  {

    _id : "sh1",

    members: [

      { _id : 0, host : "10.xxxx.43:28021" },

      { _id : 1, host : "10.xxxx.44:28021" },

      { _id : 2, host : "10.xxxx.48:28021" }

    ]

  }

)

 

返回OK表示初始化成功

Mongo分片集群6.0.3版本 Sharding 模式部署_mongodb_05

可以通过rs.config(),查看副本集状态

Mongo分片集群6.0.3版本 Sharding 模式部署_mongodb_06

四、部署config集群

4.1 创建配置文件

在所有节点,创建配置文件/bd01/mongo/csdata/conf/mongodb.conf

 

systemLog:

  destination: file

  path: /bd01/mongo/csdata/log/mongocs.log

  logAppend: true

storage:

  journal:

    enabled: true

  dbPath: /bd01/mongo/csdata/data

  directoryPerDB: true

  #engine: wiredTiger

  wiredTiger:

    engineConfig:

      cacheSizeGB: 1

      directoryForIndexes: true

    collectionConfig:

      blockCompressor: zlib

    indexConfig:

      prefixCompression: true

net:

  bindIp: 0.0.0.0

  port: 28018

replication:

  oplogSizeMB: 2048

  replSetName: configReplSet

sharding:

  clusterRole: configsvr

processManagement:

  fork: true

 

4.2 启动实例

进入/bd01/mongo目录

mongodb-linux-x86_64-rhel70-6.0.3/bin/mongod -f csdata/conf/mongocs.conf(所有节点都要执行)

Mongo分片集群6.0.3版本 Sharding 模式部署_6.0.3版本_07

4.3初始化副本集

使用mongosh 连接任意一个config节点(只需在一个节点上执行)

​mongosh --host <hostname> --port <port>​

Mongo分片集群6.0.3版本 Sharding 模式部署_6.0.3版本_08

初始化

配置解读,相关参数与config配置文件对应关系:
1._id: 对应的名字为:replSetName

2.Members数组中的id,可以按序定义

3.host: 对应config 的IP和端口

4.configsvr:对应clusterRole

rs.initiate(

  {

    _id: "configReplSet",

    configsvr: true,

    members: [

      { _id : 0, host : "10.xxxx.43:28018" },

      { _id : 1, host : "10.xxxx.44:28018" },

      { _id : 2, host : "10.xxxx.48:28018" }

    ]

  }

)

 

返回OK表示初始化成功

Mongo分片集群6.0.3版本 Sharding 模式部署_Sharding_09

可以通过rs.config(),查看副本集状态

Mongo分片集群6.0.3版本 Sharding 模式部署_分片集群_10

五、部署mongos

5.1 创建配置文件

/bd01/mongo/mongosdata/conf/mongos.conf

configReplSet:对应config配置中replSetName

systemLog:

  destination: file

  path: /bd01/mongo/mongosdata/logs/mongos.log

  logAppend: true

net:

  bindIp: 0.0.0.0

  port: 28017

sharding:

  configDB: configReplSet/10.67.90.43:28018,10.67.90.44:28018,10.67.90.48:28018

processManagement:

  fork: true

5.2 启动实例

​mongodb-linux-x86_64-rhel70-6.0.3/bin/mongos -f mongosdata/conf/mongos.conf​

Mongo分片集群6.0.3版本 Sharding 模式部署_6.0.3版本_11

5.3 添加shard集群

​mongosh --host <hostname> --port <port>​

Mongo分片集群6.0.3版本 Sharding 模式部署_Sharding_12

sh1:对应shard配置文件中的replSetName

sh.addShard("sh1/10.xxxx.43:28021,10.xxxx.44:28021,10.xxxx.48:28021")

Mongo分片集群6.0.3版本 Sharding 模式部署_6.0.3版本_13

通过sh.status()查看集群详情

Mongo分片集群6.0.3版本 Sharding 模式部署_Sharding_14