首页 > 编程知识 正文

elasticsearch 搜索,elasticsearch 详解

时间:2023-05-05 22:52:54 阅读:170458 作者:312

官方网站: https://www.elastic.co/guide/en/elastic search/reference/current/modules-snapshot s.html

前几天写更新ES tool的时候,在QA的tESt环境中测试了tool。 由于在测试环境中设置了public ip and private ip,因此对测试环境中的es群集配置一无所知。 结果,在测试postman是否可以访问9200端口时,不小心删除了索引。 (还好不是专业环境。 乍一看有57万件以上的数据。

废话不多说,让我们开始一键还原吧

快照和恢复

使用Snapshot and restore模块,可以在远程仓库中创建单个索引或整个群集的快照。 早期版本仅支持共享文件系统的仓库,但现在可以使用官方的仓库插件支持各种后台仓库。

仓库

在执行快照或恢复操作之前,必须拥有在Elasticsearch中注册的快照仓库。 以下命令注册名为my_backup的共享文件系统仓库。 快照保存在名为/mount/backups/my_backup的目录中。

$ curl-xput‘http://localhost :9200/_ snapshot/my _ backup’- d‘

“type”:“fs”、

“设置”:{

" location " : "/mount/backups/my _ backup ",

compress : true

() ) )。

仓库注册后,只需以下命令即可获取此仓库的信息

$ curl-xget‘http://localhost :9200/_ snapshot/my _ backup? pretty’{

“my _ backup”: {

“type”:“fs”、

“设置”:{

compress :“true”

“location”:“/mount/backups/my _ backup”

} }

如果未指定仓库名称,或者使用_all作为仓库名称,Elasticsearch将返回群集当前注册的所有仓库的信息。

$ curl-xget‘http://localhost :9200/_ snapshot’or

$ curl-xget‘http://localhost :9200/_ snapshot/_ all’

共享文件系统的仓库

共享文件系统仓库“type”:“fs”使用共享文件系统来存储快照。 在location参数中指定的特定存储路径必须与共享文件系统中的位置相同,并且所有数据节点和主节点都必须可以访问。 还支持以下参数设置:

位置

指定快照的保存位置。 必须拥有

公司

指定是否压缩快照文件。 默认值为true。

chunk_size

如果需要拍摄快照,可以将较大的文件分割为几个块。 此参数指示每个块的字节数。 也可以用不同的单位进行识别。 例如1g、10m、5k等。 默认值为空。 这意味着不限制块大小。

max_restore_bytes_per_sec

每个节点的数据恢复最高速度限制。 默认值为20mb/s

max_snapshot_bytes_per_sec

每个节点快照的最高速度限制。 默认值为20mb/s

只读URL仓库

URL仓库“type”:“URL”可以用作对使用共享文件系统存储快照创建的共享文件系统仓库的只读访问。 在url参数中指定的url必须指向共享文件系统仓库的根目录。 的构成方法如下。

url

指定快照的位置。 必须拥有

仓库插件

以下官方插件的仓库的后台全部可用。

AWS Cloud Plugin亚马逊S3仓库

HDFS插件硬件环境

缩放云插件缩放存储仓库

快照

仓库可以包含同一群集的多个快照。 快照通过群集中的唯一名称来区分。 要在仓库my_backup中创建名为snapshot_1的快照,请使用以下命令:

$ curl -XPUT

“localhost :9200/_ snapshot/my _ backup/snapshot _ 1? wait_for_completion=true "

wait_for_completion参数指定创建快照的请求是否要等待快照创建完成才能返回。 缺省情况下,群集中所有打开并启动的索引都会自动创建快照。 可以列出需要在快照请求中创建快照的索引。 parameterspecifieswhetherornottherequests

ould return immediately or wait for snapshot completion. By default snapshot of all open and started indices in the cluster is created. This behavior can be changed by specifying the list of indices in the body of the snapshot request.

$ curl -XPUT “localhost:9200/_snapshot/my_backup/snapshot_1” -d ‘{
“indices”: “index_1,index_2”,
“ignore_unavailable”: “true”,
“include_global_state”: false
“partial”: “false” }’

上述命令中通过 indices 参数指定快照包含的索引,这个参数支持同时配置多个索引 multi index syntax. 快照请求同样支持 ignore_unavailable 选项。把这个选项设置为 true 的时候在创建快照的过程中会忽略不存在的索引。默认情况下, 如果没有设置 ignore_unavailable 在索引不存在的情况下快照请求将会失败。通过设置 include_global_state 为false 能够防止 集群的全局状态被作为快照的一部分存储起来。默认情况下,如果快照中的1个或多个索引不是全部主分片都可用会导致整个创建快照的过 程失败。 通过设置 partial 为 true 可以改变这个行为。

索引创建快照的过程是增量的。在给索引创建快照的过程中,Elasticsearch会分析存储在仓库中的索引文件并且只会复制那些自从上次快照 之后新建或有所更新的文件。这使得多个快照以一种紧凑的方式存储在同一个仓库里。创建快照的过程是以非阻塞方式执行的。一个索引在创 建快照的同时能够被检索和查询。尽管如此,快照保存的是在开始进行创建快照的那个时间点的索引的视图。所以,在开始创建快照之后的记 录不会出现在这个快照里。在主分片启动之后创建快照的过程就会立即开始,并且之后不会改变位置。在1.2.0版本之前如果集群重新定位或者 新加入快照的索引初始化主分片会导致快照操作失败。从1.2.0版本开始,Elasticsearch会等待重新定位和初始化分片然后再创建快照。

除了给每个索引创建拷贝快照还能存储集群的全局元数据,包括集群的设置和模板。临时的设置和已经注册的快照仓库不会被作为快照的一部 分来存储。

任何时候在集群里只能有一个创建快照的操作在执行。当一个分片正在创建快照的时候,这个分片就不能被迁移到别的节点,因为这会影响重 新平衡和分配过滤的过程。一旦这个分片的快照建立完成,这个分片就可以根据现有的分配过滤和重新平衡算法被迁移到别的节点上。

如果快照已经建立,我们可以通过如下的命令去获得快照的信息:

$ curl -XGET “localhost:9200/_snapshot/my_backup/snapshot_1”

通过如下的命令可以把仓库里所有的快照列出来:

$ curl -XGET “localhost:9200/_snapshot/my_backup/_all”

可以通过如下的命令将仓库里的某个快照删除:

$ curl -XDELETE “localhost:9200/_snapshot/my_backup/snapshot_1”

当一个快照从仓库里删除之后,Elasticsearch会把所有和这个快照相关并且不被其它快照使用的文件删除。如果对正在创建的某个快照执行 删除操作,则创建快照的过程会被取消,并且会把创建过程中所有已经创建的文件删除。因此,删除操作可以用来取消那些由于误操作引起的 长时间运行的快照操作。

恢复
快照可以使用如下的操作来恢复:

$ curl -XPOST “localhost:9200/_snapshot/my_backup/snapshot_1/_restore”

默认情况下,快照中的所有索引以及集群状态都会被恢复。在恢复请求中可以通过 indices 来指定需要被恢复的索引,同样可以使用 include_global_state 选项来防止恢复集群的状态。 indices 支持配置多个索引multi index syntax.rename_pattern 和 rename_replacement 选项可以在恢复的时候使用正则表达式来重命名index。详见 这里.

$ curl -XPOST “localhost:9200/snapshot/my_backup/snapshot_1/restore"
-d '{
“indices”: “index_1,index_2”,
“ignore_unavailable”: “true”,
“include_global_state”: false,
“rename_pattern”: "index(.+)",
“rename_replacement”: "restored_index$1” }’

恢复操作可以在正在运行的集群上操作。尽管如此,已经存在的index只有在关闭之后才能被恢复。恢复操作会自动打开关闭的恢复的索引, 并且创建新的索引如果索引不存在。如果集群状态也是恢复的,如果恢复的模板不存在会被新建,如果同名的模板已经存在则会被覆盖代替。 恢复的持久性设置会被增加到现存的持久性设置里。

快照状态
新增于[1.1.0]

正在运行的快照的详细信息可以通过如下的命令来获取:

$ curl -XGET “localhost:9200/_snapshot/_status”

在这种格式下,这个命令将会返回所有正在运行的快照的信息。通过指明仓库名字,能够把结果限定到具体的一个仓库。

$ curl -XGET “localhost:9200/_snapshot/my_backup/_status”

如果仓库名字和快照id都指明了,这个命令就会返回这个快照的详细信息,甚至这个快照不是正在运行。

$ curl -XGET “localhost:9200/_snapshot/my_backup/snapshot_1/_status”

同样支持多个快照id:

$ curl -XGET
“localhost:9200/_snapshot/my_backup/snapshot_1,snapshot_2/_status”

监控快照/恢复进度
有多种方法去监控运行时快照和恢复的进度。这2个操作都支持 wait_for_completion 参数,如果这个了这个参数将会阻塞客户端直到 操作完成。这是最简单的用来获取操作完成的通知的方法。

快照操作的进度也可以通过定时的调用下面的命令去获得:

$ curl -XGET “localhost:9200/_snapshot/my_backup/snapshot_1”

注意,获取快照信息的操作和快照操作使用相同的资源和线程池。所以,执行获取快照信息的操作的时候如果大量的分片正在做快照操作, 在获取快照新的操作返回结果之前需要先等到资源可用才行。如果分片太大,等待的时间会挺长。

要获取更多的及时和完整的关于快照的信息,可以使用如下的快照状态命令。

$ curl -XGET “localhost:9200/_snapshot/my_backup/snapshot_1/_status”

获取快照信息的方法只返回关于快照进度的基本信息, 快照状态命令会返回正在做快照的每个分片的具体信息。

恢复进度是装在Elasticsearch的标准恢复机制里的。所以,标准恢复监控服务能够被用来监控恢复的状态。当恢复操作在集群里执行的时候, 集群通常会变成 红色 状态。可能是因为恢复操作是从恢复被恢复的索引的主分片开始的。在恢复操作期间主分片变的不可用使得集群处于 红色 状态。一旦主分片的恢复完成,Elasticsearch会切换到标准复制过程,在这个过程会创建需要的复制个数,并且集群状态变为 黄色 。一旦所有的复制分片创建完成,集群会变成 绿色 状态。

集群健康操作只提供恢复过程的大致状态。可以通过 indices recovery 和 cat recovery APIs 获取恢复过程当前状态的更详细的信息。

停止正在运行的快照和恢复操作
快照和恢复框架只允许同一时刻每次运行1个快照或恢复操作。如果正在运行的一个快照是误操作导致的或者运行的时间太长,可以用快照删除 操作去终止正在执行的快照操作。快照删除操作会检查要删除的快照是否正在运行,如果是,删除操作先停止这个快照操作,然后再将它从仓库 里删除。

恢复操作是用用标准的分片回复机制。因此,任何正在运行的恢复操作可以通过删除正在恢复的索引来取消。注意,所有被删除的索引的数据也 会被从集群里删除。

总结: 有备无患
参考:http://blog.csdn.net/yinchunxiang/article/details/38727883

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。