123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206 |
- [[snapshots-restore-snapshot]]
- == Restore indices from a snapshot
- ++++
- <titleabbrev>Restore a snapshot</titleabbrev>
- ++++
- ////
- [source,console]
- -----------------------------------
- PUT /_snapshot/my_backup
- {
- "type": "fs",
- "settings": {
- "location": "my_backup_location"
- }
- }
- PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true
- -----------------------------------
- // TESTSETUP
- ////
- A snapshot can be restored using the following command:
- [source,console]
- -----------------------------------
- POST /_snapshot/my_backup/snapshot_1/_restore
- -----------------------------------
- By default, all indices in the snapshot are restored, and the cluster state is
- *not* restored. It's possible to select indices that should be restored as well
- as to allow the global cluster state from being restored by using `indices` and
- `include_global_state` options in the restore request body. The list of indices
- supports <<multi-index,multi index syntax>>. The `rename_pattern`
- and `rename_replacement` options can be also used to rename indices on restore
- using regular expression that supports referencing the original text as
- explained
- http://docs.oracle.com/javase/6/docs/api/java/util/regex/Matcher.html#appendReplacement(java.lang.StringBuffer,%20java.lang.String)[here].
- Set `include_aliases` to `false` to prevent aliases from being restored together
- with associated indices.
- [source,console]
- -----------------------------------
- POST /_snapshot/my_backup/snapshot_1/_restore
- {
- "indices": "index_1,index_2",
- "include_aliases": false,
- "ignore_unavailable": true,
- "include_global_state": true,
- "rename_pattern": "index_(.+)",
- "rename_replacement": "restored_index_$1"
- }
- -----------------------------------
- // TEST[continued]
- The restore operation can be performed on a functioning cluster. However, an
- existing index can be only restored if it's <<indices-open-close,closed>> and
- has the same number of shards as the index in the snapshot. The restore
- operation automatically opens restored indices if they were closed and creates
- new indices if they didn't exist in the cluster. If cluster state is restored
- with `include_global_state` (defaults to `false`), the restored templates that
- don't currently exist in the cluster are added and existing templates with the
- same name are replaced by the restored templates. The restored persistent
- settings are added to the existing persistent settings.
- [float]
- === Partial restore
- By default, the entire restore operation will fail if one or more indices participating in the operation don't have
- snapshots of all shards available. It can occur if some shards failed to snapshot for example. It is still possible to
- restore such indices by setting `partial` to `true`. Please note, that only successfully snapshotted shards will be
- restored in this case and all missing shards will be recreated empty.
- [float]
- === Changing index settings during restore
- Most of index settings can be overridden during the restore process. For example, the following command will restore
- the index `index_1` without creating any replicas while switching back to default refresh interval:
- [source,console]
- -----------------------------------
- POST /_snapshot/my_backup/snapshot_1/_restore
- {
- "indices": "index_1",
- "ignore_unavailable": true,
- "index_settings": {
- "index.number_of_replicas": 0
- },
- "ignore_index_settings": [
- "index.refresh_interval"
- ]
- }
- -----------------------------------
- // TEST[continued]
- Please note, that some settings such as `index.number_of_shards` cannot be changed during restore operation.
- [float]
- === Restoring to a different cluster
- The information stored in a snapshot is not tied to a particular cluster or a cluster name. Therefore it's possible to
- restore a snapshot made from one cluster into another cluster. All that is required is registering the repository
- containing the snapshot in the new cluster and starting the restore process. The new cluster doesn't have to have the
- same size or topology. However, the version of the new cluster should be the same or newer (only 1 major version newer) than the cluster that was used to create the snapshot. For example, you can restore a 1.x snapshot to a 2.x cluster, but not a 1.x snapshot to a 5.x cluster.
- If the new cluster has a smaller size additional considerations should be made. First of all it's necessary to make sure
- that new cluster have enough capacity to store all indices in the snapshot. It's possible to change indices settings
- during restore to reduce the number of replicas, which can help with restoring snapshots into smaller cluster. It's also
- possible to select only subset of the indices using the `indices` parameter.
- If indices in the original cluster were assigned to particular nodes using
- <<shard-allocation-filtering,shard allocation filtering>>, the same rules will be enforced in the new cluster. Therefore
- if the new cluster doesn't contain nodes with appropriate attributes that a restored index can be allocated on, such
- index will not be successfully restored unless these index allocation settings are changed during restore operation.
- The restore operation also checks that restored persistent settings are compatible with the current cluster to avoid accidentally
- restoring incompatible settings. If you need to restore a snapshot with incompatible persistent settings, try restoring it without
- the global cluster state.
- [float]
- === Snapshot status
- A list of currently running snapshots with their detailed status information can be obtained using the following command:
- [source,console]
- -----------------------------------
- GET /_snapshot/_status
- -----------------------------------
- // TEST[continued]
- In this format, the command will return information about all currently running snapshots. By specifying a repository name, it's possible
- to limit the results to a particular repository:
- [source,console]
- -----------------------------------
- GET /_snapshot/my_backup/_status
- -----------------------------------
- // TEST[continued]
- If both repository name and snapshot id are specified, this command will return detailed status information for the given snapshot even
- if it's not currently running:
- [source,console]
- -----------------------------------
- GET /_snapshot/my_backup/snapshot_1/_status
- -----------------------------------
- // TEST[continued]
- The output looks similar to the following:
- [source,console-result]
- --------------------------------------------------
- {
- "snapshots": [
- {
- "snapshot": "snapshot_1",
- "repository": "my_backup",
- "uuid": "XuBo4l4ISYiVg0nYUen9zg",
- "state": "SUCCESS",
- "include_global_state": true,
- "shards_stats": {
- "initializing": 0,
- "started": 0,
- "finalizing": 0,
- "done": 5,
- "failed": 0,
- "total": 5
- },
- "stats": {
- "incremental": {
- "file_count": 8,
- "size_in_bytes": 4704
- },
- "processed": {
- "file_count": 7,
- "size_in_bytes": 4254
- },
- "total": {
- "file_count": 8,
- "size_in_bytes": 4704
- },
- "start_time_in_millis": 1526280280355,
- "time_in_millis": 358
- }
- }
- ]
- }
- --------------------------------------------------
- // TESTRESPONSE[skip: No snapshot status to validate.]
- The output is composed of different sections. The `stats` sub-object provides details on the number and size of files that were
- snapshotted. As snapshots are incremental, copying only the Lucene segments that are not already in the repository,
- the `stats` object contains a `total` section for all the files that are referenced by the snapshot, as well as an `incremental` section
- for those files that actually needed to be copied over as part of the incremental snapshotting. In case of a snapshot that's still
- in progress, there's also a `processed` section that contains information about the files that are in the process of being copied.
- Multiple ids are also supported:
- [source,console]
- -----------------------------------
- GET /_snapshot/my_backup/snapshot_1,snapshot_2/_status
- -----------------------------------
- // TEST[skip: no snapshot_2 to get]
|