ElasticSearch集群备份

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第6天,点击查看活动详情

背景

在生产环境中,数据丢失,对于系统来说是致命的伤害,数据一旦丢失,不可恢复。用户发现,那就一波凉凉送给自己了。所以做好定期数据备份变为极其重要。Eleasticsearch 也提供对数据进行备份。其实也就是对 data 目录下的数据进行备份。但是官方不建议直接复制 data 目录,毕竟当我们在复制 data 目录时, ElasticSearch 本身还在运行,这时有人进行操作的话,数据就会丢失。官方提供了一套快照和还原进行备份。

在说如何备份之前,我一直存在的一种疑惑:

 Elasticsearch 有副本,副本本身就是一种备份形式,为何还要备份?

 elasticsearch 的副本分片在运行时提供了高可用性,让系统可以承受零星的节点丢失而不中断服务。可是,副本分片不会保护 Elasticsearch 集群免受灾难性的故障影响。所以需要集群的备份,以防万一。

 Elasticsearch 提供两种方式来支持高可用:

  • 快照(snapshot)和还原(restore)可用于备份单个索引或者整个集群。可将备份文件存储在共享文件系统中。
  • Cross-cluster replication (CCR),

可以用来将远程集群中的索引复制到本地集群。可以使用跨集群复制从主集群的故障中恢复,也可以基于地理位置邻近性在本地提供数据。

备份集群三步曲:

备份数据 ---> 备份集群的相关配置 ---> 备份集群安全配置

1、还原集群

还原数据 ---> 还原安全配置

2、ES 如何备份数据?

ES 提供了 snapshot API , 快照可以备份一个正在运行的 es 集群。我们可以对单独索引或者整个集群进行快照备份。snapshot 可以备份可以把备份内容存储在本地文件系统或者远程仓库( S3, HDFS, Azure, Google Cloud Storage )或者仓库插件支持的平台。

快照一个特点就是:当你首次进行备份快照后,下次在进行快照是对改变的数据增量快照。而不是删除全部,在重新生成。这样的好处在与,能与最小的开销进行频繁的快照。就是所谓的增量备份,而无需每次都是全量备。

tips:(如果 es 集群有安全认证时, snapshot API 也要进行授权)

3、实践一把

 本次主要展示把备份信息存储在共享文件系统中。

  • 注册Repository,首先我们要现在配置文件 config下的 elasticsearch.yml中对备份数据的存放地址进行配置。把备份文件放在data/es_backup目录下,如目录不存在,es会自动创建。

配置

  • 使用snapshot API 指定路径和文件类型
curl -XPUT "http://localhost:9200/_snapshot/my_movices_back" -H 'Content-Type: application/json' -d'
{
  "type": "fs", #文件
  "settings": {
    "location": "/data/es_backup", #和上面配置的一致 快照位置
    "compress":true #打开快照的压缩,压缩仅应用于数据文件(索引映射和设置),数据文件未压缩。
  }
}'
  • 创建第一个快照,备份所有数据
curl -XPUT "http://localhost:9200/_snapshot/my_movices_back/snapshot_1?wait_for_completion=true"
  • 也可以创建单个索引的,备份movices索引数据
curl -XPUT "http://localhost:9200/_snapshot/my_movices_back/test_snapshot?wait_for_completion=true" -H 'Content-Type: application/json' -d'
{
  "indices":"movices",
  "ignore_unavailable": true,
  "include_global_state": false, #查看快照的设置
  "metadata":{
    "token_by":"huangjy",inc
    "token_because":"backup before update"
  }
}'

到这我们备份就算完成了。

  • 查看备份的信息
curl -XGET "http://localhost:9200/_snapshot/my_movices_back/_all"

也可以删除快照,没啥事就莫删

curl -XDELETE "http://localhost:9200/_snapshot/my_movices_back/test_snapshot"

还原备份数据(_restore)

当你某天不小心删除索引,我们可以通过之前备份的快照进行还原。只备不还原这就是在耍liu 氓,所以,还原操作如下:

  • 恢复整个集群数据
curl -XPOST "http://localhost:9200/_snapshot/my_movices_back/snapshot_1/_restore" -H 'Content-Type: application/json' -d'
{}'
  • 还原单个索引数据,
curl -XPOST "http://localhost:9200/_snapshot/my_movices_back/snapshot_1/_restore" -H 'Content-Type: application/json' -d'
{
  "indices": "movices",
  "index_settings":{
    "index.number_of_repllicas":5
  },
  "ignore_index_settings":[
    "index.refresh_interval"
  ]
}'

总结

了解 Elasticsearch 中集群的备份和还原的基本概念,以为在实际的生产环境中,我们应该如何备份 Elasticsearch 中的数据。备份的一些小TIP:

  1. 每个服务器上的elastic的uid,gid必须一致;
  2. 集群备份必须建nfs共享目录;
  3. 每台服务器上的共享目录的权限必须是elastic

扩展知识

给文件赋权限

  chown -R elasticsearch es_backup

阅读来源

猜你喜欢

转载自juejin.im/post/7114318084952817672