Sync Repo
This commit is contained in:
@@ -0,0 +1,154 @@
|
||||
# Bitbucket Server DIY Backup #
|
||||
|
||||
This repository contains a set of example scripts that demonstrate best practices for backing up a Bitbucket Server/Data
|
||||
Center instance using a curated set of vendor technologies.
|
||||
|
||||
## For example only
|
||||
|
||||
These scripts are provided as a _working example_, which should be extended/enhanced/optimized as necessary based on the
|
||||
environment in which they will be used. These examples are intended as a jumping off point for you to create _your own_
|
||||
backup strategy; they are not a drop-in solution for all potential configurations of Bitbucket Server/Data Center.
|
||||
|
||||
System administrators are expected to know their environment, and what technology is in use in that environment, and to
|
||||
use these example scripts to help them build their own backup solution that makes the best use of the available tools.
|
||||
|
||||
To report bugs in the examples, [create a support request](https://support.atlassian.com/bitbucket-server/).
|
||||
|
||||
To report suggestions for how the examples could be improved, [create a suggestion](https://jira.atlassian.com/browse/BSERV).
|
||||
|
||||
## About these scripts
|
||||
|
||||
The scripts contained within this repository demonstrate two types of backup:
|
||||
|
||||
* Backups with downtime. This is the only type of backup available if your Bitbucket Server/Data Center instance is
|
||||
older than 4.8, or if you are using the ``rsync`` strategy (described below)
|
||||
* Zero downtime backups. To enable Zero Downtime Backup, you will need to set the variable `BACKUP_ZERO_DOWNTIME` to
|
||||
`true`. If true, this variable will backup the filesystem and database **without** locking the application.
|
||||
**NOTE:** This is only supported when used with Bitbucket Server/Data Center 4.8 or newer. It also requires a
|
||||
compatible strategy for taking atomic block level snapshots of the home directory.
|
||||
|
||||
These scripts have been changed significantly with the release of Bitbucket 6.0. If updating from an older version of
|
||||
the scripts, a number of configured variables will need updating. See the **Updating** section below for a list of
|
||||
considerations when updating to a newer version of the backup scripts.
|
||||
|
||||
### Strategies ###
|
||||
|
||||
In order to use these example scripts you must specify a `BACKUP_DISK_TYPE` and `BACKUP_DATABASE_TYPE` strategy, and
|
||||
optionally a `BACKUP_ARCHIVE_TYPE` and/or `BACKUP_ELASTICSEARCH_TYPE` strategy. These strategies can be set within the
|
||||
`bitbucket.diy-backup.vars.sh`.
|
||||
|
||||
For each `BACKUP_DISK_TYPE`, `BACKUP_DATABASE_TYPE`, `BACKUP_ARCHIVE_TYPE` and `BACKUP_ELASTICSEARCH_TYPE` strategy,
|
||||
additional variables need to be set in `bitbucket.diy-backup.vars.sh` to configure the details of your Bitbucket
|
||||
instance's home directory, database, and other options. Refer to `bitbucket.diy-backup.vars.sh.example` for a complete
|
||||
description of all the various variables and their definitions.
|
||||
|
||||
`BACKUP_DISK_TYPE` Strategy for backing up the Bitbucket home directory and any configured data stores, valid values are:
|
||||
|
||||
* `amazon-ebs` - Amazon EBS snapshots of the volume(s) containing the home directory and data stores.
|
||||
* `rsync` - "rsync" of the home directory and data store contents to a temporary location. **NOTE:** This
|
||||
can NOT be used with `BACKUP_ZERO_DOWNTIME=true`.
|
||||
* `zfs` - ZFS snapshot strategy for home directory and data store backups.
|
||||
|
||||
`BACKUP_DATABASE_TYPE` Strategy for backing up the database, valid values are:
|
||||
|
||||
* `amazon-rds` - Amazon RDS snapshots.
|
||||
* `mysql` - MySQL using "mysqldump" to backup and "mysql" to restore.
|
||||
* `postgresql` - PostgreSQL using "pg_dump" to backup and "pg_restore" to restore.
|
||||
* `postgresql-fslevel` - PostgreSQL with data directory located in the file system volume as home directory (so that
|
||||
it will be included implicitly in the home volume snapshot).
|
||||
|
||||
`BACKUP_ARCHIVE_TYPE` Strategy for archiving backups and/or copying them to an offsite location, valid values are:
|
||||
|
||||
* `<leave-blank>` - Do not use an archiving strategy.
|
||||
* `aws-snapshots` - AWS EBS and/or RDS snapshots, with optional copy to another region.
|
||||
* `gpg-zip` - "gpg-zip" archive
|
||||
* `tar` - Unix "tar" archive
|
||||
|
||||
|
||||
`BACKUP_ELASTICSEARCH_TYPE` Strategy for backing up Elasticsearch, valid values are:
|
||||
|
||||
* `<leave blank>` - No separate snapshot and restore of Elasticsearch state (default).
|
||||
- recommended for Bitbucket Server instances configured to use the (default) bundled
|
||||
Elasticsearch instance. In this case all Elasticsearch state is stored under
|
||||
${BITBUCKET_HOME}/shared and therefore already included in the home directory snapshot
|
||||
implicitly. NOTE: If Bitbucket is configured to use a remote Elasticsearch instance (which
|
||||
all Bitbucket Data Center instances must be), then its state is NOT included implictly in
|
||||
home directory backups, and may therefore take some to rebuild after a restore UNLESS one of
|
||||
the following strategies is used.
|
||||
* `amazon-es` - Amazon Elasticsearch Service - uses an S3 bucket as a snapshot repository. Requires both
|
||||
python and the python package 'boto' to be installed in order to sign the requests to AWS ES.
|
||||
Once python has been installed run 'sudo pip install boto' to install the python boto package.
|
||||
* `s3` - Amazon S3 bucket - requires the Elasticsearch Cloud plugin to be installed. See
|
||||
https://www.elastic.co/guide/en/elasticsearch/plugins/2.3/cloud-aws.html
|
||||
* `fs` - Shared filesystem - requires all data and master nodes to mount a shared file system to the
|
||||
same mount point and that it is configured in the elasticsearch.yml file. See
|
||||
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-snapshots.html
|
||||
|
||||
`STANDBY_DISK_TYPE` Strategy for Bitbucket home directory disaster recovery, valid values are:
|
||||
|
||||
* `zfs` - ZFS snapshot strategy for disk replication.
|
||||
|
||||
`STANDBY_DATABASE_TYPE` Strategy for replicating the database, valid values are:
|
||||
|
||||
* `amazon-rds` - Amazon RDS Read replica
|
||||
* `postgresql` - PostgreSQL replication
|
||||
|
||||
### Configuration ####
|
||||
|
||||
You will need to configure the script variables found in `bitbucket.diy-backup.vars.sh` based on your chosen strategies.
|
||||
**Note** that not all options need to be configured. The backup strategy you choose together with your vendor tools will
|
||||
determine which options should be set. See `bitbucket.diy-backup.vars.sh.example` for a complete set of all
|
||||
configuration options.
|
||||
|
||||
`BACKUP_ZERO_DOWNTIME` If set to true, the home directory and database will be backed up **without** locking Bitbucket
|
||||
by placing it in maintenance mode. **NOTE:** This can NOT be used with Bitbucket Server versions older than 4.8. For
|
||||
more information, see [Zero downtime backup](https://confluence.atlassian.com/display/BitbucketServer/Using+Bitbucket+Zero+Downtime+Backup).
|
||||
Make sure you read and understand this document before uncommenting this variable.
|
||||
|
||||
### Upgrading ###
|
||||
In order to support Bitbucket Server 6.0, significant changes have been made to these scripts. If moving from an older
|
||||
version of the DIY scripts, you will need to change certain variables in the `bitbucket.diy-backup.vars.sh` file. These
|
||||
changes have been noted in `bitbucket.diy-backup.vars.sh.example`.
|
||||
|
||||
* `BACKUP_HOME_TYPE` has been renamed to `BACKUP_DISK_TYPE`
|
||||
* `STANDBY_HOME_TYPE` has been renamed to `STANDBY_DISK_TYPE`
|
||||
|
||||
####`amazon-ebs` strategy ####
|
||||
* A new `EBS_VOLUME_MOUNT_POINT_AND_DEVICE_NAMES` variable has been introduced, which is an array of all EBS volumes
|
||||
(the shared home directory, and any configured data stores). It needs to contain the details for the shared home that
|
||||
were previously stored in `HOME_DIRECTORY_MOUNT_POINT` and `HOME_DIRECTORY_DEVICE_NAME`.
|
||||
* The `HOME_DIRECTORY_DEVICE_NAME` variable is no longer needed.
|
||||
* The `HOME_DIRECTORY_MOUNT_POINT` variable should still be set.
|
||||
* `RESTORE_HOME_DIRECTORY_VOLUME_TYPE` has been renamed to `RESTORE_DISK_VOLUME_TYPE`.
|
||||
* `RESTORE_HOME_DIRECTORY_IOPS` has been renamed to `RESTORE_DISK_IOPS`.
|
||||
* `ZFS_HOME_TANK_NAME` has been replaced with `ZFS_FILESYSTEM_NAMES`, an array containing filesystem names for the
|
||||
shared home, as well as any data stores. This is only required if `FILESYSTEM_TYPE` is set to `zfs`.
|
||||
|
||||
**Note:** EBS snapshots are now tagged with the device name they are a snapshot of. If snapshots were taken previously,
|
||||
they will not have this tag, and as a result:
|
||||
|
||||
* Old ebs snapshots without a "Device" tag won't be cleaned up automatically
|
||||
* Restoring from an old ebs snapshot without a "Device" tag will fail
|
||||
|
||||
Both of these issues can be mitigated by adding the "Device" tag manually in the AWS console. For any EBS snapshots,
|
||||
add a tag with "Device" as the key and `"<device_name>"` as the value, where `<device_name>` is the device name of the
|
||||
EBS volume holding the shared home directory (e.g. `"Device" : "/dev/xvdf"`).
|
||||
|
||||
#### `rsync` strategy ####
|
||||
* If any data stores are configured on the instance, `BITBUCKET_DATA_STORES` should be specified as an array of paths to
|
||||
data stores.
|
||||
* If any data stores are configured on the instance, `BITBUCKET_BACKUP_DATA_STORES` should specify a location for
|
||||
for storing data store backups.
|
||||
|
||||
#### `zfs` strategy ####
|
||||
* A new `ZFS_FILESYSTEM_NAMES` variable has been introduced, which is an array of ZFS filesystems (the shared home
|
||||
directory, and any configured data stores). It needs to contain the filesystem name of the shared home directory,
|
||||
which was previously stored in `ZFS_HOME_TANK_NAME`.
|
||||
* If using these scripts for disaster recovery, a new variable `ZFS_HOME_FILESYSTEM` needs to be set. This should
|
||||
contain the name of the ZFS filesystem storing the shared home directory - the same value that was previously stored
|
||||
in `ZFS_HOME_TANK_NAME`.
|
||||
|
||||
### Further reading ###
|
||||
* [Zero Downtime Backup](https://confluence.atlassian.com/display/BitbucketServer/Using+Bitbucket+Zero+Downtime+Backup)
|
||||
* [Using Bitbucket Server DIY Backup](https://confluence.atlassian.com/display/BitbucketServer/Using+Bitbucket+Server+DIY+Backup)
|
||||
* [Using Bitbucket Server DIY Backup in AWS](https://confluence.atlassian.com/display/BitbucketServer/Using+Bitbucket+Server+DIY+Backup+in+AWS)
|
||||
Reference in New Issue
Block a user