1. 集群API
“curl -iXGET "http://192.168.127.100:9200/_cluster/health?pretty=true"”这样的命令可能大家在日常工作中会经常使用,它用来显示当前集群的健康程度,在返回结果中,包含当前集群有关的一些关键信息(文献2提到了一个使用“wait_for_status”的小技巧)。
ES提供了类似上面命令的集群API用于获取集群即时状态与信息。根据API的URI可分为几类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. 参考文献
- https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
- Clinton Gormley &Zachary Tong, Elasticsearch: The Definitive Guide,2015
- 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):管理