美文网首页
4.13-跨集群搜索

4.13-跨集群搜索

作者: 落日彼岸 | 来源:发表于2020-04-04 23:13 被阅读0次

⽔平扩展的痛点

  • 单集群 – 当⽔平扩展时,节点数不能⽆限增加

    • 当集群的 meta 信息(节点,索引,集群状态)过多,会导致更新压⼒变⼤,单 个 Active Master 会成为性能瓶颈,导致整个集群⽆法正常⼯作
  • 早期版本,通过 Tribe Node 可以实现多集群访问的需求,但是还存在⼀定的问题

    • Tribe Node 会以 Client Node 的⽅式加⼊每个集群。 集群中 Master 节点的任 务变更需要 Tribe Node 的回应才能继续

    • Tribe Node 不保存 Cluster State 信息,⼀旦重启,初始化很慢

    • 当多个集群存在索引重名的情况时,只能设置⼀种 Prefer 规则

跨集群搜索 - Cross Cluster Search

  • 早期 Tribe Node 的⽅案存在⼀定的问题,现已被 Deprecated

  • Elasticsearch 5.3 引⼊了跨集群搜索的功能(Cross Cluster Search),推荐使⽤

    • 允许任何节点扮演 federated 节点,以轻量的⽅式,将搜索请求进⾏代理

    • 不需要以 Client Node 的形式加⼊其他集群

配置及查询

PUT _cluster/settings
{
  "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"
          ]
        }
      }
    }
  }
}

GET /cluster_one:tmdb,movies/_search
{
  "query": {
    "match": {
      "title": "matrix"
    }
  }
}

PUT _cluster/settings
{
  "persistent": {
    "cluster.remote.cluster_two.skip_unavailable": true
  }
}

Demo

  • 配置跨集群搜索

  • 每个集群创建相同的索引名,并写⼊数据

  • 跨集群搜索

  • 在 Kibana 的 Index Pattern 中配置跨集群搜索 *:users

    Index Pattern

本节知识点回顾

  • 当集群⽆法⽔平扩展,或者需要将不同的集群数据实现 数据的 Federation,可以采⽤跨 集群搜索(CCS)

  • Tribe Node 和 Cross Cluster Search 的⽐较,推荐在新版本中使⽤ CCS

  • 如何配置并使⽤ Cross Cluster Search 查询数据

课程demo

//启动3个集群

bin/elasticsearch -E node.name=cluster0node -E cluster.name=cluster0 -E path.data=cluster0_data -E discovery.type=single-node -E http.port=9200 -E transport.port=9300
bin/elasticsearch -E node.name=cluster1node -E cluster.name=cluster1 -E path.data=cluster1_data -E discovery.type=single-node -E http.port=9201 -E transport.port=9301
bin/elasticsearch -E node.name=cluster2node -E cluster.name=cluster2 -E path.data=cluster2_data -E discovery.type=single-node -E http.port=9202 -E transport.port=9302


//在每个集群上设置动态的设置
PUT _cluster/settings
{
  "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"
          ]
        }
      }
    }
  }
}

#cURL
curl -XPUT "http://localhost:9200/_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"]}}}}}'

curl -XPUT "http://localhost:9201/_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"]}}}}}'

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"]}}}}}'


#创建测试数据
curl -XPOST "http://localhost:9200/users/_doc" -H 'Content-Type: application/json' -d'
{"name":"user1","age":10}'

curl -XPOST "http://localhost:9201/users/_doc" -H 'Content-Type: application/json' -d'
{"name":"user2","age":20}'

curl -XPOST "http://localhost:9202/users/_doc" -H 'Content-Type: application/json' -d'
{"name":"user3","age":30}'


#查询
curl -XPOST "http://localhost:9200/users,cluster1:users,cluster2:users/_search" -H 'Content-Type: application/json' -d'{"query":{"range":{"age":{"gte":20,"lte":40}}}}'

POST /users,cluster1:users,cluster2:users/_search
{
  "query": {
    "range": {
      "age": {
        "gte": 20,
        "lte": 40
      }
    }
  }
}

相关阅读

相关文章

  • 4.13-跨集群搜索

    ⽔平扩展的痛点 单集群 – 当⽔平扩展时,节点数不能⽆限增加当集群的 meta 信息(节点,索引,集群状态)过多,...

  • Elasticsearch系列(11)Search之跨集群搜索

    跨集群搜索(Cross-cluster search)允许我们对一个或多个远程集群运行单个搜索请求。例如,我们可以...

  • 【elasticsearch】21、配置跨集群搜索

    水平拓展的痛点 但集群 - 当水平拓展时,节点数不能无限增加当集群的meta信息(节点,索引,集群状态)过多,会导...

  • hdfs文件迁移

    hadoop跨集群之间迁移HDFS数据 不同hadoop集群之间迁移hive数据 hadoop跨集群之间迁移hiv...

  • Hadoop配置Kerberos互信

    当Hadoop集群开启Kerberos后,跨集群访问需要配置Kerberos cross-realm(跨域访问)。...

  • HBase跨集群迁移调研方案

    HBase跨集群迁移调研方案回顾 迁移目的 HBase跨集群平滑迁移 方案 方案一 方案二 操作命令 snapsh...

  • docker应用-6(mysql+mycat 搭建数据库集群)

    上一节,通过使用overlay网络,搭建了跨主机的docker容器集群。下面,在这个跨主机的docker容器集群环...

  • Elasticsearch数据迁移与集群容灾

    本文讨论如何跨集群迁移ES数据以及如何实现ES的同城跨机房容灾和异地容灾。 跨集群数据迁移 在ES的生产实践中,往...

  • Kafka 跨集群同步方案

    该方案解决Kafka跨集群同步、创建Kafka集群镜像等相关问题,主要使用Kafka内置的MirrorMaker工...

  • 跨集群hbase表迁移

    HBase提供了copyTable,相当于distcp,但影响在线应用 使用创建快照,跨集群传送集群,然后再还原快...

网友评论

      本文标题:4.13-跨集群搜索

      本文链接:https://www.haomeiwen.com/subject/eclephtx.html