Java 主分片不活动或不存在';分配的t是已知节点吗?
我正在windows 8上运行弹性搜索版本4.1。我试图通过java为文档编制索引。运行JUNIT测试时,错误如下所示Java 主分片不活动或不存在';分配的t是已知节点吗?,java,indexing,
elasticsearch,sharding,Java,Indexing,
elasticsearch,Sharding,我正在windows 8上运行弹性搜索版本4.1。我试图通过java为文档编制索引。运行JUNIT测试时,错误如下所示 org.elasticsearch.action.UnavailableShardsException: [wms][3] Primary shard is not active or isn't assigned is a known node. Timeout: [1m], request: index {[wms][video][AUpdb-bMQ3rfSDgdctGY]
org.elasticsearch.action.UnavailableShardsException: [wms][3] Primary shard is not active or isn't assigned is a known node. Timeout: [1m], request: index {[wms][video][AUpdb-bMQ3rfSDgdctGY], source[{
"fleetNumber": "45",
"timestamp": "1245657888",
"geoTag": "73.0012312,-123.00909",
"videoName": "timestamp.mjpeg",
"content": "ASD123124NMMM"
}]}
at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.retryBecauseUnavailable(TransportShardReplicationOperationAction.java:784)
at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.doStart(TransportShardReplicationOperationAction.java:402)
at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction$3.onTimeout(TransportShardReplicationOperationAction.java:500)
at org.elasticsearch.cluster.ClusterStateObserver$ObserverClusterStateListener.onTimeout(ClusterStateObserver.java:239)
at org.elasticsearch.cluster.service.InternalClusterService$NotifyTimeout.run(InternalClusterService.java:497)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)
我不明白,为什么会发生这种错误。当删除数据或索引时,它工作正常。
可能的原因是什么 您应该查看该链接: 特别是该部分: cluster.routing.allocation.disk.watermark.low控制低位 用于磁盘使用的水印。它默认为85%,这意味着ES不会 一旦节点的磁盘使用率超过85%,就将新碎片分配给节点。 还可以将其设置为绝对字节值(如500mb),以防止 如果小于配置的空间量,则阻止分配碎片 有空 cluster.routing.allocation.disk.watermark.high控制高 水印。它默认为90%,这意味着ES将尝试重新定位 如果节点磁盘使用率上升到90%以上,则将碎片发送到另一个节点。它可以 也可以设置为绝对字节值(类似于低水位线) 在小于配置的空间量的情况下重新定位碎片是非常困难的 在节点上可用
在我的案件中,罪犯是9300端口。它被封锁了 Elasticsearch将绑定到HTTP和 节点/传输API 它将首先尝试最低可用端口,如果已使用, 试试下一个。如果您在计算机上运行单个节点,则仅 绑定到9200和9300 所以我打开了9300端口,我可以走了 在REDHAT linux中取消阻止端口
sudo firewall-cmd --zone=public --add-port=9300/tcp --permanent
sudo firewall-cmd --reload
sudo iptables-save | grep 9300
我面临着完全相同的错误,在我的例子中,我有多个主节点和数据节点。主节点已添加到负载平衡器,但数据节点未添加。所以master无法与数据节点通信
当我将所有数据节点放入负载平衡器后,我的问题就解决了。问题:当磁盘空间超过时,elasticsearch似乎停止向kibana发送数据。您将获得
org.elasticsearch.action.unavailableshardexception
和超时,这是基于您的主碎片未处于活动状态的事实。为了加强理论,运行sudo df-h
,您可能会从机器中的/var/data
获得高百分比的数据量
解释:根据,Elasticsearch在决定是否将新碎片分配给该节点或主动将碎片重新定位到该节点之前,会考虑节点上的可用磁盘空间。要覆盖默认磁盘空间碎片分配,需要设置4个变量
1.群集.路由.分配.磁盘.阈值\u已启用默认为true。
设置为false可禁用磁盘分配决策器。
2.集群.路由.分配.磁盘.水印.低控制低
用于磁盘使用的水印。它默认为85%,这意味着
Elasticsearch不会将碎片分配给具有超过
使用了85%的磁盘。也可以将其设置为绝对字节值(如
500mb)以防止Elasticsearch在小于
指定的可用空间量。此设置无效
在新创建索引的主碎片上,但将阻止
无法分配副本
3.群集.路由.分配.磁盘.水印.高控制高
水印。它默认为90%,这意味着Elasticsearch将尝试
将碎片从磁盘使用率高于90%的节点重新定位。信息技术
也可以设置为绝对字节值(类似于低位
水印)如果节点的大小小于
指定的可用空间量。此设置会影响资源的分配
所有碎片,无论之前是否分配
4.群集、路由、分配、磁盘、水印、泛洪阶段控制
洪水位水印。它默认为95%,这意味着Elasticsearch
强制执行只读索引块(index.blocks.read\u only\u allow\u delete)
在节点上分配了一个或多个碎片的每个索引上
至少有一个磁盘超过洪泛水位。这是万不得已的办法
以防止节点耗尽磁盘空间。索引块是
一旦磁盘利用率降至最高值以下,将自动释放
水印
解决方案:现在让我们执行api调用,编辑配置,并增加磁盘空间碎片分配限制(从90个默认值增加到95%-97%):
如果您的集群中有多个节点,并且您在主碎片所在的位置停止了其中一个节点,那么这可能是上述错误的原因之一。当我试图从sense插件搜索数据时,在chrome中添加一些过滤器,而我忘了添加_搜索标记时,出现了这个错误。结果是,它将过滤内容也添加到模式中。之后,我无法查询或执行其他操作。如果出现这样的问题,请告诉我如何解决。在我的情况下,HDDthanks(+1)中仍然有大量可用空间-这很有帮助。我们在云上的应用服务器上已经用完了HD空间,并调整了它的大小,增加了分区大小。应用程序运行正常,但在更改后ES必须重新启动,而我们没有这样做,这就是为什么我们在ES上出现上述错误。指向该页面的链接消失了。你能把有用的部分复制一下吗?
curl -XPUT -H 'Content-Type: application/json' 'localhost:9200/_cluster/settings'
-d '{ "transient":{
"cluster.routing.allocation.disk.watermark.low":"95%",
"cluster.routing.allocation.disk.watermark.high": "97%",
"cluster.routing.allocation.disk.watermark.flood_stage": "98%",
"cluster.info.update.interval": "1m"
}}'