es集群一个节点多次重启问题分析
此时集群请求重新响应至该节点,待业务量逐渐上升至超过该es服务的承受能力,es服务又开始之前切换状态的操作,循环往复,直至集群的业务量下降,服务状态变为started并不再发生变化。1.节点的ram.percent内存使用率为99%和100%,合理的服务器内存使用率是60%~80%,超出正常使用范围。问题节点多次离线,因为主节点每30秒会去检查其他节点的状态,如果任何节点的垃圾回收时间超过30秒,
问题现象
elastichsearch集群中一节点多次重启,服务的状态一直在down、starting、started之间来回切换
查看节点日志未发现节点进程挂掉报错的原因,现场做了保活的操作,未手动启动关闭服务。
问题节点安装的另一个集群的es服务运行正常。
状态切换的时间段如下:
据现场反馈es请求配置的为集群所有节点ip
问题分析
1.正常节点统计信息
主机内存使用 锯齿状波动
主机load<30
主机磁盘使用 1次100%
2.异常节点的统计信息
主机内存使用 平稳
主机load<400
主机磁盘使用 多次100%
3.从统计图来看
1.内存波动来看是在内存使用紧张时进行垃圾回收释放内存
2.磁盘带宽使用率达到100%的情况下会严重影响读写操作,es的主要功能就是读写。
4.问题节点elasticsearch服务的启动日志
根据现场提供的master节点、问题节点和正常节点的日志来看:
问题节点多次离线,因为主节点每30秒会去检查其他节点的状态,如果任何节点的垃圾回收时间超过30秒,
则会导致主节点任务该节点脱离集群。
5.从es服务节点信息来看
get _cat/nodes?h=ip,cpu,hp,rp,fm,sm,qcm,sqti,rc,rm,dt,du&v
curl -s “ip:9200/_cat/nodes?h=ip,hp,rp,rc,rm,fm,sm,sc,qcm,sqti,dt,du&v”
ip:node.ip
cpu:cpu使用率
hp:堆内存使用
rp:ram.percent,总内存使用量百分比,保持在75%以下最好
rc:Used total memory,使用总内存大小
rm:ram.max:总内存大小
fm:fielsdata.sizeMemoey:字段缓存
sm:segment.memory:segment使用的内存
sc:segments.count:segment的数量
qcm:query_cache.memory_size:查询缓存的内存使用
sqti:search.query_time:查询总用时
dt:disk.total:所有磁盘空间
du:disk.used:使用的磁盘空间
1.节点的ram.percent内存使用率为99%和100%,合理的服务器内存使用率是60%~80%,超出正常使用范围。
2.heap.percent堆内存使用率为50%+,最高未超过75%,虽然在正常范围之内但是仍然较高。
问题结论
结论:es问题节点安装了两个es实例和一个hive服务,其磁盘使用率、内存使用率均过高,
在业务量大的情况下,负载急剧上升,打开的文件句柄过多,导致系统资源耗尽从而无法及
时响应master节点的ping请求信息,进而该节点es服务被动下线,
服务状态转为down,此时节点负载逐渐下降至正常水平。由于es服务做了保活操作,
es开始启动,状态转为starting,待启动成功后,状态变为started。此时集群请求重新响应至该节点,待业务量逐渐上升至超过该es服务的承受能力,es服务又开始之前切换状态的操作,循环往复,直至集群的业务量下降,服务状态变为started并不再发生变化。
#建议:扩容,添加数据节点
扩容之前先停止分片重新分配
curl -H “Content-Type: application/json” -X PUT “http://ip:9200/_cluster/settings?pretty” -d ’
{
“transient”: {
“cluster.routing.allocation.enable”: “none”
}
}’
节点服务启动成功之后开启分配数据
curl -H “Content-Type: application/json” -X PUT “http://ip:9200/_cluster/settings?pretty” -d ’
{
“transient”: {
“cluster.routing.allocation.enable”: “all”
}
}’
更多推荐
所有评论(0)