环境:elasticsearch 6.1
Nodes: 4(master+data)
Indices: 3352
Memory: 51GB / 123GB
Total Shards: 33379
Documents: 1,456,904,986
Data: 492GB
数据:除了xpack 监控索引有写入,其他索引全部没有写入,可以说是冷数据
场景:对某个节点的 searchguard 源码做了一些调整,替换它一个jar 包,然后重启该节点
重启之前操作:
重启后操作:
问题来了
按照正常来讲,我的数据并没有写入,在重启后绝大部分数据应该在该节点的磁盘中直接提取,但是现实是该节点重启后完全在其他节点拿数据,这个难道是因为在重启之前没有执行/_flush/synced????这是我的第一个问题
好,反正数据量不大,一两百个G的数据恢复起来应该也很快的,结果从上午9点开始到现在还没有恢复到一半
我在想是不是应该多给些资源,然后给了以下配置
想问我是哪里搞错了吗
Nodes: 4(master+data)
Indices: 3352
Memory: 51GB / 123GB
Total Shards: 33379
Documents: 1,456,904,986
Data: 492GB
数据:除了xpack 监控索引有写入,其他索引全部没有写入,可以说是冷数据
场景:对某个节点的 searchguard 源码做了一些调整,替换它一个jar 包,然后重启该节点
重启之前操作:
#关闭集群分片自动分配
PUT _cluster/settings
{
"persistent": {
"cluster": {
"routing": {
"allocation.enable": "none"
}
}
}
}
#设置刷新时间
PUT */_settings
{
"refresh_interval": -1
}
然后替换了jar 包 重启了节点,重启后操作:
#打开集群分片自动分配
PUT _cluster/settings
{
"persistent": {
"cluster": {
"routing": {
"allocation.enable": "all"
}
}
}
}
问题来了
按照正常来讲,我的数据并没有写入,在重启后绝大部分数据应该在该节点的磁盘中直接提取,但是现实是该节点重启后完全在其他节点拿数据,这个难道是因为在重启之前没有执行/_flush/synced????这是我的第一个问题
好,反正数据量不大,一两百个G的数据恢复起来应该也很快的,结果从上午9点开始到现在还没有恢复到一半
我在想是不是应该多给些资源,然后给了以下配置
#增加重新分配的最大负载
PUT /_cluster/settings
{
"persistent" : {
"indices.recovery.max_bytes_per_sec" : "600mb"
}
}
#允许在节点上发生多少并发传出分片恢复
PUT /_cluster/settings
{
"persistent" : {
"cluster": {
"routing": {
"allocation.cluster_concurrent_rebalance": 500
}
}
}
}
PUT _cluster/settings
{
"transient": {
"cluster.routing.allocation.node_concurrent_outgoing_recoveries": 500
}
}
PUT _cluster/settings
{
"transient": {
"cluster": {
"routing": {
"allocation.node_initial_primaries_recoveries": 18
}
}
}
}
以为会快些,其实一点影响也没有,还是很慢想问我是哪里搞错了吗
4 个回复
kennywu76 - Wood
赞同来自: juin
用 GET /_cat/recovery?active_only=true 确认下高耗时的recovery是哪种类型,是否的确在拷贝文件,还是做translog recovery。
从你贴的监控图表看,集群状态监控数据有很多间歇性的断点,也就是说集群的结点状态数据经常获取超时, 比较怀疑master有大量的pending tasks在排队等待处理,可以用GET /_cat/pending_tasks 确认下。
如果pending tasks很多,更改集群设置的操作有可能会超时没生效,所以GET一下集群的settings看更改是否生效。
还有6.1这个版本存在translog flush的一些bug,比如:
https://github.com/elastic/ela ... 28350
6.2.4以后的版本做了这个修复:
https://github.com/elastic/ela ... 29125
如果正在执行的恢复存在长时间的translog recovery,可以看下恢复的目标结点上是否大量的translog文件生成, 以防触发了上面的bug.
juin - 大数据开发
赞同来自:
找到wood 大叔写的一篇分享
核心是:
暂停数据写入程序
关闭集群shard allocation
手动执行POST /_flush/synced
重启结点
重新开启集群shard allocation
等待recovery完成,集群health status变成green
重新开启数据写入程序
也是提到了_flush/synced手动synced flush,第一个问题的原因 应该就是这个了吧
...
zhangrui90 - z
赞同来自:
juin - 大数据开发
赞同来自:
这是集群设置
现在有个节点重启后无法加入集群,一直就是
然后集群各节点都能收到加入集群的请求