前言
MSE提供了托管版的ZooKeeper,包含比开源ZooKeeper更强大更稳定的功能,能帮助您免去运维ZooKeeper集群的烦恼,当我们需要从自建ZooKeeper迁移到MSE ZooKeeper上面时,往往依赖旧集群的数据,MSE提供了多种数据迁移的方案,其中主流的方案可以通过MSE Sync进行实时同步,这样能够达到平滑不停机的目的,本文将介绍另外一种数据迁移的方式,主要针对业务支持停机的场景,进行一个补充,操作相比更加简单快速。
实现原理
在对ZooKeeper进行了若干次事务操作之后,ZooKeeper会将内存数据全量写入到本地磁盘中,生成一个snapshot开头的快照文件,这个快照文件就包含了该集群的全量数据。同时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一般在目录中会存在多个,拿最近时间生成那个即可:
步骤二 :准备MSE集群
以下表格供参考,购买还需要参考QPS/TPS等维度的约束,例如读写数据较小,QPS/TPS相应也能提高,具体以业务场景为准:点击购买
步骤三: 上传快照文件
从注册配置中心列表页点击你购买的实例,进入ZooKeeper的基础信息页:
点击“数据导入”,上传Snapshot文件,文件大小限制会根据你当前ZooKeeper配置自动提示,例如本次购买的4C8G,提示最大不可超过800M大小:
上传完了之后,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享受企业级服务
ZooKeeper专业版 |
自建ZooKeeper |
||
效率&性价比 |
集群重启、系统配置管理 |
页面一键重启,系统配置支持页面修改,自动重启生效 |
手动重启和配置,风险高,效率低 |
一站式网络配置 |
|
未集成 |
|
性能提升 |
读写性能优化 |
|
不支持 |
参数调优 |
JVM参数调优,优化5倍GC时间,降低FullGC |
需自行调试 |
|
可观测性 |
集群状态展示和核心指标监控 |
|
不支持 |
报警管理 |
支持核心指标水位钉钉/电话/短信报警 |
不支持 |
|
高可用和安全 |
节点故障和容灾能力 |
自动检测,自动恢复,支持多可用区部署,SLA 99.95% |
需要人工处理,自行设计 |
子账号权限管理 |
支持子账号管理访问实例权限 |
不支持 |
|
服务和配置鉴权 |
支持RAM鉴权 |
需要人工处理,自行设计 |
|
公网访问白名单 |
MSE控制台自带配置 |
需要单独购买公网,单独配置 |