作者:草谷

前言

MSE 提供了托管版的 ZooKeeper,包含比开源 ZooKeeper 更强壮更稳定的功用,能帮助您免去运维 ZooKeeper 集群的烦恼,当咱们需要从自建 ZooKeeper 搬迁到 MSE ZooKeeper 上面时,往往依靠旧集群的数据,MSE 提供了多种数据搬迁的计划,其中干流的计划能够经过MSE Sync进行实时同步,这样能够到达平滑不停机的意图,本文将介绍另外一种数据搬迁的方式,首要针对事务支撑停机的场景,进行一个弥补,操作比较更加简略快速。

完成原理

5 分钟完成 ZooKeeper 数据迁移

在对 ZooKeeper 进行了若干次事务操作之后,ZooKeeper 会将内存数据全量写入到本地磁盘中,生成一个 snapshot 开头的快照文件,这个快照文件就包含了该集群的全量数据。同时 ZooKeeper 在节点启动的时候,会首要加载该快照文件进行一次数据初始化

基于此原理,咱们能够将任意要搬迁集群的快照文件,放到方针集群的快照途径中,然后重启方针集群就能够将搬迁集群的数据加载到自己的内存中了,这样就完成了一次全量数据的搬迁。

数据导入实践

5 分钟完成 ZooKeeper 数据迁移

过程一:获取快照文件

“支撑开源 ZooKeeper 3.4.x~3.8.x 的数据搬迁导入到 MSE ZooKeeper”

咱们先找到自建 ZooKeeper 的 Snap 缓存文件:

文件名为 “snapshot.xxx”格局的:是 ZooKeeper 某个时间的全量数据,ZooKeeper 会定时写到磁盘中的。

  • 文件途径

snapshot.xxx 文件的存储途径:会装备在 ZooKeeper 的 zoo.cfg(zoo.cfg 默许放在 zookeeper 目录的 conf 文件夹下)装备文件中,dataDir 项,例如:

dataDir=/home/admin/zookeeper/zkData
  • 获取文件

snapshot.xxx 一般在目录中会存在多个,拿最近时间生成那个即可:

5 分钟完成 ZooKeeper 数据迁移

过程二 :预备 MSE 集群

以下表格供参阅,购买还需要参阅 QPS/TPS 等维度的约束,例如读写数据较小,QPS/TPS 相应也能提高,具体以事务场景为准:

5 分钟完成 ZooKeeper 数据迁移

过程三:上传快照文件

从注册装备中心列表页点击你购买的实例,进入 ZooKeeper 的基础信息页:

5 分钟完成 ZooKeeper 数据迁移

从“节点管理”进入管理页面:

5 分钟完成 ZooKeeper 数据迁移

点击“数据导入”,上传 Snapshot 文件,文件大小约束会根据你当前 ZooKeeper 装备主动提示,例如本次购买的 4C8G,提示最大不可超越 800M 大小:

5 分钟完成 ZooKeeper 数据迁移

上传完了之后,3 个节点的集群大约 5 分钟左右,数据即可导入重启完成。

结果验证

数据导入完成之后,即可经过 endpoint 进行 MSE ZooKeeper 的拜访,获取到搬迁数据。

“mse-xxxx-p.zk.mse.aliyuncs.com” 为集群的 endpoint:

 CuratorFrameworkFactory.builder().connectString("mse-xxxx-p.zk.mse.aliyuncs.com:2181")
                    .sessionTimeoutMs(10000).retryPolicy(
                    retryPolicy).
                    build().start();
   ZooKeeper zk = new ZooKeeper("mse-xxxx-p.zk.mse.aliyuncs.com:2181", 30000,
                new Watcher() {
                    @Override
                    public void process(WatchedEvent event) {
                        System.out.println("ZooKeeper=====" + event);
                    }
                });

购买 MSE Zookeeper 享用企业级服务

5 分钟完成 ZooKeeper 数据迁移

5 分钟完成 ZooKeeper 数据迁移