即使是不成熟的尝试,也胜于胎死腹中的策略。

Elastic 中国开发者大会 2021 演讲报名开放申请中

活动medcl 发布了置顶文章 • 0 个评论 • 74 次浏览 • 2 天前 • 来自相关话题

bulk update更新,存在小部分数据未更新成功。版本是5.6.3,更新field为null 的操作,求解。

ElasticsearchGod_lockin 回复了问题 • 3 人关注 • 1 个回复 • 179 次浏览 • 2021-10-27 09:46 • 来自相关话题

cat/indices 查看有nested对象的index文档数量有延迟

ElasticsearchCharele 回复了问题 • 2 人关注 • 1 个回复 • 131 次浏览 • 2021-10-22 16:35 • 来自相关话题

elasticsearch源码测试用例怎么跑

回复

Elasticsearchzekaifeng 回复了问题 • 2 人关注 • 1 个回复 • 183 次浏览 • 2021-10-31 22:39 • 来自相关话题

Segment 和 倒排索引的关系

ElasticsearchKevin_23 回复了问题 • 2 人关注 • 2 个回复 • 202 次浏览 • 2021-10-28 08:50 • 来自相关话题

path.repo 配置了多个路径后 仓库切换出现错误

ElasticsearchCharele 回复了问题 • 3 人关注 • 2 个回复 • 158 次浏览 • 2021-10-21 15:58 • 来自相关话题

ES 大数据量,频繁聚合查询请求,导致集群异常?

Elasticsearchlaoyang360 回复了问题 • 4 人关注 • 4 个回复 • 264 次浏览 • 2021-10-24 11:35 • 来自相关话题

Elastic中文社区网站新增文章投稿功能

默认分类liaosy 发表了文章 • 0 个评论 • 181 次浏览 • 2021-10-18 13:18 • 来自相关话题

Elastic中文社区网站新增文章投稿功能。

如果您有Elastic技术栈相关的文章想分享,可以在本站发表原创文章,或者以站外投稿(已在其他站点发表过)的方式进行发布,站外投稿就无需再重复编辑整个文章内容了,仅需要提供文章标题、摘要、稿源、链接基本信息即可。

怎么发布站外投稿文章呢?

1.入口
注册登录本站后,鼠标移动到网站右上角的“发起”按钮会弹出下拉选项,选中“文章”点击即可。如下图示例:
WechatIMG318.png

2.编辑&发布
文章类型选择站外投稿,填写文章来源、文章链接、文章标题、文章内容摘要等稿源信息后提交即可。如下图示例:
WechatIMG320.png

3.修改更新
如发布之后需要修改,可在文章详情界面点击编辑进行内容更新。如下图示例:
WechatIMG319.png

本站Elastic中文社区将持续整合Elastic相关最新的技术文章和资讯供大家阅览,欢迎大家在本站发布原创文章或投稿。
如有疑问或建议,欢迎在评论区留言反馈。

Elastic日报 第1231期 (2021-10-15)

Elastic日报laoyang360 发表了文章 • 0 个评论 • 289 次浏览 • 2021-10-17 22:52 • 来自相关话题

1、使用极限网关来进行 Elasticsearch 跨集群跨版本查询及所有其它请求
https://elasticsearch.cn/article/14390
 
2、给Zblogphp插上Elasticsearch的翅膀
https://elasticsearch.cn/article/14389
 
3、Elasticsearch more like this 案例解读
https://qbox.io/blog/mlt-simil ... uery/
 
编辑:铭毅天下
归档:https://ela.st/cn-daily-all
订阅:https://ela.st/cn-daily-sub
沙龙:https://ela.st/cn-meetup

使用极限网关来进行 Elasticsearch 跨集群跨版本查询及所有其它请求

Elasticsearchmedcl 发表了文章 • 4 个评论 • 548 次浏览 • 2021-10-16 11:31 • 来自相关话题

使用场景

如果你的业务需要用到有多个集群,并且版本还不一样,是不是管理起来很麻烦,如果能够通过一个 API 来进行查询就方便了,聪明的你相信已经想到了 CCS,没错用 CCS 可以实现跨集群的查询,不过 Elasticsearch 提供的 CCS 对版本有一点的限制,并且需要提前做好 mTLS,也就是需要提前配置好两个集群之间的证书互信,这个免不了要重启维护,好像有点麻烦,那么问题来咯,有没有更好的方案呢?

😁 有办法,今天我就给大家介绍一个基于极限网关的方案,极限网关的网址:http://极限网关.com/

假设现在有两个集群,一个集群是 v2.4.6,有不少业务数据,舍不得删,里面有很多好东西 :)还有一个集群是 v7.14.0,版本还算比较新,业务正在做的一个新的试点,没什么好东西,但是也得用 :(,现在老板们的的需求是希望通过在一个统一的接口就能访问这些数据,程序员懒得很,懂得都懂。

集群信息

  • v2.4.6 集群的访问入口地址:192.168.3.188:9202
  • v7.14.0 集群的访问入口地址:192.168.3.188:9206

    这两个集群都是 http 协议的。

    实现步骤


    今天用到的是极限网关的 switch 过滤器:https://极限网关.com/docs/references/filters/switch/

    网关下载下来就两个文件,一个主程序,一个配置文件,记得下载对应操作系统的包。

    定义两个集群资源


    ```
    elasticsearch:

    • name: v2
      enabled: true
      endpoint: http://192.168.3.188:9202
    • name: v7
      enabled: true
      endpoint: http://192.168.3.188:9206
      ``<br /> <br /> 上面定义了两个集群,分别命名为v2v7`,待会会用到这些资源。

      定义一个服务入口


      ```
      entry:

    • name: my_es_entry
      enabled: true
      router: my_router
      max_concurrency: 1000
      network:
      binding: 0.0.0.0:8000
      tls:
      enabled: true
      ``<br /> <br /> 这里定义了一个名为my_es_entry的资源入口,并引用了一个名为my_router的请求转发路由,同时绑定了网卡的0.0.0.0:8000也就是所有本地网卡监听 IP 的8000端口,访问任意 IP 的8000端口就能访问到这个网关了。<br /> <br /> 另外老板也说了,Elasticsearch 用 HTTP 协议简直就是裸奔,通过这里开启tls,可以让网关对外提供的是 HTTPS 协议,这样用户连接的 Elasticsearch 服务就自带 buffer 了,后端的 es 集群和网关直接可以做好网络流量隔离,集群不用动,简直完美。<br /> <br /> 为什么定义 TLS 不用指定证书,好用的软件不需要这么麻烦,就这样,不解释。<br /> <br /> 最后,通过设置max_concurrency` 为 1000,限制下并发数,避免野猴子把我们的后端的 Elasticsearch 给压挂了。

      定义一个请求路由


      ```
      router:

    • name: my_router
      default_flow: cross-cluster-search
      ``<br /> <br /> 这里的名称my_router就是表示上面的服务入口的router参数指定的值。<br /> <br /> 另外设置一个default_flow来将所有的请求都转发给一个名为cross-cluster-search` 的请求处理流程,还没定义,别急,马上。

      定义请求处理流程


      来啦,来啦,先定义两个 flow,如下,分别名为 v2-flowv7-flow,每节配置的 filter 定义了一系列过滤器,用来对请求进行处理,这里就用了一个 elasticsearch 过滤器,也就是转发请求给指定的 Elasticsearch 后端服务器,了否?

      ```
      flow:

    • name: v2-flow
      filter:
      • elasticsearch:
        elasticsearch: v2
    • name: v7-flow
      filter:
      • elasticsearch:
        elasticsearch: v7
        <br /> <br /> 然后,在定义额外一个名为 `cross-cluster-search` 的 flow,如下:<br /> <br />
    • name: cross-cluster-search
      filter:
      • switch:
        path_rules:
        • prefix: "v2:"
          flow: v2-flow
        • prefix: "v7:"
          flow: v7-flow
          <br /> 这个 flow 就是通过请求的路径的前缀来进行路由的过滤器,如果是 `v2:`开头的请求,则转发给 `v2-flow` 继续处理,如果是 `v7:` 开头的请求,则转发给 `v7-flow` 来处理,使用的用法和 CCS 是一样的。so easy!<br /> <br /> 对了,那是不是每个请求都需要加前缀啊,费事啊,没事,在这个 `cross-cluster-search` 的 filter 最后再加上一个 `elasticsearch` filter,前面前缀匹配不上的都会走它,假设默认都走 `v7`,最后完整的 flow 配置如下:<br /> <br />
          flow:
    • name: v2-flow
      filter:
      • elasticsearch:
        elasticsearch: v2
    • name: v7-flow
      filter:
      • elasticsearch:
        elasticsearch: v7
    • name: cross-cluster-search
      filter:
      • switch:
        path_rules:
        • prefix: "v2:"
          flow: v2-flow
        • prefix: "v7:"
          flow: v7-flow
      • elasticsearch:
        elasticsearch: v7
        ```

        然后就没有然后了,因为就配置这些就行了。

        启动网关


        假设配置文件的路径为 sample-configs/cross-cluster-search.yml,运行如下命令:

        <br /> ➜ gateway git:(master) ✗ ./bin/gateway -config sample-configs/cross-cluster-search.yml<br /> ___ _ _____ __ __ __ _ <br /> / _ \ /_\ /__ \/__\/ / /\ \ \/_\ /\_/\<br /> / /_\///_\\ / /\/_\ \ \/ \/ //_\\\_ _/<br /> / /_\\/ _ \/ / //__ \ /\ / _ \/ \ <br /> \____/\_/ \_/\/ \__/ \/ \/\_/ \_/\_/ <br /> <br /> [GATEWAY] A light-weight, powerful and high-performance elasticsearch gateway.<br /> [GATEWAY] 1.0.0_SNAPSHOT, 2021-10-15 16:25:56, 3d0a1cd<br /> [10-16 11:00:52] [INF] [app.go:228] initializing gateway.<br /> [10-16 11:00:52] [INF] [instance.go:24] workspace: data/gateway/nodes/0<br /> [10-16 11:00:52] [INF] [api.go:260] api listen at: <a href="http://0.0.0.0:2900" rel="nofollow" target="_blank">http://0.0.0.0:2900</a><br /> [10-16 11:00:52] [INF] [reverseproxy.go:257] elasticsearch [v7] hosts: [] => [192.168.3.188:9206]<br /> [10-16 11:00:52] [INF] [entry.go:225] auto generating cert files<br /> [10-16 11:00:52] [INF] [actions.go:223] elasticsearch [v2] is available<br /> [10-16 11:00:52] [INF] [actions.go:223] elasticsearch [v7] is available<br /> [10-16 11:00:53] [INF] [entry.go:296] entry [my_es_entry] listen at: <a href="https://0.0.0.0:8000" rel="nofollow" target="_blank">https://0.0.0.0:8000</a><br /> [10-16 11:00:53] [INF] [app.go:309] gateway is running now.<br />

        可以看到网关输出了启动成功的日志,网关服务监听在 <a href="https://0.0.0.0:8000" rel="nofollow" target="_blank">https://0.0.0.0:8000</a>

        试试访问网关


        直接访问网关的 8000 端口,因为是网关自签的证书,加上 -k 来跳过证书的校验,如下:

        <br /> ➜ loadgen git:(master) ✗ curl -k <a href="https://localhost:8000" rel="nofollow" target="_blank">https://localhost:8000</a> <br /> {<br /> "name" : "LENOVO",<br /> "cluster_name" : "es-v7140",<br /> "cluster_uuid" : "npWjpIZmS8iP_p3GK01-xg",<br /> "version" : {<br /> "number" : "7.14.0",<br /> "build_flavor" : "default",<br /> "build_type" : "zip",<br /> "build_hash" : "dd5a0a2acaa2045ff9624f3729fc8a6f40835aa1",<br /> "build_date" : "2021-07-29T20:49:32.864135063Z",<br /> "build_snapshot" : false,<br /> "lucene_version" : "8.9.0",<br /> "minimum_wire_compatibility_version" : "6.8.0",<br /> "minimum_index_compatibility_version" : "6.0.0-beta1"<br /> },<br /> "tagline" : "You Know, for Search"<br /> }<br />

        正如前面配置所配置的一样,默认请求访问的就是 v7 集群。


        访问 v2 集群


        <br /> ➜ loadgen git:(master) ✗ curl -k <a href="https://localhost:8000/v2:/" rel="nofollow" target="_blank">https://localhost:8000/v2:/</a> <br /> {<br /> "name" : "Solomon O'Sullivan",<br /> "cluster_name" : "es-v246",<br /> "cluster_uuid" : "cqlpjByvQVWDAv6VvRwPAw",<br /> "version" : {<br /> "number" : "2.4.6",<br /> "build_hash" : "5376dca9f70f3abef96a77f4bb22720ace8240fd",<br /> "build_timestamp" : "2017-07-18T12:17:44Z",<br /> "build_snapshot" : false,<br /> "lucene_version" : "5.5.4"<br /> },<br /> "tagline" : "You Know, for Search"<br /> }<br />
        查看集群信息:
        <br /> ➜ loadgen git:(master) ✗ curl -k <a href="https://localhost:8000/v2:_cluster/health" rel="nofollow" target="_blank">https://localhost:8000/v2:_cluster/health</a>\?pretty<br /> {<br /> "cluster_name" : "es-v246",<br /> "status" : "yellow",<br /> "timed_out" : false,<br /> "number_of_nodes" : 1,<br /> "number_of_data_nodes" : 1,<br /> "active_primary_shards" : 5,<br /> "active_shards" : 5,<br /> "relocating_shards" : 0,<br /> "initializing_shards" : 0,<br /> "unassigned_shards" : 5,<br /> "delayed_unassigned_shards" : 0,<br /> "number_of_pending_tasks" : 0,<br /> "number_of_in_flight_fetch" : 0,<br /> "task_max_waiting_in_queue_millis" : 0,<br /> "active_shards_percent_as_number" : 50.0<br /> }<br />
        插入一条文档:
        <br /> ➜ loadgen git:(master) ✗ curl-json -k <a href="https://localhost:8000/v2:medcl/doc/1" rel="nofollow" target="_blank">https://localhost:8000/v2:medcl/doc/1</a> -d '{"name":"hello world"}'<br /> {"_index":"medcl","_type":"doc","_id":"1","_version":1,"_shards":{"total":2,"successful":1,"failed":0},"created":true}% <br />
        执行一个查询
        <br /> ➜ loadgen git:(master) ✗ curl -k <a href="https://localhost:8000/v2:medcl/_search" rel="nofollow" target="_blank">https://localhost:8000/v2:medcl/_search</a>\?q\=name:hello <br /> {"took":78,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score":0.19178301,"hits":[{"_index":"medcl","_type":"doc","_id":"1","_score":0.19178301,"_source":{"name":"hello world"}}]}}% <br />
        可以看到,所有的请求,不管是集群的操作,还是索引的增删改查都可以,而 Elasticsearch 自带的 CCS 是只读的,只能进行查询。

        访问 v7 集群


        <br /> ➜ loadgen git:(master) ✗ curl -k <a href="https://localhost:8000/v7:/" rel="nofollow" target="_blank">https://localhost:8000/v7:/</a><br /> {<br /> "name" : "LENOVO",<br /> "cluster_name" : "es-v7140",<br /> "cluster_uuid" : "npWjpIZmS8iP_p3GK01-xg",<br /> "version" : {<br /> "number" : "7.14.0",<br /> "build_flavor" : "default",<br /> "build_type" : "zip",<br /> "build_hash" : "dd5a0a2acaa2045ff9624f3729fc8a6f40835aa1",<br /> "build_date" : "2021-07-29T20:49:32.864135063Z",<br /> "build_snapshot" : false,<br /> "lucene_version" : "8.9.0",<br /> "minimum_wire_compatibility_version" : "6.8.0",<br /> "minimum_index_compatibility_version" : "6.0.0-beta1"<br /> },<br /> "tagline" : "You Know, for Search"<br /> }<br />

        Kibana 里面访问


        完全没问题,有图有真相:

        Jietu20211016-114041.jpg




        其他操作也类似,就不重复了。

        完整的配置


        ```
        path.data: data
        path.logs: log

        entry:

    • name: my_es_entry
      enabled: true
      router: my_router
      max_concurrency: 10000
      network:
      binding: 0.0.0.0:8000
      tls:
      enabled: true

      flow:
    • name: v2-flow
      filter:
      • elasticsearch:
        elasticsearch: v2
    • name: v7-flow
      filter:
      • elasticsearch:
        elasticsearch: v7
    • name: cross-cluster-search
      filter:
      • switch:
        path_rules:
        • prefix: "v2:"
          flow: v2-flow
        • prefix: "v7:"
          flow: v7-flow
      • elasticsearch:
        elasticsearch: v7

        router:
    • name: my_router
      default_flow: cross-cluster-search

      elasticsearch:
    • name: v2
      enabled: true
      endpoint: http://192.168.3.188:9202
    • name: v7
      enabled: true
      endpoint: http://192.168.3.188:9206
      ```

      小结


      好了,今天给大家分享的如何使用极限网关来进行 Elasticsearch 跨集群跨版本的操作就到这里了,希望大家周末玩的开心。😁

filebeat采集数据_source.@timestamp慢八小时

Beatshgditren 回复了问题 • 2 人关注 • 1 个回复 • 203 次浏览 • 2021-10-19 17:30 • 来自相关话题

ES索引是否支持限制一个分片的最大segment数量?

Elasticsearchtongchuan1992 回复了问题 • 3 人关注 • 2 个回复 • 199 次浏览 • 2021-10-21 14:21 • 来自相关话题

java往es存date数据,es少了八个小时,设置了时区也没用,求解

Elasticsearchlaoyang360 回复了问题 • 6 人关注 • 5 个回复 • 324 次浏览 • 2021-10-24 11:38 • 来自相关话题

请问Kibnna查询message乱码如何解决。111111111111111111111111111111111111111111111111111111111111

Kibanatongchuan1992 回复了问题 • 2 人关注 • 1 个回复 • 182 次浏览 • 2021-10-15 09:36 • 来自相关话题

如何实现跨版本 跨集群复制索引模板

Elasticsearchtongchuan1992 回复了问题 • 3 人关注 • 2 个回复 • 238 次浏览 • 2021-10-15 09:41 • 来自相关话题

_source字段的存储对搜索聚合的影响

Elasticsearchtongchuan1992 回复了问题 • 3 人关注 • 2 个回复 • 257 次浏览 • 2021-10-15 09:39 • 来自相关话题