聊聊分布式存储系统的Decommission和Maintenance模式

摘要:
上述模式是退役模式的扩展,称为维护模式。维护是指“正在维护”。如上所述,维护模式和调试模式之间的最大区别在于,它允许暂时减少数据冗余。维护时间到期后,系统将再次进入服务状态。上述两种方案显然对系统的影响较小。停用/维护过程中的电流限制处理需要确保停用或维护过程中数据的预期冗余,从而导致大量数据复制。

文章目录

前言

在分布式存储系统中,我们经常会遇到节点坏了挂掉的情况。这个时候我们通常的做法是将其进行送修处理。节点出现问题挂了这个现象本身不严重,这里的重点是我们如何依然保证其上数据对于用户的高可用性。这就是我们常说的存储节点的Decommission过程。本文笔者来聊聊Decommission过程以及它的扩展模式Maintenance模式。

Decommission模式

Decommission过程并不是指简单的存储节点停服务下线的操作,而是在节点允许停止服务前的一系列过程,以此保证系统的数据服务免受节点下线所带来的影响。这里的“一系列过程”包括有以下两个方面:

  • 让中心控制节点获知当前节点为即将下线节点,使其从服务节点列表中剔除出去,不让数据读写请求转发到此节点来。
  • 复制当前下线节点中的所有副本数据到其它节点中,保持数据的冗余度。

在上述2个步骤过程中,第二步是主要的过程,也将会耗费最多的时间。等这2个步骤都完成了,我们就可以放心地把节点进行停服务,然后送修处理了。

用一句话来概括Decommission过程的一个核心点:当前节点数据将不可用了,我们需要将此节点数据的副本数重新达到期望的数据副本数。

在Decommission过程中,我们需要将节点上所有的数据进行replication出去的操作,如果节点存储数据的量比较多,这个过程的开销还是比较高的。但有些时候,我们送修的机器可能只需要花少量时间进行修复,然后随后又可以恢复服务状态了,此时这个Decommission的操作显然代价有点高了。如果我们能够在保证数据又至少一个副本的可用情况下,允许节点有短暂的维护态,是否是更好的一种使用方式呢?

上面的这种模式是Decommission模式的一种扩展模式,叫做Maintenance模式,Maintenance就是维护中、保养中的意思。

Maintenance模式

如上面所提到的,Maintenance模式与Decommission模式最大的不同点在于它允许短暂的数据冗余度的降低。但这个前提在于集群数据至少是单副本可用的情况。这么说可能大家感知不到Maintenance的实际使用场景

假设1个集群30台存储节点,3个副本的冗余度设置,假设现在我们要打算对其中10台节点进行短暂的下线维修操作,

第一种,用Decommission的方式处理,就会出现10台节点上的数据同时进行大量数据replication的操作,而且过程也会比较漫长。大量数据副本的复制也会影响系统正常数据的读写操作。

第二种,用Maintenance的方式处理,假设数据是绝对均匀分布的,我下线了10台节点,另外20台节点应保存这10台节点上的其它2个副本数据。此时我可以将这10台节点进入Maintenance模式,让系统知道这些节点只是临时进入维护状态,不需要触发数据复制的操作。等Maintenance时间一过,重新进入服务状态。

上述的两种方案,显然Maintenance模式对于系统的影响更小。
相比较于Decommission模式,Maintenance中需要考虑的环节会更多一些,这里包括:

  • 在进入Maintenance之前,需要检查待Maintenance节点上的数据在系统只能至少保证单副本可用的情况,这个阶段我们称之为Entering Maintenance Mode过程。
  • 需要有Maintenance维护时间的设置,维护时间一到,节点重新恢复到In Service状态,因为这里没有涉及到实际数据的拷贝,所以服务的恢复将会十分迅速。

但是这里并不是说Maintenance绝对比Decommission好用,从更深层面来谈论二者的差别,还是本身二者使用场景的差异:

Decommission适用于节点长时间不可用、下线的情况,如果是节点长时间会处于不可用的情况,降低其上数据的冗余度不会是一个好的做法。而Maintenance适用于短期不可服务状态,通过短时间内降低数据的冗余度来降低对于系统服务的影响。

Decommission/Maintenance过程中的限流处理

在Decommission或者Maintenance过程中,会存在为了保证数据期望冗余度的要求,造成大量数据复制的情况。这个时候,我们需要做进一步地限流处理。比如在带宽速率上做throttle处理或其它指标上做处理(这个可参考HDFS Balancer的流控处理)。一个总的原则是,我们宁可让数据复制的速度变慢一些,也尽量别让这个过程对于系统服务造成影响。

免责声明:文章转载自《聊聊分布式存储系统的Decommission和Maintenance模式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇POJ3468 A Simple Problem with IntegersRaft一致性协议的投票选举下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

看完这篇,保证让你真正明白:分布式系统的CAP理论、CAP如何三选二

引言 CAP 理论,相信很多人都听过,它是指: 一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。 为什么要理解 CAP 理论?我能说出很多理由来。如果是在职场上,也许最合适的理由是,当领导给出的任务不靠谱时,我们可以依据 CAP 去否决它。...

记录分布式和集群的区别

用一个例子介绍集群与分布式: 小餐馆原来只有一个厨师,切菜洗菜备料炒菜他都全干。后来餐馆的客人多了,厨房里一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,这两个厨师的关 系是集群。为了让厨师专心炒菜,把菜做到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式,一个配菜师也忙不过来了,又请了个配菜 师,两个配菜师关系是集群。 一、分布...

Tair分布式缓存

这篇文章出自:https://www.cnblogs.com/xiexj/p/11652107.html 支付宝系统也使用Tair作为分布式缓存的工具。 Tair是为了解决什么问题而生? Redis很好用,相比memcached多了很多数据结构,支持持久化。但是在很长一段时间里,原生是不支持分布式的。后来就出现了很多redis集群类产品,Tair是其中胜出...

【入门】ZooKeeper 相关概念总结

1. 前言 相信大家对 ZooKeeper 应该不算陌生。但是你真的了解 ZooKeeper 到底有啥用不?如果别人/面试官让你给他讲讲对于 ZooKeeper 的认识,你能回答到什么地步呢? 拿我自己来说吧!我本人曾经使用 Dubbo 来做分布式项目的时候,使用了 ZooKeeper 作为注册中心。为了保证分布式系统能够同步访问某个资源,我还使用 ZooK...

[转载]浅析海量用户的分布式系统设计

我们常常会听说,某个互联网应用的服务器端系统多么牛逼,比如QQ拉、微信拉、淘宝拉。那么,一个互联网应用的服务器端系统,到底牛逼在什么地方?为什么海量的用户访问,会让一个服务器端系统变得更复杂?本文就是想从最基本的地方开始,探寻服务器端系统技术的基础概念。 承载量是分布式系统存在的原因 当一个互联网业务获得大众欢迎的时候,最显著碰到的技术问题,就是服务器非...

scrapy基础知识之 Scrapy-Redis分布式策略:

Scrapy-Redis分布式策略: 假设有四台电脑:Windows 10、Mac OS X、Ubuntu 16.04、CentOS 7.2,任意一台电脑都可以作为 Master端 或 Slaver端,比如: Master端(核心服务器) :使用 Windows 10,搭建一个Redis数据库,不负责爬取,只负责url指纹判重、Request的分配,以及...