功能概述

跨集群搜索是通过本地集群向一个或多个远程集群发起搜索请求,可实现对存储在不同数据中心集群的日志数据进行筛选和分析。

其工作原理是在本地集群中配置一个或多个远程集群,并且仅连接到远程集群中有限数量的节点。每个远程集群都有一个名称和一个种子节点 seed nodes 的列表引用。这些种子节点 seed nodes 用于发现远程集群中作为网关节点 gateway nodes 的节点。本地集群中配置远程集群的每个节点都连接到一个或多个网关节点 gateway nodes,并使用它们将搜索请求发送到远程集群。

跨集群搜索更多的使用方法和说明,请参见 官方文档

本小节主要介绍在多个集群间如何跨集群搜索。

前提条件

  • 已获取 Dashboard 登录帐号和密码。

  • 请确保本地集群与远端集群间网络通畅。若需通过外网访问 Dashboard,请先通过设置边界路由器VPN 等方式打通网络。

操作步骤

步骤一:创建并添加远端集群

  1. 创建 2 个 远端 OpenSearch 集群,分别名为 opensearch-r1opensearch-r2,详情参考创建 OpenSearch 集群

  2. 记录远端集群的 OpenSearch 热节点 IP 地址分别为 172.22.2.47172.22.2.51

  3. 登录本地集群的 Dashboard。详情可参考如何登录 OpenSearch Dashboard

  4. Dev Tools 的 Console 页面,执行如下语句,添加远端集群信息。

    PUT _cluster/settings
    {
       "persistent": {
          "search": {
             "remote": {
                "cluster_one": {
                   "seeds": [
                      "172.22.2.47:9300"
                   ]
                },
                "cluster_two": {
                   "seeds": [
                      "172.22.2.51:9300"
                   ]
                }
             }
          }
       }
    }
    • 一个 seeds 字段下填写远端集群的 OpenSearch 节点 IP 地址,可设置一个或多个,设置多个节点可确保搜索的高可用。

    • 9300 为 OpenSearch 节点之间的传输端口。无需修改。IP 地址根据实际情况进行修改。

步骤二:向远端集群存入文档

  1. 登录远端 OpenSearch 集群 opensearch-r1 的 Dashboard。详情可参考如何登录 OpenSearch Dashboard

  2. Dev Tools 的 Console 页面,执行如下语句,创建索引并存入文档。

    PUT /mydata/_doc/0
    {
      "msg": "你好,世界!"
    }
  3. 登录远端 OpenSearch 集群 opensearch-r2 的 Dashboard。详情可参考如何登录 OpenSearch Dashboard

  4. Dev Tools 的 Console 页面,执行如下语句,创建索引并存入文档。

    PUT /mydata/_doc/1
    {
      "msg": "Hello, world!"
    }

步骤三:查询远端索引

  1. 登录本地集群的 Dashboard。详情可参考如何登录 OpenSearch Dashboard

  2. Dev Tools 的 Console 页面,执行如下语句,执行以下语句查询远端索引。

    GET /cluster_one:mydata/_search
    GET /cluster_two:mydata/_search
    GET /cluster_one:mydata,cluster_two:mydata/_search
  3. 示例回显结果如下,即查询成功。

    "max_score" : 1.0,
    "hit" : [
       {
          "_index" :"cluster_one:mydata",
          "_type" : "_doc",
          "_id" : "0",
          "_score" : 1.0,
          "_source" :{
             "msg" : "你好,世界!"
          }
       },
          {
          "_index" :"cluster_two:mydata",
          "_type" : "_doc",
          "_id" : "1",
          "_score" : 1.0,
          "_source" :{
             "msg" : "Hello, world!"
          }
       },
    ]