I have a customer who is running a reduced redundancy ceph cluster as backend to her openstack cluster. Since it’s development, she’s not as concerned about availability, but still wants to provide assurance against data loss. Here’s a backup script to export the images from Ceph so she can nightly dump her data to a remote location.
As always, the backup and recovery techniques used in this script should be thoroughly tested before considered reliable.
Backup
- #!/bin/bash
- BACKUP_ROOT=/home/ceph/backups
- TIME_START=$(date --rfc-3339=seconds)
- TODAY=$(date --rfc-3339=date)
- BACKUP_DIR=${BACKUP_ROOT}/${TODAY}
- echo "Ceph Backup Started ${TIME_START}"
- POOLS=( $(rados lspools) )
- for POOL in "${POOLS[@]}"
- do
- POOL_BACKUP_DIR=${BACKUP_DIR}/${POOL}
- mkdir -p ${POOL_BACKUP_DIR}
- IMAGES=( $(rbd ls -p ${POOL}) )
- for IMAGE in "${IMAGES[@]}"
- do
- echo "$(date --rfc-3339=seconds) backup image:${POOL}/${IMAGE}"
- rbd export -p ${POOL} ${IMAGE} ${POOL_BACKUP_DIR}/${IMAGE}
- done
- done
- TIME_END=$(date --rfc-3339=seconds)
- echo "Ceph Backup Completed ${TIME_END}"
Restore
Resultant backups can be imported using:
- rbd import -p ${POOL} ${POOL_BACKUP_DIR}/${IMAGE} ${IMAGE}
Docs
Read more about rbd at http://ceph.com/docs/master/man/8/rbd/