Elasticsearch一些使用笔记(持续更新)
这篇博客记录这一些运维ES的一些经验。
1、节点磁盘使用率过高,导致ES集群shard无法分配,丢失数据?
有两个配置,分配副本的时候
参数名称 | 默认值 | 含义 |
cluster.routing.allocation.disk.watermark.low | 85% | 当节点磁盘占用量高于85%时,就不会往该节点分配副本了 |
cluster.routing.allocation.disk.watermark.high | 90% | 当节点磁盘占用量高于90%时,尝试将该节点的副本重分配到其他节点 |
配置方式
- 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
- {
- "aliases": {},
- "order": ,
- "template": "test*",
- "settings": {
- "index": {
- "priority": "",
- "merge": {
- "scheduler": {
- "max_thread_count": ""
- }
- },
- "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": "",
- "number_of_shards": "",
- "number_of_replicas": "",
- "translog": {
- "durability": "async"
- },
- "requests": {
- "cache": {
- "enable": "true"
- }
- },
- "mapping": {
- "ignore_malformed": "true"
- },
- "refresh_interval": "5s"
- }
- }
- }
配置方式
- curl -XPUT localhost:/_template/template_1 -d '
- {
- "template" : "test*",
- "order" : ,
- "settings" : {
- "number_of_shards" :
- },
- "mappings" : {
- "type1" : {
- "_source" : { "enabled" : false }
- }
- }
- }
- '
在配置了模板以后,如何建立索引
- # 索引创建
- curl -XPUT http://35.1.4.127:9200/index_name
3、mapping创建的一些注意事项
在创建索引type mapping的时候要妥善处理好_all和_source,不然会影响索引的性能。
_all,enable的话会把一个type中的所有字段合并成一个大字段,增加索引时间和大小。
_source,enable的话会请求会返回_source的结构体。
一般我们会禁用_all,打开_source。
另外,对时间的处理,可以如下这样,对于各种繁琐的时间格式都是支持的。
配置方式
- 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在索引数据的时候,如果有副本的话,会同步副本,造成压力。
等到数据索引完成后,在恢复副本。
配置方法
- // 关闭
curl -PUT http://35.1.4.129:9200/_settings -d '{- "index": {
- "number_of_replicas" :
- "refresh_interval" : -
- }
- }'
- // 打开
- curl -PUT http://35.1.4.129:9200/_settings -d '{
- "index": {
- "number_of_replicas" :
- "refresh_interval" : 5s
- }
- }'
5、jvm层面监控和优化
Elasticsearch是java开发的组件,当然可以压测看一下jvm的表现,例如通过jconsole远程连接。
config/jvm.options里面有各种jvm的配置,可以根据硬件资源合理配置一下。jvm调优就不说了。
- -Djava.rmi.server.hostname=192.168.1.152
- -Dcom.sun.management.jmxremote
- -Dcom.sun.management.jmxremote.port=
- -Dcom.sun.management.jmxremote.ssl=false
- -Dcom.sun.management.jmxremote.authenticate=false
6、高并发查询时,优化ES线程池
当你查询并发上来了,有时候你会发现下面这个异常
- EsRejectedExcutionException[rejected execution(queue capacity ) on.......]
这个原因是在新版本的elasticsearch中线程池已经是fixed类型了,即固定大小的线程池,默认是5*core数,当所有线程忙碌,且队列满的情况下,es会拒绝请求。
多种请求类型对应多种线程池
- index:此线程池用于索引和删除操作。它的类型默认为fixed,size默认为可用处理器的数量,队列的size默认为200。
- search:此线程池用于搜索和计数请求。它的类型默认为fixed,size默认为(可用处理器的数量* ) / ) + ,队列的size默认为1000。
- suggest:此线程池用于建议器请求。它的类型默认为fixed,size默认为可用处理器的数量,队列的size默认为1000。
- get:此线程池用于实时的GET请求。它的类型默认为fixed,size默认为可用处理器的数量,队列的size默认为1000。
- bulk:此线程池用于批量操作。它的类型默认为fixed,size默认为可用处理器的数量,队列的size默认为50。
- percolate:此线程池用于预匹配器操作。它的类型默认为fixed,size默认为可用处理器的数量,队列的size默认为1000。
这里以index为例,可以在elasticsearch.yml中修改线程池配置
- threadpool.index.type: fixed
- threadpool.index.size:
- threadpool.index.queue_size:
通过api控制
- curl -XPUT 'localhost:9200/_cluster/settings' -d '{
- "transient": {
- "threadpool.index.type": "fixed",
- "threadpool.index.size": ,
- "threadpool.index.queue_size":
- }
- }'
7、 若干副本shard分配不成功,集群状态yellow
7.1 先看看集群状态
- curl -XGET http://10.96.78.164:9200/_cluster/health?pretty
结果如下,如果有未分配的分片,unassigned_shards应该不为0,status=yellow。
- {
- "cluster_name": "elasticsearch",
- "status": "green",
- "timed_out": false,
- "number_of_nodes": ,
- "number_of_data_nodes": ,
- "active_primary_shards": ,
- "active_shards": ,
- "relocating_shards": ,
- "initializing_shards": ,
- "unassigned_shards": ,
- "delayed_unassigned_shards": ,
- "number_of_pending_tasks": ,
- "number_of_in_flight_fetch": ,
- "task_max_waiting_in_queue_millis": ,
- "active_shards_percent_as_number":
- }
7.2 查看未分配的shard属于哪个index,以及allocate的目标机器是哪个。
- curl -XGET http://localhost:9200/_cat/shards | grep UNASSIGNED
结果
- xiankan_xk_qdhj r UNASSIGNED 261b 10.96.78.164 yfbf9D3
- xiankan_xk_qdhj r UNASSIGNED 261b 10.96.78.164 yfbf9D3
- xiankan_xk_qdhj r UNASSIGNED 261b 10.96.78.164 yfbf9D3
- xiankan_xk_qdhj r UNASSIGNED 261b 10.96.78.164 yfbf9D3
r-表示副本分片,p是主分片,ip是分配目标机器
7.3 尝试1:索引级别的副本重新分配
有问题的索引,先关闭其副本,然后打开重新分配副本。
关闭
- curl -PUT http://35.1.4.129:9200/xiankan_xk_zjhj/_settings -d '{
- "index": {
- "number_of_replicas" :
- }
- }'
打开
- 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
- ps -ef | grep elasticsearch | grep -v grep | awk '{print $2}' | xargs kill -
启动es
- ./bin/elasticsearch -d
7.5 尝试3:逐个索引shard的reroute
- curl -XPOST 'localhost:9200/_cluster/reroute' -d '{
- "commands" : [ {
- "allocate" : {
- "index" : "xiankan_xk_zjhj",
- "shard" : ,
- "node" : "yfbf9D3",
- "allow_primary" : true
- }
- }
- ] }'
Elasticsearch一些使用笔记(持续更新)的更多相关文章
- BLE资料应用笔记 -- 持续更新
BLE资料应用笔记 -- 持续更新 BLE 应用笔记 小书匠 简而言之,蓝牙无处不在,易于使用,低耗能和低使用成本.'让我们'更深入地探索这些方面吧. 蓝牙无处不在-,您可以在几乎每一台电话.笔记本电 ...
- [读书]10g/11g编程艺术深入体现结构学习笔记(持续更新...)
持续更新...) 第8章 1.在过程性循环中提交更新容易产生ora-01555:snapshot too old错误.P257 (这种情况我觉得应该是在高并发的情况下才会产生) 假设的一个场景是系统一 ...
- react-native-storage 使用笔记 持续更新
React-native-storage是在AsyncStorage之上封装的一个缓存操作插件库,刚开始接触这个也遇到了一些问题,在这里简单记录总结一下,碰到了就记下来,持续更新吧 1.安卓下stor ...
- 数据分析之Pandas和Numpy学习笔记(持续更新)<1>
pandas and numpy notebook 最近工作交接,整理电脑资料时看到了之前的基于Jupyter学习数据分析相关模块学习笔记.想着拿出来分享一下,可是Jupyter导出来h ...
- BLE资料应用笔记 -- 持续更新(转载)
简而言之,蓝牙无处不在,易于使用,低耗能和低使用成本.’让我们’更深入地探索这些方面吧. 蓝牙无处不在—,您可以在几乎每一台电话.笔记本电脑 .台式电脑和平板电脑中找到蓝牙.因此,您可以便利地连接键盘 ...
- Semantic ui 学习笔记 持续更新
这个semantic 更新版本好快~ 首先是代码的标识<code></code> 具体样式就是红框这样的 圈起来代码感觉不错 不过要在semantic.css里在加上如下样式~ ...
- Git学习笔记(持续更新)
1.强制同步为远程的代码 远程仓库回退了commit的情况下(第2条描述之情况),强制同步远程的代码到本地 #更新远程最新的所有代码,但是不merge或者rebase git fetch --all ...
- web前端开发随手笔记 - 持续更新
本文仅为个人常用代码整理,供自己日常查阅 html 浏览器内核 <!--[if IE]><![endif]--> <!--[if IE 6]><![endif ...
- Codeforces/TopCoder/ProjectEuler/CodeChef 散题笔记 (持续更新)
最近做到了一些有趣的散题,于是开个Blog记录一下吧… (如果有人想做这些题的话还是不要看题解吧…) 2017-03-16 PE 202 Laserbeam 题意:有一个正三角形的镜子屋,光线从$C$ ...
随机推荐
- C#技巧记录——持续更新
作为一名非主修C#的程序员,在此记录下学习与工作中C#的有用内容,持续更新 对类型进行约束,class指定了类型必须是引用类型,new()指定了类型必须具有一个无参的构造函数 where T : cl ...
- JavaScript加载次序问题
3个文件,一个index.html如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&quo ...
- Linux(Ubuntu)使用日记------Mongodb的安装与使用
1.安装 Linux下安装mongodb还是比较容易的 直接使用apt-get安装即可,命令如下: sudo apt-get install mongodb 安装完成之后进行检验, “mongo sh ...
- 利用bootstrap-select.min.js实现bootstrap下拉列表的单选和多选
参考文章:https://blog.csdn.net/qq_37677519/article/details/78143522
- 使用react全家桶制作博客后台管理系统
前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基于react全家桶(React.React-r ...
- [洛谷P1392] 取数
无法用复杂状态进行转移时改变计算方式:巧妙的整体考虑:压缩空间优化时间 传送门:$>here<$ 题意 给出一个n*m矩阵,从每一行选一个数加起来,可以得到一个和.易知总共会有$n^n$个 ...
- abp添加动态菜单
abp中MenuDefinition封装了导航栏上的主菜单的属性,MenuItemDefinition则封装了子菜单的属性,子菜单可以引用其他子菜单构成一个菜单树. MenuDefinitio成员如下 ...
- CF235B Let's Play Osu! 期望DP
貌似是一道很裸的期望\(DP\).直接说思路: 设\(f[i]\)表示到\(i\)位置时的期望分数,但是只有\(f[i]\)的话我们发现是无法转移的,我们还需要知道到\(i\)位置时的期望连续长度,于 ...
- Redisson分布式锁实现
转: Redisson分布式锁实现 2018年09月07日 15:30:32 校长我错了 阅读数:3303 转:分布式锁和Redisson实现 概述 分布式系统有一个著名的理论CAP,指在一个分布 ...
- (五) vivi代码分析
目录 vivi代码分析 初始化注册 使用open/read/ioctl 系统调用分析 ioctl流程一览 总结 title: vivi代码分析 date: 2019/4/23 19:30:00 toc ...