一、集群可能出现的问题
- 节点开销:节点分布不均,某节点分配过多分片,成为集群瓶颈
- 节点宕机:原因较多,比如磁盘已满,硬件故障等
- 分片重定位问题或损坏:某些分片无法获得在线状态
- 分片太大:如分片过大,则由于合并大量Lucene段而导致索引性能下降
- 空索引和分片:这些东西浪费了内存和资源,由于每个分片都有很多活动线程,因此如果有大量未使用的索引和分片,则总体集群性能会降低
二、使用API控制集群的运行状况
- GET /_cluster/health :获取整个集群的运行情况
- GET /_cluster/health/index1,index2,indexN
三、使用API获取集群状态
- GET /_cluster/state
四、使用API获取集群节点信息(http,thread_pool,transport,jvm,os,process.....)
- GET /_nodes
- GET /_nodes/<nodeid1>,<nodeid2>
- GET /_nodes/os,plugins
五、通过API获取节点统计信息
- GET /_nodes/stats
- GET /_nodes/<nodeid1>,<nodeid2>/stats
- GET /_nodes/stats/os,http
索引相关的统计信息,操作系统统计信息,es进程统计信息,jvm统计信息,线程池相关统计信息,节点文件系统统计信息,节点间通信信息,Http连接有关信息,与断路器(Breaker)缓存有关统计信息,与脚本有关统计信息,集群队列ingest统计信息,adaptive_selection统计信息(自适应选择节点执行搜索)
六、使用任务管理API(获取任务,取消任务)
- GET /_tasks
- GET /_tasks?nodes=nodeid1,nodeid2
七、使用热点线程API
集群会由于CPU使用率高而减慢速度,es提供了监视热点线程(Hot Thread)的能力,以便了解问题出在哪里,热点线程会占用大量CPU且执行时间很长
- GET /_nodes/hot_threads
- GET /_nodes/{nodesids}/hot_threads
八、整理分片分配
- GET /_cluster/allocation/expain :获取有关未分配分片的当前状态信息,支持手动重新定位分片,从A节点转移到B节点
九、使用段API监控段
监视索引段(Index Segment)意味着监控索引的运动状况,获取有关段的数量及存储信息
- GET /{索引}/_segments
十、清理缓存
- POST /index/_cache/_clear 节点内存不足,可以手工执行
十一、其它集群优化方案(es原厂提供)
1、调整索引参数
"refresh_interval": "180s",
"translog": {
"flush_threshold_size": "1g",
"sync_interval": "90s",
"durability": "async"
},
2、减少Update次数
3、减少索引元数据字段
4、JVM垃圾回收器 CMS 改为 G1
-XX:InitiatingHeapOccupancyPercent=45
Sets the Java heap occupancy threshold that triggers a marking cycle. The default occupancy is 45 percent of the entire Java heap.
表示每次GC最大的停顿毫秒数
-XX:MaxGCPauseMillis=200
5、设置内存不能超过32G,否则无法使用指针引用
人生所有的烦恼、痛苦,都是来自于我们对不确定性的抗拒,其实我们唯一能做的就是拥抱不确定性。