这篇博客记录这一些运维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一些使用笔记(持续更新)的更多相关文章

  1. BLE资料应用笔记 -- 持续更新

    BLE资料应用笔记 -- 持续更新 BLE 应用笔记 小书匠 简而言之,蓝牙无处不在,易于使用,低耗能和低使用成本.'让我们'更深入地探索这些方面吧. 蓝牙无处不在-,您可以在几乎每一台电话.笔记本电 ...

  2. [读书]10g/11g编程艺术深入体现结构学习笔记(持续更新...)

    持续更新...) 第8章 1.在过程性循环中提交更新容易产生ora-01555:snapshot too old错误.P257 (这种情况我觉得应该是在高并发的情况下才会产生) 假设的一个场景是系统一 ...

  3. react-native-storage 使用笔记 持续更新

    React-native-storage是在AsyncStorage之上封装的一个缓存操作插件库,刚开始接触这个也遇到了一些问题,在这里简单记录总结一下,碰到了就记下来,持续更新吧 1.安卓下stor ...

  4. 数据分析之Pandas和Numpy学习笔记(持续更新)<1>

    pandas and numpy notebook        最近工作交接,整理电脑资料时看到了之前的基于Jupyter学习数据分析相关模块学习笔记.想着拿出来分享一下,可是Jupyter导出来h ...

  5. BLE资料应用笔记 -- 持续更新(转载)

    简而言之,蓝牙无处不在,易于使用,低耗能和低使用成本.’让我们’更深入地探索这些方面吧. 蓝牙无处不在—,您可以在几乎每一台电话.笔记本电脑 .台式电脑和平板电脑中找到蓝牙.因此,您可以便利地连接键盘 ...

  6. Semantic ui 学习笔记 持续更新

    这个semantic 更新版本好快~ 首先是代码的标识<code></code> 具体样式就是红框这样的 圈起来代码感觉不错 不过要在semantic.css里在加上如下样式~ ...

  7. Git学习笔记(持续更新)

    1.强制同步为远程的代码 远程仓库回退了commit的情况下(第2条描述之情况),强制同步远程的代码到本地 #更新远程最新的所有代码,但是不merge或者rebase git fetch --all ...

  8. web前端开发随手笔记 - 持续更新

    本文仅为个人常用代码整理,供自己日常查阅 html 浏览器内核 <!--[if IE]><![endif]--> <!--[if IE 6]><![endif ...

  9. Codeforces/TopCoder/ProjectEuler/CodeChef 散题笔记 (持续更新)

    最近做到了一些有趣的散题,于是开个Blog记录一下吧… (如果有人想做这些题的话还是不要看题解吧…) 2017-03-16 PE 202 Laserbeam 题意:有一个正三角形的镜子屋,光线从$C$ ...

随机推荐

  1. CMDB(Configuration Management Database)资产管理系统和 运维自动化

    一.传统运维方式和自动化运维的区别 二.CMDB的介绍 三.CMDB的四种方式 四.项目的目录架构介绍以及配置文件的升级编写 五.比较low的项目架构书写 六.可插拔式收集资产 七.对收集的服务器信息 ...

  2. 4月22日MySQL学习

    前面学习的知识基本都是概念知识没有什么代码,然后还有图形界面来辅助学习. 今天学习了MySQL的存储引擎,最常用的两种 MYISAM:不支持事务,也不支持外键,但是访问速度快. INNODB:支持事务 ...

  3. STL用法整理

    百度百科 STL是Standard Template Library的简称,中文名标准模板库,惠普实验室开发的一系列软件的统称.从根本上说,STL是一些“容器”的集合,这些“容器”有list,vect ...

  4. BUGKU Misc 普通的二维码

    下载的文件是一个bmp文件,在我的印象中bmp好像没有什么隐写技巧,有些慌张. 既然是二维码,那不妨先扫一下试一试 哈哈!就不告诉你flag在这里! 嗯,意料之中 1首先我把它放到了stegosolv ...

  5. AutoCAD .NET Wizard下载地址

      懒人可以直接点击下面的链接: https://www.autodesk.com/developer-network/platform-technologies/autocad 在页面最低端找到相应 ...

  6. What Kind of Friends Are You? ZOJ 3960

    比赛的时候用vector交集做的...情况考虑的不全面  wrong到疯 赛后考虑全了情况....T了 果然 set_intersection  不能相信 嗯 不好意思 交集a了  第二个代码 求出来 ...

  7. linux的/etc/profile、~/.profile、~/.bashrc、~./bash_profile这几个配置文件

    在添加环境变量的时候,我们会去修改配置文件 如果留意过,网上博文,有些在/etc/profile文件中配置的,有些是在~./bash_profile文件中配置的,等等 那么,/etc/profile. ...

  8. CPU监控

    题目描述 Bob需要一个程序来监视CPU使用率.这是一个很繁琐的过程,为了让问题更加简单,Bob会慢慢列出今天会在用计算机时做什么事. Bob会干很多事,除了跑暴力程序看视频之外,还会做出去玩玩和用鼠 ...

  9. 什么是GPIO?

    ”通用输入/输出口”(GPIO)是一个灵活的由软件控制的数字信号.他们可由多种芯片提供,且对于从事嵌入式和定制硬件的Linux开发者来说是比较熟 悉.每个GPIO都代表一个连接到特定引脚或球栅阵列(B ...

  10. 解决cuvid中的sample编译和链接问题

    unzip Video_Codec_SDK_9.0.20.zip cd Video_Codec_SDK_9.0.20/Samples/AppDecode/AppDecImageProvider vi ...