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$ ...
随机推荐
- CMDB(Configuration Management Database)资产管理系统和 运维自动化
一.传统运维方式和自动化运维的区别 二.CMDB的介绍 三.CMDB的四种方式 四.项目的目录架构介绍以及配置文件的升级编写 五.比较low的项目架构书写 六.可插拔式收集资产 七.对收集的服务器信息 ...
- 4月22日MySQL学习
前面学习的知识基本都是概念知识没有什么代码,然后还有图形界面来辅助学习. 今天学习了MySQL的存储引擎,最常用的两种 MYISAM:不支持事务,也不支持外键,但是访问速度快. INNODB:支持事务 ...
- STL用法整理
百度百科 STL是Standard Template Library的简称,中文名标准模板库,惠普实验室开发的一系列软件的统称.从根本上说,STL是一些“容器”的集合,这些“容器”有list,vect ...
- BUGKU Misc 普通的二维码
下载的文件是一个bmp文件,在我的印象中bmp好像没有什么隐写技巧,有些慌张. 既然是二维码,那不妨先扫一下试一试 哈哈!就不告诉你flag在这里! 嗯,意料之中 1首先我把它放到了stegosolv ...
- AutoCAD .NET Wizard下载地址
懒人可以直接点击下面的链接: https://www.autodesk.com/developer-network/platform-technologies/autocad 在页面最低端找到相应 ...
- What Kind of Friends Are You? ZOJ 3960
比赛的时候用vector交集做的...情况考虑的不全面 wrong到疯 赛后考虑全了情况....T了 果然 set_intersection 不能相信 嗯 不好意思 交集a了 第二个代码 求出来 ...
- linux的/etc/profile、~/.profile、~/.bashrc、~./bash_profile这几个配置文件
在添加环境变量的时候,我们会去修改配置文件 如果留意过,网上博文,有些在/etc/profile文件中配置的,有些是在~./bash_profile文件中配置的,等等 那么,/etc/profile. ...
- CPU监控
题目描述 Bob需要一个程序来监视CPU使用率.这是一个很繁琐的过程,为了让问题更加简单,Bob会慢慢列出今天会在用计算机时做什么事. Bob会干很多事,除了跑暴力程序看视频之外,还会做出去玩玩和用鼠 ...
- 什么是GPIO?
”通用输入/输出口”(GPIO)是一个灵活的由软件控制的数字信号.他们可由多种芯片提供,且对于从事嵌入式和定制硬件的Linux开发者来说是比较熟 悉.每个GPIO都代表一个连接到特定引脚或球栅阵列(B ...
- 解决cuvid中的sample编译和链接问题
unzip Video_Codec_SDK_9.0.20.zip cd Video_Codec_SDK_9.0.20/Samples/AppDecode/AppDecImageProvider vi ...