es离线部署与配置

Elasticsearch快照迁移是一种非常可靠、高效的数据迁移方案,特别适合大数据量、跨版本迁移或作为数据备份的场景。它通过将数据备份到共享仓库,再从中恢复的方式来完成迁移。

为了帮助您清晰地了解并执行整个流程,我为您梳理了以下详细的步骤和说明。

🔍 快照迁移流程概览

阶段 关键步骤 执行集群 核心目标
1. 准备阶段 配置共享存储/仓库 源集群 & 目标集群 建立一个双方都能访问的存储位置,用于存放快照。
2. 备份阶段 创建快照 源集群 将源索引的数据状态保存到共享仓库中。
3. 恢复阶段 从快照恢复 目标集群 从共享仓库中的快照,将数据还原到目标集群。
4. 验证阶段 检查数据完整性 目标集群 验证索引是否成功恢复,数据是否一致。

🛠️ 详细操作步骤

阶段一:准备共享仓库

这是最关键的一步。您需要一个源集群和目标集群所有节点都能访问的共享存储

1. 选择并设置共享存储

假设我们使用NFS,并将其挂载到了所有节点的 /mnt/es_snapshots 目录下。

2. 在源集群注册快照仓库

  • 修改配置 :在源集群每个节点elasticsearch.yml 文件中添加仓库路径,然后重启集群。

    yaml 复制代码
    path.repo: ["/mnt/es_snapshots"]
  • 注册仓库 :通过API告诉ES这个仓库的位置。

    bash 复制代码
    # 在源集群执行
    curl -X PUT "http://<您的ES地址>:9200/_snapshot/my_migration_repo"
    {
      "type": "fs",
      "settings": {
        "location": "/mnt/es_snapshots",
        "compress": true
      }
    }
    • my_migration_repo:是您为仓库取的名字。
    • type: "fs":表示使用共享文件系统。

阶段二:在源集群创建快照

现在,您可以将数据备份到刚创建的仓库中。

bash 复制代码
# 在源集群执行
  curl -X PUT "http://<您的ES地址>:9200/_snapshot/my_migration_repo/my_snapshot_20240527?wait_for_completion=true
{
  "indices": "index1,index2",        # 指定要备份的索引,用逗号分隔。不指定则备份所有。
  "ignore_unavailable": true,        # 如果某个索引不存在,忽略它
  "include_global_state": false      # 不建议迁移集群全局状态,以免冲突
}
  • my_snapshot_20240527:是快照的名称,建议包含日期。
  • wait_for_completion=true:参数会让请求一直等待,直到快照完成。对于大数据量,可以设为 false 让它在后台运行,然后通过 GET /_snapshot/my_migration_repo/my_snapshot_20240527 来查询状态。

阶段三:在目标集群恢复快照

1. 同样配置目标集群

我们需要源集群创建快照文件复制到目标集群的path.repo目录中,当执行_restore的时候会从对应的仓库下获取对应名称的快照,这个名称源集群创建的时候是什么就是什么。

  • 在目标集群每个节点elasticsearch.yml 中配置相同的 path.repo,并重启集群。

    yaml 复制代码
    path.repo: ["/mnt/es_snapshots"]
  • 在目标集群上注册同一个仓库 (使用相同的名称和配置)。

    bash 复制代码
    # 在目标集群执行
    curl -X PUT "http://<您的ES地址>:9200/_snapshot/my_migration_repo"
    {
      "type": "fs",
      "settings": {
        "location": "/mnt/es_snapshots",
        "compress": true
      }
    }

2. 执行恢复操作

bash 复制代码
# 在目标集群执行
curl POST "http://<您的ES地址>:9200/_snapshot/my_migration_repo/my_snapshot_20240527/_restore?wait_for_completion=true"
{
  "indices": "index1,index2",        # 指定要恢复的索引
  "ignore_unavailable": true,
  "include_global_state": false,
  "rename_pattern": "(.+)",          # 可选:使用正则表达式重命名索引
  "rename_replacement": "restored_$1" # 例如,给所有恢复的索引加上前缀
}

阶段四:验证恢复状态

恢复完成后,进行数据验证。

bash 复制代码
# 1. 检查索引是否存在
curl GET "http://<您的ES地址>:9200/_cat/indices/index1,index2?v

# 2. 对比文档数量
GET _cat/count/index1
GET _cat/count/index2

# 3. 检查恢复状态(如果恢复过程较长)
curl GET "http://<您的ES地址>:9200/_recovery?pretty

⚠️ 重要注意事项

  • 版本兼容性 :目标集群的Elasticsearch主版本号必须大于或等于源集群的版本。例如,可以从 7.x 恢复到 8.x,但不能从 8.x 恢复到 7.x。
  • 停止写入 :为了确保数据一致性,建议在创建快照前,停止对源索引的写操作,或将索引设置为只读模式。
  • 存储空间:确保共享存储(如NFS)有足够的空间存放快照。
  • 权限问题 :确保ES进程有权限在共享目录(如 /mnt/es_snapshots)中读写。

💎 总结

快照迁移方案的优势在于其稳定性和对大数据量的友好性。虽然初次设置共享存储可能需要一些步骤,但一旦配置完成,它就是最可靠的迁移方式之一,尤其适合作为生产环境的迁移方案。

⚠️ 常见问题

  • 确认快照仓库 : curl -XGET 'http://<您的ES地址>:9200/_snapshot/my_migration_repo',请确保 my_migration_repo 是您之前创建并用于存储快照的仓库名称。
  • 查看仓库中的所有快照 : curl -XGET 'http://<您的ES地址>:9200/_snapshot/my_migration_repo/_all?pretty',可以查看快照的名称以及仓库的名称。
  • 创建的分片处于 UNASSIGNED 状态 ,意味着分片无法分配到任何节点。这是常见的集群问题。 我们查看分片的情况:curl -XGET 'http://<您的ES地址>:9200/_cat/indices?v,发现目标索引的health是red状态。curl -XGET 'http://<您的ES地址>:9200/_cat/allocation?v,发现节点处于UNASSIGNED状态,没有分配,然后查看分配情况。
  • 启动发现缺少了插件 : curl -X POST "localhost:9200/_cluster/reroute?pretty",提示缺少analyzer [ik_max_word_]has not been configured in mappings.
  • 安装analyzer ik插件 : https://release.infinilabs.com/analysis-ik/stable/下载与es版本对应的插件,上传到es目录的plugins下,创建一个plugins/ik目录,使用unzip解压即可,然后验证:./bin/elasticsearch-plugin list,可以看到新装的插件。

常见指令

  • 手动管理 Elasticsearch 分片分配的利器:curl -X POST "localhost:9200/_cluster/reroute?pretty"
  • ES查看索引状态:curl -XGET 'http://<您的ES地址>:9200/_cat/indices?v'
  • ES创建索引:curl -X PUT "localhost:9200/my_index"

ik 分词设置

  • 索引分词设置curl -XGET 'http://<您的ES地址>:9200/my_index/_setting'
  • 查看字段的分词映射curl -XGET 'http://<您的ES地址>:9200/my_index/_mapping'
相关推荐
间彧1 分钟前
Kubernetes的Pod与Docker Compose中的服务在概念上有何异同?
后端
间彧5 分钟前
从开发到生产,如何将Docker Compose项目平滑迁移到Kubernetes?
后端
间彧11 分钟前
如何结合CI/CD流水线自动选择正确的Docker Compose配置?
后端
间彧12 分钟前
在多环境(开发、测试、生产)下,如何管理不同的Docker Compose配置?
后端
间彧13 分钟前
如何为Docker Compose中的服务配置健康检查,确保服务真正可用?
后端
间彧17 分钟前
Docker Compose和Kubernetes在编排服务时有哪些核心区别?
后端
间彧23 分钟前
如何在实际项目中集成Arthas Tunnel Server实现Kubernetes集群的远程诊断?
后端
brzhang1 小时前
读懂 MiniMax Agent 的设计逻辑,然后我复刻了一个MiniMax Agent
前端·后端·架构
草明2 小时前
Go 的 IO 多路复用
开发语言·后端·golang
蓝-萧2 小时前
Plugin ‘mysql_native_password‘ is not loaded`
java·后端