跳到主要内容

备份与恢复

容器模式 (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)部分步骤失败。检查输出日志

更多信息​