我有一个6节点的zookeeper集群来管理我的服务。一个错误的脚本使得leader节点的主机内存耗尽,然后在异常节点关闭后整个集群停止服务。
由于观察到异常状态,所有来自命令行客户机或python程序中kazoo lib的对任何活动节点的请求都不会立即抛出错误,而是被阻止,直到超时。
在我从配置文件中删除异常节点并重新启动所有节点之后,新的5节点集群开始正常服务。
我不知道为什么集群没有放弃异常节点,重新选举领导者并继续服务。
这是一个关于集群的时间表。群集从大约10:00:00到10:58:00停止服务
这是我发现的错误
当我试图在不释放内存的情况下重新启动异常示例时,异常主机上记录了一个错误 There is insufficient memory for the Java Runtime Environment to continue
,这表示jvm可以在内部抛出outofmemoryerror,但是进程没有退出,追随者也没有发现处于异常状态的领导者。
正常节点在可能的oom发生后停止了日志记录。恢复前导节点后,输出以下错误日志:
2020-12-23 10:58:06,556 [myid:95] - WARN[RecvWorker:147:QuorumCnxManager$RecvWorker@1227] - Connection broken for id (old leader id), my id = 95, error = java.io.EOFException
at java.io.DataInputStream.readInt(Unknown Source)
at org.apache.zookeeper.server.quorum.QuorumCnxManager$RecvWorker.run(QuorumCnxManager.java:1212)
找不到核心转储文件。可能为默认目录生成的核心文件不存在。
由于我试图重新启动引线,引线的日志文件被覆盖。
在群集关闭之前发生了一轮领导人重新选举,因为6个节点中有4个无法联系到领导人。追随者们举杯庆祝 java.net.SocketTimeoutException: Read timed out
或者 java.io.EOFException
由于连接到异常主机而导致的错误。
一些 FastLeaderElection
某些节点可能无法观察到事件,因为无法同时进行日志记录。
在集群停止服务期间,领导人连任从未发生过。重新启动oom示例后,将记录新的重新选择。
暂无答案!
目前还没有任何答案,快来回答吧!