MongoDB分片——Windows部署

一、概念

分片:满足MongoDB数据量大量增长的需求。

        当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。

MongoDB使用分片集群结构图:

mongos:请求分发中心。数据库集群请求的入口,所有的请求都通过mongos进行协调。mongos负责把对应的数据请求请求转发到对应的shard服务器上。生产环境上通常由多个mongos作为请求的入口,防止因其中一个挂掉导致所有的mongoDB请求都没有办法操作。

config server:配置服务器。用来存储所有数据库源信息(路由、分片)的配置。mongos本身没有物里存储分片服务器和数据路由信息,只是缓存在内存中,配置服务器则实际存储这些数据。mongos第一次启动或者关掉重启就会从config server加载配置信息,之后如果config server信息变化就会通知到所有的mongos来更新自己的状态,这样nongod就能继续准确路由。生产环境上通常有三个config server配置服务器,防止分片路由的元数据丢失。

shard:分片。

         例子:将一台机器的一个数据表Collection分给了4个机器,使得每个机器都是256G,这样就分摊了一台机器存储1T数据的压力。在mongodb中只要设置好了分片规则,通过mongos操作数据库就能自动把对应的数据操作请求转发到对应的分片机器上。

replica set:存在于分片中,如果分片中没有replica set是不完整的。假设其中的一个分片挂掉,那四分之一的数据就丢失了,所以在高可用性的分片架构还需要对每一个分片构建replica set副本集保证分片的可靠性。

分片集群构造:

组件

说明

Mongos

数据路由,和客户端打交道的模块。mongos本身没有任何数据,也不知道怎么处理这些数据,去找config server。

config server

所有存、取数据的方式,所有shard节点的信息,分片功能的一些配置信息。可以看作是真实数据的元数据。

shard

真正的数据存储位置,以chunk为单位。

      Mongos本身并不持久化数据,Sharded cluster所有的元数据都会存储到Config Server,而用户的数据会分散存储到各个shard。Mongos启动后,会从配置服务器加载元数据,开始提供服务,将用户的请求正确路由到对应的分片。

二、Windows上模拟分片集群

第一节:创建配置服务器复制集

        这里部署了一个分片rs-a,分片包3个复制集,2个配置服务器复制集,一个路由服务器,对应的目录如下:

1、配置分片复制集,包含三个复制集的分片

(1)、成员一:新打开一份DOS窗口

mongod --port 3000 --shardsvr --replSet rs-a --dbpath E:\other_dev\mongodb\shard\rs-a-0

成员二:新打开一份DOS窗口

mongod --port 3001 --shardsvr --replSet rs-a --dbpath E:\other_dev\mongodb\shard\rs-a-1

成员三:新打开一份DOS窗口

mongod --port 3002 --shardsvr --replSet rs-a --dbpath E:\other_dev\mongodb\shard\rs-a-2

参数说明:

--shardsvr:要求使用分片;--replSet:使用复制集,复制集的名称为rs-a;创建的分片复制集的名称要统一。

(2)、初始化,配置Primary和Secondary

新打开一个DOS窗口,连接其中的一个服务器,使用命令:mongo --port 3000

在这个mongo shell环境中创建分片复制集配置对象:

rsconf = {
... ...   _id: "rs-a",
... ...   members: [
... ...     {
... ...      _id: 0,
... ...      host: "localhost:3000"
... ...     },
... ...     {
... ...      _id: 1,
... ...      host: "localhost:3001"
... ...     },
... ...     {
... ...      _id: 2,
... ...      host: "localhost:3002"
... ...     }
... ...    ]
... ... }

使用rs.initiate()初始化,此实例便成为了Primary

使用rs.status()命令来检查分片复制集的状态以便检查它是否被正确配置

表明该分片已经被成功配置并初始化了。

第二节:配置 配置服务器 :包含两个实例的复制集

1、成员一:新打开DOS窗口

mongod --port 27019 --configsvr --replSet rs-conf --dbpath E:\other_dev\mongodb\shard\config0

成员二:新打开DOS窗口

mongod --port 27020 --configsvr --replSet rs-conf --dbpath E:\other_dev\mongodb\shard\config1

2、初始化,配置服务器

新打开一个DOS窗口,连接其中的一个服务器,使用命令:mongo --port 27019

在这个mongo shell环境中创建配置服务复制集配置对象:

使用rs.initiate()初始化配置信息:

使用rs.status()命令来检查配置服务器复制集的状态以便检查它是否被正确配置:

第三节:配置路由服务器

1、新打开一个DOS窗口

mongos --configdb rs-conf/localhost:27019,localhost:27020 --port 27018

第四节:添加创建的分片

1、新打开一个DOS窗口,登陆路由服务器:mongo --port 27018

2、执行添加分片的命令 sh.addShard("rs-a/localhost:3000,rs-a/localhost:3001,rs-a/localhost:3002")

3、使用sh.status()查看分片信息

第五节:为数据库启用分片

        在对集合进行切分之前,必须为集合的数据库启用切分。为数据库启用分片不会重新分发数据,但是可以对数据库中的集合进行分片。

        为数据库启用分片之后,MongoDB为数据库分配一个主分片,MongoDB将所有数据存储在这个数据库中。

命令:sh.enableSharding("<database>")。

第六节:对集合进行分片

        要分割一个集合,使用sh.shardCollection()方法。必须指定集合的完整名称空间和包含切片分键的文档。前提数据库必须启用分片。

        选择的切分键会影响切分的效率,以及利用某些切分特性的能力。

        如果集合已经包含数据,在使用shardCollection()之前,必须使用db.collection.createIndex()方法在切分键上创建索引。

        如果集合为空,MongoDB将创建索引作为sh.shardCollection()的一部分。

        对目标集合进行切分:sh.shardCollection("<database>.<collection>",{<key>:<direction>})

第七节:查看分片复制集的一致性

1、登陆主节点3000,插入数据

2、登陆两个辅节点3001和3002

3、查看是否有主节点插入的数据

 

 

 

 

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值