Elasticsearch跨集群搜索(Cross Cluster Search)

1、简介

Elasticsearch在5.3版本中引入了Cross Cluster Search(CCS 跨集群搜索)功能,用来替换掉要被废弃的Tribe Node。类似Tribe Node,Cross Cluster Search用来实现跨集群的数据搜索。跨集群搜索使您可以针对一个或多个远程集群运行单个搜索请求 。例如,您可以使用跨集群搜索来过滤和分析存储在不同数据中心的集群中的日志数据。

跨集群查询允许你的请求查询多个集群的数据,这个特性帮助我们更好的设计我们的架构。

分布式系统或微服务里将系统分为多个模块,模块A由一个团队,模块B由一个团队负责,模块C由一个团队负责,通常各个模块只查询各自的日志,但有些问题涉及多个模块时会查到多个模块的日志,这时跨集群查询刚好可以解决这类问题,对架构来说我们将模块A、模块B、模块C的日志存储在单独的集群里。

这样可以避免集群之间相互的干扰,模块A的日志量大只会影响集群A的写入,做到分而治之。

2、配置Cross Cluster Search

假设我们有2个ES集群:

Node

Address

Port

Transport Port

Cluster

elasticsearch01

127.0.0.1

9201

9301

America

elasticsearch02

127.0.0.1

9202

9302

America

elasticsearch03

127.0.0.1

9203

9303

Europe

elasticsearch04

127.0.0.1

9204

9304

Europe

有2种方式可以用来配置CCS:

1)配置elasticsearch.yml

search:
    remote:
        america:
            seeds: 127.0.0.1:9301
            seeds: 127.0.0.1:9302
        europe:
            seeds: 127.0.0.1:9303
            seeds: 127.0.0.1:9304

注意:以上方式,在配置的时候,需要remote cluster处在运行状态。比如在配置“america”的集群的时候,需要“europe”集群处在运行状态,否则节点无法启动成功。

2)使用 Cluster Settings API配置

curl -XPUT -H'Content-Type: application/json' localhost:9201/_cluster/settings -d '
{
    "persistent": {
        "search.remote": {
            "america": {
                "skip_unavailable": "true",
                "seeds": ["127.0.0.1:9301","127.0.0.1:9302"]
            },
            "europe": {
                "skip_unavailable": "true",
                "seeds": ["127.0.0.1:9303","127.0.0.1:9304"]
            }
        }
    }
}'

推荐使用API方式,可以方便的修改remote cluster的seeds和其他配置。

3、验证Cross Cluster Search

1)使用_remote/info查看CCS连接状态:

[root@localhost elasticsearch01]# curl -XGET -H 'Content-Type: application/json' localhost:9201/_remote/info?pretty
{
  "america" : {
    "seeds" : [
      "127.0.0.1:9301",
      "127.0.0.1:9302"
    ],
    "http_addresses" : [
      "127.0.0.1:9201",
      "127.0.0.1:9202"
    ],
    "connected" : true,
    "num_nodes_connected" : 2,
    "max_connections_per_cluster" : 3,
    "initial_connect_timeout" : "30s"
  },
  "europe" : {
    "seeds" : [
      "127.0.0.1:9303",
      "127.0.0.1:9304"
    ],
    "http_addresses" : [
      "127.0.0.1:9203",
      "127.0.0.1:9204"
    ],
    "connected" : true,
    "num_nodes_connected" : 2,
    "max_connections_per_cluster" : 3,
    "initial_connect_timeout" : "30s"
  }
}

2)使用跨集群搜索:

同时查询2个集群的数据:

GET /cluster_name:index,cluster_name:index/_search
GET */index/_search

java API 示例:

//查询所有集群,以appIndex-开头的数据
SearchRequest searchRequest = Requests.searchRequest("*:appIndex-*");
SearchResponse response = es.getClient().search(searchRequest).get();

4、Disable Cross Cluster Search

使用API设置:

curl -XPUT -H'Content-Type: application/json' localhost:9201/_cluster/settings -d '
{
    "persistent": {
        "search.remote": {
            "america": {
                "skip_unavailable": null,
                "seeds": null
            },
            "europe": {
                "skip_unavailable": null,
                "seeds": null
            }
        }
    }
}'

5、CCS的配置

search.remote.${cluster_alias}.skip_unavailable:查询的时候skip不可达的集群,默认false,推荐设置为true

search.remote.connect:默认true,即任何node都作为一个cross-cluster client去连接remote cluster,跨集群搜索的请求必须发给cross-cluster client。

search.remote.node.attr:设置remote node的属性,比如search.remote.node.attr:gateway这样设置,只有node.attr.gateway: true的node才会被该node连接用来做CCS查询。

 

参考:

https://www.elastic.co/guide/en/elasticsearch/reference/6.2/modules-cross-cluster-search.html

https://www.cnblogs.com/luxiaoxun/p/9865389.html

https://www.jianshu.com/p/a49d45ffff63

https://blog.csdn.net/yiyiatgis/article/details/105642608?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值