register-repository.asciidoc 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. [[snapshots-register-repository]]
  2. == Register a snapshot repository
  3. ++++
  4. <titleabbrev>Register repository</titleabbrev>
  5. ++++
  6. You must register a snapshot repository before you can perform snapshot and
  7. restore operations. We recommend creating a new snapshot repository for each
  8. major version. The valid repository settings depend on the repository type.
  9. If you register same snapshot repository with multiple clusters, only
  10. one cluster should have write access to the repository. All other clusters
  11. connected to that repository should set the repository to `readonly` mode.
  12. IMPORTANT: The snapshot format can change across major versions, so if you have
  13. clusters on different versions trying to write the same repository, snapshots
  14. written by one version may not be visible to the other and the repository could
  15. be corrupted. While setting the repository to `readonly` on all but one of the
  16. clusters should work with multiple clusters differing by one major version, it
  17. is not a supported configuration.
  18. [source,console]
  19. -----------------------------------
  20. PUT /_snapshot/my_backup
  21. {
  22. "type": "fs",
  23. "settings": {
  24. "location": "my_backup_location"
  25. }
  26. }
  27. -----------------------------------
  28. // TESTSETUP
  29. To retrieve information about a registered repository, use a GET request:
  30. [source,console]
  31. -----------------------------------
  32. GET /_snapshot/my_backup
  33. -----------------------------------
  34. which returns:
  35. [source,console-result]
  36. -----------------------------------
  37. {
  38. "my_backup": {
  39. "type": "fs",
  40. "settings": {
  41. "location": "my_backup_location"
  42. }
  43. }
  44. }
  45. -----------------------------------
  46. To retrieve information about multiple repositories, specify a comma-delimited
  47. list of repositories. You can also use the * wildcard when
  48. specifying repository names. For example, the following request retrieves
  49. information about all of the snapshot repositories that start with `repo` or
  50. contain `backup`:
  51. [source,console]
  52. -----------------------------------
  53. GET /_snapshot/repo*,*backup*
  54. -----------------------------------
  55. To retrieve information about all registered snapshot repositories, omit the
  56. repository name or specify `_all`:
  57. [source,console]
  58. -----------------------------------
  59. GET /_snapshot
  60. -----------------------------------
  61. or
  62. [source,console]
  63. -----------------------------------
  64. GET /_snapshot/_all
  65. -----------------------------------
  66. You can unregister a repository using the <<delete-snapshot-repo-api,delete
  67. snapshot repository API>>:
  68. [source,console]
  69. -----------------------------------
  70. DELETE /_snapshot/my_backup
  71. -----------------------------------
  72. When a repository is unregistered, {es} only removes the reference to the
  73. location where the repository is storing the snapshots. The snapshots themselves
  74. are left untouched and in place.
  75. [float]
  76. [[snapshots-filesystem-repository]]
  77. === Shared file system repository
  78. The shared file system repository (`"type": "fs"`) uses the shared file system to store snapshots. In order to register
  79. the shared file system repository it is necessary to mount the same shared filesystem to the same location on all
  80. master and data nodes. This location (or one of its parent directories) must be registered in the `path.repo`
  81. setting on all master and data nodes.
  82. Assuming that the shared filesystem is mounted to `/mount/backups/my_fs_backup_location`, the following setting should
  83. be added to `elasticsearch.yml` file:
  84. [source,yaml]
  85. --------------
  86. path.repo: ["/mount/backups", "/mount/longterm_backups"]
  87. --------------
  88. The `path.repo` setting supports Microsoft Windows UNC paths as long as at least server name and share are specified as
  89. a prefix and back slashes are properly escaped:
  90. [source,yaml]
  91. --------------
  92. path.repo: ["\\\\MY_SERVER\\Snapshots"]
  93. --------------
  94. After all nodes are restarted, the following command can be used to register the shared file system repository with
  95. the name `my_fs_backup`:
  96. [source,console]
  97. -----------------------------------
  98. PUT /_snapshot/my_fs_backup
  99. {
  100. "type": "fs",
  101. "settings": {
  102. "location": "/mount/backups/my_fs_backup_location",
  103. "compress": true
  104. }
  105. }
  106. -----------------------------------
  107. // TEST[skip:no access to absolute path]
  108. If the repository location is specified as a relative path this path will be resolved against the first path specified
  109. in `path.repo`:
  110. [source,console]
  111. -----------------------------------
  112. PUT /_snapshot/my_fs_backup
  113. {
  114. "type": "fs",
  115. "settings": {
  116. "location": "my_fs_backup_location",
  117. "compress": true
  118. }
  119. }
  120. -----------------------------------
  121. // TEST[continued]
  122. The following settings are supported:
  123. [horizontal]
  124. `location`:: Location of the snapshots. Mandatory.
  125. `compress`:: Turns on compression of the snapshot files. Compression is applied only to metadata files (index mapping and settings). Data files are not compressed. Defaults to `true`.
  126. `chunk_size`:: Big files can be broken down into chunks during snapshotting if needed. Specify the chunk size as a value and
  127. unit, for example: `1GB`, `10MB`, `5KB`, `500B`. Defaults to `null` (unlimited chunk size).
  128. `max_restore_bytes_per_sec`:: Throttles per node restore rate. Defaults to `40mb` per second.
  129. `max_snapshot_bytes_per_sec`:: Throttles per node snapshot rate. Defaults to `40mb` per second.
  130. `readonly`:: Makes repository read-only. Defaults to `false`.
  131. [float]
  132. [[snapshots-read-only-repository]]
  133. === Read-only URL repository
  134. If you register the same snapshot repository with multiple clusters, only one
  135. cluster should have write access to the repository. Having multiple clusters
  136. write to the repository at the same time risks corrupting the contents of the
  137. repository.
  138. To reduce this risk, you can use URL repositories (`"type": "url"`) to give one
  139. or more clusters read-only access to a shared file system repository. As URL
  140. repositories are always read-only, they are a safer and more convenient
  141. alternative to registering a read-only shared filesystem repository.
  142. The URL specified in the `url` parameter should point to the root of the shared
  143. filesystem repository.
  144. [source,console]
  145. ----
  146. PUT /_snapshot/my_read_only_url_repository
  147. {
  148. "type": "url",
  149. "settings": {
  150. "url": "file:/mount/backups/my_fs_backup_location"
  151. }
  152. }
  153. ----
  154. // TEST[skip:no access to url file path]
  155. The `url` parameter supports the following protocols:
  156. * `file`
  157. * `ftp`
  158. * `http`
  159. * `https`
  160. * `jar`
  161. URLs using the `file` protocol must point to the location of a shared filesystem
  162. accessible to all master and data nodes in the cluster. This location must be
  163. registered in the `path.repo` setting, similar to a
  164. <<snapshots-filesystem-repository,shared file system repository>>.
  165. URLs using the `ftp`, `http`, or `https` protocols must be whitelisted in the
  166. `repositories.url.allowed_urls` setting. This setting supports wildcards (`*`)
  167. in place of a host, path, query, or fragment in the URL. For example:
  168. [source,yaml]
  169. ----
  170. repositories.url.allowed_urls: ["http://www.example.org/root/*", "https://*.mydomain.com/*?*#*"]
  171. ----
  172. NOTE: URLs using the `ftp`, `http`, `https`, or `jar` protocols do not need to
  173. be registered in the `path.repo` setting.
  174. [float]
  175. [role="xpack"]
  176. [testenv="basic"]
  177. [[snapshots-source-only-repository]]
  178. === Source only repository
  179. A source repository enables you to create minimal, source-only snapshots that take up to 50% less space on disk.
  180. Source only snapshots contain stored fields and index metadata. They do not include index or doc values structures
  181. and are not searchable when restored. After restoring a source-only snapshot, you must <<docs-reindex,reindex>>
  182. the data into a new index.
  183. Source repositories delegate to another snapshot repository for storage.
  184. [IMPORTANT]
  185. ==================================================
  186. Source only snapshots are only supported if the `_source` field is enabled and no source-filtering is applied.
  187. When you restore a source only snapshot:
  188. * The restored index is read-only and can only serve `match_all` search or scroll requests to enable reindexing.
  189. * Queries other than `match_all` and `_get` requests are not supported.
  190. * The mapping of the restored index is empty, but the original mapping is available from the types top
  191. level `meta` element.
  192. ==================================================
  193. When you create a source repository, you must specify the type and name of the delegate repository
  194. where the snapshots will be stored:
  195. [source,console]
  196. -----------------------------------
  197. PUT _snapshot/my_src_only_repository
  198. {
  199. "type": "source",
  200. "settings": {
  201. "delegate_type": "fs",
  202. "location": "my_backup_location"
  203. }
  204. }
  205. -----------------------------------
  206. // TEST[continued]
  207. [float]
  208. [[snapshots-repository-plugins]]
  209. === Repository plugins
  210. Other repository backends are available in these official plugins:
  211. * {plugins}/repository-s3.html[repository-s3] for S3 repository support
  212. * {plugins}/repository-hdfs.html[repository-hdfs] for HDFS repository support in Hadoop environments
  213. * {plugins}/repository-azure.html[repository-azure] for Azure storage repositories
  214. * {plugins}/repository-gcs.html[repository-gcs] for Google Cloud Storage repositories
  215. [float]
  216. [[snapshots-repository-verification]]
  217. === Repository verification
  218. When a repository is registered, it's immediately verified on all master and data nodes to make sure that it is functional
  219. on all nodes currently present in the cluster. The `verify` parameter can be used to explicitly disable the repository
  220. verification when registering or updating a repository:
  221. [source,console]
  222. -----------------------------------
  223. PUT /_snapshot/my_unverified_backup?verify=false
  224. {
  225. "type": "fs",
  226. "settings": {
  227. "location": "my_unverified_backup_location"
  228. }
  229. }
  230. -----------------------------------
  231. // TEST[continued]
  232. The verification process can also be executed manually by running the following command:
  233. [source,console]
  234. -----------------------------------
  235. POST /_snapshot/my_unverified_backup/_verify
  236. -----------------------------------
  237. // TEST[continued]
  238. It returns a list of nodes where repository was successfully verified or an error message if verification process failed.
  239. [float]
  240. [[snapshots-repository-cleanup]]
  241. === Repository cleanup
  242. Repositories can over time accumulate data that is not referenced by any existing snapshot. This is a result of the data safety guarantees
  243. the snapshot functionality provides in failure scenarios during snapshot creation and the decentralized nature of the snapshot creation
  244. process. This unreferenced data does in no way negatively impact the performance or safety of a snapshot repository but leads to higher
  245. than necessary storage use. In order to clean up this unreferenced data, users can call the cleanup endpoint for a repository which will
  246. trigger a complete accounting of the repositories contents and subsequent deletion of all unreferenced data that was found.
  247. [source,console]
  248. -----------------------------------
  249. POST /_snapshot/my_repository/_cleanup
  250. -----------------------------------
  251. // TEST[continued]
  252. The response to a cleanup request looks as follows:
  253. [source,console-result]
  254. --------------------------------------------------
  255. {
  256. "results": {
  257. "deleted_bytes": 20,
  258. "deleted_blobs": 5
  259. }
  260. }
  261. --------------------------------------------------
  262. Depending on the concrete repository implementation the numbers shown for bytes free as well as the number of blobs removed will either
  263. be an approximation or an exact result. Any non-zero value for the number of blobs removed implies that unreferenced blobs were found and
  264. subsequently cleaned up.
  265. Please note that most of the cleanup operations executed by this endpoint are automatically executed when deleting any snapshot from a
  266. repository. If you regularly delete snapshots, you will in most cases not get any or only minor space savings from using this functionality
  267. and should lower your frequency of invoking it accordingly.