Non maintenu, veuillez utiliser https://github.com/utilitywarehouse/streaming-mongo-burs/ à la place
Cet outil peut sauvegarder ou restaurer des collections MongoDB pendant que la base de données est en cours d'exécution vers/depuis AWS S3.
go get -u github.com/utilitywarehouse/mongolizer
mongolizer --help
Vous pouvez déployer un conteneur Docker qui exécutera des sauvegardes dans les délais (par défaut à 10h30 tous les jours)
L'état des sauvegardes est conservé dans un fichier boltdb dans /var/data/mongolizer/state.db
Le point de terminaison d’intégrité est disponible à l’ 0.0.0.0:8080/__/health
et signalera qu’il est sain si une sauvegarde a réussi au cours des 13 dernières heures.
Le point de terminaison de l'instrumentation est disponible à 0.0.0.0:8080/__/metrics
, une jauge de bal est exposée où la valeur de la jauge mongolizer_status
est 1 ou 0 selon le résultat de la sauvegarde précédente. La jauge est étiquetée avec labels
database
et de collection.
Une première sauvegarde sera exécutée si aucune sauvegarde n'a été trouvée au cours des 13 dernières heures.
# docker run --rm mongolizer /mongolizer scheduled-backup --help
Usage: mongolizer scheduled-backup [OPTIONS] COLLECTIONS
backup a set of mongodb collections
Arguments:
COLLECTIONS="foo/content,foo/bar" Collections to process (comma separated /) ($MONGODB_COLLECTIONS)
Options:
--cron="30 10 * * *" Cron expression for when to run ($CRON)
--dbPath="/var/data/mongolizer/state.db" Path to store boltdb file ($DBPATH)
--run=true Run backups on startup? ($RUN)
Exemple complet de mongo roulant avec volume persistant + mongoliseur avec grattage de métriques
# A headless service to create DNS records
apiVersion: v1
kind: Service
metadata:
annotations:
service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
prometheus.io/scrape: 'true'
prometheus.io/path: /__/metrics
prometheus.io/port: '8080'
name: mongo
labels:
app: mongo
spec:
ports:
- port: 8080
targetPort: 8080
name: mongolizer
- port: 27017
targetPort: 27017
name: client
clusterIP: None
selector:
app: mongo
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: mongo
spec:
replicas: 1
template:
metadata:
name: mongo
labels:
app: mongo
spec:
imagePullSecrets:
- name: dockerhub-key
containers:
- name: mongolizer
image: registry.uw.systems/system/mongolizer:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
volumeMounts:
- name: data
mountPath: "/var/data/mongolizer/"
subPath: "mongolizer"
env:
- name: MONGODB_COLLECTIONS
value: "db/collection,db/collection2"
- name: MONGODB
value: "mongo:27017"
- name: AWS_ACCESS_KEY_ID
value: ""
- name: AWS_SECRET_ACCESS_KEY
value: ""
- name: S3_BUCKET
value: "backup-bucket"
- name: S3_DIR
value: "/"
- name: mongo
image: mongo
ports:
- containerPort: 27017
volumeMounts:
- name: data
mountPath: /data/db
subPath: "mongodb"
volumes:
- name: data
persistentVolumeClaim:
claimName: mongo-ebs-pvc
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: mongo-ebs-pvc
annotations:
volume.beta.kubernetes.io/storage-class: ebs-gp2
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
# docker run --rm mongolizer /mongolizer restore --help
Usage: mongolizer restore [OPTIONS]
restore a set of mongodb collections
Options:
--collections="foo/content,foo/bar" Collections to process (comma separated /) ($MONGODB_COLLECTIONS)
--date="2006-01-02T15-04-05" Date to restore backup from
Pour obtenir des métriques, vous pouvez utiliser une requête similaire à
1 - avg(mongolizer_status{kubernetes_namespace="default"}) by (app, database, collection) < bool 1
Exemple d'alerte