根据收件人请求在 Elasticsearch 数据节点之间共享数据
Share data between Elasticsearch data nodes on recipient request
我有两个 Elasticsearch 数据节点,Slave 和 Master。
M 和 S 可以相互通信,但是出于安全原因,S 在接收到数据时不能向 M 发送数据,M 必须向 S 请求数据,并且(假设对 S 输出的数据没有其他要求)当这种情况发生时,M 接收请求来自 S.
的数据
S的数据然后合并到M的数据中。
使用 Elasticsearch 可以实现这种行为吗?除非我弄错了,否则复制和快照都不会实现这种行为,虽然我知道我可以使用 S 的 REST API 在从 S 清除复制的数据之前在 M 上接收这些数据,但这个解决方案看起来很笨重并且容易出错.
有没有优雅的解决方案来实现这个架构?
的确,跨集群复制 (CCR) 是一个潜在的解决方案,但该解决方案需要最昂贵的 elasticsearch 版本,并且有一个免费的替代方案。
用于 logstash 的 elasticsearch input and output 插件为此工作,尽管需要进行一些调整以使其完全符合您的要求。
下面是一个粗略的示例,它查询一个 elasticsearch 节点的数据,然后导出到另一个节点。这确实意味着您需要在从节点和主节点之间有一个 logstash 实例来处理此行为。
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]}"
}
}
我有两个 Elasticsearch 数据节点,Slave 和 Master。
M 和 S 可以相互通信,但是出于安全原因,S 在接收到数据时不能向 M 发送数据,M 必须向 S 请求数据,并且(假设对 S 输出的数据没有其他要求)当这种情况发生时,M 接收请求来自 S.
的数据
S的数据然后合并到M的数据中。
使用 Elasticsearch 可以实现这种行为吗?除非我弄错了,否则复制和快照都不会实现这种行为,虽然我知道我可以使用 S 的 REST API 在从 S 清除复制的数据之前在 M 上接收这些数据,但这个解决方案看起来很笨重并且容易出错.
有没有优雅的解决方案来实现这个架构?
的确,跨集群复制 (CCR) 是一个潜在的解决方案,但该解决方案需要最昂贵的 elasticsearch 版本,并且有一个免费的替代方案。
用于 logstash 的 elasticsearch input and output 插件为此工作,尽管需要进行一些调整以使其完全符合您的要求。
下面是一个粗略的示例,它查询一个 elasticsearch 节点的数据,然后导出到另一个节点。这确实意味着您需要在从节点和主节点之间有一个 logstash 实例来处理此行为。
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]}"
}
}