ruby-on-rails - ElasticSearch 索引随机变空

标签 ruby-on-rails amazon-ec2 elasticsearch searchkick

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

观察:172.31.19.137 IP地址是AWS上EC2实例的私有(private)IP。

编辑:

出现错误剧照,我获得了有关该问题的新信息。

“数据消失”后,我查看了 elasticsearch.logStack Trace被印了很多次。我不知道这个错误是发生在“数据消失”之前还是之后。请注意,索引名称是 products_production_20141130122307375

运行命令列出所有 Elasticsearch 索引 curl 'localhost:9200/_cat/indices?v',打印产品索引但编号不同:products_production_20141XXXXXXXXXX (I没有写下确切的数字)。

那么,为什么索引名称不一样呢?

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 重新创建了索引并丢失了旧索引的产品。

最佳答案

也许这个问题可能与您的问题有关:

https://github.com/ankane/searchkick/issues/307

关于ruby-on-rails - ElasticSearch 索引随机变空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27066428/

相关文章:

ruby-on-rails - 从 ActiveRecord 对象继承

amazon-web-services - IAM允许用户访问区域中ec2的所有内容

elasticsearch - 在Elasticsearch中重新索引期间将索引中的所有字段小写

php - 访问 Amazon EC2 根目录

hadoop - 如何在运行时备份Amazon ec2实例生成的日志

php - Elasticsearch - 2019 年按嵌套字段排序

elasticsearch - 如何在elasticsearch中组合查询,must和must_not?

ruby-on-rails - 我可以在Rails中使用Turbolink手动导航吗?

ruby-on-rails - 如何调试 Rails 的内部工作?

ruby-on-rails - Rails Migration 更改列以使用 Postgres 数组