MongoDB三种集群方案研究及性能对比分析

2020-10-12 14:41贾成果
中国传媒科技 2020年8期
关键词:客户端集群节点

摘  要:进入Web3.0时代,网络数据呈现出虚拟化和多元化的发展趋势。互联网上包含的信息种类不断增加,例如地理信息、智能语音、复杂的人脉关系等,此外,网络上的信息量每天都在高速增长。如何高效地存储这些信息,并且可以在服务器发生故障时迅速从故障中恢复数据,便成了网络服务提供者必须重视的问题。MongoDB以其数据并发读写速度高、扩展性好、容错性高、故障自动恢复等特点,在海量数据的存储与分析中被广泛应用。本文介绍了MongoDB的三种集群方案,并对集群方案的性能进行了对比分析,希望能为相关使用者提供一些借鉴和帮助。

关键词:MongoDB集群;数据高可用性;负载均衡                         中图分类号:TP311.13                     文献标识码:A

文章编号:1671-0134(2020)08-115-02                                     DOI:10.19483/j.cnki.11-4653/n.2020.08.030

本文著录格式:贾成果.MongoDB三种集群方案研究及性能对比分析[J].中国传媒科技,2020(8):115-116.

1. MongoDB优势概述

MongoDB是一个基于分布式文件存储的数据库,内核由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。[1]MongoDB是典型的NoSQL数据库,具有NoSQL数据库的所有优点:

(1)数据并发读写速度高,可以瞬时处理海量数据,应对几十万次每秒的读写操作;

(2)扩展性好,容易组建硬件集群以提高运算速度;

(3)部署成本低,即使在廉价服务器上也可以有不错的读写效能;

(4)数据格式贴近编程语言,以JSON对象存储数据;

(5) MongoDB还支持索引、故障恢复、云计算以及Java、Ruby、PHP、C++等多种开发语言。

MongoDB通过集群实现数据的冗余备份,并在多个服务器上存储数据副本,保证数据的完整性和安全性。

2. MongoDB三种集群方案研究

MongoDB的集群方案共有三种:ReplicaSet、Sharding和Master/Slave。这三种集群方案均可跨平台实现,无论是在Linux系统还是Windows系统上,都可以实现MongoDB集群。

2.1 ReplicaSet集群方案

ReplicaSet被称为副本集,是多个MongoDB节点组成的集群,主服务器节点挂掉,备用服务器节点可以继续提供服务。ReplicaSet最小的集群需要使用三个MongoDB服务器,一个主服务器、一个备用服务器、一个仲裁服务器。主节点和备用节点可以存储数据,仲裁节点用于判断主节点是否挂掉,是否应该让备用节点接替主节点的工作。备用节点会实时与主节点同步数据,以保证数据的一致性。[2]客户端要连接主服务器和备用服务器,而不需要连接仲裁服务器。

默认设置下,主节点提供所有的CRUD(创建、读取、更新、删除)操作,备用节点不提供任何服务。仲裁节点是很特殊的服务节点,它的工作是负责检测主节点的工作状态。一旦主节点宕机,仲裁节点就会从诸多备用节点中挑选出一个充当主节点,其他备用节点将与新主节点同步数据。如果前任主节点恢复了,那么仲裁节点就会让现任主节点变为备用节点,其他备选节点将与新主节点同步数据。

ReplicaSet集群方式的好处是数据是完整的,不会因为服务器崩溃而丢失数据。但是ReplicaSet最明顯的缺点是客户端需要自主判断哪个MongoDB是当前主节点服务器,然后连接这个服务器。

2.2 Sharding集群方案

Sharding(数据分片)是一种可水平扩展的集群模式,适用于数据量巨大的场合,与ReplicaSet集群的主备服务器节点实时同步数据不同,Sharding集群是采用分片机制存储数据的,即通过把数据切分到不同的数据节点上存储来提高整体系统的可靠性和数据一致性。数据切分后,索引深度也会随之减小,索引查找速度随之提高。

Sharding集群分为3大部分:shard节点、config节点和mongos节点。shard节点是实际存放数据的节点,每个shard节点的数据都被分为若干个chunk(数据块)来管理,每个chunk的取值范围(shard key)都记录在config节点上。实际应用中shard往往采用ReplicaSet集群来实现高可用性。config节点是存储配置信息的节点,包括集群的配置信息、数据存储于哪些shard节点等。mongos节点是查询路由节点,负责把数据请求转发到对应的shard服务器上,也是客户端直接访问的节点,提供Sharding集群对外操作接口。

Sharding集群的特色就是自动化。具体体现为可以动态扩容、自动平衡数据,以及透明的使用接口。可以从一个普通的 ReplicaSet平滑升级,动态增加或删除节点,响应数据的快速增长。可以自动在节点间平衡数据量,避免负载集中在少数节点,而在这期间不影响数据库读写访问。对客户端,可以使用完全相同的驱动,大部分功能可用,基本不需要更改任何代码。[3]

2.3 Master/Slave集群方案

在Master/Slave(主/从)集群方案中,所有对数据修改的操作会被记录在oplog日志中(查询操作不会记录)。当主节点数据发生改变,对应的操作就被记录在oplog中。oplog日志空间大小是固定的。从节点复制oplog内容,然后应用这些修改。

由于复制是异步的,如果从节点的操作已经被主节点落下很远,oplog日志在从节点上还没执行完,oplog日志内容就有可能被覆盖。从节点跟不上同步,主从节点间的数据同步就会停下,重新做完整的主从数据同步,这种情况会造成主从节点数据不一致,损坏数据完整性。为了避免此种情况,应尽量保证主节点的oplog足够大,能够存放相当长时间的操作记录。[4]

3. 三种集群方案对比及性能分析

MongoDB的三种集群方案都可以跨平台实现,无论在Linux还是Windows系统中都可以进行集群操作。其中ReplicaSet和Master/Slave集群方案都可以实现数据同步,都能作为冗余备份的方案。而Sharding集群作为在数据量巨大情况下数据切分存储的方案,可以更好地解决单一数据库性能不足的问题。

3.1 ReplicaSet和Master/Slave集群方案对比及性能分析

(1)失效备援:Master/Slave方案中,如果主节点宕掉了,从节点无法接替写数据的任务,系统将只能提供读取服务,即主节点无法自动恢复。[5]而ReplicaSet方案中,如果主节点宕掉了,会立即选举出一个新的主节点,系统不受影响,可以继续提供服务。对于高可用可用性来说,ReplicaSet是完胜的。

(2)负载均衡:两种方案的主节点数据库都可以读写,从节点数据库只具有数据备份和数据读取功能。

(3)故障恢复:Master/Slave方案中,如果主节点出故障了,重启后依然是主节点,无须恢复。因为在主节点故障期间,系统只能提供读取服务,无法写入数据。ReplicaSet方案中,原主节点故障重启后变为从节点,自动与当前的主节点同步数据。因此ReplicaSet方案中,主节点宕机对系统没有影响。

3.2 Sharding集群方案性能分析

(1)失效备援:Sharding集群中每个shard节点通常采用ReplicaSet集群来实现高可用性,避免出现某个shard节点出现故障而影响数据库服务或者造成数据丢失的问题。每个config节点都存储了全部的chunk信息,某个config节点故障并不影响shard节点的读写,只是shard节点数据瞬时不能迁移和自动均衡而已。Mongos节点是无状态的,负责转发客户端的数据请求,并不会保存任何数据和配置信息,单个节点故障也并不会影响系统运行,因此Sharding集群可以保證系统的高可用性。

(2)负载均衡:Sharding集群通过数据分片机制将数据存储在多个数据节点上,减少了单机存储空间,提高了总存储空间,通过设置多个mongos节点,使客户端的请求不集中在单一服务器上,提高了总负载。此外,mongos节点上的balancer机制,会促使每个shard节点上的数据块大小趋于平衡,减小单一节点的读写压力。

(3)故障恢复:Sharding集群中,即使集群中的一个或多个分片不可用,集群也可以继续执行一部分读写操作。在宕机期间,不可用的分片上的数据是不能处理的,可用分片上的读写操作是可以被成功处理的。实际应用中,每一个数据分片(shard)将被部署成ReplicaSet,确保每个数据节点都具有备份、自动容错转移、自动恢复能力,提供了可增长的冗余和高可用性。

结语

综上,在一般数据量大小的场景中,ReplicaSet集群方案的数据安全性、高可用性以及对硬件设备的要求等都有巨大优越性,应优先考虑。在储存海量数据、瞬时并发读写高的场景中,Sharding集群更适合,因为Sharding集群需要更多的服务器,集群配置过程也是三种集群方案中最复杂的。

参考文献

[1]陈敬静,马明栋,王得玉. MongoDB负载均衡算法优化研究[J]. 计算机技术与发展,2020,30(03):88-92.

[2]施晓峰.基于分布式NoSQL数据库的档案大数据存储与检索方案研究[J].计算机应用与软件,2019,36(05):15-20.

[3]熊峰,刘宇.基于MongoDB的数据分片与分配策略研究[J].计算机与数字工程,2019,47(04):892-897.

[4]牛初九. MongoDB之分片集群(Sharding)[EB/OL]. https://www.jianshu.com/p/3d44dcbd12ff.

[5] 张文盛,郑汉华.基于MongoDB构建高性能网站技术研究[J].吉林师范大学学报(自然科学版),2013,34(01):123-127.

作者简介:贾成果(1987-),男,河北承德,助理工程师。

猜你喜欢
客户端集群节点
基于移动汇聚节点和分簇的改进节能路由算法
CAE软件操作小百科(48)
基于点权的混合K-shell关键节点识别方法
虚拟专用网络访问保护机制研究
新闻客户端差异化发展策略
勤快又呆萌的集群机器人
集群品牌是集群整体的品牌还是集群产品的品牌?
浅析IEEE 802.1x及其客户端软件
浅谈基于P2P的网络教学系统节点信息收集算法