MongoDB分片集群

一、MongoDB分片集群概述

在大数据和云计算时代,数据库的性能和扩展性成为了关键的问题。MongoDB作为一个高性能的NoSQL数据库,通过分片(Sharding)技术,实现了数据的水平分割和存储,从而大大提高了数据的处理能力和存储规模。

MongoDB的分片是将数据集合分割成小块并分散到集群的不同机器上的过程。每个分片都存储集合数据子集,整个集合可以分散在一个分片或多个分片上。MongoDB使用分片来实现数据库的横向扩展,以支持超大规模和高吞吐量的数据存储。

二、分片集群搭建部署

1.分片集群架构:

2.搭建MongoDB分片集群通常涉及以下几个组件:

1. **配置服务器(Config Servers)**:存储集群的元数据,包括分片键的范围和每个分片的位置。

2. **分片服务器(Shard Servers)**:实际存储数据。数据会按照分片键被分发到不同的分片服务器上。

3. **路由服务器(Mongos)**:应用程序连接的服务器,负责接收应用程序的读写请求,并根据配置信息将请求路由到正确的分片服务器上。

3.搭建分片集群的基本步骤:

1. 部署配置服务器:使用三台服务器组成配置服务器副本集。

2. 部署分片服务器:根据数据量的大小和扩展性需求,可以部署多个分片服务器。

3. 部署路由服务器:路由服务器可以部署在应用程序服务器上,也可以单独部署。

4. 配置分片:在Mongos上执行分片命令,指定要分片的集合、分片键以及分片服务器。

4.具体实例操作

1.环境准备

每一个分片都应该安装 MongoDB 实例,需要将 bin 文件复制到每个分片中, 并且创建data 文件以及 log 文件存放数据库数据和日志数据

2.启动分片集群1

shard11:

首先进入数据库bin目录,在文件路径启动cmd

代码实现:

mongod -shardsvr -replSet shard1 -port 4006 -dbpath D:\shard1\shard11\date -logpath D:\shard1\shard11\log\log11.log

--shardsvr 为分片声明

当命令一直保持运行状态则说明服务运行成功,此服务为一次性服务,不要关闭此窗口,最小化即可。

shard12:

再次进入数据库bin目录,在文件路径启动cmd

代码实现:

mongod -shardsvr -replSet shard1 -port 4007 -dbpath D:\shard1\shard12\date -logpath D:\shard1\shard12\log\log12.log
3.启动分片集群2

shard21:

代码实现:

\shard2\shard21\bin>mongod -shardsvr -replSet shard2 -port 4008 -dbpath D:\shard2\shard21\date -logpath D:\shard2\shard21\log\log21.log

 shard22:

代码实现:

mongod -shardsvr -replSet shard2 -port 4009 -dbpath D:\shard2\shard22\date -logpath D:\shard2\shard22\log\log22.log
4.配置分片集群 并出初始化

进入shard1集群的任意一个节点中

代码实现:

use admin

config={_id:"shard1",members:[
... ... {_id:0,host:"localhost:4006",priority:2},
... ... {_id:1,host:"localhost:4007",priority:1}
... ... ]}

rs.initiate(config)

进入到shard2集群任何一个节点中

代码实现:

use admin

config={_id:"shard2",members:[
... ... {_id:0,host:"localhost:4008",priority:2},
... ... {_id:1,host:"localhost:4009",priority:1}
... ... ]}

rs.initiate(config)

运行rs.initiate(config)结果如下shard集群就配置好了。

5.配置启动 Cofig server

环境准备:

同理在每个文件夹添加data和log

启动config1

同理进入bin目录,在文件路径启动cmd

代码实现: 

mongod -configsvr -replSet confset -port 4002 -dbpath D:\config1\data -logpath D:\config1\log\config1.log

 启动config2

原理同上

代码实现: 

mongod -configsvr -replSet confset -port 4003 -dbpath D:\config2\data -logpath D:\config2\log\config2.log

  启动config3

代码实现: 

mongod -configsvr -replSet confset -port 4004 -dbpath D:\config3\data -logpath D:\config3\log\config3.log

 配置config server集群

6.进入任何一个配置服务器的节点初始化配置服务器的群集

代码实现: 

 use admin
 
 
 config={_id:"confset",configsvr:true,members:[
... {_id:0,host:"localhost:4002"},
... {_id:1,host:"localhost:4003"}
... ]}
 
 
 rs.initiate(config)
7.部署路由服务器 Route Process

同理进入启动cmd

mongos : mongos 就是一个路由服务器,它会根据管理员设置的 “ 片键 ” 将数据分摊到自己管理的

mongod 集群,数据和片的对应关系以及相应的配置信息保存在 "config 服务器 " 上。

代码实现: 

mongos -configdb confset/localhost:4002,localhost:4003 -logpath D:\mongos\log\mongos.log -port 4000
8.配置分片信息,添加分片所引

bin 目录下使用 MongoDB Shell 登录到 mongos ,添加 Shard 节点

代码实现: 

sh.addShard("shard1/localhost:4006,localhost:4007")

代码实现: 

sh.addShard("shard2/localhost:4008,localhost:4009")

9.测试分片

登入路由4000端口

指定要分片的数据库

代码实现: 

 sh.enableSharding("test")

 指定数据库里需要分片的集合和片键,片键根据实际情况选择

代码实现: 

sh.shardCollection("test.c1",{"id":"hashed"})

上述指令指定分片集合为c1,分片字段为“id”,分片形式是哈希分片,若改成“1”则为范围分片

如果集合已经包含数据,则必须在分片集合之前创建一个支持分片键的索引,如果集合为空,则

mongodb 将创建索引。

插入10000条数据验证,数据必须包含分片键:id

代码实现: 

for(var i=1;i<=10000;i++){
... ... db.c2.save({id:i,name:"a"+i,age:i});}

 robo 3T查看分片集

可以看到4007端口的id数据3开开头,说明数据分片成功了

10.最后

重新打开mongodb服务,既可以和原来一样使用,但数据的储存方式和原来的已经不一样了,变成了分布式储存。 

三、分片集群应用方法

在实际应用中,MongoDB分片集群的使用涉及到数据模型设计、分片键选择以及集群管理等多个方面。

1. **数据模型设计**:合理的数据模型设计是分片的基础。在设计数据模型时,需要考虑数据的访问模式、数据量和扩展性等因素。

2. **分片键选择**:分片键的选择直接影响到数据的分布和查询性能。通常选择经常作为查询条件的字段作为分片键,以确保数据能够均匀分布到各个分片上。

3. **集群管理**:MongoDB提供了丰富的管理工具和命令,用于监控和管理分片集群。包括查看集群状态、添加或删除分片、重新平衡数据等操作。

四、常见的错误和解析

在搭建和应用MongoDB分片集群时,可能会遇到一些常见的问题。

1. 分片键选择不当:如果分片键选择不合理,可能会导致数据分布不均匀,某些分片上的数据量过大,从而影响性能。此时需要重新选择分片键,并进行数据迁移。

2. 网络问题:由于分片集群部署在多个服务器上,网络稳定性对集群的性能至关重要。网络延迟或中断可能会导致读写请求失败。因此,需要确保网络连接的稳定性和可靠性。

3. 版本不一致:在分片集群中,不同服务器上的MongoDB版本必须一致,否则可能会导致兼容性问题。在升级或维护时,需要确保所有服务器的版本同步更新。

通过学习和实践MongoDB分片集群的搭建和应用,我们可以更好地利用MongoDB的扩展性和性能优势,满足大规模数据存储和处理的需求。同时,也需要注意避免常见的错误和问题,确保集群的稳定性和可靠性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值