MSE ZooKeeper 数据导入导出功能上线

本文涉及的产品
应用实时监控服务-应用监控,每月50GB免费额度
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: MSE 提供了托管版的 ZooKeeper,拥有比自建开源 ZooKeeper 稳定性更高的SLA,同时管控面提供了丰富的服务自治功能。赶在2022年的岁末,MSE ZooKeeper 上线了一个非常实用的功能-数据导入导出功能,彻底解决了困恼用户长期以来无法自助处理数据的问题。

作者:草谷


背景


MSE 提供了托管版的 ZooKeeper,拥有比自建开源 ZooKeeper 稳定性更高的SLA,同时管控面提供了丰富的服务自治功能。赶在2022年的岁末,MSE ZooKeeper 上线了一个非常实用的功能-数据导入导出功能,彻底解决了困恼用户长期以来无法自助处理数据的问题。通过阅读本文,你可以快速获得以下知识点和能力:


  • ZooKeeper 的持久化文件原理
  • 什么场景下会使用到导入导出功能
  • 如何在 MSE 上面使用导入导出功能


存储原理


此次上线的导出功能支持的数据类型包含快照文件snap和事物日志,在介绍功能之前,我们看下 ZooKeeper 的这2个数据文件是用来做什么的。


在 ZooKeeper 中,主要会产生2种和数据相关的持久化文件,一个是内存的数据快照 Snapshot 文件,另外一个是事务日志 log 文件;它们分别是什么作用,有什么区别呢?


下面2段代码是 Snap 快照的写入内容和产生的时机:


public void save(
    DataTree dataTree,
    ConcurrentHashMap<Long, Integer> sessionsWithTimeouts,
    boolean syncSnap) throws IOException {
    long lastZxid = dataTree.lastProcessedZxid;
    File snapshotFile = new File(snapDir, Util.makeSnapshotName(lastZxid));
    try {
        snapLog.serialize(dataTree, sessionsWithTimeouts, snapshotFile, syncSnap);
    } catch (IOException e) {
     //
    }
}
private boolean shouldSnapshot() {
    int logCount = zks.getZKDatabase().getTxnCount();
    long logSize = zks.getZKDatabase().getTxnSize();
    return (logCount > (snapCount / 2 + randRoll))
           || (snapSizeInBytes > 0 && logSize > (snapSizeInBytes / 2 + randSize));
}


可以看到,Snapshot 写入的是一个 DataTree 的数据结构,里面存储的是 ZooKeeper 的全量内存数据,而生成 Snapshot 的条件,主要涉及到 snapCount,snapCount 是一个可配置的参数,默认是10W,也就是 Snapshot 是 Zookeeper 的内存快照,是一份全量数据,而这份全量数据,也并非实时写入到磁盘中的,需要达到一定的条件才会写入。


再看 ZooKeeper 的事务日志,针对客户端的每一次事务操作,Zookeeper 都会将他们记录到事务日志中,同时也会将数据变更应用到内存数据库中。刚才说到 Snapshot 的生成并非实时的,在上一次内存快照生成后,到下一份生成之前,就会有一部分数据没有写入到 Snapshot 中,那么这部分增量的数据,我们可以从事务日志中找到。


总结一下,简单来说,Snapshot 是存储的全量数据,事务日志 log 文件是记录着完整的每次事务操作,所以如果要完整的恢复一个 ZooKeeper 集群的数据,需要同时具备这2个文件。


使用场景


MSE 数据导入导出功能主要来自于客户的需求反馈,主要有如下三种使用场景:


数据的备份


如果需要对集群某个时刻的数据进行备份,用于后续恢复或者容灾使用,可以使用 MSE 的数据导出功能,将集群的数据导出成文件进行存储,如果集群出现了数据不符合预期的情况下,可以通过导入的功能,将集群数据恢复到备份时的状态


集群的迁移


需要迁移到新的 ZooKeeper 集群,又依赖到原 ZooKeeper 集群的数据时,可以通过 MSE 的数据导出功能,将数据导出,然后再放到新集群中,重新初始化,这样就相当于做了一次全量的数据迁移,这种迁移是需要停机的,但胜在简单易操作


分析客户端业务


MSE 导出的 Snapshot 文件和 log 文件,可以通过 ZooKeeper 自带的解析工具,解析成明文,里面包含的信息非常丰富,每条数据的大小,访问频率等,通过这些,可以查到一部分客户端是否错用 Zookeeper,能具体到路径,帮助揪出有问题的客户端。例如我们遇到过有用户客户端错用导致一个 Session 写入了大量的数据,最后通过分析事务文件,找到了具体的客户端IP和应用名,解除了风险。


动手实践


接下来,给大家介绍下,如何对一个集群的数据进行导入导出:


将集群的数据进行导出


导入导出功能在 ZooKeeper 专业版的数据管理-节点管理-面板中,基础版目前暂不支持,请升级到专业版:


1.png


点击数据导出按钮,即可将这个集群的数据进行导出:


2.png


此刻会出现导出的功能页面,这里支持导出的文件将分开展示,也就是,快照导出,和事务日志导出需要单独选择,这样也是为了满足不同需求的用户,同时也能提高导出效率;


按需选择,点击导出后,大概2-5分钟,可下载的文件会显示在下载列表中,进行下载即可。


3.png


将导出的数据导入到另一个集群中


点击数据导入按钮,出现导入数据对话框,这里直接选择上转上一步导出的 Snapshot 文件即可:


4.png


整体的数据导入导出功能就演示完了,简单高效,相比于自建 ZooKeeper 的数据腾挪,效率提高了100%,并且导入数据后,集群的初始化也是自动的,不用再担心因为操作步骤错误导致集群起不来了。


运营活动


重磅推出 MSE 专业版,更具性价比,可直接从基础版一键平滑升级到专业版!


5.png

点击此处查看购买

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
7月前
|
网络协议 Nacos 数据安全/隐私保护
MSE微服务引擎注册问题之nacos注册失败如何解决
MSE(MicroService Engine)微服务引擎是阿里云提供的一种微服务治理平台,它通过提供服务注册、发现、配置管理等功能来支撑微服务架构的稳定运行;本合集旨在梳理MSE微服务引擎的核心特性、部署流程,以及实践中可能遇到的问题和相应的解决方案,以助力用户优化微服务架构的实施和管理。
|
6月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 05 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
2月前
|
分布式计算 Java Hadoop
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
Hadoop-30 ZooKeeper集群 JavaAPI 客户端 POM Java操作ZK 监听节点 监听数据变化 创建节点 删除节点
70 1
|
5月前
|
消息中间件 存储 Kafka
kafka 在 zookeeper 中保存的数据内容
kafka 在 zookeeper 中保存的数据内容
56 3
|
5月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 06 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
7月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 04 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。
|
7月前
阿里云微服务引擎 MSE 2024 年 1 月产品动态
阿里云微服务引擎 MSE 2024 年 1 月产品动态
|
7月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 02 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。
|
7月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2024 年 03 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要。
|
7月前
|
Cloud Native Dubbo Java
阿里云微服务引擎 MSE 2024 年 01 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。

相关产品

  • 微服务引擎
  • 下一篇
    DataWorks