Zookeeper集群循环重启

Zookeeper集群循环重启,第1张

发现ZooKeeper重启,并且在选主,主成功选出来之后,集群显示正常,但数秒之后,又开始重启,进入上述现象的循环。

查看ZK日志后,发现选举出的leader节点,loadsnapshot的时候,报Java堆内存不足的错误: java.lang.OutOfMemory: Java heap space

与此同时,follower节点报错: Unexpected exception causing shutdown while sock ...Follower is ahead of the leader

查看ZK data目录/var/lib/zookeeper/version-2,发现snapshot文件超过3G

ZK的java堆内存设置的是4G,load 3G的snapshot,在内存展开之后,超出内存上限。导致出错。

1 增大ZK堆内存大小

2 将所有ZK节点上的version-2目录重命名后,创建一个空的version-2目录,重新启动并初始化

需分析snapshot为何突然增大,ZK空间,大部分被Hive任务创建的节点占用。需要找到存在问题的Hive SQL,并禁止业务提交不合理的SQL(如导致笛卡尔积的SQL)。

服务器突然重启后zookeeper集群个别节点启动失败

zookeeper启动日志提示:

unable to load database on disk

unable to run quorum server

根据 zoo.cfg配置中定义的 dataDir和dataLogDir ,将其目录下的version-2文件夹备份后删除掉,注意两个都要处理,然后重启zk。

zk数据文件读取异常(Unable to load database on disk)

https://www.tracymc.cn/archives/3475

zookepeer启动节点报错,unable to run quorum server

https://blog.csdn.net/hao134838/article/details/103595477

一体机中使用了单机模式的zookeeper(开机自启服务),一体机经常会遇到断电重启的场景,在运行过程中偶现无法开机启动问题,再次断电重新启动可以正常启动

kill -0 pid 不发送任何信号,但是系统会进行错误检查。所以经常用来检查一个进程是否存在,存在返回0;不存在返回1

查看脚本 zkServer.sh 内容

查看脚本 zkServer.sh 内容

查看脚本 zkServer.sh 内容

假设当兵设备异常断电关机,此时zookeepr的进程号是9966,此时pid的文件内容为9966,当一体机开机自启动时,如果已经有其他进程的进程号为9966时,此时zookeepr的启动脚本发现pid文件存在,且9966进程活着,则认为zookeepr已经正常启动,此时启动脚本啥事也不做只打印日志 already running as process pid ,此时zookeepr进程没有启动,紧接着skynet启动发现无法连接zookeeper,此时启动失败。

通过以上步骤即可完成问题复现。

一体机开机自启服务中使用restart命令即可。

单机模式部署不需要新建 myid 文件和 zoo.cfg 配置项中添加

这种模式有如下问题

建议单机模式下不新建 myid 文件并删除配置 server.1


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6768566.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-28
下一篇2023-03-28

发表评论

登录后才能评论

评论列表(0条)

    保存