备份策略

本指南涵盖了自托管 Langfuse 部署的备份策略。请按照其中一个部署指南开始操作。

适当的备份策略对于保护您的 Langfuse 数据和确保业务连续性至关重要。本指南涵盖了自托管 Langfuse 部署的所有组件的备份方法。

ClickHouse

ClickHouse 存储您的可观测性数据,包括跟踪、观察和评分。备份策略因您使用的是托管服务还是自托管部署而异。

ClickHouse Cloud (托管服务)

自动备份:ClickHouse Cloud 通过以下方式自动为您管理备份:

  • 持续增量备份
  • 时间点恢复功能
  • 跨区域复制选项
  • 企业级耐用性保证

无需操作:如果您使用的是 ClickHouse Cloud, 备份将自动处理。有关备份保留策略和恢复程序,请参阅 ClickHouse Cloud 文档。

自托管 ClickHouse

对于自托管的 ClickHouse 实例,您需要实施自己的备份策略。

Kubernetes 部署
  1. 卷快照 (推荐)

大多数云提供商支持持久卷的卷快照。请确保您也为 clickhouse Zookeeper 卷添加了快照。

# Create a VolumeSnapshot for each ClickHouse replica
kubectl apply -f - <<EOF
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: clickhouse-backup-$(date +%Y%m%d-%H%M%S)
  namespace: langfuse
spec:
  source:
    persistentVolumeClaimName: data-langfuse-clickhouse-0
  volumeSnapshotClassName: csi-hostpath-snapclass
EOF
  1. Velero 用于完整的集群备份

Velero 提供全面的 Kubernetes 备份解决方案:

# Install Velero
velero install --provider aws --plugins velero/velero-plugin-for-aws:v1.8.0 \
  --bucket langfuse-backups --secret-file ./credentials-velero

# Create a backup schedule
velero schedule create langfuse-daily \
  --schedule="0 2 * * *" \
  --include-namespaces langfuse \
  --ttl 720h0m0s
  1. ClickHouse 本地备份

使用 ClickHouse 的内置备份功能。请按照 ClickHouse 的备份指南了解所有详细信息。

-- Create a backup
BACKUP DATABASE default TO S3('s3://backup-bucket/clickhouse-backup-{timestamp}', 'access_key', 'secret_key');

-- Restore from backup
RESTORE DATABASE default FROM S3('s3://backup-bucket/clickhouse-backup-{timestamp}', 'access_key', 'secret_key');
Docker 部署

对于基于 Docker 的部署,实施常规卷备份:

#!/bin/bash
# Backup script for ClickHouse Docker volumes

BACKUP_DIR="/backups/clickhouse"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
CONTAINER_NAME="clickhouse-server"

# Create backup directory
mkdir -p "$BACKUP_DIR"

# Stop ClickHouse temporarily for consistent backup
docker stop "$CONTAINER_NAME"

# Create tar archive of data volume
docker run --rm \
  -v clickhouse_data:/source:ro \
  -v "$BACKUP_DIR":/backup \
  alpine tar czf "/backup/clickhouse-backup-$TIMESTAMP.tar.gz" -C /source .

# Restart ClickHouse
docker start "$CONTAINER_NAME"

# Clean up old backups (keep last 7 days)
find "$BACKUP_DIR" -name "clickhouse-backup-*.tar.gz" -mtime +7 -delete

Postgres

Postgres 存储关键的事务数据,包括用户、组织、项目和 API 密钥。我们强烈建议在生产部署中使用托管数据库服务。

托管数据库服务 (推荐)

云提供商服务:使用提供自动备份的托管 PostgreSQL 服务。

自主 Postgres 备份

如果必须自托管 Postgres, 请实施全面的备份策略。

Kubernetes 通用备份解决方案
  1. 使用 CronJob 的 pg_dump
apiVersion: batch/v1
kind: CronJob
metadata:
  name: postgres-backup
  namespace: langfuse
spec:
  schedule: "0 2 * * *" # Daily at 2 AM
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: postgres-backup
              image: postgres:15
              env:
                - name: PGPASSWORD
                  valueFrom:
                    secretKeyRef:
                      name: postgres-credentials
                      key: password
              command:
                - /bin/bash
                - -c
                - |
                  TIMESTAMP=$(date +%Y%m%d_%H%M%S)
                  pg_dump -h postgres-service -U langfuse -d langfuse > /backup/langfuse-backup-$TIMESTAMP.sql

                  # Upload to S3 (optional)
                  aws s3 cp /backup/langfuse-backup-$TIMESTAMP.sql s3://langfuse-backups/postgres/

                  # Clean up local files older than 3 days
                  find /backup -name "langfuse-backup-*.sql" -mtime +3 -delete
              volumeMounts:
                - name: backup-storage
                  mountPath: /backup
          volumes:
            - name: backup-storage
              persistentVolumeClaim:
                claimName: postgres-backup-pvc
          restartPolicy: OnFailure
  1. 卷快照
# Create snapshot of Postgres PVC
kubectl apply -f - <<EOF
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: postgres-backup-$(date +%Y%m%d-%H%M%S)
  namespace: langfuse
spec:
  source:
    persistentVolumeClaimName: postgres-data-pvc
  volumeSnapshotClassName: csi-hostpath-snapclass
EOF
Docker 部署
#!/bin/bash
# Postgres backup script for Docker

BACKUP_DIR="/backups/postgres"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
CONTAINER_NAME="postgres"
DB_NAME="langfuse"
DB_USER="langfuse"

mkdir -p "$BACKUP_DIR"

# Create SQL dump
docker exec "$CONTAINER_NAME" pg_dump -U "$DB_USER" "$DB_NAME" > "$BACKUP_DIR/langfuse-backup-$TIMESTAMP.sql"

# Compress backup
gzip "$BACKUP_DIR/langfuse-backup-$TIMESTAMP.sql"

# Upload to cloud storage (optional)
aws s3 cp "$BACKUP_DIR/langfuse-backup-$TIMESTAMP.sql.gz" s3://langfuse-backups/postgres/

# Clean up old backups
find "$BACKUP_DIR" -name "langfuse-backup-*.sql.gz" -mtime +7 -delete

MinIO

MinIO 已被云存储淘汰:如果您正在使用 AWS S3、Azure Blob Storage 或 Google Cloud Storage 等云存储服务,则不需要 MinIO, 备份策略应专注于云存储提供商的原生备份功能。

MinIO 仅适用于不使用云存储服务的自托管部署。对于大多数生产部署,我们建议改用托管云存储。

当使用 MinIO 时

MinIO 通常用于:

  • 气隙环境
  • 无云访问的本地部署
  • 开发环境
  • 特定合规性要求
  • MinIO 备份策略

云存储复制 (推荐)

配置 MinIO 以复制到云存储:

# Configure MinIO client
mc alias set myminio http://localhost:9000 minio miniosecret
mc alias set s3backup https://s3.amazonaws.com ACCESS_KEY SECRET_KEY

# Set up bucket replication
mc replicate add myminio/langfuse --remote-bucket s3backup/langfuse-backup

Kubernetes MiniIO 备份

  1. 卷快照
# Snapshot MinIO data volumes
kubectl apply -f - <<EOF
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: minio-backup-$(date +%Y%m%d-%H%M%S)
  namespace: langfuse
spec:
  source:
    persistentVolumeClaimName: data-minio-0
  volumeSnapshotClassName: csi-hostpath-snapclass
EOF
  1. 计划同步到外部存储
apiVersion: batch/v1
kind: CronJob
metadata:
  name: minio-backup-sync
  namespace: langfuse
spec:
  schedule: "0 3 * * *" # Daily at 3 AM
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: minio-backup
              image: minio/mc:latest
              command:
                - /bin/sh
                - -c
                - |
                  mc alias set source http://minio:9000 $MINIO_ACCESS_KEY $MINIO_SECRET_KEY
                  mc alias set backup s3://backup-bucket $AWS_ACCESS_KEY $AWS_SECRET_KEY
                  mc mirror source/langfuse backup/langfuse-backup/$(date +%Y%m%d)
              env:
                - name: MINIO_ACCESS_KEY
                  valueFrom:
                    secretKeyRef:
                      name: minio-credentials
                      key: access-key
                - name: MINIO_SECRET_KEY
                  valueFrom:
                    secretKeyRef:
                      name: minio-credentials
                      key: secret-key
                - name: AWS_ACCESS_KEY
                  valueFrom:
                    secretKeyRef:
                      name: aws-credentials
                      key: access-key
                - name: AWS_SECRET_KEY
                  valueFrom:
                    secretKeyRef:
                      name: aws-credentials
                      key: secret-key
          restartPolicy: OnFailure
作者:Jeebiz  创建时间:2025-10-30 18:09
最后编辑:Jeebiz  更新时间:2025-10-30 18:16