MongoDB 分片集群

每日一句

Medalist don't grow on trees, you have to nurture them with love, with hard work, with dedication.
金牌选手不会从天而降,你必须用热爱、刻苦和投入来浇灌他们。

概述

分片(sharding)是一种垮多台机器分布数据的方法,MongoDB使用分片来支持具有非常大的数据集和高吞吐量操作的部署。

分片(sharding)是指将数据拆分,将其分散存在不同的机器上的过程。有时也用分区(partitioning)来表示这个概念。将数据分散到不同的机器上,不需要功能强大的大型计算机就可以储存更多的数据,处理更多的负载。

具有大型数据集或高吞吐量应用程序的数据库系统可以会挑战单个服务器的容量。例如,高查询率会耗尽服务器的CPU容量。工作集大小大于系统的RAM会强调磁盘驱动器的I / O容量。

有两种解决系统增长的方法:垂直扩展和水平扩展。

  • 垂直扩展意味着增加单个服务器的容量,例如使用更强大的CPU,添加更多RAM或增加存储空间量。可用技术的局限性可能会限制单个机器对于给定工作负载而言足够强大。此外,基于云的提供商基于可用的硬件配置具有硬性上限。结果,垂直缩放有实际的最大值。
  • 水平扩展意味着划分系统数据集并加载多个服务器,添加其他服务器以根据需要增加容量。虽然单个机器的总体速度或容量可能不高,但每台机器处理整个工作负载的子集,可能提供比单个高速大容量服务器更高的效率。扩展部署容量只需要根据需要添加额外的服务器,这可能比单个机器的高端硬件的总体成本更低。MongoDB支持通过分片进行水平扩展。

组件

MongoDB分片群集包含以下组件:

  • 分片(存储):每个分片包含分片数据的子集。每个分片都可以部署为副本集。
  • Mongos(路由):mongos充当查询路由器,在客户端应用程序和分片集群之间提供接口。
  • config servers:配置服务器存储集群的元数据和配置设置。从MongoDB3.4开始,必须将配置服务器部署为副本集(CSRS)

下图描述了分片集群中组件的交互:

MongoDB在集合级别对数据进行分片,将集合数据分布在集群中的分片上。

实例

两个分片节点副本集(3+3)+一个配置节点副本集(3)+两个路由节点(2),共11个服务节点。

分片节点副本集的创建

所有的的配置文件都直接放到 sharded_cluster 的相应的子目录下面,默认配置文件名字:mongod.conf

第一套副本集

1 准备存放数据和日志的目录

#-----------myshardrs01 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27018/log \ & 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27018/data/db \ & 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27118/log \ & 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27118/data/db \ & 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27218/log \ & 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27218/data/db

2 新建或修改配置文件:vim /mongodb/sharded_cluster/myshardrs01_27018/mongod.conf

systemLog: 
  #MongoDB发送所有日志输出的目标指定为文件 
  destination: file
  #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径 
  path: "/mongodb/sharded_cluster/myshardrs01_27018/log/mongod.log" 
  #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。 
  logAppend: true 
storage: 
  #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。 
  dbPath: "/mongodb/sharded_cluster/myshardrs01_27018/data/db" 
  journal: 
    #启用或禁用持久性日志以确保数据文件保持有效和可恢复。 
    enabled: true 
processManagement: 
  #启用在后台运行mongos或mongod进程的守护进程模式。 
  fork: true 
  #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
  pidFilePath: "/mongodb/sharded_cluster/myshardrs01_27018/log/mongod.pid" 
net:
  #服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip 
  #bindIpAll: true 
  #服务实例绑定的IP 
  bindIp: localhost,192.168.0.2 
  #bindIp 
  #绑定的端口 
  port: 27018 
replication: 
  #副本集的名称 
  replSetName: myshardrs01 
sharding: 
  #分片角色 
  clusterRole: shardsvr

sharding.clusterRole:

Value Description
configsvr Start this instance as a config server. The instance starts on port 27019 by default.
shardsvr Start this instance as a shard. The instance starts on port 27018 by default.

注意:

设置sharding.clusterRole需要mongod实例运行复制。 要将实例部署为副本集成员,请使用

replSetName设置并指定副本集的名称。

3 新建或修改配置文件: vim /mongodb/sharded_cluster/myshardrs01_27118/mongod.conf

systemLog: 
  #MongoDB发送所有日志输出的目标指定为文件 
  destination: file
  #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径 
  path: "/mongodb/sharded_cluster/myshardrs01_27118/log/mongod.log" 
  #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。 
  logAppend: true 
storage: 
  #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。 
  dbPath: "/mongodb/sharded_cluster/myshardrs01_27118/data/db" 
  journal: 
    #启用或禁用持久性日志以确保数据文件保持有效和可恢复。 
    enabled: true 
processManagement: 
  #启用在后台运行mongos或mongod进程的守护进程模式。 
  fork: true 
  #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
  pidFilePath: "/mongodb/sharded_cluster/myshardrs01_27118/log/mongod.pid" 
net:
  #服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip 
  #bindIpAll: true 
  #服务实例绑定的IP 
  bindIp: localhost,192.168.0.2 
  #bindIp 
  #绑定的端口 
  port: 27118 
replication: 
  #副本集的名称 
  replSetName: myshardrs01 
sharding: 
  #分片角色 
  clusterRole: shardsvr

4 新建或修改配置文件: vim /mongodb/sharded_cluster/myshardrs01_27218/mongod.conf

systemLog: 
  #MongoDB发送所有日志输出的目标指定为文件 
  destination: file
  #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径 
  path: "/mongodb/sharded_cluster/myshardrs01_27218/log/mongod.log" 
  #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。 
  logAppend: true 
storage: 
  #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。 
  dbPath: "/mongodb/sharded_cluster/myshardrs01_27218/data/db" 
  journal: 
    #启用或禁用持久性日志以确保数据文件保持有效和可恢复。 
    enabled: true 
processManagement: 
  #启用在后台运行mongos或mongod进程的守护进程模式。 
  fork: true 
  #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
  pidFilePath: "/mongodb/sharded_cluster/myshardrs01_27218/log/mongod.pid" 
net:
  #服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip 
  #bindIpAll: true 
  #服务实例绑定的IP 
  bindIp: localhost,192.168.0.2 
  #bindIp 
  #绑定的端口 
  port: 27218 
replication: 
  #副本集的名称 
  replSetName: myshardrs01 
sharding: 
  #分片角色 
  clusterRole: shardsvr

5 启动第一套副本集:一主一副本一仲裁

依次启动三个mongod服务:

/usr/yltrcc/mongodb/bin/mongod -f /mongodb/sharded_cluster/myshardrs01_27018/mongod.conf

/usr/yltrcc/mongodb/bin/mongod -f /mongodb/sharded_cluster/myshardrs01_27118/mongod.conf

/usr/yltrcc/mongodb/bin/mongod -f /mongodb/sharded_cluster/myshardrs01_27218/mongod.conf

6 初始化副本集和创建主节点

使用客户端命令连接任意一个节点,但这里尽量要连接主节点: /usr/yltrcc/mongodb/bin/mongo --host 180.76.159.126 --port 27018

执行命令:

# 初始化副本集
> rs.initiate()

# 查看副本集情况
myshardrs01:SECONDARY> rs.status()

# 主节点配置查看
myshardrs01:PRIMARY> rs.conf()

7 添加副本节点和仲裁节点

# 添加从节点
myshardrs01:PRIMARY> rs.add("180.76.159.126:27118")

# 添加仲裁节点
myshardrs01:PRIMARY> rs.addArb("180.76.159.126:27218")

# 查看配置情况
myshardrs01:PRIMARY> rs.conf()

第二套副本集

1 准备存放数据和日志的目录

#-----------myshardrs01 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27318/log \ & 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27318/data/db \ & 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27418/log \ & 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27418/data/db \ & 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27518/log \ & 
mkdir -p /mongodb/sharded_cluster/myshardrs01_27518/data/db

2 新建或修改配置文件:vim /mongodb/sharded_cluster/myshardrs01_27318/mongod.conf

systemLog: 
  #MongoDB发送所有日志输出的目标指定为文件 
  destination: file
  #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径 
  path: "/mongodb/sharded_cluster/myshardrs01_27318/log/mongod.log" 
  #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。 
  logAppend: true 
storage: 
  #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。 
  dbPath: "/mongodb/sharded_cluster/myshardrs01_27318/data/db" 
  journal: 
    #启用或禁用持久性日志以确保数据文件保持有效和可恢复。 
    enabled: true 
processManagement: 
  #启用在后台运行mongos或mongod进程的守护进程模式。 
  fork: true 
  #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
  pidFilePath: "/mongodb/sharded_cluster/myshardrs01_27318/log/mongod.pid" 
net:
  #服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip 
  #bindIpAll: true 
  #服务实例绑定的IP 
  bindIp: localhost,192.168.0.2 
  #bindIp 
  #绑定的端口 
  port: 27318 
replication: 
  #副本集的名称 
  replSetName: myshardrs01 
sharding: 
  #分片角色 
  clusterRole: shardsvr

3 新建或修改配置文件: vim /mongodb/sharded_cluster/myshardrs01_27418/mongod.conf

systemLog: 
  #MongoDB发送所有日志输出的目标指定为文件 
  destination: file
  #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径 
  path: "/mongodb/sharded_cluster/myshardrs01_27418/log/mongod.log" 
  #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。 
  logAppend: true 
storage: 
  #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。 
  dbPath: "/mongodb/sharded_cluster/myshardrs01_27418/data/db" 
  journal: 
    #启用或禁用持久性日志以确保数据文件保持有效和可恢复。 
    enabled: true 
processManagement: 
  #启用在后台运行mongos或mongod进程的守护进程模式。 
  fork: true 
  #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
  pidFilePath: "/mongodb/sharded_cluster/myshardrs01_27418/log/mongod.pid" 
net:
  #服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip 
  #bindIpAll: true 
  #服务实例绑定的IP 
  bindIp: localhost,192.168.0.2 
  #bindIp 
  #绑定的端口 
  port: 27418 
replication: 
  #副本集的名称 
  replSetName: myshardrs01 
sharding: 
  #分片角色 
  clusterRole: shardsvr

4 新建或修改配置文件: vim /mongodb/sharded_cluster/myshardrs01_27518/mongod.conf

systemLog: 
  #MongoDB发送所有日志输出的目标指定为文件 
  destination: file
  #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径 
  path: "/mongodb/sharded_cluster/myshardrs01_27518/log/mongod.log" 
  #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。 
  logAppend: true 
storage: 
  #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。 
  dbPath: "/mongodb/sharded_cluster/myshardrs01_27518/data/db" 
  journal: 
    #启用或禁用持久性日志以确保数据文件保持有效和可恢复。 
    enabled: true 
processManagement: 
  #启用在后台运行mongos或mongod进程的守护进程模式。 
  fork: true 
  #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
  pidFilePath: "/mongodb/sharded_cluster/myshardrs01_27518/log/mongod.pid" 
net:
  #服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip 
  #bindIpAll: true 
  #服务实例绑定的IP 
  bindIp: localhost,192.168.0.2 
  #bindIp 
  #绑定的端口 
  port: 27518 
replication: 
  #副本集的名称 
  replSetName: myshardrs01 
sharding: 
  #分片角色 
  clusterRole: shardsvr

5 启动第一套副本集:一主一副本一仲裁

依次启动三个mongod服务:

/usr/yltrcc/mongodb/bin/mongod -f /mongodb/sharded_cluster/myshardrs01_27318/mongod.conf

/usr/yltrcc/mongodb/bin/mongod -f /mongodb/sharded_cluster/myshardrs01_27418/mongod.conf

/usr/yltrcc/mongodb/bin/mongod -f /mongodb/sharded_cluster/myshardrs01_27518/mongod.conf

6 初始化副本集和创建主节点

使用客户端命令连接任意一个节点,但这里尽量要连接主节点: /usr/yltrcc/mongodb/bin/mongo --host 180.76.159.126 --port 27318

执行命令:

# 初始化副本集
> rs.initiate()

# 查看副本集情况
myshardrs01:SECONDARY> rs.status()

# 主节点配置查看
myshardrs01:PRIMARY> rs.conf()

7 添加副本节点和仲裁节点

# 添加从节点
myshardrs01:PRIMARY> rs.add("180.76.159.126:27418")

# 添加仲裁节点
myshardrs01:PRIMARY> rs.addArb("180.76.159.126:27518")

# 查看配置情况
myshardrs01:PRIMARY> rs.conf()

配置节点副本集创建

1 准备存放数据和日志的目录

#-----------myshardrs01 
mkdir -p /mongodb/sharded_cluster/myconfigrs_27019/log \ & 
mkdir -p /mongodb/sharded_cluster/myconfigrs_27019/data/db \ & 
mkdir -p /mongodb/sharded_cluster/myconfigrs_27119/log \ & 
mkdir -p /mongodb/sharded_cluster/myconfigrs_27119/data/db \ & 
mkdir -p /mongodb/sharded_cluster/myconfigrs_27219/log \ & 
mkdir -p /mongodb/sharded_cluster/myconfigrs_27219/data/db

2 新建或修改配置文件:vim /mongodb/sharded_cluster/myconfigrs_27019/mongod.conf

systemLog: 
  #MongoDB发送所有日志输出的目标指定为文件 
  destination: file
  #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径 
  path: "/mongodb/sharded_cluster/myconfigrs_27019/log/mongod.log" 
  #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。 
  logAppend: true 
storage: 
  #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。 
  dbPath: "/mongodb/sharded_cluster/myconfigrs_27019/data/db" 
  journal: 
    #启用或禁用持久性日志以确保数据文件保持有效和可恢复。 
    enabled: true 
processManagement: 
  #启用在后台运行mongos或mongod进程的守护进程模式。 
  fork: true 
  #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
  pidFilePath: "/mongodb/sharded_cluster/myconfigrs_27019/log/mongod.pid" 
net:
  #服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip 
  #bindIpAll: true 
  #服务实例绑定的IP 
  bindIp: localhost,192.168.0.2 
  #bindIp 
  #绑定的端口 
  port: 27019 
replication: 
  #副本集的名称 
  replSetName: myconfigrs
sharding: 
  #分片角色 
  clusterRole: configsvr

3 新建或修改配置文件: vim /mongodb/sharded_cluster/myconfigrs_27119/mongod.conf

systemLog: 
  #MongoDB发送所有日志输出的目标指定为文件 
  destination: file
  #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径 
  path: "/mongodb/sharded_cluster/myconfigrs_27119/log/mongod.log" 
  #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。 
  logAppend: true 
storage: 
  #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。 
  dbPath: "/mongodb/sharded_cluster/myconfigrs_27119/data/db" 
  journal: 
    #启用或禁用持久性日志以确保数据文件保持有效和可恢复。 
    enabled: true 
processManagement: 
  #启用在后台运行mongos或mongod进程的守护进程模式。 
  fork: true 
  #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
  pidFilePath: "/mongodb/sharded_cluster/myconfigrs_27119/log/mongod.pid" 
net:
  #服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip 
  #bindIpAll: true 
  #服务实例绑定的IP 
  bindIp: localhost,192.168.0.2 
  #bindIp 
  #绑定的端口 
  port: 27119
replication: 
  #副本集的名称 
  replSetName: myconfigrs
sharding: 
  #分片角色 
  clusterRole: configsvr

4 新建或修改配置文件: vim /mongodb/sharded_cluster/myconfigrs_27219/mongod.conf

systemLog: 
  #MongoDB发送所有日志输出的目标指定为文件 
  destination: file
  #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径 
  path: "/mongodb/sharded_cluster/myconfigrs_27219/log/mongod.log" 
  #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。 
  logAppend: true 
storage: 
  #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。 
  dbPath: "/mongodb/sharded_cluster/myconfigrs_27219/data/db" 
  journal: 
    #启用或禁用持久性日志以确保数据文件保持有效和可恢复。 
    enabled: true 
processManagement: 
  #启用在后台运行mongos或mongod进程的守护进程模式。 
  fork: true 
  #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
  pidFilePath: "/mongodb/sharded_cluster/myconfigrs_27219/log/mongod.pid" 
net:
  #服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip 
  #bindIpAll: true 
  #服务实例绑定的IP 
  bindIp: localhost,192.168.0.2 
  #bindIp 
  #绑定的端口 
  port: 27219 
replication: 
  #副本集的名称 
  replSetName: myconfigrs
sharding: 
  #分片角色 
  clusterRole: configsvr

5 启动第一套副本集:一主一副本一仲裁

依次启动三个mongod服务:

/usr/yltrcc/mongodb/bin/mongod -f /mongodb/sharded_cluster/myconfigrs_27019/mongod.conf

/usr/yltrcc/mongodb/bin/mongod -f /mongodb/sharded_cluster/myconfigrs_27119/mongod.conf

/usr/yltrcc/mongodb/bin/mongod -f /mongodb/sharded_cluster/myconfigrs_27219/mongod.conf

6 初始化副本集和创建主节点

使用客户端命令连接任意一个节点,但这里尽量要连接主节点: /usr/yltrcc/mongodb/bin/mongo --host 180.76.159.126 --port 27219

执行命令:

# 初始化副本集
> rs.initiate()

# 查看副本集情况
myshardrs01:SECONDARY> rs.status()

# 主节点配置查看
myshardrs01:PRIMARY> rs.conf()

7 添加两个副本节点

# 添加从节点
myshardrs01:PRIMARY> rs.add("180.76.159.126:27119")
myshardrs01:PRIMARY> rs.add("180.76.159.126:27219")

# 查看配置情况
myshardrs01:PRIMARY> rs.conf()

路由节点的创建

第一个路由节点

1 准备存放数据和日志的目录

#-----------mongos01
mkdir -p /mongodb/sharded_cluster/mymongos_27017/log

2 新建或修改配置文件:vi /mongodb/sharded_cluster/mymongos_27017/mongos.conf

systemLog: 
  #MongoDB发送所有日志输出的目标指定为文件 
  destination: file
  #mongod或mongos应向其发送所有诊断日志记录信息的日志文件的路径 
  path: "/mongodb/sharded_cluster/mymongos_27017/log/mongod.log" 
  #当mongos或mongod实例重新启动时,mongos或mongod会将新条目附加到现有日志文件的末尾。 
  logAppend: true 
storage: 
  #mongod实例存储其数据的目录。storage.dbPath设置仅适用于mongod。 
  dbPath: "/mongodb/sharded_cluster/mymongos_27017/data/db" 
  journal: 
    #启用或禁用持久性日志以确保数据文件保持有效和可恢复。 
    enabled: true 
processManagement: 
  #启用在后台运行mongos或mongod进程的守护进程模式。 
  fork: true 
  #指定用于保存mongos或mongod进程的进程ID的文件位置,其中mongos或mongod将写入其PID 
  pidFilePath: "/mongodb/sharded_cluster/mymongos_27017/log/mongod.pid" 
net:
  #服务实例绑定所有IP,有副作用,副本集初始化的时候,节点名字会自动设置为本地域名,而不是ip 
  #bindIpAll: true 
  #服务实例绑定的IP 
  bindIp: localhost,192.168.0.2 
  #bindIp 
  #绑定的端口 
  port: 27017 
sharding: 
  #指定配置节点副本集 
  configDB: myconfigrs/180.76.159.126:27019,180.76.159.126:27119,180.76.159.126:27219

3 启动mongod服务:

/usr/yltrcc/mongodb/bin/mongod -f /mongodb/sharded_cluster/mymongos_27017/mongos.conf

4 客户端登录mongos: /usr/yltrcc/mongodb/bin/mongo --host 180.76.159.126 --port 27017

通过路由节点操作,现在只是连接了配置节点,还没有连接分片数据节点,因此无法写入业务数据。

5 在路由节点上进行分片配置操作

添加分片sh.addShard("IP:Port")

# 添加第一套副本集
sh.addShard("myshardrs01/192.168.0.2:27018,180.76.159.126:27118,180.76.159.126:2 7218")

# 添加第二套副本集
sh.addShard("myshardrs02/192.168.0.2:27318,180.76.159.126:27418,180.76.159.126:2 7518")

提示:如果添加分片失败,需要先手动移除分片,检查添加分片的信息的正确性后,再次添加分片。

移除分片参考(了解):

use admin 
db.runCommand( { removeShard: "myshardrs02" } )

开启分片功能: sh.enableSharding("库名")sh.shardCollection("库名.集合名",{"key":1})

在mongos上的articledb数据库配置sharding

sh.enableSharding("articledb")

# 查看分片状态
 sh.status()

集合分片: 对集合分片,你必须使用 sh.shardCollection() 方法指定集合和分片键。

语法格式:sh.shardCollection(namespace, key, unique)

参数说明:

Parameter Type Description
namespace string 要(分片)共享的目标集合的命名空间,格式: <database>.<collection>
key document 用作分片键的索引规范文档。shard键决定MongoDB如何在shard之间分发文档。除非集合为空,否则索引必须在shard collection命令之前存在。如果集合为空,则MongoDB在对集合进行分片之前创建索引,前提是支持分片键的索引不存在。简单的说:由包含字段和该字段的索引遍历方向的文档组成。
unique boolean 当值为true情况下,片键字段上会限制为确保是唯一索引。哈希策略片键不支持唯一索引。默认是false。

6 分片后插入数据测试

7 增加另一个路由节点

美文佳句

电影散场,影院里的观众皆唏嘘而去。我和太太看到最后,直到音乐的休止落下、字幕拉到最底部。我似乎不能完整记住险象环生的情节,但那印度电影的唯美音乐,和虽然处于隐线却从来没有放弃追逐的爱情,让我喜欢和回味。

你好,我是yltrcc,日常分享技术点滴,欢迎关注我

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容