使用 Bitnami Helm Charts 时进行分片 MongoDB 备份和恢复

问题描述 投票:0回答:1

我正在使用 Bitnami Sharded MongoDB Helm 图表。

我需要帮助在 Sharded Mongo 中备份数据,并在需要时再次恢复它。

我认为使用部署文件而不是有状态集很容易做到这一点。

我尝试过使用 VolumeSnapshot,但问题是我能够创建快照,但无法使用 Bitnami Sharded MongoDB helm 图表恢复它。

google-kubernetes-engine snapshot bitnami helm3 kubernetes-statefulset
1个回答
0
投票

您是否使用 Velero 进行备份?

我能够“灾难后”恢复 MongoDB 实例,即在相同的命名空间上,但使用 --namespace-mappings 进行完整恢复(例如,Helm 从 mongo2mongo 发布 mongo-store2 命名空间)最终需要后续修补:

  • Helm 发布 Secret 以及 Helm 相关注释(多次出现原始 Namespace)
A="$(kubectl get -o json secret/sh.helm.release.v1.mongo-store2.v1 | jq -r .data.release | base64 -d | base64 -d | gzip -dc |sed 's/mongo2/mongo/g'|gzip -c | base64 -w0 | base64 -w0)"

kubectl patch --type='merge' -p "{\"data\": {\"release\": \"${A}\"}}" secret/sh.helm.release.v1.mongo-store2.v1

for i in $(kubectl get -o name pod,service,deploy,replicaset,statefulset,secret,configmap,pvc -n mongo | grep -v -- kube-root)
do
  kubectl patch --type='merge' -p '{"metadata": {"annotations": {"meta.helm.sh/release-namespace": "mongo"}}}' $i
done
  • Deployment (mongos)StatefulSets (configsrv, shard0, shard1),一些环境变量引用了旧的 Namespace
kubectl patch sts/mongo-store2-mongodb-sharded-shard0-data --patch-file patch-shard0.yml
kubectl patch sts/mongo-store2-mongodb-sharded-shard1-data --patch-file patch-shard1.yml
kubectl patch sts/mongo-store2-mongodb-sharded-configsvr --patch-file patch-configsvr.yml
kubectl patch deploy/mongo-store2-mongodb-sharded-mongos --patch-file patch-deploy.yml

使用这些补丁文件:

spec:
  template:
    spec:
      containers:
      - name: mongodb
        env:
        - name: MONGODB_INITIAL_PRIMARY_HOST
          value: mongo-store2-mongodb-sharded-shard0-data-0.mongo-store2-mongodb-sharded-headless.mongo.svc.cluster.local
        - name: MONGODB_ADVERTISED_HOSTNAME
          value: $(MONGODB_POD_NAME).mongo-store2-mongodb-sharded-headless.mongo.svc.cluster.local
spec:
  template:
    spec:
      containers:
      - name: mongodb
        env:
        - name: MONGODB_INITIAL_PRIMARY_HOST
          value: mongo-store2-mongodb-sharded-shard1-data-0.mongo-store2-mongodb-sharded-headless.mongo.svc.cluster.local
        - name: MONGODB_ADVERTISED_HOSTNAME
          value: $(MONGODB_POD_NAME).mongo-store2-mongodb-sharded-headless.mongo.svc.cluster.local
spec:
  template:
    spec:
      containers:
      - name: mongos
        env:
        - name: MONGODB_CFG_PRIMARY_HOST
          value: mongo-store2-mongodb-sharded-configsvr-0.mongo-store2-mongodb-sharded-headless.mongokubectl .svc.cluster.local
spec:
  template:
    spec:
      containers:
      - name: mongodb
        env:
        - name: MONGODB_INITIAL_PRIMARY_HOST
          value: mongo-store2-mongodb-sharded-configsvr-0.mongo-store2-mongodb-sharded-headless.mongo.svc.cluster.local
        - name: MONGODB_ADVERTISED_HOSTNAME
          value: $(MONGODB_POD_NAME).mongo-store2-mongodb-sharded-headless.mongo.svc.cluster.local

我还尝试过仅恢复 PVC/PV,在目标命名空间上重新安装 Helm Chart(并为我节省了一些修补程序,除了那些涉及 “meta.helm.sh/release-namespace” 注释的修补程序)。

无论哪种方式,StatefulSets都会正确启动,但mongos部署永远保持0/1

© www.soinside.com 2019 - 2024. All rights reserved.