《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.1.跨集群操作(1) https://developer.aliyun.com/article/1228852
跨集群搜索
跨集群搜索可以针对一个或多个远程集群,运行单个搜索请求。例如,我们可以使用跨集群搜索,来过滤和分析存储,在不同数据中心的集群中的日志数据。
在5.3.0之前的版本,Elastic 官方提供了 Tribe Node 实现多集群访问的解决方案。
Tribe Node是以 Client Node 的角色添加到集群中,但是由于不保留集群的 meta 信息,每次重启需要重新加载初始化。因此,在5.3版本中 Elastic 官方提供了 CCS 的功能,允许集群中的任何节点可以联合查询。
快速入门
下面以两个集群的跨集群搜索为例。我们预先启动了两个集群:cluster1、cluster2,当前集群是 cluster1。现在的任务是联合远程访问的集群 cluter2 进行跨集群搜索。
我们分别在两个集群上动态配置 remote cluster。
注意:在 seeds 列表中填写的是集群节点间通信的 TCP 端口而不是 HTTP 端口。
PUT _cluster/settings { "persistent": { "cluster": { "remote": { "cluster_one": { "seeds": [ "192.168.2.2:9300" ] }, "cluster_two": { "seeds": [ "192.168.2.2:9500" ] } } } } }
在 cluster1 中插入数据
PUT esfighttogether/_doc/1 { "teamname":"team 10" }
在 cluster2 中插入数据
PUT esfighttogether/_doc/1 { "teamname":"team 1" } PUT esfighttogether/_doc/2 { "teamname":"team 7" }
在两个集群上分别验证数据。因为写入时 Elasticsearch 自带的默认分词器会对数据进行分词,我们通过 team 就可以查询到所有数据。
查询语句如下:
GET esfighttogether/_search { "query": { "match": { "teamname": "team" } } }
执行跨集群搜索
GET cluster_one:esfighttogether,cluster_two:esfighttogether/_search?timeout=5m { "query": { "match": { "teamname": "team" } } }
如上图所示,通过 CCS 查询到 3 条数据:cluster_one 的一条数据 team 10 以及 cluster_
two 的两条数据 team 1 和 team 7,和之前写入的数据一致。
《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.1.跨集群操作(3) https://developer.aliyun.com/article/1228850