[转]Elasticsearch和MongoDB分片及高可用对比

2019-07-09  本文已影响0人  像烟花一样绚烂

本文旨在对比Elasticsearch和MongoDB高可用和分片的实现机制。

Elasticsearch

ES天生就是分布式的,那她又是如何做到天生分布式的?
通过ES官方指南我们可以知道:

我们在创建一个索引的时候,可以定义其主分片数量和副本分片数量:
PUT /blogs
{
   "settings" : {
      "number_of_shards" : 3,
      "number_of_replicas" : 1
   }
}
如果主分片和副本分片都集中在一个节点上,那是没办法做到高可用的。ES的集群监控状态会返回yellow。因此,我们需要启动更多的节点来承载副本分片。 此时,如果再增加一个节点至集群,Node 1 和 Node 2 上各有一个分片被迁移到了新的 Node 3 节点,现在每个节点上都拥有2个分片,而不是之前的3个。 如果NODE1宕机了,ES会选举一个新的主节点,并将R1、R2分片提升为主分片。以此来达到高可用的目的。
现在我们大致知道了ES的高可用和分片的方式,但是几个细节任然需要继续深入:

MongoDB

MongoDB通过复制集(Replica Set)来实现高可用。
复制集提供了数据的冗余备份,并在多个服务器上存储数据副本,提高了数据的可用性, 并可以保证数据的安全性。
复制还允许您从硬件故障和服务中断中恢复数据。


主节点负责所有的写操作,从节点同步主节点的数据。仲裁节点不维护数据集,只参与选主过程。

MongoDB是通过oplog来实现复制集间的数据同步。当主节点完成写操作后,从节点会检查自己的local数据上的oplog集合,找出最近一条记录的时间戳。然后查询主节点上的oplog集合,找出大于此时间戳的记录。最后将这些oplog查到到本地集合中并执行oplog中的操作。

MongoDB实例每个两秒就会向其他成员发送一个心跳包来判断其他成员的存活状态。如果复制集的主节点不可用了,那么系统就会触发一次选主。


选主需要时间,在选主的过程中,复制集是没有主节点的,所有的成员都变成只读状态。

MongoDB也是采用Bully算法选主,选主时,有资格成为主节点的副本节点就会向其他节点发起一个选举,希望别的节点选择其作为主节点。若赞成票过半则设置自己为主节点。有反对票时,保持自己为从节点。

复制集中的其他成员在收到选主请求时,会判断发起节点的数据版本是否过低。如过低则投反对票。

MongoDB分片时,需要引入路由服务器(mongos)和配置服务器(config servers)。配置服务器是一个独立的mongod进程,保存集群和分片的元数据,即各分片包含了哪些数据的信息。路由服务器起到一个路由的功能,供程序连接。本身不保存数据,在启动时从配置服务器加载集群信息。

TIM截图20190709161531.png

MongoDB通过分片键(Shard Keys)对集合进行划分。每个分片集合只能有一个分片键,分片后分片键不可修改。目前支持两种分片策略,范围分片和hash分片。一旦分片键选择完成,数据就以 数据块(chunk) 为单位(默认64MB)根据分片键分散到后端1或多个分片上。mongos记录每个块中的数据量,达到某个阈值,就检查是否需要拆分块。如拆分块,mongos更新config server的块元数据,config server诞生新块,修改旧块的范围(拆分点)。

查询时,查询请求不包含shard key,则mongos必须将查询分发到所有的shard,然后合并查询结果返回给客户端。查询请求包含shard key,则直接根据shard key计算出需要查询的chunk,向对应的shard发送查询请求。

插入时,必须包含shard key,mongos根据shard key算出文档应该存储到哪个chunk,然后将写请求发送到chunk所在的shard。更新、删除请求的查询条件必须包含shard key或者_id,如果是包含shard key,则直接路由到指定的chunk,如果只包含_id,则需将请求发送至所有的shard。

参考文献

https://www.elastic.co/guide/en/elasticsearch/guide/master/distributed-cluster.html
https://docs.mongodb.com/manual/core/replica-set-elections/
https://docs.mongodb.com/manual/sharding/

转自:Elasticsearch和MongoDB分片及高可用对比 - https://www.cnblogs.com/wangzhen3798/p/10032898.html

上一篇 下一篇

猜你喜欢

热点阅读