为了安全性,阿里云Elasticsearch(简称ES)实例间的网络默认是隔离的,若需要使用跨集群搜索功能,则需要将两个实例的网络进行打通。

前提条件

两个ES集群需要满足如下条件才能打通。
  • 相同版本。
  • ES集群都归属于当前账号。
  • ES集群部署在同一个VPC中。
  • 同为单可用区实例,或同为多可用区实例。

背景信息

在满足前提条件后,对应各个阿里云ES实例的网络默认是没有打通的,需要您在配置实例网络互通页面进行配置后,才可打通,详情请参见配置实例间网络互通

配置实例间网络互通

  1. 进入阿里云ES的安全配置页面
  2. 单击配置实例网络互通右侧的修改
  3. 修改配置页面,单击+添加实例
    修改实例网络互通配置
  4. 添加实例对话框中,选择需要进行网络互通的ES实例ID,单击确认
    添加实例页面
    注意
    • 子账号需要List权限才能获取相应主账号下的所有实例。
    • 在满足前提条件后,您可以在添加实例页面选择多个符合条件的阿里云ES实例。
    • 当其中一个ES实例选择了与另一个远程的ES实例打通后,在另一个ES实例的配置实例网络互通页面,也可以看到刚才配置的ES实例ID,即网络打通操作是双向的。如果A实例配置了与B实例的网络打通,则B实例的网络也与A实例进行了打通。
    添加成功后,可在修改配置页面查看与当前实例打通的实例列表
    与当前实例打通的实例列表

移除互通实例

  1. 进入阿里云ES的安全配置页面
  2. 单击配置实例网络互通右侧的修改
  3. 修改配置页面,单击与当前实例打通的实例列表中对应实例右侧的移除
    移除互通实例
  4. 确认移除对话框中,单击确认,完成互通实例的移除。
    实例移除成功后,在修改配置页面的与当前实例打通的实例列表中不再显示该实例。

查询已打通的实例列表

  1. 进入阿里云ES的安全配置页面
  2. 单击配置实例网络互通右侧的修改
  3. 修改配置页面即可查看与当前实例打通的实例列表
    查询已打通的实例列表
    注意 当删除实例时,如果该实例已经与其他实例打通,则会弹出当前实例已与其他实例实现网络互通,删除实例会同时解除网络打通,是否确认要删除实例的提示。

配置跨集群搜索

  1. 登录远程ES集群的Kibana控制台
  2. 执行以下命令,在远程ES集群中创建索引并添加文档。
    PUT /twitter
    {
        "settings" : {
            "index" : {
                "number_of_shards" : 3, 
                "number_of_replicas" : 2 
            }
        }
    }
    POST twitter/doc/
    {
        "user" : "kimchy",
        "post_date" : "2009-11-15T14:12:12",
        "message" : "trying out Elasticsearch"
    }
    说明 此步骤的作用是方便您对跨集群搜索进行验证。
  3. 登录当前ES集群的Kibana控制台
  4. 执行以下命令,在当前ES集群中配置跨集群搜索。
    以下为ES 6.7版本实例的配置,其他版本与此类似,详情请参见ES 6.7版本实例配置官方文档ES 6.3版本实例配置官方文档ES 5.5版本实例配置官方文档
    • 方法1:使用内网Endpoint配置。
      PUT _cluster/settings
      {
        "persistent": {
          "cluster": {
            "remote": {
              "cluster_one": {
                "seeds": [
                  "es-cn-o4xxxxxxxxxxxx4f1.elasticsearch.aliyuncs.com:9300"
                ]
              }
            }
          }
        }
      }
    • 方法2:使用节点IP配置。
      PUT _cluster/settings
      {
        "persistent": {
          "cluster": {
            "remote": {
              "cluster_one": {
                "seeds": [
                  "10.8.xx.xx:9300",
                  "10.8.xx.xx:9300",
                  "10.8.xx.xx:9300"
                ]
              }
            }
          }
        }
      }
    注意
    • 单可用区实例,可以使用方法1和2进行配置,并且支持配置多个远程阿里云ES实例。
    • 多可用区实例,只能使用方法2进行配置,并且支持配置多个远程阿里云ES实例。
    • 假如在A的ES实例中配置了需要访问的远程B的ES集群,只可在A的实例中查询远程B的ES实例中的用户索引,无法在远程B的ES实例中执行类似命令反向访问。如果需要反向访问,也需要在远程B的ES实例中配置A的实例的域名或IP。
  5. 执行以下命令,验证跨集群搜索是否配置成功。
    POST /cluster_one:twitter/doc/_search
    {
      "query": {
        "match_all": {}
      }
    }
    验证成功后,返回如下结果。
    {
      "took" : 78,
      "timed_out" : false,
      "_shards" : {
        "total" : 3,
        "successful" : 3,
        "skipped" : 0,
        "failed" : 0
      },
      "_clusters" : {
        "total" : 1,
        "successful" : 1,
        "skipped" : 0
      },
      "hits" : {
        "total" : 1,
        "max_score" : 1.0,
        "hits" : [
          {
            "_index" : "cluster_one:twitter",
            "_type" : "doc",
            "_id" : "qudxxxxxxxxxx_7ie6J",
            "_score" : 1.0,
            "_source" : {
              "user" : "kimchy",
              "post_date" : "2009-11-15T14:12:12",
              "message" : "trying out Elasticsearch"
            }
          }
        ]
      }
    }