No commit activity in last 3 years
No release in over 3 years
I simply want to be able to control the backup and restoration of the Elasticsearch cluster to S3 without any fuss or having to dilly around with curl -XPUTS and friends. So here it is, and we now support Shared Volumes. See the docs on the --fs flag. There are many features I wish to add to this, and if you have any suggestions, please feel free to send them my way!
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies
 Project Readme

elastic-backup-2s3 – Snapshot, Backup, and Restore Elasicsearch Indicies to and from S3

When you have an itch to scratch…

I simply want to be able to control the backup and restoration of the Elasticsearch cluster to S3 without any fuss or having to dilly around with curl -XPUTS and friends.

I have finally added Shared Filesystem Support! Please see the docs below on this.

Overview

Elastic Backup simply allows you to specifiy some or all of the indicies, some target bucket, and run the backup / snapshot.

It hides all the sordid details about “registration” and the like, and will optionally clean up behind itself and remove the registration if you did not specify a name for the registration.

Breaking Changes

v1.0.0

The New 1.x version is not backards-compatable with the 0.x versions. Especially for the File System-style backups, the repo name is not appended to the directory path, to allow for multiple repo backups on the file system. Please be aware of this moving forward.

Installation

To install from command line:

gem install elastic-backup-2s3

For a Gemfile entry:

gem  'elastic-backup-2s3'

Documentation

Documentation is comming. Basically, just running the command without any parameters will give you some basic usage.

S3URL format

We adopt a convention to make it easy for you to specify the S3 bucket, path, and snapshot name stored in the bucket. The S3 URL format is:

s3://AWS_S3_BUCKET/path/in/bucket:SNAPSHOT

In some cases, :SNAPSHOT is optional, but usually expected to be there.

Support for Shared Filesystem Snapshots

To do S3 backups requires no additional configurations outside of being in the AWS clould (or at least being connected to one.) Shared File System (FS) backups require that you have each and every node configured to permit the backup path on all your nodes in the cluster, and thus not as simple as merely writing it through the JSON REST interface.

So presumably you either have this setup in place, and in any rate, it would be a bit messy to have to specify the “local” path in the repo here.

For this reason we will not (over)write the repo settings for FS backups by default. We provide a new option that will allow you to write out the FS repo, specifying all the parameters you need to at that time.

The default repository name should be configurable in any case. we could do a configuration file, but for this I think it’s overkill. so we will use environment variables instead.

Environment variable Description
ESB_DEFAULT_REPO Changes the default repository from ‘elastic-backup’ to what is specified here.
ESB_SHARED_VOLUME For Shared Volume backups, default local path to use. Note that this path must be configured on all nodes.
ESB_TIMEOUT Default for –timeout option
ESB_SNAPSHOT_MAX_BYTES_SEC Shared Volume max_snapshot_bytes_per_sec
ESB_RESTORE_MAX_BYTES_SEC Shared Volume max_restore_bytes_per_sec

Examples

To backup/snapshot your ES to S3 and wait until the backup is completed:

es-snapshot snapshot localhost s3://your-backup-bucket/your-backup-path:snap_1 -v2 -w

The default repository of ‘elastic-backup’ is used. To specify your own repository name:

es-snapshot snapshot localhost s3://your-backup-bucket/your-backup-path:snap_1 -v2 -w --repo your-repo-name

To backup/snapshot two indices index1 and index2:

es-snapshot snapshot localhost s3://your-backup-bucket/your-backup-path:snap_1 -v2 -w --indices index1 index2

To restore your snapshot

es-snapshot restore s3://your-backup-bucket/your-backup-path:snap_1 localhost -v2 -w

To restore your snapshot using your-repo-name:

es-snapshot restore s3://your-backup-bucket/your-backup-path:snap_1 localhost -v2 -w --repo your-repo-name

You may specify –dryrun (-u) to see the JSON that will be sent without actually executing the commands. Also -v2 will show you the same while allowing your commands to execute.

To see the status of your snapshots:

es-snapshot list status localhost

To see a list of your indices:

es-snapshot list indices localhost

Release Notes

Date Version Description
2016-07-21 v1.0.0 Breaking changes in how the subdirectory paths are created. Please see Breaking Changes
2016-07-12 v0.1.5 Fixed single index restore bug.
2016-06-10 v0.1.3 Added a new –nv flag to switch off shared FS verification.
2016-05-02 v0.1.2 Fixed a couple of minor issues with the restore from shared volume.
2016-04-22 v0.1.0 Support for FS volume backups added
2016-04-17 v0.0.3 Added a delete snapshot option to allow deletion of a running snapshot.

Known Issues

Date Version Description
2061-04-17 v0.0.3 ‘delete’ options not fully implemented.
Error return codes not fully fleshed out
‘delete snapshot’ requires the full S3URL, but only needs the snapshot part.
2061-04-21 v0.0.4 Some features remain unimplemented, though there are options for them. Please bear with me.
What shall we do with configurations? I am thinking we save them in ES, but also allow for config files. The ES settings will override the config file settings. Config files in Yaml format.

Scratchpad

My own personal notes on this project. These are not gauranteed to be useful to you nor up-to-date.

Contributing to elastic-backup-2s3

  • Check out the latest master to make sure the feature hasn’t been implemented or the bug hasn’t been fixed yet.
  • Check out the issue tracker to make sure someone already hasn’t requested it and/or contributed it.
  • Fork the project.
  • Start a feature/bugfix branch.
  • Commit and push until you are happy with your contribution.
  • Make sure to add tests for it. This is important so I don’t break it in a future version unintentionally.
  • Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.

Copyright

Copyright (c) 2016 Fred Mitchell. See LICENSE.txt for further details.