Elasticsearch配置和集群维护

这篇文章主要讲述Elasticsearch中一些常见的概念,以及一些配置参数的优化。

一、常见名词

索引(index):存储数据的逻辑空间,类似关系型数据库里的“数据库”;

文档(document):存储在es中的实际数据内容;

类型(type):每个 Type 会拥有相同结构的文档,都有相同的字段(Field),比如博客系统,有一个索引,可以定义用户数据 Type,博客数据 Type,评论数据 Type 等。类似关系型数据库中的“表”;

节点(node):es实例,一个es的java进程。根据节点的作用不同,可分为数据节点和协调节点。数据节点主要用于存储数据,协调节点是用于选举集群主节点。

分片(shard):ES 可以将一个索引中的数据切分为多个分片(Shard),分布在不同的存储路径上,便于横向拓展。分片分为主分片和副本分片,主分片用于写入,副本分片用于分担读压力。

二、构建一个Elasticsearch集群

构建一个ES集群和其他中间件集群类似,有如下几点需要注意:

elasticsearch/config/elasticsearch.yml

1、node.name

每个es实例需要指定唯一name,这里每台服务器上运行一个es进程。

2、path.data

shard存储的路径,这里可以配置多个路径。比如某服务器挂载了2块硬盘,可以配置成/data,/data2。

3、discovery.zen.ping.unicast.hosts

这个配置主要是用于维持集群状态。

建议Node配置奇数个,如果集群较大,用于集群选举的节点可以和数据节点分开。比如集群中有10个节点8核32G,可以配置3个节点4核16G用于作为master节点以及故障转移参与选举的节点。

elasticsearch/config/jvm.yml

4、jvm配置

java heap的配置值,建议是服务器内存的一半。并且最高是32G。如果集群压力过大,再横向扩展。

5、写入调整

根据实际的业务场景,调整index的配置。写频繁远高于读的情况下,可以提高分片数量,减少副本数量;如果读环境较多,则提高副本数量用于分担读压力。

三、关于集群维护

1、集群状态监控

http://ip:9200/_cluster/health?pretty

绿:正常,黄:可用但是不可靠,红:故障。

2、集群数据备份

ES snapshot用于索引的冷备份,备份可以有本地存储、S3、HDFS等多种方式。比如备份到HDFS

PUT _snapshot/hw_hdfs_repository
{
"type": "hdfs",
"settings": {
"uri": "hdfs://192.33.0.253:9820/",
"path": "/elkHdfsRepo",
"conf.dfs.client.read.shortcircuit": "false"
}

PUT _snapshot/hw_hdfs_repository/snapshot_k8s
{
"indices": "k8s-2020.10.10",
"ignore_unavailable": true,
"include_global_state": false,
"partial": true
}

3、性能指标监控

可以通过rest方式采集指标值,这里推荐使用Kibana->monitoring可视化的查看集群的运行情况。

4、查询、基于日志的业务监控等

这块主要是ES DSL查询,类似编写数据库SQL语句。由于需要根据实际搜集的日志内容,这里不做举例。详细参考官方文档。

以上是ELK Stack中使用和维护Elasticsearch集群的相关点的概述,实际使用过程中还是有很多坑要踩的。建议结合Elasticsearch版本参考对应的官方文档。

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/1d82404f0fa16601b7c07bac1
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券