前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Elasticsearch一些使用笔记(持续更新)

Elasticsearch一些使用笔记(持续更新)

作者头像
用户1225216
发布于 2019-05-25 10:45:42
发布于 2019-05-25 10:45:42
58600
代码可运行
举报
文章被收录于专栏:扎心了老铁扎心了老铁
运行总次数:0
代码可运行

这篇博客记录这一些运维ES的一些经验。

1、节点磁盘使用率过高,导致ES集群shard无法分配,丢失数据?

有两个配置,分配副本的时候

参数名称

默认值

含义

cluster.routing.allocation.disk.watermark.low

85%

当节点磁盘占用量高于85%时,就不会往该节点分配副本了

cluster.routing.allocation.disk.watermark.high

90%

当节点磁盘占用量高于90%时,尝试将该节点的副本重分配到其他节点

配置方式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -XPUT 'localhost:9200/_cluster/settings' -d
'{
    "transient": {  
      "cluster.routing.allocation.disk.watermark.low": "90%"    
    }
}'

建议:密切关注ES集群节点的性能参数,对潜在风险有感知。

2、模板管理

template机制是比较有用的,特别是管理大量索引的时候。先给一个template的demo。

order:10 template的优先级,优先级高(order数字大的)会覆盖优先级低的template里的字段。

template:test*,这个template会命中test开头的索引。

index.number_of_shards:20 //index的一些配置

index.number_of_replicas::1

index.refresh_interval:5s

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
    "aliases": {},
    "order": 10,
    "template": "test*",
    "settings": {
        "index": {
            "priority": "5",
            "merge": {
                "scheduler": {
                    "max_thread_count": "1"
                }
            },
            "search": {
                "slowlog": {
                    "threshold": {
                        "query": {
                            "warn": "10s",
                            "debug": "1s",
                            "info": "5s",
                            "trace": "500ms"
                        },
                        "fetch": {
                            "warn": "1s",
                            "debug": "500ms",
                            "info": "800ms",
                            "trace": "200ms"
                        }
                    }
                }
            },
            "unassigned": {
                "node_left": {
                    "delayed_timeout": "5m"
                }
            },
            "max_result_window": "10000",
            "number_of_shards": "20",
            "number_of_replicas": "1", 
            "translog": {
                "durability": "async"
            },
            "requests": {
                "cache": {
                    "enable": "true"
                }
            },
            "mapping": {
                "ignore_malformed": "true"
            },
            "refresh_interval": "5s"
        }
    }
}

配置方式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -XPUT localhost:9200/_template/template_1 -d '
{
    "template" : "test*",
    "order" : 0,
    "settings" : {
        "number_of_shards" : 1
    },
    "mappings" : {
        "type1" : {
            "_source" : { "enabled" : false }
        }
    }
}
'

在配置了模板以后,如何建立索引

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 索引创建
curl -XPUT http://35.1.4.127:9200/index_name

3、mapping创建的一些注意事项

在创建索引type mapping的时候要妥善处理好_all和_source,不然会影响索引的性能。

_all,enable的话会把一个type中的所有字段合并成一个大字段,增加索引时间和大小。

_source,enable的话会请求会返回_source的结构体。

一般我们会禁用_all,打开_source。

另外,对时间的处理,可以如下这样,对于各种繁琐的时间格式都是支持的。

配置方式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -PUT http://35.1.4.129:9200/index_name/RELATION/_mapping -d '{
    "RELATION": {
        "_all": {
            "enabled": "false"
        },
        "_source": {
            "enabled": "true"
        },
        "properties": {
            "FROM_SFZH": {
                "type": "keyword"
            },
            "TO_SFZH": {
                "type": "keyword"
            },
            "CREATE_TIME": {
                "type": "date",
                "format": "yyyy-MM-dd HH:mm:ss.SSS Z||yyyy-MM-dd HH:mm:ss.SSS||yyyy-MM-dd HH:mm:ss,SSS||yyyy/MM/dd HH:mm:ss||yyyy-MM-dd HH:mm:ss,SSS Z||yyyy/MM/dd HH:mm:ss,SSS Z||strict_date_optional_time||epoch_millis||yyyy-MM-dd HH:mm:ss"
            }
        }
    }
}'

4、批量数据灌入ES时要禁用副本和刷新

大规模批量导入数据的时候,要禁用副本和刷新,ES在索引数据的时候,如果有副本的话,会同步副本,造成压力。

等到数据索引完成后,在恢复副本。

配置方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 关闭
curl -PUT http://35.1.4.129:9200/_settings -d '{
  "index": {
    "number_of_replicas" : 0
    "refresh_interval" : -1
  }    
}'
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 打开
curl -PUT http://35.1.4.129:9200/_settings -d '{
  "index": {
    "number_of_replicas" : 1
    "refresh_interval" : 5s
  }    
}'

5、jvm层面监控和优化

Elasticsearch是java开发的组件,当然可以压测看一下jvm的表现,例如通过jconsole远程连接。

config/jvm.options里面有各种jvm的配置,可以根据硬件资源合理配置一下。jvm调优就不说了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-Djava.rmi.server.hostname=192.168.1.152
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9110
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false

6、高并发查询时,优化ES线程池

当你查询并发上来了,有时候你会发现下面这个异常

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
EsRejectedExcutionException[rejected execution(queue capacity 50) on.......]

这个原因是在新版本的elasticsearch中线程池已经是fixed类型了,即固定大小的线程池,默认是5*core数,当所有线程忙碌,且队列满的情况下,es会拒绝请求。

多种请求类型对应多种线程池

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
index:此线程池用于索引和删除操作。它的类型默认为fixed,size默认为可用处理器的数量,队列的size默认为200search:此线程池用于搜索和计数请求。它的类型默认为fixed,size默认为(可用处理器的数量* 3) / 2) + 1,队列的size默认为1000。
suggest:此线程池用于建议器请求。它的类型默认为fixed,size默认为可用处理器的数量,队列的size默认为1000get:此线程池用于实时的GET请求。它的类型默认为fixed,size默认为可用处理器的数量,队列的size默认为1000。
bulk:此线程池用于批量操作。它的类型默认为fixed,size默认为可用处理器的数量,队列的size默认为50。
percolate:此线程池用于预匹配器操作。它的类型默认为fixed,size默认为可用处理器的数量,队列的size默认为1000

这里以index为例,可以在elasticsearch.yml中修改线程池配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
threadpool.index.type: fixed
threadpool.index.size: 100
threadpool.index.queue_size: 500

通过api控制

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -XPUT 'localhost:9200/_cluster/settings' -d '{
    "transient": {
        "threadpool.index.type": "fixed",
        "threadpool.index.size": 100,
        "threadpool.index.queue_size": 500
    }
}'

7、 若干副本shard分配不成功,集群状态yellow

7.1 先看看集群状态

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -XGET http://10.96.78.164:9200/_cluster/health?pretty

结果如下,如果有未分配的分片,unassigned_shards应该不为0,status=yellow。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
"cluster_name": "elasticsearch",
"status": "green",
"timed_out": false,
"number_of_nodes": 1,
"number_of_data_nodes": 1,
"active_primary_shards": 575,
"active_shards": 575,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 0,
"delayed_unassigned_shards": 0,
"number_of_pending_tasks": 0,
"number_of_in_flight_fetch": 0,
"task_max_waiting_in_queue_millis": 0,
"active_shards_percent_as_number": 100
}

7.2 查看未分配的shard属于哪个index,以及allocate的目标机器是哪个。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -XGET http://localhost:9200/_cat/shards | grep UNASSIGNED

结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
xiankan_xk_qdhj                  3 r UNASSIGNED    0    261b 10.96.78.164 yfbf9D3
xiankan_xk_qdhj                  2 r UNASSIGNED    0    261b 10.96.78.164 yfbf9D3
xiankan_xk_qdhj                  1 r UNASSIGNED    0    261b 10.96.78.164 yfbf9D3
xiankan_xk_qdhj                  4 r UNASSIGNED    0    261b 10.96.78.164 yfbf9D3

r-表示副本分片,p是主分片,ip是分配目标机器

7.3 尝试1:索引级别的副本重新分配

有问题的索引,先关闭其副本,然后打开重新分配副本。

关闭

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -PUT http://35.1.4.129:9200/xiankan_xk_zjhj/_settings -d '{
  "index": {
    "number_of_replicas" : 0
  }    
}'

打开

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://10.96.78.164:9200/xiankan_xk_zjhj/_settings -d '{
  "index": {
    "number_of_replicas": 1
  }
}'

7.4 尝试2:node级别的副本重新分配

重启shard分配不成功的node,如果shard分布在为数不多的几个node上,可以根据ip重启node上的es实例

杀死es

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ps -ef | grep elasticsearch | grep -v grep | awk '{print $2}' | xargs kill -9

启动es

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./bin/elasticsearch -d

7.5 尝试3:逐个索引shard的reroute

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl -XPOST 'localhost:9200/_cluster/reroute' -d '{
"commands" : [ {
"allocate" : {
"index" : "xiankan_xk_zjhj",
"shard" : 1,
"node" : "yfbf9D3",
"allow_primary" : true
}
}
] }'
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-03-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
万文Elasticsearch巧妙的架构详解
本书作为 Elastic Stack 指南,关注于 Elasticsearch 在日志和数据分析场景的应用,并不打算对底层的 Lucene 原理或者 Java 编程做详细的介绍,但是 Elasticsearch 层面上的一些架构设计,对我们做性能调优,故障处理,具有非常重要的影响。
大数据老哥
2022/02/17
7670
万文Elasticsearch巧妙的架构详解
深入浅出 spring-data-elasticsearch 之 ElasticSearch 架构初探(一)
本文目录 一、Elasticsearch 基本术语 1.1 文档(Document)、索引(Index)、类型(Type)文档三要素 1.2 集群(Cluster)、节点(Node)、分片(Shard)分布式三要素 二、Elasticsearch 工作原理 2.1 文档存储的路由 2.2 如何健康检查 2.3 如何水平扩容 三、小结 一、Elasticsearch 基本术语 1.1 文档(Document)、索引(Index)、类型(Type)文档三要素 文档(Document) 文档,在面向对象观念就是一个对象。在 ES 里面,是一个大 JSON 对象,是指定了唯一 ID 的最底层或者根对象。文档的位置由 _index、_type 和 _id 唯一标识。 索引(Index) 索引,用于区分文档成组,即分到一组的文档集合。索引,用于存储文档和使文档可被搜索。比如项目存索引 project 里面,交易存索引 sales 等。 类型(Type) 类型,用于区分索引中的文档,即在索引中对数据逻辑分区。比如索引 project 的项目数据,根据项目类型 ui 项目、插画项目等进行区分。 和关系型数据库 MySQL 做个类比: Document 类似于 Record Type 类似于 Table Index 类似于 Database 1.2 集群(Cluster)、节点(Node)、分片(Shard)分布式三要素 集群(Cluster) 服务器集群大家都知道,这里 ES 也是类似的。多个 ElasticSearch 运行实例(节点)组合的组合体是 ElasticSearch 集群。 ElasticSearch 是天然的分布式,通过水平扩容为集群添加更多节点。 集群是去中心化的,有一个主节点(Master)。主节点是动态选举,因此不会出现单点故障。 那分片和节点的配置呢? 节点(Node) 一个 ElasticSearch 运行实例就是节点。顺着集群来,任何节点都可以被选举成为主节点。主节点负责集群内所以变更,比如索引的增加、删除等。所以集群不会因为主节点流量的增大成为瓶颈。因为任何节点都会成为主节点。 下面有 3 个节点,第 1 个节点有:2 个主分片和 1 个副分片。如图:
二哥聊运营工具
2021/12/17
5770
深入浅出 spring-data-elasticsearch 之 ElasticSearch 架构初探(一)
ElasticSearch- 单节点 unassigned_shards 故障排查
在部署ELK的单机环境,当连接Kibana时候提示下面错误,即使重启整个服务也是提示Kibana server is not ready.
DevOps在路上
2023/05/16
1.2K0
干货 | Elasticsearch 集群健康值红色终极解决方案
题记 Elasticsearch当清理缓存( echo 3 > /proc/sys/vm/drop_caches )的时候,出现 如下集群健康值:red,红色预警状态,同时部分分片都成为灰色。
铭毅天下
2018/03/20
4.1K0
干货 | Elasticsearch 集群健康值红色终极解决方案
Windows下ElasticSearch学习(二)
今天继续学习ES 在Windows 下的使用,主要是通过curl 命令行来操作ES: 备注:说明一下ES 的版本为6.8.8.
Wu_Candy
2022/07/04
2680
解决Elasticsearch分片未分配的问题「译」
在Elasticsearch中,健康的群集是一个平衡的群集:主分片和副本分布在所有节点上,以保证有节点故障时的持久可靠性。
后场技术
2020/09/03
8K0
解决Elasticsearch分片未分配的问题「译」
Elasticsearch分片、副本与路由(shard replica routing)
本文讲述,如何理解Elasticsearch的分片、副本和路由策略。 1、预备知识 1)分片(shard) Elasticsearch集群允许系统存储的数据量超过单机容量,实现这一目标引入分片策略shard。在一个索引index中,数据(document)被分片处理(sharding)到多个分片上。Elasticsearch屏蔽了管理分片的复杂性,使得多个分片呈现出一个大索引的样子。 2)副本(replica) 为了提升访问压力过大是单机无法处理所有请求的问题,Elasticsearch集群引入了副本策略r
用户1225216
2018/03/05
2.6K0
Elasticsearch分片、副本与路由(shard replica routing)
提高ElasticSearch插入数据性能 转
  正常的真实环境es集群都是有副本数的,如果在大量插入数据的情况下面,副本拷贝其实会使插入速度变慢的,根据业务情况,可以考虑取消replias(复制分片),等数据插入结束以后再进行更新操作,设置复制分片。此方法可使插入速度提高一倍,shard刷新间隔,以及多线程和es批插入都可以提高效率等等。
双面人
2019/04/10
1.8K0
ElasticSearch最全详细使用教程:入门、索引管理、映射详解
墨墨导读:本文介绍了ElasticSearch的必备知识:从入门、索引管理到映射详解。
数据和云
2019/08/12
3.2K0
ElasticSearch最全详细使用教程:入门、索引管理、映射详解
单机版es中index状态为yellow问题处理
索引初始化脚本中,设置的 索引的分片副本数为 1 ,而单机版es,索引的分片副本无处安放,导致索引/集群状态为 yellow
IT小马哥
2023/10/08
7370
干货 | Elasticsearch集群黄色原因的终极探秘
绿色——最健康的状态,代表所有的主分片和副本分片都可用; 黄色——所有的主分片可用,但是部分副本分片不可用; 红色——部分主分片不可用。(此时执行查询部分数据仍然可以查到,遇到这种情况,还是赶快解决比较好。
铭毅天下
2018/08/14
2.6K0
干货 | Elasticsearch集群黄色原因的终极探秘
Elasticsearch 最佳实践系列之分片恢复并发故障
大家好,今天为大家分享一次 ES 的填坑经验。主要是关于集群恢复过程中,分片恢复并发数调整过大导致集群 hang 住的问题。
黄华
2018/12/10
6.9K0
Elasticsearch 最佳实践系列之分片恢复并发故障
yyds,Elasticsearch Template自动化管理新索引创建
Elasticsearch Template是一种将预定义模板应用于新索引的功能。在索引创建时,它可以自动为新索引应用已定义的模板。Template功能可用于定义索引的映射、设置和别名等。它是一种自动化管理索引创建的方式,使用户可以在大量索引上快速而一致地应用模板。
MCNU云原生
2023/03/17
8570
yyds,Elasticsearch Template自动化管理新索引创建
【docker专题_01】docker搭建elasticsearch集群 -
注意:云服务器需要设置安全策略放行9200,9300,9301,9302,9303,9304端口,否则访问失败;
夏之以寒
2024/03/04
3410
【Z投稿】Zabbix使用Elasticsearch存储历史数据
Zabbix 3.4.6版本开始支持历史数据存储到Elasticsearch, 适合数据量较大的用户。
Zabbix
2021/02/03
1.4K0
Elasticsearch入门,这一篇就够了
Elasticsearch(简称ES)是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。
sunsky
2020/08/20
7530
elasticsearch 一些使用的记录
Elasticsearch 是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
用户4945346
2020/06/30
4840
ElasticSearch常用命令
ElasticSearch用作全文检索,一直没有好好研究它的命令,每次使用的时候都要谷歌搜索,效率太低。 本文把一些特别常用的运维及操作命令整理一下,方便归类记忆 状态查询 获取所有_cat系列的操作 curl http://localhost:9200/_cat =^.^= /_cat/allocation /_cat/shards /_cat/shards/{index} /_cat/master /_cat/nodes /_cat/tasks /_cat/indices /_cat/indice
十毛
2019/03/27
1.1K0
触类旁通Elasticsearch:管理
(1)创建模板 当待创建的索引与之前的索引有相同的设置和映射时,非常适合使用索引模板。正如其名,索引模板将会用于和预定义名称模式相匹配的索引创建,以确保所有匹配索引的设置一致。例如:
用户1148526
2019/05/25
1K0
Elasticsearch 集群和索引健康状态及常见错误说明
之前在IDC机房线上环境部署了一套ELK日志集中分析系统, 这里简单总结下ELK中Elasticsearch健康状态相关问题, Elasticsearch的索引状态和集群状态传达着不同的意思。
洗尽了浮华
2019/05/25
4.5K0
相关推荐
万文Elasticsearch巧妙的架构详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验