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$ ...
随机推荐
- [百度百科]dir命令指定显示的排序方式
https://jingyan.baidu.com/article/7c6fb428dcf39880642c9095.html 今天工作中遇到了这个需求 感觉很好用 dir /o:d >name ...
- oracle密码过期
1.使用sys,以sysdba登录. sqlplus /nolog conn sys/123456 as sysdba 2.将密码有效期由默认的180天修改成“无限制”,修改之后不需要重启动数据库,会 ...
- Git-01-上传项目到github
function fun1(){ Git上传项目到github Folder-->Git bash here Execute command: --git clone 仓库地址 多出一个 ...
- Android Intent 传递数据注意事项
不要通过 Intent 在 Android 基础组件之间传递大数据(binder transaction缓存为 1MB),可能导致 OOM.
- Java 8 特性 —— Stream
Stream 是用函数式编程方式在集合类上进行复杂操作的工具,其集成了Java 8 中的众多新特性之一的聚合操作,开发者可以更容易地使用Lambda表达式,并且更方便地实现对集合的查找.遍历.过滤以及 ...
- 查看macOS下正在使用的zsh
使用dscl . -read /Users/$USER UserShell查看 如果你的结果是/bin/zsh,又恰巧用brew安装了zsh的话,那么你可能就白安装了 将brew安装的zsh添加到/e ...
- Spring Boot学习总结三
1,mybatis在spring boot下的2种使用模式 无配置文件注解版 application.properties添加相关配置 mybatis.type-aliases-package=com ...
- 安卓上用Termux终端模拟器安装MC Forge 1.12.2服务器!
本教程重度新手向,大神勿喷(因为楼主本人就是Linux小白)! 为了让教程合乎简约至上的原则,将不在基本操作上赘述 测试环境:酷派大神Note3 Android5.0 2GBRAM 未root 截图是 ...
- laravel 配置MySQL读写分离
前言:说到应对大流量.高并发的解决方案的时候,总会有这样的回答,如:读写分离,主从复制...等,数据库层今天先不讨论,那么今天我们就来看看怎么在应用层实现读写分离. 框架:laravel5.7(所有配 ...
- vue路由实现多视图的单页应用
多视图的单页应用:在一个页面中实现多个页面不同切换,url也发生相应变化. router-view结合this.$router.push("/pickUp")实现,效果如下: 当点 ...