Mongodb 集群分片部署

本文详细介绍了MongoDB的集群分片部署过程,包括Shard Server、Config Server和Route Server的角色,以及如何配置和启动各个组件。通过模拟部署,展示了如何在一台机器上创建分片、配置服务器和路由服务,最终实现分片集群的搭建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一. Mongodb 集群分片部署

分片部署是mongodb数据高可用的方案之一,这里讲的分片就是集群中的单个节点或者节点的集合。

mongoDB支持在多个机器中通过异步复制达到故障转移和实现冗余。多机器中同一时刻只有一台是用于写操作。正是由于这个情况,为mongoDB提供了数据一致性的保障。担当主角色的机器能把读操作分发给slaves/secondaries 

MongoDB 的数据分块称为 chunk。每个 chunk 都是 Collection 中一段连续的数据记录,通常最大尺寸是 200MB,超出则生成新的数据块。

要构建一个 MongoDB Sharding Cluster(集群分片部署),需要三种角色:

    Shard Server: mongod 实例,每个shard由一个或多个mongod进程组成,用于存储实际的数据块。

    Config Server: mongod 实例,存储了整个 Cluster Metadata包括每个Shard的信息和chunks信息

    Route Server: mongos 实例,前端路由,客户端由此接入,且让整个集群看上去像单一进程数据库。

Route 转发请求到实际的目标服务进程,并将多个结果合并回传给客户端。Route 本身并不存储任何数据和状态,仅在启动时从 Config Server 获取信息。Config Server 上的任何变动都会传递给所有的 Route Process

在实际使用中,为了获取高可用、高性能的集群方案,会将 Shard Server 部署成 Replica Sets

 

其中shard1,shard2…..这些就是上面说到的Shard Server,每个shard就是一个分片,分片最好部署到不同的机器上,这样才能有效解决单台服务器压力过大,或者宕机导致整个应用停止的问题。而且分片之间建议部署到同一个高速局域网中,这样才能有效提高数据在分片中的共享能力。如果分片之间的网络不是很理想,直接影响mongodb的查询能力。

其中 replica set就是多个shard的集合。

每台分片服务器需要个config server 即配置服务器

Mongos就是Route Server 即前端路由,接收来自客户端的所有数据请求,比如路由服务的IP192.168.0.153:20000 这个应用程序中连接mongodb数据库的地址就是这个。

二.部署方案

用一台机器模拟集群分片部署,我只创建了一个分片,及set1,其中分片中由两个mongod进程组成。

第一步:启动分片数据服务Shard1 replSet set1

192.168.2.218:10001  对应a.bat

mongod --shardsvr --dbpath E:\mongodbShared\a --logpath E:\mongodbShared\a\log\a.log --port 10001 --replSet set1

192.168.2.218:10002 对应 b.bat

mongod --shardsvr --dbpath E:\mongodbShared\b --logpath E:\mongodbShared\b\log\b.log --port 10002 --replSet set1 

192.168.2.218:10003  决策服务对应c.bat

只负责在某个node down掉后,进行vote选举新的master,它们本身并不存储数据备份

mongod --shardsvr --dbpath E:\mongodbShared\c --logpath E:\mongodbShared\c\log\c.log --port 10003 --replSet set1

第二步:配置10001 10002 这两个服务之间的关系及决策服务。

打开命令行

输入mongo --port 10001

输入:

config={_id:'set1',members:[{_id:0,host:'192.168.2.218:10001'},{_id:1,host:'192.168.2.218:10002'},{_id:2,host:'192.168.2.218:10003',arbiterOnly:true}]}

注意:其中10003这里我加一个arbiterOnly:true 表明这是决策服务的意思

提示:

输入:rs.initiate(config)     进行配置的初始化

提示:

标明初始化成功,可以通过>rs.status()命令来查看这个分片的配置信息。

 

在其中可以看见这个分片名称即“set1”及其成员的信息,其中需要注意的是stateStr属性,可以看出在这个分片中,哪个服务是主服务primary哪个是辅助服务,哪个是决策服务。其中的health表示当前服务的状态,等于1就是正常状态。

第三步:启动配置服务器

192.168.2.218:20000   对应 config.bat

mongod --configsvr --dbpath E:\mongodbShared\config --logpath E:\mongodbShared\config\log\config.log --port 20000

第四步:启动路由服务

192.168.2.218:30000 对应 route.bat

mongos --chunkSize 1 --configdb "192.168.2.218:20000" --logpath E:\mongodbShared\route\log\route.log –port 30000

多台机器时mongos --configdb 192.168.0.12:20000,192.168.0.13:20000,192.168.0.14:20000 --port 30000 --chunkSize 1 --logpath c:\mongodb\data\mongos.log --logappend

其中 –chunkSize 块大小 1M 和配置服务器的地址

第五步:配置分片与分片的关系及配置集群部署哪个数据库

连接到路由服务上

命令行

输入:mongo –port 30000

 > use admin
 > db.runCommand({addshard:'set1/192.168.2.218:10001,192.168.2.218:10002'})
 > db.runCommand({enablesharding:'test'})
 > db.runCommand({listshards:1})
 > printShardingStatus()
 > db.runCommand({shardcollection:'test.test', key:{_id:1}, unique : true})

到此集群分片部署完毕。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值