NOS跨分区灾备设计与实现

本文来自网易云社区html

做者:王健数据库


摘要浏览器

NOS(网易对象存储)在实现多机房(杭州机房,北京机房等)部署后,容许一个用户在建桶时选择桶所属机房。在此基础上,咱们实现了跨机房的数据复制,进一步实现了跨机房的数据灾备方案。用户能够:安全

  1. 经过简单的配置,便可让本身上传的数据异步准实时地同步到另外一个机房,实现跨机房的数据复制服务器

  2. 在发生重大灾难致使整个机房没法访问时,能够将桶的上传下载操做切换到灾备机房,极大提高服务可用性并发

  3. 灾备恢复服务切回主机房后,灾备期间全部上传到灾备机房的数据都会同步回主机房,主机房有用户全量的数据运维

  4. 经过接入NOS的子服务NCDN和WanProxy,整个灾备过程能够对用户彻底透明异步

本文主要讨论NOS多机房部署、跨机房数据复制以及跨机房灾备的设计与实现。优化


1. 多机房部署设计

NOS实现多机房部署的出发点有两个:

  1. 可让用户自主选择将桶建立在哪一个机房(杭州机房,北京机房等)。用户能够根据本身服务器的地址就近选择桶所属机房,提升上传下载速度;

  2. 能够进一步实现跨机房的数据灾备,提升灾难状况下的系统可用性

NOS多机房部署图以下所示:

如图,两个机房间除了极少许的信息(桶信息)须要同步外,各自都至关于一套独立的NOS集群。

多机房部署状况下,CDN的回源地址也须要根据桶所属的分区来进行配置,以下图所示:

2. 跨机房数据复制

跨机房的数据复制是跨机房灾备的基础,经过实现数据的机房间冗余,才能在一个机房故障时,将服务切到另外一个机房并继续提供读写服务。

跨机房数据复制的核心设计以下图:

基本逻辑是:

  1. 当一个桶配置了跨分区灾备的属性后,该桶的全部更新操做,均会记录在NOS_Sync表中(为了保证主从分区数据的一致性,写入NOS_Sync表必须同原更新操做放在一个事务中)

  2. NosSyncer同步程序按期将NOS_Sync表中的数据读出,进行聚合处理后,将数据同步到指定的分区

跨分区数据复制有一些问题值得讨论:

  1. 为何选择将同步信息放在数据库中?
    其实,最初想到的办法并非将同步信息写到数据库中,而是在更新操做完成后,记录一条日志,并经过日志收集,日志处理,处理结果上传到队列服务,再由NosSyncer从队列服务中得到待同步的任务并执行数据复制。这种实现方式的好处是,整个数据同步的逻辑是离线的,线上的服务只须要输出一条日志便可,跨分区数据复制逻辑不会对当前的线上业务产生影响。
    而该方案有两个明显的问题:
    1)NOS支持覆盖写操做,例如两个用户能够同时上传一个名为A的对象,后上传成功的会覆盖先上传的。所以,同步信息的顺序应该同实际插入的顺序一致,才能保证同步到灾备分区时也是一样的操做顺序,保证主从分区的数据一致性。而采用日志这种方式,多个NOS服务器上的日志收集顺序是没法保证前后的(即便日志带时间戳)。该问题能够经过抓取binlog日志来保证顺序性。
    2)该方案须要依赖日志收集,日志处理,队列等一系列外部的服务,须要的部署和运维精力较大。同时,在咱们设计该系统时,这些服务的可靠性还有待验证,暂时不适用于咱们的服务。

  2. 为何将插入NOS_Sync表的操做同更新操做放在同一个事务里?
    这主要是为了保证全部的更新操做和NOS_Sync表中的同步信息一一对应,而同步信息按顺序插入,同步程序只须要顺序读取同步信息并以此执行便可,这能够保证复制操做的执行顺序和实际更新顺序一致。

  3. 数据复制的逻辑能够进行什么优化?
    数据复制优化有两个方向:1) 并发复制; 2)减小复制数据量;
    具体作法是,在取出一组同步信息后,首先在内存中对同步信息进行处理:
    1)过滤没必要要的同步操做(例如:上传A(file1),上传A(file2),上传A(file3) 能够合并为 上传A(file3))
    2)确认哪些操做能够并发执行(例如:上传A(file1),上传B(file2)直接能够并发执行)
    在进行数据复制时,首先调用去重操做,若是能够去重上传,则不传输数据。


3. 跨机房数据灾备

3.1. 灾备状况分析

从用户的视角来看,NOS跨机房灾备须要考虑上传下载等多种状况:

如图:

  1. 下行灾备状况一:用户过CDN下载,灾备时直接切换CDN回源地址,灾备过程对客户端透明(灾备切换时间约5分钟)

  2. 下行灾备状况二:有逻辑的客户端,在感知到主分区故障后,主动切换访问到灾备分区,灾备过程须要客户端配合

  3. 下行灾备状况三:无逻辑的客户端(如浏览器),若要灾备则须要切换域名,因为切换域名生效时间太久,线上基本不会操做

  4. 上行灾备状况一:用户过WanProxy进行上传,灾备时WanProxy自动将上传切换到灾备机房,灾备过程对用户透明

  5. 上行灾备状况2、状况三:客户端依赖产品的上传服务器来进行上传,当发生灾备时,须要上传服务器切换(或通知用户切换)上传地址,灾备过程须要上传服务器配合

基于以上的讨论,咱们将来推荐的方式将是,客户端经过WanProxy进行上传,经过CDN进行下载,将灾备的逻辑通通交给NOS来作。

3.2. 灾备切换

灾备切换逻辑以下:

如图,涉及灾备的主要是两个数据库字段:

  1. 灾备分区 —— 主机房发生灾难时服务切到哪里,正常状态下,数据从主机房复制到灾备机房

  2. 是否切换 —— 主机房发生灾难时,经过该字段设置主备切换

3.3. 使用建议

若是用户对本身的数据有极高的可用性要求,能够尝试开启灾备服务,此处有几个建议:

  1. 因为硬件条件限制(机房间无专线,数据传输走公网),所以不建议对大对象(如视频)实施灾备服务。

  2. 用户能够将本身的数据按照重要程度放在多个桶中(如视频,图片,重要文件等),并对最重要的桶开启灾备服务,保证灾难状态时能够提供最基本的服务。

  3. 逐渐将产品的上传切到WanProxy上传服务,将下载切到NCDN服务,从而透明地实现跨机房灾备。


网易云对象存储服务NOS 支持标准 RESTful API 接口,并提供丰富的数据在线处理服务,一站式解决互联网时代非结构化数据管理难题。


网易云免费体验馆,0成本体验20+款云产品!

更多网易研发、产品、运营经验分享请访问网易云社区






相关文章:
【推荐】 网易云安全DDoS高防全新上线 ,游戏防御实力领先

相关文章
相关标签/搜索