备份与恢复
容器模式 (2026.05+, 推荐)
sudo bash /opt/kopens/install/bin/backup.sh
# 산출: /data1/pp-backups/pe-backup-<ts>.tar.zst + .sha256
# 포함: cassandra (flush 후), redis (AOF), hivemq, node-userdir, grafana, opcua, opcua-client, profiling, /data1/csv, /etc/kopens, /var/security
opcua-client 中包含 Edge 的 OPC UA 客户端证书以及运营商信任的 DCS·控制器服务器证书。如果没有此文件,恢复后每次安全连接都会创建新的 Edge 证书,必须为每个 DCS·控制器重新建立信任 — OPC-UA 安全连接。
OTA upgrade.sh 同样使用该工具进行自动 pre-snapshot (用于 rollback 时的数据恢复)。
恢复:
sudo bash /opt/kopens/install/bin/restore.sh /data1/pp-backups/pe-backup-20260517-153000.tar.zst
当前状态也将自动备份为 pre-restore-*.tar.zst → 恢复 → 容器自动重启。sha256 自动校验。
通过 CQL 导出还原
升级前的备份中会包含与引擎无关的 CQL 导出 (<아카이브>.cql/ — 模式 + 按表划分的 CSV)。此项也可添加到手动备份中。
sudo pe backup run --cql # 수동 백업에 덤프를 붙인다
sudo pe restore --yes --cql /data1/pp-backups/pe-backup-pre-upgrade-<시각>.cql
当引擎文件 (SSTable) 无法在新引擎中读取时,使用此 逻辑还原。无需停止服务,先在运行中的 DB 中创建模式 (IF NOT EXISTS),然后向每个表插入行。
- 如果导出的
SHA256SUMS不匹配,则不执行任何操作 - 具有相同键的行将被覆盖,其余行予以保留 — 如需精确副本,请将其放入空键空间
- 时序 · 监控表由于导出文件中没有行,将以空表形式恢复。单元格的 WRITETIME · TTL 也不会迁移
- 提供
--cql-auth时,将同时导入 DB 角色 (system_auth)
定期备份 (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
详细指南:容器模式运维。
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) | 部分步骤失败。检查输出日志 |
更多信息
- 升级将自动调用备份 → 升级 (
upgrade.sh) - 清理 / 磁盘回收 → 清理与清除
- 运维场景 — 新版本部署流程 → 运维场景