根据收件人请求在 Elasticsearch 数据节点之间共享数据



我有两个Elasticsearch数据节点,Slave和Master。
M 和 S 可以相互通信,但是出于安全原因,S 在收到数据时不能向 M 发送数据,M 必须从 S 请求数据,并且(假设对 S 导出的数据没有其他要求(当发生这种情况时,M 从 S.S
的数据接收请求的数据然后合并到 M 的数据中。

这种行为可以通过 Elasticsearch 实现吗?除非我弄错了,否则复制和快照都不会实现此行为,虽然我知道我可以在从 S 清除复制的数据之前使用 S 的 REST API 在 M 上接收此数据,但此解决方案似乎笨拙且容易出错。
有没有一个优雅的解决方案来实现这种架构?

确实,跨集群复制(CCR(是一个潜在的解决方案,但该解决方案需要最昂贵的elasticsearch版本,并且有一个免费的替代方案。

用于logstash的elasticsearch输入和输出插件为此工作,尽管进行了一些调整以使其完全按照您想要的方式运行。
下面是一个粗略的示例,它查询一个 elasticsearch 节点以获取数据,然后导出到另一个节点。这意味着您需要在从节点和主节点之间有一个日志实例来处理此行为。

input {
elasticsearch {
docinfo => true #Necessary to get metadata info
hosts => "192.168.0.1" #Slave (Target) elasticsearch instance
query => '{ "query": { "query_string": { "query": "*" } } }' #Query to return documents, this example returns all data which is bad if you combine with the below schedule
schedule => "* * * * *" #Run periodically, this example runs every minute
}
}
output { 
elasticsearch {
hosts => "192.168.0.2:9200" #Master (Destination) elasticsearch instance
index => "replica.%{[@metadata][_index]}"
document_id => "%{[metadata][_id]}"
}
}

最新更新