• index 跨集群迁移 && 写入性能优化


    项目一:elasticsearch 迁移方案

    elasticsearch 索引迁移

    1. 查看参考文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.15/docs-reindex.html

    2. 添加需要迁移的es集群白名单到 目的 es配置文件elasticsearch.yml

      reindex.remote.whitelist: "otherhost:9200, another:9200, 127.0.10.*:9200, localhost:*"
      
    3. kibana 开发工具界面使用_reindex,重新创建索引。或者用curl命令都行

      #kibana 界面运行,数据量过大,下面的配置
      POST _reindex?wait_for_completion=false
      {和下面相同的内容}
      
      
      #使用curl 命令
      curl -X POST "localhost:9200/_reindex?pretty" -H 'Content-Type: application/json' -d'
      {
        "source": {
          "remote": {
            "host": "http://otherhost:9200",
            "username": "user",
            "password": "pass"
          },
          "index": "my-index-000001",
          "size": 10,			
          "socket_timeout": "1m",
          "connect_timeout": "10s",
          "query": {						#查询匹配到的文档,只创建这些文档,不设置就复制所有索引
            "match": {
              "test": "data"
            }
          }
        },
        "dest": {
          "index": "my-new-index-000001"
        }
      }
      
      size 10 #从远程服务器重新索引使用默认最大大小为 100mb 的堆上缓冲区。如果远程索引包含非常大的文档,您将需要使用较小的批量大小。下面的示例将批量大小设置10 为非常非常小。
      "socket_timeout": "1m",
      "connect_timeout": "10s"
      还可以使用socket_timeout字段设置远程连接上的套接字读取超时,以及使用字段设置连接超时 connect_timeout。两者都默认为 30 秒。此示例将套接字读取超时设置为一分钟,将连接超时设置为 10 秒:
      
    4. GET _tasks/task_id 根据执行后返回的task_id 查询 reindex 执行情况。

    reindex 提升效率:

    Reindex支持Sliced Scroll以并行化重建索引过程。 这种并行化可以提高效率,并提供一种方便的方法将请求分解为更小的部分。

    sliced原理(from medcl)

    1)用过Scroll接口吧,很慢?如果你数据量很大,用Scroll遍历数据那确实是接受不了,现在Scroll接口可以并发来进行数据遍历了。
    2)每个Scroll请求,可以分成多个Slice请求,可以理解为切片,各Slice独立并行,利用Scroll重建或者遍历要快很多倍。

    elasticsearch 全部数据迁移

    直接复制es设置的path.data后面的目录 到目标es

    项目二:elasticsearch 写入性能优化

    1. 增加refresh间隔

      默认的refresh间隔是1s,用index.refresh_interval参数可以设置,这样会其强迫es每秒中都将内存中的数据写入磁盘中,创建一个新的segment file。正是这个间隔,让我们每次写入数据后,1s以后才能看到。但是如果我们将这个间隔调大,比如30s,可以接受写入的数据30s后才看到,那么我们就可以获取更大的写入吞吐量,因为30s内都是写内存的,每隔30s才会创建一个segment file。

    2. index buffer

      如果我们要进行非常重的高并发写入操作,那么最好将index buffer调大一些,indices.memory.index_buffer_size,这个可以调节大一些,设置的这个index buffer大小,是所有的shard公用的,但是如果除以shard数量以后,算出来平均每个shard可以使用的内存大小,一般建议,但是对于每个shard来说,最多给512mb,因为再大性能就没什么提升了。es会将这个设置作为每个shard共享的index buffer,那些特别活跃的shard会更多的使用这个buffer。默认这个参数的值是10%,也就是jvm heap的10%,如果我们给jvm heap分配10gb内存,那么这个index buffer就有1gb,对于两个shard共享来说,是足够的了。

    https://blog.csdn.net/lm324114/article/details/105028701/

  • 相关阅读:
    golang 操作json
    CloudFoundry应用部署记录
    Stream流
    学做8位计算机
    无废话技术选型之--消息中间件选型(rabbitMQ、rocketMQ、kafka)
    无废话设计模式(22)行为型模式--解释器模式
    无废话设计模式(21)行为模式--迭代器模式
    无废话设计模式(20)行为型模式--职责链模式
    无废话设计模式(19)行为模式--访问者模式
    无废话设计模式(18)行为型模式--命令模式
  • 原文地址:https://www.cnblogs.com/fengfengyang/p/15786325.html
Copyright © 2020-2023  润新知