更新时间:2023-06-20 GMT+08:00

使用Logstash迁移集群数据

Logstash是ES官方提供的数据迁移工具。

  1. 申请ECS虚拟机,虚拟机规格建议大于8u16g。
  2. 在ECS中安装Logstash。

    1. 由于Logstash依赖Java,需要先安装JDK。执行如下命令,使用yum安装JDK。
      yum install java
      yum install python
    2. 下载Logstash。Logstash版本和ES版本不需要强制一致,一般选择和ES版本接近的Logstash版本。

      推荐使用Logstash 7.10.2 OSS版本,下载地址:https://www.elastic.co/downloads/past-releases/logstash-oss-7-10-2

    3. 执行如下命令,使用yum安装Logstash。
      yum install logstash-oss-7.10.0-x86_64.rpm

      其中“logstash-oss-7.10.0-x86_64.rpm”替换成实际Logstash的安装包名称。

  3. 修改Logstash的jvm配置,提升集群数据的迁移效率。

    执行如下命令,修改jvm配置。Logstash默认的堆内存是1G,建议修改为集群节点内存的一半。

    vim /etc/logstash/jvm.options
    -Xms4g
    -Xmx4g

  4. 修改Logstash的conf配置文件,设置集群迁移配置。

    1. 进入Logstash配置文件的目录下“/etc/logstash/conf.d/”
      cd /etc/logstash/conf.d/
    2. 创建“logstash-es-es-all.conf”文件。
      vim logstash-es-es-all.conf
    3. 在文件“logstash-es-es-all.conf”里添加如下配置内容并保存。

      根据实际情况修改“hosts”“user”“password”“index” 等字段。

      input{
          elasticsearch{
              # 源端集群地址。
              hosts =>  ["http://172.16.xxx.xxx:9200", "http://172.16.xxx.xxx:9200"]
              # 安全集群需要配置登录集群的用户名和密码,非安全集群可以使用“#”注释掉user和password。
              # user => "xxxx"
              # password => "xxxx"
              # 需要迁移的索引列表,以逗号“,”分隔,基于机器实际信息填写,“-.*”表示排除“.”开始的索引。
              index => "abmau_edi*,business_test,goods_deploy*, -.*"
              # 以下三项保持默认即可,包含线程数和迁移数据大小和logstash jvm配置相关。
              docinfo=>true
              # 默认不变,如果需要增加迁移速度可以适当调高以下两个参数,但是需要保证机器配置。
              slices => 3
              size => 3000
          }
      }
      
      filter {
        # 去掉一些logstash自己加的字段。
        mutate {
          remove_field => ["@timestamp", "@version"]
        }
      }
      
      output{
          elasticsearch{
              # 目的端集群地址。
              hosts => ["http://10.100.xx.xx:9200", "http://10.100.xx.xx:9200"]
              # 登录目标集群的用户名和密码,没有user和password可以使用“#”注释掉。
              user => "admin"
              password => "*****"        
              # 目的端索引名称,以下配置为和源端保持一致。
              index => "%{[@metadata][_index]}"
              # 目的端索引type,以下配置为和源端保持一致。
              document_type => "%{[@metadata][_type]}"
              # 目标端数据的_id,如果不需要保留原_id,可以删除,删除后集群的性能会更好。
              document_id => "%{[@metadata][_id]}"
              ilm_enabled => false
              manage_template => false
          }
      
          # 调试信息,正式迁移时建议去掉调试信息。
          # stdout { codec => rubydebug { metadata => true }}
      }

  5. 启动Logstash迁移集群数据。

    1. 执行如下命令启动Logstash,开始迁移数据。
      /usr/share/logstash/bin/logstash --path.settings /etc/logstash
    2. 查看Logstash日志文件,确认任务进展。Logstash日志目录是“/var/log/logstash/”
    3. 任务启动完毕后,等待数据迁移完成。