ElasticSearch跨集群离线同步实战

ElasticSearch跨集群离线同步实战

需求

有个ES集群,每天按日期生成一批索引,需要定时同步到另一个集群。目前有两种同步方式:

  1. reIndex
  2. 快照

1. reIndex方式

reIndex方式无需安装任何插件,目标集群只需简单配置。100万条数据大约1分钟内同步完成。

1.1 前置条件

在目标集群的elasticsearch.yml配置文件中设置源集群的白名单:

reindex.remote.whitelist: "<es_ip>:9022"

1.2 同步实践

使用reindex API进行同步:

POST _reindex?slices=auto
{
  "source": {
    "remote": {
      "host": "http://<es_ip>:9022" 
    },
    "index": "test_data",  
    "size": 10000 
  },
  "dest": {
    "index": "test_data_from_reindex"
  }
}
  • size:默认1000条,这里设置为10000条,加快同步速度。

  • slices:按分片数自动切分任务,提高并行度。

1.3 实际应用

  • 利用脚本查询需要同步的索引列表
  • 逐个调用reindex API同步对应索引
  • 使用crontab执行定时同步任务

2. 快照方式

快照方式需要安装NFS或其他共享存储。同步极快,100万数据约1秒完成。

2.1 前置条件

  • 集群安装NFS,确保源和目标集群可以访问

  • 源集群和目标集群在elasticsearch.yml中配置共享快照库路径:

    path.repo: ["/data/share/"]
    
  • 源集群重启后注册快照库:

    PUT /_snapshot/my_backup
    {
      "type": "fs",  
      "settings": {
        "location": "/data/share",
        "max_snapshot_bytes_per_sec": "50mb",
        "max_restore_bytes_per_ser": "50mb" 
      }
    }
    

2.2 备份快照

源集群执行备份命令:

PUT /_snapshot/my_backup/snapshot_20230215_index?wait_for_completion=true 
{
  "indices": "performance-*-20230215",  
  "ignore_unavailable": true,
  "include_global_state": false
}

2.3 恢复快照

目标集群执行恢复命令:

POST /_snapshot/my_backup/snapshot_20230215_index/_restore

2.4 实际应用

  • 脚本获取日期
  • 备份对应日期快照
  • 同步备份快照到目标集群

遇到的问题及解决方案

1. 压缩快照目录后存在漏包问题

  • 问题: 使用单个压缩包压缩20GB快照目录,解压后发现缺少部分文件

  • 解决: 将快照目录分多个压缩包压缩,避免漏包;或者在现场测试环境验证恢复

2. 恢现快照时报错

  • 问题: 恢复快照时报错could not read repository data from index blob

  • 原因: 现场ES 7.3.1,公司ES 7.17.6,版本差异导致的权限问题

  • 解决: 在公司ES的jvm.options添加:

    -Djava.security.policy=/opt/module/elasticsearch-7.17.6/modules/x-pack-sql/plugin-security.policy
    

3. 解压缩工具问题

  • 问题: 使用unzip解压快照压缩包失败

  • 解决: 改用7z解压

4. 权限问题

  • 问题: 恢复快照后,目录属主为root

  • 解决: 恢复后修改属主为es用户:

    chown -R es:es /data/share
    

性能数据模拟

使用reindex生成新索引,修改索引数据时间,用于模拟测试:

nohup ./createPerfermance.sh >createPerfermance.log 2>&1 &
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值