私有变量 linux创建文件 http Java中高进阶架构 pyspark yii routes odbc oracle显示所有数据库 ie内核浏览器怎么设置 sallenkey滤波器 java不定长数组 plsql卸载 excel加减混合求和 mysql入门 python平方函数 java的继承 java中的正则表达式 java的数据结构 java获取当前年 java泛型的使用 java匿名函数 java代码注释 java泛型方法 linux系统教程 linux如何安装 linux系统命令大全 opengl编程指南 超级兔子ie修复专家 acmecadconverter 网站数据分析工具 pdf拆分工具 脚本大全 视频修复工具 陌陌电脑直播设置教程 流水账软件 p6软件 小米手环充电多久 x64dbg 明解c语言
当前位置: 首页 > 学习教程  > 编程语言

zk数据迁移删除过多zk node

2020/12/28 19:23:19 文章标签:

一.前提知识概要 生产环境最近遇到zookeeper 巡检发现znode很多的问题,撸代码发现写zk的逻辑几乎不怎么会进去,而且代码删除znode的逻辑有bug。巡检正好发现,于是研究了下zk。 zk,即zookeeper,ZooKeeper是一个集中的服务&#xf…

一.前提知识概要

生产环境最近遇到zookeeper 巡检发现znode很多的问题,撸代码发现写zk的逻辑几乎不怎么会进去,而且代码删除znode的逻辑有bug。巡检正好发现,于是研究了下zk。
zk,即zookeeper,ZooKeeper是一个集中的服务,主要用于配置信息的维护、命名、分布式同步和组服务。所有这些类型的服务都以某种形式被分布式应用程序使用。其中分布式同步、分布式锁控制等用的比较多。本文背景就是在分布式锁应用场景下。作为redis 分布式锁获取失败时的兜底方案。
由于涉及大量的znode数据手工删除,出于职业敏感,生产对于删除操作再怎么谨慎都不为过。要不然一个回车下去,抽自己的心都有。
zk数据分为内存数据和持久化数据。内存数据缓存了整个zk的完整树形数据在内存中。而磁盘持久化数据,则以定时执行snapshot形式存在。

1.配置如下

[appdeploy@cnsz****:/home/appdeploy/zookeeper/zookeeper-3.5.4-beta/conf]$cat zoo.cfg | grep data
dataDir=/home/appdeploy/zookeeper/data  #数据文件保存目录
dataLogDir=/home/appdeploy/zookeeper/logs  #日志文件保存目录

2.data file相关:
The suffix of the snapshot file names is the zxid, the ZooKeeper transaction id, of the last committed transaction at the start of the snapshot.(快照文件名的后缀为快照开始时最后一个提交的事务的zxid,即zkeeper事务id。)

[appdeploy@cnsz****:/home/appdeploy/zookeeper/data/version-2]$ls -l
total 278260
-rw-r--r-- 1 appdeploy mwopr        3 Jul  9 11:10 acceptedEpoch
-rw-r--r-- 1 appdeploy mwopr        3 Oct  1 07:16 currentEpoch
……
-rw-r--r-- 1 appdeploy mwopr 19002426 Dec 28 15:18 snapshot.24ba9724e65
-rw-r--r-- 1 appdeploy mwopr 19003555 Dec 28 15:22 snapshot.24ba9733257
-rw-r--r-- 1 appdeploy mwopr 19003195 Dec 28 15:28 snapshot.24ba9747f7d

3.log file相关:
The log file’s suffix is the first zxid written to that log.(日志文件的后缀是写入该日志的第一个zxid<zookeeper事务ID>。)

[appdeploy@cnsz****:/home/appdeploy/zookeeper/zookeeper-3.5.4-beta/bin]$./zkTxnLogToolkit.sh /home/appdeploy/zookeeper/logs/version-2/log.24ba96c1139  | head -100
ZooKeeper Transactional Log File with dbid 0 txnlog format version 2
12/28/20 2:48:35 PM CST session 0x105936b44c719f8 cxid 0x19b329 zxid 0x24ba96c1139 delete '/MCS-CAS-CORE-MOP/$Jobs/SaturnExceptionJob/execution/1/completed
……

4.事务ID
在ZooKeeper中,事务是指能够改变ZooKeeper服务器状态的操作,我们也称之为事务操作或更新操作,一般包括数据节点创建与删除、数据节点内容更新和客户端会话创建与失效等操作。
对于每一个事务请求,ZooKeeper都会为其分配一个全局唯一的事务ID,用ZXID来表示,通常是一个64位的数字。每一一个ZXID对应一次更新操作,从这些ZXID中可以间接地识别出ZooKeeper处理这些更新操作请求的全局顺序。

二.zk数据迁移

需求:生产集群clus_prd的zk数据迁移到测试环境的zk集群clus_test
stp1:停止clus_prd集群(若不要全量数据,则不用停clus_prd集群);
stp2:从clus_prd各个节点找出最新的snapshot,(zookeeper事务ID是递增的),以及包含该snapshot的log文件。

#日志文件的事务ID小于snapshot的事务ID(用zkTxnLogToolkit.sh命令),则说明日志文件包含了改snapshot的全部事务。

如:

[appdeploy@CNSZ****:/app/zookeeper-3.4.9/data/version-2]$ls -ltr | tail -5
-rw-r--r-- 1 appdeploy mwopr 43100725 Dec 28 17:44 snapshot.5b2340e1c
-rw-r--r-- 1 appdeploy mwopr 43100931 Dec 28 17:46 snapshot.5b2353ced
-rw-r--r-- 1 appdeploy mwopr 43097942 Dec 28 17:50 snapshot.5b236c19d
-rw-r--r-- 1 appdeploy mwopr 43100945 Dec 28 17:53 snapshot.5b238306a
-rw-r--r-- 1 appdeploy mwopr 43100995 Dec 28 17:54 snapshot.5b23905ec  #最新的
[appdeploy@CNSZ****:/app/zookeeper-3.4.9/log/version-2]$ls -ltr | tail -5
-rw-r--r-- 1 appdeploy mwopr 67108880 Dec 28 17:46 log.5b2340e12
-rw-r--r-- 1 appdeploy mwopr 67108880 Dec 28 17:50 log.5b2353d1b
-rw-r--r-- 1 appdeploy mwopr 67108880 Dec 28 17:53 log.5b236c1cc
-rw-r--r-- 1 appdeploy mwopr 67108880 Dec 28 17:54 log.5b238306c
-rw-r--r-- 1 appdeploy mwopr 67108880 Dec 28 17:56 log.5b23905ee #最新的

stp3:停止clus_test集群(所有节点,这样就snapshot和log文件都停止刷新了),并备份最新的snapshot和包含该snapshot的log文件(检查方法同stp2)
stp4:将stp2中clus_prd的文件复制到clus_test集群dataDir 和 dataLogDir 对应的路径下。
stp5:逐个启动clus_test集群下所有节点。等待一段时间(几分钟),集群状态

#启动zk
[appdeploy@CNSZ****:/home/appdeploy/zookeeper/zookeeper-3.5.4-beta/bin]$./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /home/appdeploy/zookeeper/zookeeper-3.5.4-beta/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
#查看zk状态
[appdeploy@CNSZ****:/home/appdeploy/zookeeper/zookeeper-3.5.4-beta/bin]$./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /home/appdeploy/zookeeper/zookeeper-3.5.4-beta/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: leader

三.删除过多zk node

生产环境出现过多的znode,担心会影响zk性能,以及一些不可预期的其他问题。决定删除一些无用的znode。

#可见/PortalLock下已经有157182个节点
[zk: localhost:2181(CONNECTED) 0] stat /PortalLock
cZxid = 0x11b11e4c4
ctime = Fri Jan 31 17:44:39 CST 2020
mZxid = 0x11b11e4c4
mtime = Fri Jan 31 17:44:39 CST 2020
pZxid = 0x510a8164d
cversion = 157102
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 12
numChildren = 157102

删除过程中遇到一个问题,如下,原因是/PortalLock下节点数过多

[zk: localhost:2181(CONNECTED) 0] deleteall /PortalLock
2020-12-28 18:36:11,184 [myid:localhost:2181] - WARN  [main-SendThread(localhost:2181):ClientCnxn$SendThread@1237] - Session 0x3075ad884840044 for server localhost/127.0.0.1:2181, unexpected error, closing socket connection and attempting reconnect
java.io.IOException: Packet len7709610 is out of range!
        at org.apache.zookeeper.ClientCnxnSocket.readLength(ClientCnxnSocket.java:121)
        at org.apache.zookeeper.ClientCnxnSocketNIO.doIO(ClientCnxnSocketNIO.java:86)
        at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:363)
        at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1214)

WATCHER::

WatchedEvent state:Disconnected type:None path:null
KeeperErrorCode = ConnectionLoss for /PortalLock

解决方案如下:

#zkCli.sh增加"-Djute.maxbuffer=2048" 这个参数,默认是4096*1024
"$JAVA" "-Djute.maxbuffer=2048" "-Dzookeeper.log.dir=${ZOO_LOG_DIR}" "-Dzookeeper.root.logger=${ZOO_LOG4J_PROP}" "-Dzookeeper.log.file=${ZOO_LOG_FILE}" \
	 -cp "$CLASSPATH" $CLIENT_JVMFLAGS $JVMFLAGS \
 org.apache.zookeeper.ZooKeeperMain "$@"

最终结果:
测试环境1核4G的服务器,删除157812个节点,耗时15分56秒。
部分vmstat数据如下:

 1  0      0 128844 193852 730056    0    0     0  1983 3512 19476 34 36 16  5  8       2020-12-28 18:54:46 CST
 3  0      0 128736 193860 730368    0    0     0  1609 3025 17460 33 32 17  6 11       2020-12-28 18:54:51 CST
 5  0      0 128380 193876 730752    0    0     0  2118 3786 21891 35 34 16  6  8       2020-12-28 18:54:56 CST
 3  1      0 127644 193876 731208    0    0     0  1905 3544 20937 38 39 12  5  6       2020-12-28 18:55:01 CST
 4  1      0 127148 193884 731812    0    0     0  2040 3649 24907 40 40  7  5  8       2020-12-28 18:55:06 CST
 2  0      0 126900 193896 732108    0    0     0  1702 3169 17721 32 34 18  6 10       2020-12-28 18:55:11 CST
 0  0      0 126240 193904 732512    0    0     0  1926 3541 19306 36 32 18  5  9       2020-12-28 18:55:16 CST
 6  1      0 126124 193916 732816    0    0     0  1676 3100 17821 32 30 20  7 11       2020-12-28 18:55:21 CST
 5  0      0 125884 193920 733160    0    0     0  1530 2953 15805 31 28 19  8 13       2020-12-28 18:55:26 CST
 6  1      0 124208 193924 733440    0    0     0  1715 3615 18527 34 34 18  6  9       2020-12-28 18:55:31 CST
 3  0      0 125148 193932 733828    0    0     0  2164 4382 21477 33 35 20  6  7       2020-12-28 18:55:36 CST
 2  0      0 124784 193944 734264    0    0     0  2490 4222 24435 24 25 41  7  3       2020-12-28 18:55:41 CST
 1  0      0 123852 193968 734856    0    0     0  3681 5821 33243 29 29 33  7  2       2020-12-28 18:55:46 CST
 2  0      0 123628 193980 735248    0    0     0  2550 4221 24947 23 22 45  6  4       2020-12-28 18:55:51 CST
 3  0      0 117924 194056 740844    0    0     0  2095 3609 21252 33 31 23  6  7       2020-12-28 18:56:01 CST
 8  0      0 111312 194068 757900    0    0     0  1477 2733 14496 44 28  4  3 20       2020-12-28 18:56:06 CST
 5  0      0 113564 194084 758252    0    0     0  1715 3192 17023 31 35 15  7 12       2020-12-28 18:56:11 CST
 5  1      0 105632 194088 758596    0    0     0  1533 2926 14641 37 35 12  6 10       2020-12-28 18:56:16 CST
 1  0      0 105632 194096 758968    0    0     0  1572 2923 16278 32 32 16  7 13       2020-12-28 18:56:21 CST
 3  0      0 105416 194100 759332    0    0     0  1742 3333 16759 34 34 16  6 11       2020-12-28 18:56:26 CST
 4  0      0 103780 194100 759644    0    0     0  1986 3730 18611 32 36 21  6  5       2020-12-28 18:56:31 CST
 2  0      0 102164 194108 760100    0    0     0  6373 4251 19242 37 41 14  4  4       2020-12-28 18:56:36 CST
 2  0      0 101792 194128 760436    0    0     0  2083 3547 18462 32 36 20  6  6       2020-12-28 18:56:41 CST
 3  0      0 101256 194132 760876    0    0     0  1846 3274 16591 35 37 14  5  9       2020-12-28 18:56:46 CST
 2  0      0 101388 194136 761184    0    0     0  1657 2944 16703 28 30 21  7 14       2020-12-28 18:56:51 CST
 6  1      0 101140 194136 761580    0    0     0  1850 3356 19517 34 35 17  5  9       2020-12-28 18:56:56 CST
 3  0      0 100660 194140 762060    0    0     0  1870 3418 20380 36 34 16  6  8       2020-12-28 18:57:01 CST
 4  1      0  99916 194152 762696    0    0     0  2327 3680 23115 40 38 10  4  8       2020-12-28 18:57:06 CST
 3  0      0  99544 194168 763040    0    0     0  2064 3601 19275 34 34 20  7  5       2020-12-28 18:57:11 CST
 3  0      0  96912 194176 763472    0    0     0  1694 3109 16735 35 36 14  6  8       2020-12-28 18:57:16 CST
 2  1      0  98660 194180 763808    0    0     0  1836 3283 16739 34 34 17  6  9       2020-12-28 18:57:21 CST
 2  0      0  98164 194180 764112    0    0     0  1374 3012 14647 27 27 30  7  9       2020-12-28 18:57:26 CST
 4  0      0  97280 194188 764300    0    0     0  1007 2861 12634 28 24 34  4  9       2020-12-28 18:57:31 CST
 1  0      0  97420 194200 764600    0    0     0  1555 3456 17877 31 31 27  5  6       2020-12-28 18:57:36 CST

本文链接: http://www.dtmao.cc/news_show_550221.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?