ES 集群 A 和 ES 集群 B 数据流通
说明
如果在另一个 Elasticsearch 集群(ES 集群 A)中更新了备份数据,并且想要在当前环境(ES 集群 B)中看到相应的记录,你需要确保当前环境能够访问到 ES 集群 A 的备份数据。以下是可能的解决方案和步骤。
步骤 1:确保备份可见
-
确认备份位置
- 在更新备份时,确保备份数据已经正确存储到 Elasticsearch 集群 A 中,并且备份的位置是 ES 集群 B 可以访问的。如果你是通过共享存储(如 NFS 或云存储)进行备份,确保当前环境能够访问该存储位置。
-
检查 Snapshot Repository
- 确认在当前环境(ES 集群 B)中,配置了指向集群 A 的备份库。如果你使用了相同的快照存储位置,应该能够直接访问更新的备份。
- 使用以下命令检查当前环境的快照库配置:
GET /_snapshot/_all
- 如果快照库没有列出集群 A 的备份位置,需要重新添加该库。比如,如果快照存储在一个共享的文件系统中,你需要在集群 B 中添加相应的快照库:
PUT /_snapshot/my_backup { "type": "fs", "settings": { "location": "/path/to/backup/directory" } }
-
验证备份更新
- 确保在集群 A 中的快照已经更新,并且目标索引或数据已正确包含在该快照中。
- 可以通过以下命令查看集群 A 中的快照:
GET /_snapshot/my_backup/_all
步骤 2:恢复备份到当前环境
-
执行恢复操作
- 如果确认备份可见并且需要将更新的数据恢复到当前环境,你可以执行恢复操作:
POST /_snapshot/my_backup/snapshot_name/_restore
- 你可以在恢复过程中指定需要恢复的索引,或者使用
indices
参数恢复特定索引。
- 如果确认备份可见并且需要将更新的数据恢复到当前环境,你可以执行恢复操作:
-
恢复时使用重命名规则(如果有冲突)
- 如果当前环境已经存在相同名称的索引,可以使用重命名规则来避免冲突:
POST /_snapshot/my_backup/snapshot_name/_restore { "indices": "index_to_restore", "rename_pattern": "(.+)", "rename_replacement": "$1_restored" }
- 如果当前环境已经存在相同名称的索引,可以使用重命名规则来避免冲突:
步骤 3:同步数据(如果没有使用共享存储)
- 跨集群复制
- 如果你想在集群 B 中直接访问集群 A 的数据,并且备份数据不可访问,你可以使用 跨集群复制(CCR) 功能。CCR 允许你从一个集群将索引数据复制到另一个集群。
- 在集群 B 上创建一个跟随集群索引,指定集群 A 的数据源:
PUT /index_to_follow/_ccr/follow { "remote_cluster": "cluster_a", "leader_index": "index_in_cluster_a" }
步骤 4:检查索引和数据
-
查看当前环境的索引
- 确保恢复的索引已经出现在集群 B 中。可以使用以下命令查看:
GET /_cat/indices?v
- 确保恢复的索引已经出现在集群 B 中。可以使用以下命令查看:
-
验证数据是否更新
- 查询恢复的索引,确保数据已经更新:
GET /index_to_restore/_search
- 查询恢复的索引,确保数据已经更新:
步骤 5:确保集群状态健康
- 确保集群的健康状态良好,并且数据恢复成功。在集群 B 中查看集群健康状态:
GET /_cluster/health
总结
- 更新备份: 确保备份已在集群 A 中更新,且当前环境能够访问该备份。
- 恢复操作: 如果备份可访问,执行恢复操作将其恢复到集群 B。
- 跨集群复制: 如果备份数据无法直接访问,可以使用 CCR 进行跨集群复制。
- 确保集群健康: 在恢复后,验证数据是否正确恢复,并确保集群健康。
如果恢复过程中遇到其他问题,提供更多详细的错误信息和日志,方便进一步分析解决。
恢复实操
GET _cat/snapshots
DELETE /_snapshot/es-c6a76f44-nas
GET _cat/repositories
GET /_snapshot/_all
PUT /_snapshot/es-c6a76f44-nas
{
"type": "fs",
"settings": {
"location": "/mnt/backup/es-c6a76f44"
}
}
GET /_snapshot/es-c6a76f44-nas/_all
GET /_cat/tasks?v
POST /nyc_taxis/_close
GET /nyc_taxis/_stats
POST /nyc_taxis/_open
DELETE /nyc_taxis
POST /_snapshot/es-c6a76f44-nas/es-c6a76f44-backup-full-1735024525/_restore
{
"indices": "nyc_taxis"
}
GET nyc_taxis/_recovery
GET _cat/shards?v=true&h=index,shard,prirep,state,node,unassigned.reason&s=state
GET /_cat/aliases?v