我们最近面临着多次停机,尤其是在批量索引几个小时之后。为了避免进一步的停机时间,我们暂时禁用了批量索引并添加了另一个节点。现在停机时间已停止,但 6 个节点中的两个永久保留在 JVM 堆中
我们目前有一个 6 节点集群(以前是 5 个),每个集群都是 EC2 c3.2xlarge,具有 16 GB 内存、8 GB JVM 堆,所有主数据。我们使用的是 Elasticsearch 1.5.2,它有已知的问题,如 [OOM 抛出在合并线程上](https://issues.apache.org/jira/browse/LUCENE-6670 OOM 抛出在合并线程上),我们经常遇到同样的问题。
搜索和自动建议有两个主要索引,其文档计数/大小如下所示:
运行状况索引 pri 代表 docs.count docs.delete store.size
绿色开放聚合 5 0 16507117 3653185 46.2GB 绿色开放 index_v10 5 0 3445495 693572 44.8GB
理想情况下,我们为每个索引至少保留一个副本,但我们上次尝试添加具有 5 个节点的副本会导致 OOM 错误和堆满,因此我们将其转回 0。我们还在上午 12-6 点之间运行了两个批量更新作业,每个作业每天更新大约 300 万个包含 2-3 个字段的文档。他们计划在凌晨 1:30 和 4:30,每个都使用 bash 脚本向 BULK API 发送包含 100 个文档(大小约为 12 KB)的批量提要,每个脚本之间的睡眠时间为 .25 秒,以避免过多的并行请求。当我们开始批量更新时,我们每天最多更新 200 万个文档,但文档在短时间内几乎翻了一番(达到 380 万),我们开始看到搜索响应时间峰值主要在凌晨 4 点到 6 点之间,有时甚至更晚。我们的平均搜索响应时间也从 60-70 毫秒增加到 150 毫秒。一周前,master 由于 ping 超时而离开,不久之后我们收到了一个索引的分片失败错误。在进一步调查时,我们发现无法访问此特定分片的数据。为了避免数据的不可用,我们重新启动了节点并重新索引了数据。
但是,节点停机发生了很多次,每次分片都进入未分配或正在初始化状态。我们最终删除了索引并重新开始。但是,繁重的索引再次带来了内存不足错误和节点停机,以及相同的分片问题和数据丢失。为了避免进一步的停机,我们停止了所有批量作业,并以非常慢的速度重新索引数据。
我们还添加了一个节点来分配负载。然而,目前我们有 3 个节点,JVM 始终高于 75%,2 个始终为 80%。我们注意到这些节点上的段数及其大小相对较高(约 5 GB),但对这些节点使用优化索引可能会再次增加堆,并有可能停机。
另一个需要注意的重要点是,我们的tomcat应用程序只命中了所有节点中的3个(用于正常搜索和索引),另外两个节点中的大多数用于批量索引。因此,在三个查询索引接收节点中,一个节点和用于批量索引的左侧节点具有相对较高的堆。
我们的配置和索引方法存在以下已知问题,计划修复这些问题:
Elasticsearch yml:(仅提及相关和启用的设置)
大师:真
index.number_of_shards:5
index.number_of_replicas:2
path.conf: /etc/elasticsearch
path.data: /data
transport.tcp.port: 9300
transport.tcp.compress: false
http.port: 9200
http.enabled: true
网关类型:本地
gateway.recover_after_nodes:2
gateway.recover_after_time:5M
gateway.expected_nodes:3
discovery.zen.minimum_master_nodes:4
# 现在我们有 6 个节点 发现.zen.ping.timeout: 3s
discovery.zen.ping.multicast.enabled: false
节点统计信息:粘贴链接 热线程:粘贴链接
如果我理解得很好,你有 6 台服务器,每台服务器都在运行 elasticsearch 节点。
我要在每个服务器上运行多个节点,分离角色、充当客户端的节点、充当数据节点的节点和充当主节点的节点。我认为您可以在每台服务器上有两个节点。
3 台服务器:数据客户端
3 台服务器:数据主服务器
客户端节点和主节点将需要较少的 RAM。配置文件会更复杂,但会更好地工作。
问题内容: 在使用Jenkins Docker插件时,可能由于错误而导致无法启动群集。我没有注意,目前有数千个脱机节点无法启动。 底线-是否可以批量删除Jenkin中的节点(从属),清理所有脱机节点甚至删除所有节点?重置Jenkins服务器没有帮助,而且我在Jenkins API中找不到方法。 在我开始编写Selenium脚本之类的东西之前,请感谢任何想法。 非常感谢! 问题答案: 该脚本的注释部
我来自C/C++背景,在这里一个进程内存分为: null 我想把我的注意力集中在这一点上,当我阅读JVM中的堆和堆栈时,我们是在谈论堆栈和堆的概念吗?并且整个JVM的实际内存驻留在堆上(这里指的是堆的C++概念)?
问题内容: 我正在使用reactFire,Firebase和reactJS构建一个简单的待办事项应用程序。我遇到的问题是当我尝试批量删除列表中已完成的条目时。 该循环过早结束,即在删除所有完成的条目之前,因为调用了render函数。 问题答案: 您可以使用多位置更新一次性删除所有已完成的项目:
我正在努力学习RCP中的TreeViewer。我为此写了一小段代码。 我的代码哪里有问题? 谢了!
问题内容: 我在本地计算机上使用elasticsearch。数据目录的大小只有37MB,但是当我查看日志时,可以看到: [2015-05-17 21:31:12,905] [WARN] [cluster.routing.allocation.decider] [Chrome]高磁盘水印在[h9P4UqnCR5SrXxwZKpQ2LQ]上超过了[10%] [Chrome]免费:5.7gb [6.1%
本文向大家介绍jQuery实现checkbox即点即改批量删除及中间遇到的坑,包括了jQuery实现checkbox即点即改批量删除及中间遇到的坑的使用技巧和注意事项,需要的朋友参考一下 最近要用jQuery实现一个批量删除操作,效果如下图 最终页面page.html,此页面使用了bootstrap和jQuery,如果没有需要下载一下 上图的操作主要需要两个操作: 一、当checkBox点击时进
我一直在获取x,下一个在节点中有私人访问权限。我试着在Node类和link List类中进行切换,但无论切换什么,都会出现相同的错误。我的节点保存在另一个文件中,看起来是这样的:`` 然后我的链表堆栈代码如下:
在基于UNIX的操作系统中,每个文件都由一个Inode索引。 Inode是创建文件系统时创建的特殊磁盘块。 文件系统中的文件或目录数量取决于文件系统中的Inode数量。 Inode包含以下信息 - 文件的属性(权限,时间戳,所有权详细信息等) 包含指向文件的前12个块的指针的多个直接块。 指向索引块的单个间接指针。 如果文件不能被直接块完全索引,则使用单个间接指针。 指向磁盘块的双重间接指针,该磁