【Elasticsearch】集群管理

来源:互联网 发布:昆明网络电视台 编辑:程序博客网 时间:2024/04/27 19:46

8.1 Elasticsearch时光机

Elasticsearch的快照,防止出错,灾备

8.1.1 创建快照存储库

创建快照之前必须建一个存储库,有如下几个方面,name,type,settings,其中type是存储库的类型,分为共享文件系统中的存储库FS以及通过url访问的只读存储库url,给出了创建文件系统存储库的命令以及常用的一些操作命令

8.1.2 创建快照

给出了创建快照的命令,给出了一些额外参数配置的示例,需要注意的是快照的名字的唯一性,并且快照可以仅复制新的信息

8.1.3 还原快照

给出了查看所有快照,以及还原某个快照的具体命令,如果索引已经存在并且未关闭,可以还原某些索引

8.1.4 清理:删除旧的快照

给出了从快照库删除快照的命令

8.2 监控集群的状态和健康度

8.2.1 集群健康度api

curl 'localhost:9200/_cluster/health?pretty' 查看集群的健康
当Elasticsearch可以根据配置分配所有分片和副本时,集群才是全面运作,处于green状态
主分片已经分配,已经转备好处理请求,但是部分或者所有的副本还没有,处于yellow状态
至少一个主分片还没有分配,集群没有转备好,如果查询可能返回错误或者不完整的结果,这是处于red状态
还可以检查索引的健康状态
控制信息细节:允许设置一个level参数,可设置为cluster,indices或者shards这样可以查看细节
额外的参数:还可以设置timeout,wait_fro_status等参数
运用以上的一个完整的命令:
curl 'localhost:9200/_cluster/health?wait_for_status=green&wait_for_nodes=>=3&timeout=100s'

8.2.2 索引统计API

使用_stats可以得到索引的信息,如curl 'localhost:9200/library,map/_stats?pretty'
docs:显示索引文档的信息,有count和delete字段,delete不会立刻删除,只会在段合并的时候被删除
store:主要是关于索引的大小信息
indexing、get、search:索引删除操作,实时的get和搜索的信息,可以看到各类的请求花费的总时间等信息
额外信息:还提供了merges,refresh,flush等信息

8.2.3 状态API

另一个得到关于索引信息的方法是使用_status断点的状态API,返回的信息描述了可用的分片以及其他的信息

8.2.4 节点信息API

提供了集群中节点的信息,需要发送请求到_nodes端点,可通过node名,node标识符,ip地址,Elasticsearch配置参数等查看信息,给出了使用的例子

8.2.5 节点统计API

类似于节点信息API,但是节点信息API提供环境信息,而节点统计API告诉我们集群工作时发生过什么,应发送命令到/_nodes/stats端点
返回的信息有indices,os,process,jvm,network,transport,http,fs,thread_pool,breaker等信息,给出了例子

8.2.6 集群状态API

获取整个集群的状态curl 'localhost:9200/_cluster/state?pretty',也可以只是查看特定的索引节点信息

8.2.7 挂起任务API

允许控制哪些任务在等待执行,为了获取这个信息,需要发送请求到/_cluster/pending_tasks端点

8.2.8 索引段API

发送到/_segments端点的Lucene段API,提供的信息包括分片以及分片的布局信息

8.2.9 cat API

使用_cat可以使返回的信息更加的友好,后面可以跟aliases,allocation,count,health,indices,master,nodes,pending_tasks,recovery,thread_pool,shards等信息

8.3 控制集群的再平衡

Elasticsearch把分片和副本在集群中均衡分部,但是有时候想控制这种行为

8.3.1 再平衡

集群发生变化时,或者Elasticsearch认为需要再平衡时,会尽量对集群进行再平衡

8.3.2 集群的就绪

一旦达到黄色的健康状态时,可以认为集群就已经就绪了

8.3.3 集群在平衡设置

允许控制再平衡过程,通过设置Elasticsearch.yml文件中的几个属性就可以
控制再平衡何时开始:cluster.routing.allocation.allow_revalance属性可以指定再平衡何时开始
控制同时在节点中移动的分片数量:默认值为2
控制单个节点上同时初始化的分片数量:可设置节点上一次课初始化多少分片,默认值为2
控制单个节点上同时初始化的主分片数:控制单个节点上一次可以初始化多少主分片
控制分配的分片类型:使用cluster.routing.allocation.enable属性,可允许分配哪种类型的分片
控制单个节点上的并发流数目:允许控制一个节点上一次可以打开多少流,默认为3

8.4 控制分片和副本的分配

8.4.1 显示控制分配

控制把索引放置在不同的集群节点上,可以控制
指定节点参数:把节点分为不同的区
配置:在节点1和节点2,较强节点的yml配置中添加node.zone:zone_one属性,3和4添加zone_two属性
索引的创建:可以指定某个索引放在某个区或者某个节点上,给出了例子
排除节点的分配:使用index.routing.allocation.exclude.zone可以排除某个区域
节点需求属性:除了节点的包含和排除外,还可以指定分片必须匹配某种规则才能分配到给定的节点上
使用ip地址分配分片:比如把某个索引放在固定的ip上面,给出了例子
基于此盘的分片分配:基于节点的磁盘使用情况设置分配规则
启用基于此盘的分片分配:通过设置cluster.routing.allocation.disk.threshold_enable属性为true来启用基于磁盘的分配
配置基于此盘的分片分配:可以配置一定的参数,例如时间间隔,磁盘空间超过多少不分配,或者什么时候重新分配等

8.4.2 集群范围的分配

发送到_cluster/settings端点而不是index_name/_settings端点来分配所有的索引在什么ip

8.4.3 每个节点上的分片和副本数量

可以指定单一节点上为单一索引最多可以放置多少分片,给出了例子

8.4.4 手动移动分片和副本

把分片从一个节点移到另一个节点,取消分片的分配,强制分片的分配
移动分片:使用move命令可以将制定的index以及制定的shard分片从一个节点移到另一个节点
取消分片的分配:如果想取消正在进行的分配过程,可以使用cancel命令,指定想取消分片的索引,节点和分片,给出了某个节点上某个索引编号的分配取消的例子
强制分片的分配:分配一个未分配的分片到指定节点上
每个http请求多个命令:可以在一个http请求中包含多个命令,例如移动或者取消等

8.5 预热

Elasticsearch允许为类型和索引定义预热查询

8.5.1 定义一个新的预热查询

跟普通的查询没什么不同,只是存储在特殊的名为_warm的索引中,给出了对于index的预热,以及index/type的预热例子,允许ES和操作系用缓存数据

8.5.2 获取定义的预热查询

可以根据名字得到定义的预热,或者获取某个索引和类型的所有预热

8.5.3 删除一个预热查询

根据名字删除预热,或者根据索引类型来删除预热

8.5.4 禁用预热功能

可以在yml里面设置为false或者直接使用reset api来设置,给出了例子

8.5.5 查询的选择

选择执行起来昂贵的和需要填充缓存的查询执行预热

8.6 使用索引别名来简化你的日常工作

使用别名可以使用一个名字跟多个索引打交道,就像使用一个索引一样

8.6.1 别名

索引别名是一个或多个索引的一个附加名称,一个别名可以对应多个索引,但是不能使用多个索引的别名来进行索引或者实时的get出错,如果这样会出错

8.6.2 创建别名

给出了创建别名的资历,在_aliases端点上执行http post方法就可以

8.6.3 修改别名

可以使用remove从别名中移除指定的索引,给出了例子
curl -XPOST ‘localhost:9200/_aliases’ -d '{"actions":[{"remove":{"index":"day9","alias":"week12"}}]}'
将day9的索引从week12中移除

8.6.4 合并命令

可以将remove以及add在一个命令中发送

8.6.5 获取所有别名

可以获取某个索引的别名,或者某个ip节点上所有的别名,给出了例子

8.6.6 移除别名

从一个端点移除一个别名
curl -xdelete localhost:9200/data/_alias/client从data索引移除client别名

8.6.7 别名中的过滤

别名类似视图一样,可以使用完整的DSL来查询,给出了一个过滤的例子

8.6.8 别名和路由

创建别名的时候可以指定搜索路径以及索引路径,给出了一个例子

8.7 Elasticsearch插件

8.7.1 基础知识

ES插件按照内容分类两类,java插件以及站点插件,站点插件位于plugin目录下,java插件位于site目录下,区别两者的就是是否包含.jar文件

8.7.2 安装插件

给出了从网上下载插件,如果网上找不到使用maven central、maven sonatype、github等库,同样允许自己编写的插件,给出了简单的例子

8.7.3 移除插件

使用简单的命令来移除插件,例如移除river-mongodb插件可以执行 

bin/plugin -remove river-mongodb
移除插件即可

8.8 更新设置API

虽然yml可以指定各种参数调优,但是最好在api来设置修改,有两种方法设置属性,一种是瞬时设置,一种是永久设置,给出了例子


0 0