编程随笔-ElasticSearch知识导图(6):管理

作者: 简单是美美 | 来源:发表于2019-03-04 10:17 被阅读6次

    1. 集群API

      “curl -iXGET "http://192.168.127.100:9200/_cluster/health?pretty=true"”这样的命令可能大家在日常工作中会经常使用,它用来显示当前集群的健康程度,在返回结果中,包含当前集群有关的一些关键信息(文献2提到了一个使用“wait_for_status”的小技巧)。
      ES提供了类似上面命令的集群API用于获取集群即时状态与信息。根据API的URI可分为几类API,如下图所示:

    集群API
      请注意,“_cluster”API与“_cat”API提供的功能大部分重复,不同的是“_cat”API的输出结果非JSON格式,对于熟悉*nux的系统管理员来说更加亲切。

    2. 应用客户端访问

      除了可使用显式地HTTP rest请求访问ES集群,ES还提供了基于java的两种客户端开发包供ES用户在应用代码中调用:

    • Transport Client:可用于向远程集群发送请求的轻量级传输客户机。它本身并不是ES集群的一部分,只承担向集群发送请求的职责。
    • Node client:使用该客户端的应用节点作为一个非数据节点加入ES集群。这个非数据节点并不保存数据,但它知道集群中所存储数据的元数据,可以直接将请求发送到对应数据节点。

      TC客户端是应用程序与ES集群之间的桥梁,它了解ES的API并可在发送请求时实现对集群节点访问的轮转(round-robin)。NC客户端则直接是ES集群的一部分,对索引、分片信息都更为了解,这样在发送请求时更为精准。
      TC客户端实现了应用程序与ES集群的解耦,而NC客户端在效率上更有优势。应该根据适用场景来选择:当有多个客户端(如上千个)需要访问ES时,建议使用TC客户端,这样集群中不需要增加多个节点;若应用只需要少量的,且长时间与ES集群保持的连接,可以考虑使用NC客户端(注意这样应用程序也可能会绑定在集群中)。

    3. 生产环境的监控

      系统运维是生产环境需要解决的首要问题。文献3强烈建议使用单独的监控集群。使用单独的监控集群:即使在生产集群故障的情况下仍可访问历史监控数据;并且不会影响生产集群的性能(典型的CQRS思路)。
      ES使用采集器(Collectors)采集数据,并在生产集群中作一些配置,这些配置可控制采集数据的频率、配置超时以及在本地存储的监控数据保存周期。ES使用导出器(exporters)来发送监控数据。默认情况下,监控数据使用本地导出器( local exporter)存储在同一个生产集群中,若要将监控数据发送到监控集群,需要使用http导出器( http exporter),并配置好监控集群的地址与安全凭证(credential)。
      在6.5和更高版本中,可以使用Metricbeat来收集和发送关于Elasticsearch的数据。Metricbeat是需要单独下载和安装的工具(https://www.elastic.co/downloads/beats/metricbeat)。在这种方式下,Metricbeat可视为一个嵌入ES生产集群的运维agent。
      下图展示了一个Elasticsearch使用对elastic栈的监控体系结构。

    监控架构

    4. 数据备份与恢复

      信息系统的最大灾难恐怕就是数据丢失了。ES提供snapshot API,可将集群中的当前状态和数据保存到共享存储库(shared repository)中。这个备份过程是“智能的”:第一个快照保存数据的完整副本,所有后续快照将保存现有快照和新数据之间的增量。因而随着时间的推移,数据会随着快照数据的改变而增加和删除。后续备份因为传输数据减少,将大大加快速度。
      要使用此功能,必须首先创建一个存储库来保存数据,可用的存储库可以为:本地文件系统(或挂载设备);HDFS;Amazon S3等。
      使用如下命令建立本地文件系统名为“zk_backup”的快照(需要配置“path.repo”属性):

    curl -iXPUT 'localhost:9200/_snapshot/zk_backup?pretty' -H "Content-type: application/json" -d'
    {
        "type": "fs",
        "settings": {
            "location": "/home/zk/es_backup"
        }
    }
    '
    

      下面我们定义第一个快照的名字为“snapshot_20190301” ,使用下面命令开始数据备份(备份集群中所有的索引,若备份指定索引请在消息体中指定):

    curl -iXPUT 'localhost:9200/_snapshot/zk_backup/snapshot_20190301?pretty'
    

      在本地目录“/home/zk/es_backup”可以看到生成如下文件:

    [zk@centos-100 es_backup]$ ls -l
    总用量 36
    -rw-rw-r--. 1 zk zk   494 3月   1 17:03 index-0
    -rw-rw-r--. 1 zk zk     8 3月   1 17:03 index.latest
    drwxrwxr-x. 7 zk zk   156 3月   1 17:03 indices
    -rw-rw-r--. 1 zk zk 21587 3月   1 17:03 meta--SwJ6wKQTKCgg5-3B3bL3w.dat
    -rw-rw-r--. 1 zk zk   276 3月   1 17:03 snap--SwJ6wKQTKCgg5-3B3bL3w.dat
    

      使用快照恢复集群数据的命令也可简单,如下所示(若恢复指定索引请在消息体中指定):

    curl –iXPOST 'localhost:9200/_snapshot/zk_backup/snapshot_20190301/ _restore?pretty'
    

      需要注意的是,如果当前集群中存在于快照同名的索引,系统会报错。解决方法是删除当前集群中同名索引,或使用rename模式修改恢复到集群中的索引名字(在消息体中定义)。

    5. 参考文献

    1. https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
    2. Clinton Gormley &Zachary Tong, Elasticsearch: The Definitive Guide,2015
    3. https://www.elastic.co/guide/en/elastic-stack-overview/current/how-monitoring-works.html

    本系列文章:

    编程随笔-ElasticSearch知识导图(1):全景
    编程随笔-ElasticSearch知识导图(2):分布式架构
    编程随笔-ElasticSearch知识导图(3):映射
    编程随笔-ElasticSearch知识导图(4):搜索
    编程随笔-ElasticSearch知识导图(5):聚合
    编程随笔-ElasticSearch知识导图(6):管理

    相关文章

      网友评论

        本文标题:编程随笔-ElasticSearch知识导图(6):管理

        本文链接:https://www.haomeiwen.com/subject/fulbuqtx.html