关于阿里云:MSE-ZooKeeper-数据导入导出功能上线

35次阅读

共计 2282 个字符,预计需要花费 6 分钟才能阅读完成。

作者:草谷

背景

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 专业版的数据管理 - 节点治理 - 面板中,根底版目前暂不反对,请降级到专业版:

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

此刻会呈现导出的性能页面,这里反对导出的文件将离开展现,也就是,快照导出,和事务日志导出须要独自抉择,这样也是为了满足不同需要的用户,同时也能进步导出效率;

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

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

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

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

经营流动

重磅推出 MSE 专业版,更具性价比,可间接从根底版一键平滑降级到专业版!

点击此处查看购买

正文完
 0