1. MongoDB 简介
MongoDB 是一个开源的文档型数据库,它使用 Bson(类似于 Json) 格式存储数据。相比于关系型数据库,MongoDB 的优势在于它的灵活性和可扩展性。MongoDB 可以轻松地扩展集群,以应对随着数据量增长而产生的负载。
2. MongoDB 的扩展方式
2.1 垂直扩展
垂直扩展是指增加服务器的处理能力,例如增加 CPU、内存或磁盘容量。MongoDB 支持垂直扩展方式,但是这种方式有一定的限制:当服务器的处理能力达到极限时,无法继续扩展,也就是说,垂直扩展方式的可扩展性有限。
db.adminCommand({ getCmdLineOpts: 1 }).parsed.net.port
2.2 水平扩展
水平扩展是指增加服务器的数量,以提高整个系统的处理能力。MongoDB 支持水平扩展方式,这种方式的优势在于它的可扩展性非常好。通过增加更多的服务器,可以提高集群的吞吐量和处理能力,进而提高系统的稳定性和可靠性。
3. MongoDB 集群
在 MongoDB 中,集群是由多个服务器组成的系统,它们共同承担相应的负载。MongoDB 集群通常由三个或以上的节点组成,其中一个节点作为主节点(Primary),其他节点为从节点(Secondary)。
主节点负责读写操作,该节点上的所有更新操作都会被复制到从节点上,以确保数据的可靠性。从节点与主节点保持同步,同时发挥读取数据的作用,以减轻主节点的压力。
4. MongoDB 的横向扩展实现
4.1 分片集群
分片集群是 MongoDB 最常用的水平扩展方式。它将数据分散到不同的服务器上,以平衡整个集群的负载。分片集群通常包括三个主要组件:路由器、配置服务器和分片服务器。
路由器(Mongos)是分片集群的入口,它接收客户端应用程序的请求,并将数据查询路由到相应的分片服务器上。路由器的作用类似于代理,它隐藏了分片实现的细节,向应用程序提供一个分布式数据库系统的单一接口。
配置服务器(Config Server)保存了集群中所有分片数据的元数据信息,以便路由器能够找到相应的分片服务器。配置服务器通常作为一个副本集部署,以确保配置信息的可靠性。
分片服务器(Shard)保存了分片集群中的数据,分片服务器通常部署在不同的服务器上以实现负载均衡。每个分片服务器都包含一部分数据,数据的分配通常通过哈希函数实现。
db.runCommand({ addshard: "rs1/mongodb01:27017,mongodb02:27017,mongodb03:27017" })
4.2 副本集扩容
一个副本集中的节点数通常为奇数,以实现节点的主从切换。当需要增加新的节点时,可以通过添加新的节点来扩展集群。
副本集扩容通常包括三个步骤:配置新节点、连接新节点、将新节点加入副本集。配置新节点需要为节点分配 IP 地址和端口号,并且确保新节点的系统设置与现有的节点一致。连接新节点需要使用命令行或者程序的方式连接到新节点,以确保连通性。将新节点加入副本集需要使用 rs.add() 命令,以确保新节点成功加入副本集。
rs.add("mongodb04:27017")
5. 总结
MongoDB 是一种可扩展的文档型数据库,支持垂直扩展和水平扩展两种方式。横向扩展是 MongoDB 最常用的扩展方式,其中分片集群是最常见的实现方式。通过增加更多的服务器,分片集群可以轻松应对随着数据量增长而产生的负载,从而提高整个系统的稳定性和可靠性。