elasticsearch(四) 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/

上一篇:Netty学习笔记(1) NIO基础-2


下一篇:NIO - 非阻塞式IO