Elasticsearch跨集群检索配置

这篇具有很好参考价值的文章主要介绍了Elasticsearch跨集群检索配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

跨集群检索字面意思,同一个检索语句,可以检索到多个ES集群中的数据,ES集群默认是支持跨集群检索的,只需要动态的增加入节点即可,下面跟我一起来体验下ES的跨集群检索的魅力。

Elasticsearch 跨集群检索推荐的是不同集群版本是相同的。

对于 Elasticsearch 8.1.3 版本,跨集群检索对应的 Elasticsearch 的版本信息如下,通过看图可以知道,Elasticsearch8.1 版本最多支持到 7.17 版本。

Elasticsearch跨集群检索配置,后端

图片来源:https://www.elastic.co/guide/en/elasticsearch/reference/8.1/modules-cross-cluster-search.html

跨集群检索语句等实际操作跳过环境这一节,直接跳转文章底部查看。

环境

集群一:es-docker-cluster

集群一为IP:192.168.160.245这台机器上面以docker形式部署的ES 8.1.3集群,集群名为es-docker-cluster

version: '3.8'
services:
  cerebro:
    image: lmenezes/cerebro:0.8.3
    container_name: cerebro
    ports:
     - "9000:9000"
    command:
     - -Dhosts.0.host=http://eshot:9200
    networks:
     - elastic
  kibana:
    image: docker.elastic.co/kibana/kibana:8.1.3
    container_name: kibana
    environment:
      - I18N_LOCALE=zh-CN
      - XPACK_GRAPH_ENABLED=true
      - TIMELION_ENABLED=true
      - XPACK_MONITORING_COLLECTION_ENABLED="true"
      - ELASTICSEARCH_HOSTS=http://eshot:9200
      - server.publicBaseUrl=http://192.168.160.245:5601
    ports:
      - "5601:5601"
    networks:
      - elastic
  eshot:
    image: elasticsearch:8.1.3
    container_name: eshot
    environment:
      - node.name=eshot
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=eshot,eswarm,escold
      - cluster.initial_master_nodes=eshot,eswarm,escold
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - xpack.security.enabled=false
      - node.attr.node_type=hot
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - D:\zuiyuftp\docker\es8.1\eshot\data:/usr/share/elasticsearch/data
      - D:\zuiyuftp\docker\es8.1\eshot\logs:/usr/share/elasticsearch/logs
      - D:\zuiyuftp\docker\es8.1\eshot\plugins:/usr/share/elasticsearch/plugins
    ports:
      - 9200:9200
      - 9300:9300
    networks:
      - elastic
  eswarm:
    image: elasticsearch:8.1.3
    container_name: eswarm
    environment:
      - node.name=eswarm
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=eshot,eswarm,escold
      - cluster.initial_master_nodes=eshot,eswarm,escold
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - xpack.security.enabled=false
      - node.attr.node_type=warm
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - D:\zuiyuftp\docker\es8.1\eswarm\data:/usr/share/elasticsearch/data
      - D:\zuiyuftp\docker\es8.1\eswarm\logs:/usr/share/elasticsearch/logs
      - D:\zuiyuftp\docker\es8.1\eshot\plugins:/usr/share/elasticsearch/plugins
    networks:
      - elastic
  escold:
    image: elasticsearch:8.1.3
    container_name: escold
    environment:
      - node.name=escold
      - cluster.name=es-docker-cluster
      - discovery.seed_hosts=eshot,eswarm,escold
      - cluster.initial_master_nodes=eshot,eswarm,escold
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - xpack.security.enabled=false
      - node.attr.node_type=cold
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - D:\zuiyuftp\docker\es8.1\escold\data:/usr/share/elasticsearch/data
      - D:\zuiyuftp\docker\es8.1\escold\logs:/usr/share/elasticsearch/logs
      - D:\zuiyuftp\docker\es8.1\eshot\plugins:/usr/share/elasticsearch/plugins
    networks:
      - elastic

# volumes:
#   eshotdata:
#     driver: local
#   eswarmdata:
#     driver: local
#   escolddata:
#     driver: local

networks:
  elastic:
    driver: bridge

集群二:zuiyu-application

集群二为IP:192.168.160.31机器上面部署的ES8.1.3集群,集群名称为zuiyu-application他们三个的配置分别如下

node1

cluster.name: zuiyu-application
node.name: node-1
path.data: D:\elasticsearch-8.1.3-windows-x86_64\elasticsearch-8.1.3/813/data
path.logs: D:\elasticsearch-8.1.3-windows-x86_64\elasticsearch-8.1.3/813/logs
network.host: 192.168.160.31
http.port: 9200
transport.port: 9300
cluster.initial_master_nodes: ["node-1"]
discovery.seed_hosts: ["192.168.160.31:9300", "192.168.160.31:9302","192.168.160.31:9303"]
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
xpack.security.http.ssl:
  enabled: false
  keystore.path: certs/http.p12
xpack.security.transport.ssl:
  enabled: false
  verification_mode: certificate
  keystore.path: certs/transport.p12
  truststore.path: certs/transport.p12

node2

cluster.name: zuiyu-application
node.name: node-2
path.data: D:\elasticsearch-8.1.3-windows-x86_64\node2/813/data
path.logs: D:\elasticsearch-8.1.3-windows-x86_64\node2/813/logs
network.host: 192.168.160.31
http.port: 9202
transport.port: 9302
cluster.initial_master_nodes: [node-2"]
discovery.seed_hosts: ["192.168.160.31:9300", "192.168.160.31:9302","192.168.160.31:9303"]
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
xpack.security.http.ssl:
  enabled: false
  keystore.path: certs/http.p12
xpack.security.transport.ssl:
  enabled: false
  verification_mode: certificate
  keystore.path: certs/transport.p12
  truststore.path: certs/transport.p12

node3

cluster.name: zuiyu-application
node.name: node-3
path.data: D:\elasticsearch-8.1.3-windows-x86_64\node3/813/data
path.logs: D:\elasticsearch-8.1.3-windows-x86_64\node3/813/logs
network.host: 192.168.160.31
http.port: 9203
transport.port: 9303
cluster.initial_master_nodes: ["node-3"]
discovery.seed_hosts: ["192.168.160.31:9300", "192.168.160.31:9302","192.168.160.31:9303"]
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
xpack.security.http.ssl:
  enabled: false
  keystore.path: certs/http.p12
xpack.security.transport.ssl:
  enabled: false
  verification_mode: certificate
  keystore.path: certs/transport.p12
  truststore.path: certs/transport.p12

现在环境已经搭建好了,下面 进入实验环节,首先打开集群es-docker-cluster所对应的kibana

Kibana 自行安装

跨集群检索

  • 先对集群 es-docker-cluster设置跨集群检索的集群信息

    PUT _cluster/settings
    {
      "persistent": {
        "cluster": {
          "remote": {
            "zuiyu-application": {
              "seeds": [
                "192.168.160.31:9300"
              ]
            }
          }
        }
      }
    }
    
    

    其中zuiyu-application 为自定义的跨集群检索的名称

  • 在当前集群es-docker-cluster 中插入一条数据

    POST zfc-doc-000011/_doc/1
    {
      "name":"zuiyu",
      "content":"test cluster doc 1"
    }
    
  • 打开集群 zuiyu-application对应的Kibana,同样进行增加一条数据,使他们的 name 的值都是 zuiyu

    # 集群 zuiyu-application 中插入
    POST zfc-doc-000011/_doc/1
    {
      "name":"zuiyu",
      "content":"test cluster doc 2,this doc in cluster zuiyu-application"
    }
    

    到这,基础的测试数据已经完成,开始跨集群检索

  • 指定集群进行检索

    GET /集群名:索引名/_search

    GET /zuiyu-application:zfc-doc-000011/_search
    {
      "query": {
        "term": {
          "name": "zuiyu"
        }
      },
      "_source": ["name", "content"]
    }
    

    响应结果如下,可以看到已经在集群 zuiyu-application中查询出来数据了

Elasticsearch跨集群检索配置,后端
  • 跨集群检索

    同时检索es-docker-clusterzuiyu-application两个集群中索引为zfc-doc-000011中的内容

    GET zfc-doc-000011,zuiyu-application:zfc-doc-000011/_search
    {
      "query": {
        "term": {
          "name": "zuiyu"
        }
      },
      "_source": ["name", "content"]
    }
    

    响应结果如下

Elasticsearch跨集群检索配置,后端

因为我们是在 es-docker-cluster集群对应的Kibana中执行的,所以本集群的名称可以不用指定。如果想查询多个索引,只需要追加集群名:索引名即可。

基础的跨集群配置与检索就到此, 实际的使用中查询语句的条件等各个方法都会有限制,这个需要根据实际使用场景来进行修改了,反正现在怎么操作你会了,比着葫芦画瓢还不简单吗。

集群不可用时的处理

默认情况下,如果请求的远程集群返回错误或者不可用,跨集群检索将失败。此时我们可以使用 skip_unavailable ,设置该参数为 true,可以在远程集群不可用时跳过该集群。

修改语句如下,该语句设置将在集群 zuiyu-application 不可用时跳过该集群。

PUT _cluster/settings
{
  "persistent": {
    "cluster.remote.zuiyu-application.skip_unavailable": false
  }
}

处理网络延迟的方式

  • 最小化网络往返次数

    默认情况下,Elasticsearch 会减少与远程集群之间的网络往返次数。这就减少了网络延迟对搜索速度的影响。但是Elasticsearch 无法减少大型检索请求的网络往返次数,例如包含 scroll 或者 inner_hits 的请求。 ccs_minimize_roundtrips 的值为 true 时来使用此选项。

  • 不要最小化网络往返次数

    对于 scroll 或者 inner_hits 的请求,Elasticsearch 会向每个远程集群发送多个传入传出请求。我们可以通过修改 ccs_minimize_roundtrips 的值为 false 来使用此选项。虽然说速度会较慢,但是对于低延迟网络还是很适用的。

    对于该参数ccs_minimize_roundtrips 不了解的可以参考这篇文章

    枯燥无味的Elasticsearch检索参数字典

    打不开的复制链接地址到浏览器打开即可: https://mp.weixin.qq.com/s/DC_2sv5icjR63wZ6XmK6MA

最小化网络往返次数

图片来自官网,可点击左下角原文链接

1、向本地集群中发送跨集群检索请求,该集群中的协调节点接收并解析请求。

Elasticsearch跨集群检索配置,后端

2、协调节点向每个集群包括本地集群发送单个搜索请求。每个集群独立执行搜索请求。

Elasticsearch跨集群检索配置,后端

3、每个远程集群响应检索结果给协调节点。

Elasticsearch跨集群检索配置,后端

4、从每个集群收集结果之后,协调节点在跨集群检索请求响应中返回最终的结果。

Elasticsearch跨集群检索配置,后端

不使用最小化网络往返次数

图片来自官网,可点击左下角原文链接

1、向本地集群中发送跨集群检索请求,该集群中的协调节点接收并解析请求。

Elasticsearch跨集群检索配置,后端

2、协调节点向每个集群发送分片检索请求。

Elasticsearch跨集群检索配置,后端

3、每个远程集群将其响应发送回协调节点。此响应包含跨集群检索请求将在其集群上执行的索引和分片的信息。

Elasticsearch跨集群检索配置,后端

4、协调节点向每个分片发送检索请求,包括自己本身集群的分片。每个分片独立执行检索请求。

当网络的往返没有最小化时,因为会发送所有的分片进行检索,所以搜索的结果就好比全在协调节点中保存中一样。所以我们可以修改集群的检索设置,比如action.search.shard_count.limit, pre_filter_shard_size, max_concurrent_shard_requests,如果这些限制太低的话,检索请求可能会被直接拒绝。

对于该参数不了解的可以参考这篇文章

枯燥无味的Elasticsearch检索参数字典

打不开的复制链接地址到浏览器打开即可: https://mp.weixin.qq.com/s/DC_2sv5icjR63wZ6XmK6MA

Elasticsearch跨集群检索配置,后端

5、每个分片将检索结果返回给协调节点。

Elasticsearch跨集群检索配置,后端

6、协调节点收集所有的结果后,在跨集群检索请求响应中返回最终的响应结果。

Elasticsearch跨集群检索配置,后端

Kibana 中远程集群查看

创建完成之后的远程集群可以在Kibana中查看

Elasticsearch跨集群检索配置,后端

本文由 mdnice 多平台发布文章来源地址https://www.toymoban.com/news/detail-723439.html

到了这里,关于Elasticsearch跨集群检索配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch集群服务器配置

    一、环境介绍与安装准备 1、环境说明 2台虚拟机,OS为ubuntu13.04,ip分别为xxx.xxx.xxx.140和xxx.xxx.xxx.145。 2、安装准备 ElasticSearch(简称ES)由java语言实现,运行环境依赖java。ES 1.x版本,官方推荐至少使用jdk1.6的环境,建议使用oracle java,可以去官网下载,本文使用jdk-7u51-linux-i586.

    2023年04月21日
    浏览(74)
  • mac下ElasticSearch 集群搭建,使用Kibana配置和管理集群

    Elasticsearch如果做集群的话Master节点至少三台服务器或者三个Master实例加入相同集群,三个Master节点最多只能故障一台Master节点,如果故障两个Master节点,Elasticsearch将无法组成集群.会报错,Kibana也无法启动,因为Kibana无法获取集群中的节点信息。 现在在mac下安装三个ES实例,

    2024年02月10日
    浏览(54)
  • Elasticsearch8 集群搭建(二)配置篇:(2)系统配置

    此篇记录Elasticsearch8的一些 系统配置。 1、更改文件描述符的限制 Elasticsearch使用了大量的文件描述符,它用于表示系统打开的文件的标识符。文件描述符是非负整数,它在操作系统层面被用来唯一标识一个打开的文件、套接字或其他 I/O 资源。每个进程都有一组文件描述符,

    2024年01月19日
    浏览(43)
  • Elasticsearch & Kibana 8.6.1 集群配置

    Elasticsearch是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。 Elasticsearch可以看做一个便于搜索的数据库,相比传统关系型数据库如下 Mysql ‐ Databases ‐ Tables ‐ Rows ‐ Columns Elasticsearch ‐ Indices ‐ Types ‐ Documents

    2024年02月14日
    浏览(37)
  • Elasticsearch7搭建集群并配置节点证书

    Elasticsearch7搭建集群并配置节点证书 | 帅大叔的博客 单机版比较简单,试下集群版的,资源有限,本文例子:一台主机以不同端口启动搭建集群。 环境说明: Centos7 Elasticsearch7.9.0 准备搭建3个节点 一、下载ES安装包 去官网下载 下载地址: Download Elasticsearch | Elastic 历史版本:

    2024年02月12日
    浏览(52)
  • Elasticsearch密码配置(包括集群与单节点)

    1,修改配置文件 在配置文件中添加如下参数: 2, 重启es服务 关闭es服务如果服务启动(kill进程id) 启动es服务 3,执行修改密码命令 待服务启动完成,且能正常访问后,执行 注意在普通用户下执行,即es用户 执行命令后会提示让输入密码,挨个输入回车即可 若执行提示(

    2024年02月02日
    浏览(36)
  • elasticsearch配置xpack集群间加密认证时报错:

    通过证书配置集群间节点通信认证: 报错信息: 各种尝试:授权文件777、把文件放在config/certs下、放在/opt/elaticsearch/certs下,都想不通,然后猜测可能是路径问题,于是不写绝对路径,指定相对路径,看看es从那个目录下获取,改了之后包如下错误,发现是从/etc/elasticsearch

    2024年02月13日
    浏览(40)
  • 从入门到进阶 之 ElasticSearch 节点配置 集群篇

      详解 ElasticSearch Kibana 配置部署_PJ码匠人的博客-CSDN博客 Elasticsearch 安装,配置文件参数修改,错误修复,用户验证,kibana安装配置,参数设置 https://meyan.blog.csdn.net/article/details/132580977 链接:https://pan.baidu.com/s/1V7jxVhUFvsINrH7zz9Laeg?pwd=n9cx  提取码:n9cx  错误   解决方法 将配置

    2024年02月07日
    浏览(53)
  • Elasticsearch3节点集群配置账号密码安全验证

    Elasticsearch3节点集群配置账号密码安全验证 ES配置文件 生成CA证书 拷贝证书文件到es节点目录 拷贝证书到es节点并授权 拷贝es配置文件到es节点 三个节点启动ES 登录任一节点设置密码 配置kibana

    2024年02月14日
    浏览(46)
  • elasticsearch集群搭建、x-pack配置、kibana安装配置

    关于本帖,最近比较忙,写的某些地方进行一笔带过,后续有时间继续补充。此做暂记,以免遗忘。 elasticsearch-7.6.2.tar.gz jdk-11.0.12+7.tar.gz jdk8(已安装) kibana-7.6.2.tar.gz 安装用户(非root,这里使用的qxc用户,并赋予 sudo 权限) 安装机器ip目录 ip 10.186.11.66 10.186.11.67 10.186.11.68 生成

    2024年02月03日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包