备份 / 恢复
容器模式 (2026.05+,推荐)
sudo bash /opt/kopens/install/bin/backup.sh
# 산출: /data1/pp-backups/pe-backup-<ts>.tar.zst + .sha256
# 포함: cassandra (drain 후), redis (AOF), hivemq, node-userdir, /etc/kopens
OTA upgrade.sh 也会通过同一工具自动执行 pre-snapshot(用于回滚时恢复数据)。
恢复:
sudo bash /opt/kopens/install/bin/restore.sh /data1/pp-backups/pe-backup-20260517-153000.tar.zst
当前状态同样会自动备份为 pre-restore-*.tar.zst → 恢复 → 容器自动重启。自动校验 sha256。
定期备份 (cron):
echo "0 3 * * * root /opt/kopens/install/bin/backup.sh > /dev/null 2>&1" \
> /etc/cron.d/plantpulse-edge-backup
echo "0 4 * * 0 root find /data1/pp-backups -name 'pe-backup-*.tar.zst' -mtime +30 -delete" \
>> /etc/cron.d/plantpulse-edge-backup
详细指南:容器模式运维指南。
(legacy) Native 模式
$PE_HOME/bin/backup.sh
生成位置 (<DT> = YYYYMMDD-HHMMSS):
/data1/pp-backup/<DT>/
├── env.sh # 환경 변수 스냅샷
├── app.properties # 게이트웨이 설정 사본
├── cassandra/ # nodetool snapshot — sstable 그대로 (TTL/메타 보존)
│ ├── pe/ # keyspace
│ └── system_*/
├── sparkplugb/ # bdSeq 등 sparkplug 상태
├── grafana/ # 대시보드 / 데이터소스 정의
├── node-red/ # Node-RED userDir (플로우 / credentials / 패키지)
├── hivemq/ # MQTT persistence
└── apm/
正常输出:
[1] DUMP env.sh / app.properties ... OK
[2] CASSANDRA nodetool snapshot ... OK (snapshot=backup-20260508-040215, size=1.2 GB)
[3] COPY /data1/pp-data/{sparkplugb,grafana,node-red,hivemq,apm} ... OK
BACKUP COMPLETED — /data1/pp-backup/20260508-040215/ (총 2.1 GB, 소요 47s)
耗时与数据量成正比(通常为分钟级)。
2. 备份完成后 —— 务必转存到外部介质
如果 /data1/pp-backup/ 与网关位于同一块物理磁盘,则不具备灾难恢复效果。必须镜像到外部 NAS / S3 / 其他服务器。
# 마지막 백업 디렉토리 이름
LATEST=$(ls -t /data1/pp-backup | head -1)
# 외부 NAS / S3 / 다른 서버로 미러
rsync -av /data1/pp-backup/$LATEST nas:/backup/edge/
3. 定期自动化 (cron 示例)
# /etc/cron.d/plantpulse-backup
# 매일 새벽 1시에 백업, 30일 이상은 자동 삭제
0 1 * * * root /opt/kopens/plantpulse-edge/bin/backup.sh >>/var/log/pp-backup.log 2>&1
30 1 * * * root find /data1/pp-backup -maxdepth 1 -type d -mtime +30 -exec rm -rf {} +
应用 cron 后,请确认次日凌晨 1 点是否新生成了 /data1/pp-backup/<date>/。
连外部镜像一并自动化
在 cron 的 0 1 * * * 行末尾追加 && rsync ...,使备份完成后自动镜像到外部,更为稳妥。
4. 从备份恢复 (灾难恢复 —— 基本流程)
恢复会覆盖数据 —— 请由有经验人员陪同操作
以下是整体恢复的大致流程。请勿在生产环境中直接照搬执行,务必与运维团队一同进行。
# 1. 게이트웨이 정지
$PE_HOME/bin/stop.sh
# 2. 복원 대상 백업 디렉토리 결정
LATEST=/data1/pp-backup/<YYYYMMDD-HHMMSS>
# 3. 설정 복구
cp $LATEST/app.properties $PE_HOME/server/webapps/plantpulse-edge-web/WEB-INF/classes/
# 4. 도구 데이터 복구
rsync -av --delete $LATEST/sparkplugb/ /data1/pp-data/sparkplugb/
rsync -av --delete $LATEST/grafana/ /data1/pp-data/grafana/
rsync -av --delete $LATEST/node-red/ /data1/pp-data/node-red/
rsync -av --delete $LATEST/hivemq/ /data1/pp-data/hivemq/
# 5. Cassandra 복구 (snapshot sstable 복사 → restart)
# 상세 절차는 Cassandra 운영 문서 / Apache 가이드 참조
# (단순화하면: $LATEST/cassandra/<keyspace>/<table>/snapshot/<id>/ 의 sstable 들을
# 실제 data 디렉토리로 cp 하고 nodetool refresh)
# 6. 게이트웨이 시작
$PE_HOME/bin/start.sh
# 7. 검증
$PE_HOME/bin/ps.sh
curl -s http://127.0.0.1/ui/opcua/tree | jq '.data.tree | length'
5. 常见陷阱
| 现象 | 原因 / 解决 |
|---|---|
backup.sh 每次都覆盖到同一目录 | (非正常)BUILD_DATE 格式变更 / 系统时钟异常。检查 date 结果 + backup.sh 相关行 |
| 卡在 Cassandra snapshot 阶段 | I/O 或磁盘空间不足。df -h /data1 |
| 备份目录大小异常(仅数 KB) | 部分步骤失败。请查看输出日志 |
6. 延伸阅读
- 升级会自动调用备份 → 升级 (
upgrade.sh) - 清理 / 回收磁盘 → 清理 / 清扫
- 运维场景 —— 新版本发布流程 → 运维场景