Elasticsearch介绍集群迁移 Es集群如何迁移

Elasticsearch 是一个开源的、分布式的、基于 RESTful API 的搜索和分析引擎。它构建在 Apache Lucene 之上,能够近乎实时地存储、搜索和分析海量数据。

它的核心用途和特点:

  • 全文搜索:这是它的老本行。能快速从大量文本中找出相关结果,支持复杂的查询、高亮、拼写纠错等。常见于网站商品搜索、应用内容搜索。
  • 数据分析与聚合:除了搜索,还能对数据进行统计、分析和可视化(通常配合 Kibana 使用),常用于日志和指标分析(如运维监控、安全分析)。
  • 高扩展与高性能:采用分布式架构,可以通过增加节点来轻松扩展,处理 PB 级数据。数据会被分片并在集群中复制,保证了高可用性和性能。
  • 近实时 (NRT):从数据写入到可被搜索,延迟通常在 1 秒内,满足了大多数实时性要求高的场景。
  • 模式自由 (Schema-less):以 JSON 文档格式存储数据,可以灵活适应数据结构的变化。也支持明确定义映射(Mapping)以优化性能。
  • 丰富的生态系统 :它是 Elastic Stack (ELK/EFK) 的核心组件,常与 Logstash (数据采集处理)、Kibana (数据可视化)、Beats(轻量数据采集器)配合使用,构成完整的数据处理解决方案。

典型应用场景:

  1. 电商平台:商品目录的快速搜索、过滤和推荐。
  2. 日志和指标分析:集中收集服务器、应用日志,进行故障排查和性能监控。
  3. 应用程序性能监控 (APM):追踪应用请求性能。
  4. 企业搜索:整合公司内部不同系统的文档、数据,提供统一搜索入口。

简单来说,Elasticsearch 是一个为处理大规模、多样化数据并提供快速搜索和深度洞察而设计的强大工具。

核心概念

  1. 文档 (Document)
    • 是什么 :Elasticsearch 中最基本的数据单元,类似于数据库中的一行记录。它以 JSON 格式表示一个可被索引的数据实体。
    • 例子:一个商品信息、一篇博客文章、一条日志记录。
  2. 索引 (Index)
    • 是什么文档的集合,类似于数据库中的"表"。它是进行查询、更新和删除操作的主要对象。
    • 关键点:索引名称必须小写。在逻辑上,它代表一类相似的数据。
  3. 类型 (Type) - 已逐步弃用
    • 历史 :在 7.x 版本之前,一个索引中可以定义多种类型(类似于表中的"结构")。自 7.0 起,一个索引只能包含一个 _doc类型,并在 8.0 中完全移除。现在通常将不同类型的数据放在不同的索引中。
  4. 映射 (Mapping)
    • 是什么 :定义了索引中文档的结构和字段属性,类似于数据库的"表结构"或"模式"。
    • 作用:定义每个字段的数据类型(如 text, keyword, date, long)以及如何被索引(如是否分词、是否可聚合)。
  5. 节点 (Node)
    • 是什么 :一个运行中的 Elasticsearch 服务器实例,是集群的组成部分。
    • 类型:有主节点、数据节点、协调节点等不同角色,共同协作。
  6. 集群 (Cluster)
    • 是什么 :由一个或多个节点组成的集合,共同持有全部数据并提供跨节点的联合索引与搜索能力。
  7. 分片 (Shard)
    • 是什么 :索引的子集。一个索引在创建时可以被分成多个分片,分布在不同节点上。
    • 目的
      • 水平拆分数据,允许存储超过单台机器容量的大索引。
      • 并行化操作,提高性能和吞吐量。
    • 类型
      • 主分片:存储数据,数量在索引创建时固定。
      • 副本分片:主分片的拷贝,用于提供高可用性和提升读取性能。

简单类比(与传统数据库对比):

Elasticsearch 传统关系型数据库
索引 数据库
文档 一行记录
字段 一列
映射 表结构
查询 DSL SQL
  1. 为什么大家都用 ES?
    比传统数据库(MySQL)搜索快得多
    支持模糊搜索、分词、拼音、同义词等复杂查询
    能轻松支撑 亿级数据、高并发查询
    生态成熟:Kibana 可视化、Beats 采集、各种语言客户端
  2. 典型技术栈
    最常见组合叫 ELK:
    Elasticsearch:存储、搜索、分析
    Logstash:数据采集、清洗、传输
    Kibana:界面可视化、报表、dashboard

es命令行操作

bash 复制代码
1.查看集群健康状态
[root@es1-0001 ~]# curl -u user:pass -X GET "http://192.168.9.138:9200/_cluster/health?pretty"
{
  "cluster_name" : "my-prod-es-cluster",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 3,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 7,
  "active_shards" : 14,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

#查看节点信息
[root@oams-prd-es1-0001 ~]# curl -u user:pass -X GET "http://192.168.9.138:9200/_cat/nodes?v"
ip           heap.percent ram.percent cpu load_1m load_5m load_15m node.role  master name
192.168.9.136            1          61   1    0.01    0.05     0.02 cdhilmrstw -      es1-0002
192.168.9.138             3          61   0    0.00    0.03     0.03 cdhilmrstw *      es1-0001
192.168.9.137             4          60   2    0.36    0.34     0.14 cdhilmrstw -      es1-0003

#查看所有索引
[root@es1-0001 ~]# curl -u user:pass -X GET "http://192.168.9.138:9200/_cat/indices?v"
health status index         uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .security-7   SeUaLcvJRWiYaCwizc4znw   1   1          8            0     61.5kb         30.7kb
green  open   km_index      20KU35HDTPSbau1ZnMRpcg   1   1          0            0       416b           208b
green  open   search_record 8TMhjI-dTtCPGphRDcTwig   5   1          1            0     14.5kb          7.2kb

#创建索引
[root@es1-0001 ~]# curl -u user:pass -X PUT "http://192.168.9.138:9200/my-index?pretty"
{
  "acknowledged" : true,
  "shards_acknowledged" : true,
  "index" : "my-index"
}
#删除索引
[root@es1-0001 ~]# curl -u user:pass -X DELETE "http://192.168.9.138:9200/my-index?pretty"
{
  "acknowledged" : true
}

Elasticsearch迁移

ESM(Elasticsearch Migration Tool)是一款由 Go 语言开发的轻量级、高性能开源 ES 数据迁移工具,适合跨版本、跨集群、离线 / 在线迁移,尤其适合日志索引批量迁移场景。

核心特性

ini 复制代码
跨版本迁移:支持在 Elasticsearch 1.x 至 7.x 等不同版本间迁移数据。
灵活迁移模式:支持全量迁移和增量同步(--sync参数),后者仅同步发生变更的文档。
数据与配置迁移:可复制索引的设置(--copy_settings)和映射(--copy_mappings),并允许覆盖分片数等配置。
数据转换:支持字段重命名(--rename)、字段过滤(白名单 --fields或黑名单 --skip)以及查询过滤(-q)。
性能可控:通过调节 Scroll API 参数、工作线程数(-w)和批量大小(-b)来控制迁移速度,减少对源集群的影响。
多种I/O支持:支持直接从集群到集群迁移,也支持将数据转储到本地文件(-o)或从文件加载到集群(-i)。

与其他工具对比(日志场景)

方案 速度 跨版本 离线 过滤 易用性
ESM ⭐⭐⭐⭐⭐
reindex ⭐⭐⭐⭐
elasticdump ⭐⭐
logstash ⭐⭐⭐
snapshot ⭐⭐⭐⭐⭐

基本使用方法

  1. 下载与安装:从 GitHub 获取 ESM 的二进制发布包,在 Linux 服务器上解压即可使用。

    bash 复制代码
    # 最新版(2026-03)
    wget https://github.com/medcl/esm/releases/download/v0.8.1/esm-linux-amd64
    # 赋予执行权限
    chmod +x esm-linux-amd64
    mv esm-linux-amd64 esm
  2. 前置条件 :确保源和目标集群网络互通,且在迁移期间不要对源集群索引进行增删改,以免数据不一致。

  3. 基础命令格式

    复制代码
    ./esm -s <源集群URL> -d <目标集群URL> -x <源索引名> -y <目标索引名> [其他参数]

ESM 命令参数详细分类介绍

1. 核心必选参数
参数 全称 说明 示例
-s --source 源集群地址 ,格式为 http(s)://host:port -s https://old-es:9200
-d --dest 目标集群地址,格式同上。 -d http://new-es:9200
-x --index 要迁移的源索引名称 。支持多个索引(逗号分隔)、通配符(*)匹配、排除(-前缀)。 -x "log-*","-log-2020*"迁移所有以log-开头,但排除log-2020的索引
2. 认证与安全参数
参数 全称 说明 示例
-m --source_auth 源集群的 HTTP Basic Auth 认证信息,格式为 username:password -m elastic:changeme
-n --dest_auth 目标集群的认证信息,格式同上。 -n admin:@SecurePass123
--ca-certs 指定用于验证 HTTPS 连接的 CA 证书文件路径。 --ca-certs=/path/to/ca.crt
3. 数据过滤与转换参数
参数 全称 说明 示例
-q --query 使用 Elasticsearch 查询 DSL 来筛选要迁移的文档。 -q '{"range": {"@timestamp": {"gte": "now-7d"}}}'
--fields 指定要迁移的字段白名单(逗号分隔)。 --fields="id,title,content"
--skip 指定要跳过的字段黑名单(逗号分隔)。 --skip="_source.temp_field,_source.debug_info"
--rename 重命名字段 ,格式为 old:new,old2:new2 --rename="old_name:new_name,age:user_age"
4. 性能调优参数(关键)
参数 全称 说明与建议 您的示例
-w --workers 工作线程/协程数。增加此值可提高并发度,但会加大源/目标集群负载。根据集群性能和网络调整。 -w 20(较高并发)
-b --batch_size 每个批次的大小(MB)。增大可减少网络往返次数,但需要更多内存。 -b 10(适中)
-c --scroll_size 每次 Scroll API 请求获取的文档数量。默认通常为100。增大可提升读取吞吐量。 (未指定,使用默认值)
--sliced_scroll_size Sliced Scroll 的切片数 。将一个 Scroll 任务拆分成多个并行执行的切片,大幅提升大索引的读取速度 。建议设置为与 -w相近的值。 --sliced_scroll_size=20(与 -w=20配合良好)
--buffer_count 内存缓冲区中允许缓存的文档总数上限。防止内存溢出。 --buffer_count=1000000(百万级缓冲)
--refresh 设置目标索引的刷新间隔 。设为 -1可在迁移期间完全禁用刷新 ,极大提升写入速度。迁移完成后务必手动恢复 (如 30s)。 --refresh--refresh=-1
5. 索引配置与模式参数
参数 全称 说明 您的示例
--copy_settings 复制源索引的设置 (如分片数、副本数、刷新间隔等)到目标索引。注意:这会将目标索引的分片数也改为源索引的,若目标集群规模不同,可能需要手动调整。 已启用
--copy_mappings 复制源索引的映射(Mapping) 到目标索引。确保数据结构一致。 已启用
-y --dest_index 指定目标索引的名称。不指定时,默认使用与源索引相同的名称。 (未指定,使用原名)
--shards 覆盖目标索引的主分片数 。配合 --copy_settings时,此参数优先级更高。 --shards=5
6. 运行模式与控制参数
参数 全称 说明
--sync 开启增量同步模式 。ESM 将定期轮询(默认间隔5秒)源索引中 @timestamp字段的新增/更新文档并同步。无法同步删除操作
--interval --sync配合使用,指定增量同步的轮询间隔(秒)。
-o --output 将数据转储到本地文件,而非直接写入目标集群。
-i --input 从本地文件读取数据并导入到目标集群。

案例

bash 复制代码
[root@localhost ~]# ./esm-linux-amd64 -s https://192.168.245.252:9200 -d http://192.168.252.138:9200 -x "accesslog","errorlog","test1","test2" -m admin:123456@12 -n admin:654321@21 -w 20 -b 10  --sliced_scroll_size=20 --buffer_count=1000000 --copy_settings --copy_mappings --refresh
相关推荐
大嘴皮猴儿4 小时前
跨境电商视频营销爆发时代:产品视频字幕翻译怎么做?跨马翻译实战全解析
大数据·人工智能·新媒体运营·自动翻译·教育电商
唐可盐5 小时前
【数据治理实践】第 10 期:数据时代的导航——数据目录
大数据·人工智能·数据治理·数字化转型·数据资产·数据资产入表
智链RFID5 小时前
当企业运营遇到瓶颈:RFID 为什么越来越被采用?
大数据·网络·人工智能·科技·rfid
Data-Miner6 小时前
50页可编辑PPT | 某大数据资产平台建设项目启动会材料
大数据
尽兴-6 小时前
Spring Boot 整合 Elasticsearch 8.x 实战总结(含三种实现方式 + 完整示例)
spring boot·elasticsearch·jenkins
旺仔Sec6 小时前
2026江苏省职业院校技能大赛新一代信息技术赛道大数据应用开发项目样题
大数据·数据挖掘
运营小白6 小时前
SEO 工具进阶拆解:SEONIB 批量分发至 WordPress,如何把博客变成“自动运转的内容工厂”?
人工智能·经验分享·搜索引擎·自动化·ai自动写作
wx_xkq12886 小时前
营销智脑V3企业级AI平台架构设计:优秘智能完成从单点工具到全链路生态布局
大数据·人工智能
2601_955363157 小时前
技术赋能B端拓客:号码核验行业的革新与价值重构,氪迹科技法人,股东号码筛选系统,阶梯式价格
大数据·人工智能·重构
大大大大晴天️7 小时前
大数据实时计算-反压机制剖析
大数据·flink·spark streaming