咕泡学院 p6 elasticstack高级开发与架构--29课 跨集群查询能力实践

 

 

 

单集群的master节点一定要有,单机群的风险

(一)跨集群查询

 成都机房作为主集群,上海和福州的机房作为查询集群

转载自博客:https://blog.csdn.net/Ahri_J/article/details/106739266

ES 中可以配置远程集群实现跨集群的搜索,极大的提高了 ES 集群的水平扩展性,跨集群搜索也是 ES 认证考试中经常考的知识点。本篇文章简单总结下 ES 远端集群的配置和跨集群搜索作为备忘,也希望对需要的同学有所帮助。

一. 配置远端集群
为了实现跨集群搜索首先需在当前集群中配置远端集群,我们可以通过下面三种方式配置:

1. 配置文件设置
首先可以在 ElasticSearch 的 yml 配置文件中设置,ES 启动时就会建立与远端集群的链接,配置如下:

ES 中可以配置远程集群实现跨集群的搜索,极大的提高了 ES 集群的水平扩展性,跨集群搜索也是 ES 认证考试中经常考的知识点。本篇文章简单总结下 ES 远端集群的配置和跨集群搜索作为备忘,也希望对需要的同学有所帮助。

一. 配置远端集群
为了实现跨集群搜索首先需在当前集群中配置远端集群,我们可以通过下面三种方式配置:

1. 配置文件设置
首先可以在 ElasticSearch 的 yml 配置文件中设置,ES 启动时就会建立与远端集群的链接,配置如下:
复制代码
cluster:
    remote:
        cluster_one: 
            seeds: 127.0.0.1:9300
            transport.ping_schedule: 30s 
        cluster_two:
            seeds: 127.0.0.1:9301
            transport.compress: true 
            skip_unavailable: true 
复制代码

配置说明
cluster_one:自定义的集群名称
seeds:集群的节点列表,可以配置多个
transport.ping_schedule: 设置发送 ping 请求检测连接状态的时间间隔
skip_unavailable:跨集群搜索是否跳过不可用集群
2. ES 请求设置
除了配置文件外,还可以通过 ES 请求的方式设置远程集群,这也是比较推荐的一种方式,API 如下:

1. CURL 请求

curl -XPUT "http://localhost:9202/_cluster/settings" -H 'Content-Type: application/json' -d'
{"persistent":{"cluster":{"remote":{"cluster0":{"seeds":["127.0.0.1:9300"],"transport.ping_schedule":"30s"},"cluster1":{"seeds":["127.0.0.1:9301"],"transport.compress":true,"skip_unavailable":true},"cluster2":{"seeds":["127.0.0.1:9302"]}}}}}

2. ES DSL 命令

复制代码
PUT _cluster/settings
{
  "persistent": {
    "cluster": {
      "remote": {
        "cluster_one": {
          "seeds": [
            "127.0.0.1:9300"
          ],
          "transport.ping_schedule": "60s"
        },
        "cluster_two": {
          "mode": "sniff",
          "seeds": [
            "127.0.0.1:9301"
          ],
          "transport.compress": false
        },
        "cluster_three": {
          "mode": "proxy",
          "proxy_address": "127.0.0.1:9302",
          "transport.compress": true
        }
      }
    }
  }
}
复制代码

3. Kibana Management 添加
除了上面两种方式外,我们还可以在 Kibana 管理界面 Management -> Remote clusters 中进行配置,步骤如图所示:

 上面图中已经有两个配置了,我在添加一个新的集群如下:

 现在三个远端集群就配置好了,如图

 配置完成后可以通过下面的 API 查询:

复制代码
GET _remote/info

{
  "cluster1" : {
    "seeds" : [
      "127.0.0.1:9301"
    ],
    "connected" : true,
    "num_nodes_connected" : 1,
    "max_connections_per_cluster" : 3,
    "initial_connect_timeout" : "30s",
    "skip_unavailable" : true
  },
  "cluster0" : {
    "seeds" : [
      "127.0.0.1:9300"
    ],
    "connected" : true,
    "num_nodes_connected" : 1,
    "max_connections_per_cluster" : 3,
    "initial_connect_timeout" : "30s",
    "skip_unavailable" : false
  },
  "cluster2" : {
    "seeds" : [
      "127.0.0.1:9301"
    ],
    "connected" : true,
    "num_nodes_connected" : 1,
    "max_connections_per_cluster" : 3,
    "initial_connect_timeout" : "30s",
    "skip_unavailable" : true
  }
}
复制代码

4. 删除远端集群
如果某个远端集群不再需要了,可以通过 Kibana 界面或者下面的命令进行删除:

二. 跨集群搜索
远端集群配置完成后就可以进行跨集群搜索了,API 非常简单,就是在 Search 请求中指定对应的集群和索引即可。

1. 搜索本地集群

直接指定索引名默认搜索的就是 local 集群。

远端集群配置完成后就可以进行跨集群搜索了,API 非常简单,就是在 Search 请求中指定对应的集群和索引即可。

1. 搜索本地集群

直接指定索引名默认搜索的就是 local 集群。

GET /twitter/_search
{
  "query": {
    "match": {
      "user": "kimchy"
    }
  }
}

2. 在指定单个集群中搜索

对于远端集群需要采用 集群名称:索引名的方式指定。

复制代码
# 在 cluster_one 远端集群中搜索
GET /cluster_one:twitter/_search
{
  "query": {
    "match": {
      "user": "kimchy"
    }
  }
}
复制代码

3. 在多个集群中实现跨集群搜索

复制代码
# 在 local、clustr_one、cluster_two 三个集群中搜索
GET /twitter,cluster_one:twitter,cluster_two:twitter/_search
{
  "query": {
    "match": {
      "user": "kimchy"
    }
  }
}
复制代码

 

 

 

 

 

posted on   luzhouxiaoshuai  阅读(27)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示