mongo分片

分片就是水平的扩展,将数据分拆到不同的机器上,以达到存储更多的数据,处理更大的负载。可以选定将按照指定的文档键值进行分片。

配置

角色

分片一般有三个组成部分:

  • 分片服务(Shard Server)mongod 实例,2个以上,负责存储实际的数据分片,生产环境中一个Shard Server可由几台服务器组成一个Replica Set代替,避免主机单点故障;
  • 路由服务(Routing Process)mongos实例,1个以上,它负责管理分片,客户端由此前端路由接入,且让整个集群看起来像单一数据库,客户端应用可以透明使用,Routing Process不存储数据,数据来自Config Server
  • 配置服务(Config Server)mongod 实例,1个以上,负责存储整个集群的配置信息:即数据和片的对应关系。
分片的架构图如下:

启动

1. 要先启动配置服务器,因为mongos要用到其配置信息:

./mongod --dbpath /data/db/config/ --port 27017
2. 启动mongos服务,启动的时候需要指明配置服务器的地址,可以添加多个配置服务器:
./mongos --port 27018 --configdb 127.0.0.1:27017
3. 添加片,先启动分片实例:
./mongod --dbpath /data/db/shard1 --port 27019
然后连接mongos服务添加片:
./mongo 127.0.0.1:27018/admin
db.runCommand({addshard:'127.0.0.1:27019',allowLocal:true})
返回{ "shardAdded" : "shard0000", "ok" : 1 },表示添加分片成功。allowLocal表示分片实例和mongos服务在同一台机器上,如果是生产环境的话,尽量将两者放在不同的服务器上。按照相同的步骤再添加一个端口为27020的分片实例,注意使用不同的dbpath。
4. 切分数据,比如要将test数据库中的people集合按照name字段进行分片,可以如下配置:
db.runCommand({ enablesharding :"test"} );
db.runCommand( { shardcollection : "test.people",key : {'name':1} });
5. 添加复制集,使用复制集可以保证一个分片挂掉的情况下,分片仍然可用,使用如下命令将shard1这个复制集添加进分片:
db.runCommand({addshard:'shard1/127.0.0.1:27019'})
shard1是复制集名称,后面为复制集中活跃节点地址。

管理命令

查看整个集群的分片情况:

use admin;
db.printShardingStatus();

查看people集合的分片情况:

use test;
db.people.stats();

删除片,删除片并不会影响该分片上的数据,数据会被移植到另外的分片上:

db.runCommand({removeshard:'127.0.0.1:27020'});
该命令会返回操作的状态是ongoing还是completed,ongoing表示该删除的分片是某个数据库的primary片(通过db.printShardingStatus()查看),还得使用moveprimary命令将其它分片设置为该数据库的primary片,例如:

db.runCommand({moveprimary:'test',to:'127.0.0.1:27019'})
确定要删除的分片不再是任何数据库的primary片后再执行removeshard命令,这时返回的状态是completed,表示删除分片成功。

MongoDB分片集群是一种将数据分布在多个服务器上的方式,以实现高可用性和横向扩展性。下面是一些关于MongoDB分片集群的常见问题和答案: 1. 什么是MongoDB分片集群? MongoDB分片集群是一种将数据分割成多个片段并分布在多个服务器上的方法。每个片段(shard)都是一个独立的MongoDB实例,可以存储一部分数据。通过将数据分散在多个片段上,可以实现数据的水平扩展和负载均衡。 2. 如何设置MongoDB分片集群? 要设置MongoDB分片集群,需要遵循以下步骤: a. 部署和配置一个或多个Config Server。Config Server用于存储集群的元数据,如分片键范围和配置信息。 b. 部署和配置一个或多个mongos路由器。mongos路由器是客户端与分片集群交互的入口点。 c. 部署和配置一个或多个shard服务器。每个shard服务器都是一个独立的MongoDB实例,可以存储一部分数据。 d. 启动mongos路由器,并将其连接到Config Server和shard服务器。 e. 创建分片集合,并根据需要启用分片。 3. 分片键是什么?如何选择分片键? 分片键是用来决定将数据分配到哪个片段的字段。选择合适的分片键非常重要,以确保数据在分片集群中均匀分布。通常,一个好的分片键应该满足以下条件: a. 数据均匀分布:分片键的值应该能够在不同的分片之间平均分配。 b. 查询性能:选择经常被查询的字段作为分片键,以便查询可以在单个片段上执行而不需要扫描整个集群。 c. 数据增长:选择一个能够支持数据增长的分片键,以避免在未来需要重新分片。 4. 如何监控和管理MongoDB分片集群? MongoDB提供了一些工具和功能来监控和管理分片集群。一些常见的方法包括: a. 使用mongos路由器的命令行工具或管理界面来管理集群配置、添加/删除shard以及监控性能指标。 b. 使用MongoDB的内置监控工具,如mongostat和mongotop,来监视集群的吞吐量、延迟和负载情况。 c. 使用第三方监控工具,如Prometheus、Grafana等,来获取更详细的指标和可视化。 这些是关于MongoDB分片集群的一些常见问题和答案。希望能对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值