Linux服务器中Apache Ignite无需等待备份的优雅关停方法咨询
Apache Ignite 无需等待备份的优雅关停方案
- 首先确认启动参数不要添加
-J-DIGNITE_WAIT_FOR_BACKUPS_ON_SHUTDOWN=true,该参数默认值为false,默认状态下关停进程不会等待备份副本同步完成,仅会完成内存脏页落盘、资源释放、节点退出集群拓扑通知等必要的优雅关停流程,完全符合你的需求。 - 关停时使用
SIGTERM信号(即默认kill命令不带参数的信号,对应kill -15)即可触发优雅关停逻辑,禁止使用kill -9强制终止进程,否则会直接跳过优雅退出流程,大概率导致数据损坏。
参考自动化关停脚本
#!/bin/bash # 查找Ignite进程PID,过滤排除grep自身进程 IGNITE_PID=$(ps -ef | grep ignite.sh | grep -v grep | awk '{print $2}') if [ -z "$IGNITE_PID" ]; then echo "未找到运行中的Ignite进程" exit 1 fi # 发送SIGTERM信号触发优雅关停 kill $IGNITE_PID # 等待进程退出,最长等待时长可根据实际场景调整 MAX_WAIT=60 WAIT_COUNT=0 while [ $WAIT_COUNT -lt $MAX_WAIT ]; do if ! ps -p $IGNITE_PID > /dev/null; then echo "Ignite进程已正常优雅退出" exit 0 fi sleep 1 WAIT_COUNT=$((WAIT_COUNT+1)) done # 超时后不建议直接强制杀进程,此处仅作异常提示 echo "等待优雅退出超时,请检查节点是否存在IO阻塞等异常问题" exit 1
补充说明
如果你部署的Ignite集群开启了持久化特性,即使不等待备份同步,优雅关停依然会等待本地内存中的未持久化脏页落盘,这个过程的耗时和当前节点未刷盘的数据量正相关,不属于备份等待流程,是保障数据安全的必须操作,不可跳过。
如果需要进一步缩短关停耗时,可以在关停前先执行./control.sh --cache write-through-all命令手动触发全量刷盘,减少关停阶段的落盘等待时间。
- 也可以使用Ignite自带的控制脚本直接关停指定节点,无需手动查找PID:
./control.sh --baseline stop-node <目标节点ID/节点一致ID>
该方式同样会触发优雅关停逻辑,默认不会等待备份同步。
内容的提问来源于stack exchange,提问作者Victor
相关产品推荐
相关产品推荐

