【发布时间】:2015-01-19 21:33:11
【问题描述】:
ElasticSearch 索引随机变为空,但大多数情况下,它发生在部署使用 Rails 构建的应用程序之后。
这里有一些关于 ElastiSearch 的信息:
curl -XGET 'http://localhost:9200/_nodes?pretty'
curl -XGET 'http://localhost:9200/_cluster/health?pretty'
curl 'localhost:9200/_cat/indices?v'
/var/log/elasticsearch/elasticsearch.log 中的重复堆栈跟踪:
[2014-11-21 16:46:05,204][WARN ][cluster.service ] [Joe Cartelli] failed to reconnect to node [Joe Cartelli][AvwiuMNRRUywfTyii7gI0A][ip-172-31-19-137][inet[/172.31.19.137:9300]]
org.elasticsearch.transport.ConnectTransportException: [Joe Cartelli][inet[/172.31.19.137:9300]] connect_timeout[30s]
at org.elasticsearch.transport.netty.NettyTransport.connectToChannels(NettyTransport.java:727)
at org.elasticsearch.transport.netty.NettyTransport.connectToNode(NettyTransport.java:656)
at org.elasticsearch.transport.netty.NettyTransport.connectToNode(NettyTransport.java:624)
at org.elasticsearch.transport.TransportService.connectToNode(TransportService.java:146)
at org.elasticsearch.cluster.service.InternalClusterService$ReconnectToNodes.run(InternalClusterService.java:518)
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:744)
Caused by: java.net.ConnectException: Connection refused: /172.31.19.137:9300
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:739)
at org.elasticsearch.common.netty.channel.socket.nio.NioClientBoss.connect(NioClientBoss.java:150)
at org.elasticsearch.common.netty.channel.socket.nio.NioClientBoss.processSelectedKeys(NioClientBoss.java:105)
at org.elasticsearch.common.netty.channel.socket.nio.NioClientBoss.process(NioClientBoss.java:79)
at org.elasticsearch.common.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:318)
at org.elasticsearch.common.netty.channel.socket.nio.NioClientBoss.run(NioClientBoss.java:42)
at org.elasticsearch.common.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108)
at org.elasticsearch.common.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42)
... 3 more
Obs:172.31.19.137 IP 地址是 AWS 上 EC2 实例的私有 IP。
编辑:
错误仍然出现,我有关于该问题的新信息。
在“数据消失”之后,我查看了elasticsearch.log 和Stack Trace 被打印了很多次。我不知道这个错误是在“数据消失”之前还是之后发生的。注意索引名称是products_production_20141130122307375。
运行命令列出所有 Elasticsearch 索引curl 'localhost:9200/_cat/indices?v',打印产品索引但编号不同:products_production_20141XXXXXXXXXX(我没有写下确切的数字)。
那么,为什么索引的名称不一样?
可能出于某种奇怪的原因,Rails/Searchkick 重新创建索引并丢失数据?
编辑 2
在 ElasticSearch 记录此问题后出现问题:
[2014-12-02 00:47:10,698][INFO ][cluster.metadata ] [Tyr] [products_production_20141202004040313] update_mapping [product] (dynamic)
[2014-12-02 00:58:02,173][INFO ][cluster.metadata ] [Tyr] [products_production_20141202005801257] creating index, cause [api], shards [5]/[1], mappings [_default_]
[2014-12-02 00:58:46,064][INFO ][cluster.metadata ] [Tyr] [products_production_20141202005801257] update_mapping [product] (dynamic)
[2014-12-02 00:58:48,371][INFO ][cluster.metadata ] [Tyr] [products_production_20141202004040313] deleting index
看起来searchkick 重新创建了索引并丢失了旧索引的产品。
【问题讨论】:
-
数据存储在哪里?听起来您的 EC2 实例消失了,数据在那里被擦除了。另外,请确保您的 Rails 应用程序不会清除索引(与连接性无关,这表明前一个问题)。
-
没有 @pickypg,我的 EC2 实例已附加到 EBS 卷
-
有人愿意解释反对意见吗?
-
我不知道反对票是怎么回事,但我也不知道为什么会这样。由于它发生在 Rails 应用程序部署中,我怀疑人们希望看到与它相关的更多细节。我仍然假设它出于某种原因擦除了数据。
-
无论如何@Rodrigo 可以详细说明这个问题,但这不是投反对票的理由!
标签: ruby-on-rails amazon-ec2 elasticsearch searchkick