【ES实战】Elasticsearch6开始的CCR

2023-12-24 01:30
文章标签 实战 es ccr elasticsearch6

本文主要是介绍【ES实战】Elasticsearch6开始的CCR,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【ES实战】学习使用Elasticsearch6开始的CCR

本文涉及官网文章地址

  • Overview
  • Requirements for leader indices
  • Automatically following indices
  • Getting started with cross-cluster replication
  • Upgrading clusters

CCR => Cross-cluster replication

文章目录

  • 【ES实战】学习使用Elasticsearch6开始的CCR
    • CCR => Cross-cluster replication
    • 概述
        • 配置主从关系
        • 主从复制的机制
        • 检查复制的进度
        • 暂停、恢复数据的复制
        • 复制时的主索引保的留操作
        • 发现数据复制远远落后的从索引,尝试修复
        • 结束主从复制关系
    • 主索引的必须项
        • 软删除配置
    • 自动创建从索引
      • 管理自动复制模式
    • CCR快速入门指南
        • 常规的开始之前
        • 连接到远程集群
        • 创建主索引
        • 创建从索引
        • 自动创建从索引
    • 远程恢复
    • 集群升级
        • 索引单向复制
        • 索引双向复制

跨集群复制 (CCR) 功能可以将远程集群中的索引复制到本地集群。 此功能可用于一些常见的生产用例:

  • 主集群发生故障时的灾难恢复。 辅助集群可以作为热备份
  • 地理位置邻近,以便可以在本地提供读取服务

概述

跨集群复制是在逐个索引的基础上完成的。 复制关系是在索引级别配置的。 对于每个配置的复制关系,都有一个称为leader index的复制源索引和一个称为follower index的复制目标索引。

复制是主动-被动的。 这意味着虽然leader索引可以直接写入,但follower索引不能直接接收写入。

复制是基于拉模式的。 这意味着复制是由关注者索引驱动的。 这简化了leader索引的状态管理,并且意味着跨集群复制不会干扰leader索引上的索引写入。

为了方便理解,将Leader索引和follower索引定义为主从索引。

配置主从关系

可以通过两种方式配置主从关系:

  • 手动创建特定的从索引
  • 根据自动关注模式自动创建从索引

还必须配置主索引。

当您手动或通过自动跟踪模式启动复制时,将在本地集群上创建从索引。 创建从索引后,远程恢复进程会从远程集群把主索引的所有 Lucene 分段文件复制到本地集群。

默认情况下,如果您手动启动关注,则恢复过程与创建关注者请求是异步的。 该请求在远程恢复过程完成之前返回。 如果您想等待该过程完成,可以使用wait_for_active_shards参数。

主从复制的机制

主从复制关系是在索引级别管理的,而复制是在分片级别执行的。 创建从索引时,它会自动配置为具有与主索引相同数量的分片。从索引中的分片任务通过发送新操作的读取请求来从主索引中相应的分片中拉取。 这些读取请求可以从领导分片的任何副本(主分片或副本)提供服务。

对于从索引的分片任务发送的每个读取请求,如果主索引分片上有可用的新操作,则主索引分片将使用受在配置从索引时建立的读取参数限制的操作进行响应。 如果主索引分片上没有可用的新操作,则主索引分片将等待新操作的配置超时。 如果在该超时时间内发生新操作,主索引分片会立即响应这些新操作。 否则,如果超时,从索引的分片会回复没有新操作。 从索引分片任务更新一些统计数据,并立即向主索引分片发送另一个读取请求。 这确保了远程集群和本地集群之间的网络连接持续被使用,以避免被外部源(例如防火墙)强制终止。

如果读取请求失败,则检查失败的原因。 如果故障原因被认为是可以恢复的故障(例如网络故障),则从索引分片任务进入重试循环。 否则,从索引分片任务将暂停并需要用户干预,然后才能使用 恢复 follower API。

当从索引分片任务接收到操作时,它们被放置在写入缓冲区中。 从索引分片任务管理此写入缓冲区并将批量写入请求从此写入缓冲区提交到从索引分片。 写入缓冲区和这些写入请求由您在配置从索引索引时建立的写入参数进行管理。 写缓冲区充当针对读请求的背压。 如果写入缓冲区超出其配置的限制,则从索引分片任务不会发送额外的读取请求。 当写入缓冲区不再超出其配置的限制时,从索引分片任务将恢复发送读取请求。

从主索引复制操作的复杂性取决于如何创建从索引时或使用 创建追随者 API

应用于主索引的映射更新会根据需要由从索引自动检索。???

从索引所需的mapping会基于主索引的设置更新将根据从索引的需要,进行自动重试。 从索引并不会更新所有设置。 例如,更改主索引上的副本数量不会被跟从索引复制。

如果您对从索引所需的主索引setting采用非动态设置更改,则从索引将经历一个自行关闭、应用设置更新,然后重新打开自身的循环。 在此周期内,从索引将不可用于读取且无法复制写入。

检查复制的进度

您可以使用 get follower stats API 检查分片级别的复制进度 。 通过此 API,您可以深入了解从索引分片任务管理的读写操作。 它还报告可以重试的读取异常和需要用户干预的致命异常。

暂停、恢复数据的复制

您可以使用 pause follower API 暂停复制,然后使用 resume follower API。 如果您的初始配置不适合您的用例,串联使用这些 API 使您能够调整从分片任务的读写参数。

复制时的主索引保的留操作

如果从索引在一段时间内无法从主索引复制操作,则以下过程可能会由于主索引缺乏复制所需的完整操作历史记录而失败。

复制到从索引的操作是使用最初执行操作时生成的序列号来标识的。 Lucene 段文件偶尔会合并,以优化搜索并节省空间。 当这些合并发生时,与已删除或更新的文档相关的操作可以在合并期间被修剪。 当从索引请求修剪操作的序列号时,该过程将由于主索引上丢失的操作而失败。

这种情况在仅添加的工作流程中是不可能的。 由于文档永远不会被删除或更新,因此底层操作不会被修剪。

Elasticsearch 尝试使用称为软删除的 Lucene 功能来缓解更新工作流程的这一潜在问题。 当文档被更新或删除时,底层操作会在 Lucene 索引中保留一段时间。 这段时间由index.soft_deletes.retention_lease.period设置控制,可以在主索引上配置。

index.soft_deletes.retention_lease.period:控制创建或续订保留租期后,将其视为过期的最长时间。

index.soft_deletes.retention.operations:控制软删除文档在合并前的保留数量。保留更多已删除文档可增加基于操作的恢复机会,并允许查询更长的文档历史。 如果启用了软删除,引擎默认情况下会保留直至全局检查点的所有操作。

当从索引启动索引复制时,它会从主索引那里获取保留租约。 这通知主索引不应允许软删除被修剪,直到从索引指示它已收到操作或租约到期。 在租约到期之前进行监控以检测从索引复制问题非常有价值,以便可以在追随者严重落后之前解决问题。

发现数据复制远远落后的从索引,尝试修复

如果从索引远远落后于主索引,以至于无法再复制操作,则可以使用 get follow stats API。 它将被报告为indices[].fatal_exception

为了重新启动从索引,您必须暂停复制进程,关闭索引,然后再次创建从索引。 例如:

POST /follower_index/_ccr/pause_followPOST /follower_index/_closePUT /follower_index/_ccr/follow?wait_for_active_shards=1
{"remote_cluster" : "remote_cluster","leader_index" : "leader_index"
}

重新创建从索引是一种破坏性行为。 从属集群上所有现有的 Lucene 段文件都将被删除。 远程恢复进程再次从leader复制Lucene段文件。 当follower索引初始化后,复制的过程会再次开始。

结束主从复制关系

您可以使用 unfollow API 终止复制。 此 API 将关注者索引转换为常规(非从)索引。

主索引的必须项

跨集群复制的工作原理是重放在主索引分片上执行的各个写入操作的历史记录。 这意味着这些操作的历史记录需要保留在主索引分片上,以便从索引分片任务可以拉动它们。 用于保留这些操作的底层机制是“软删除”。 每当删除或更新现有文档时都会发生软删除。 通过将这些软删除保留到可配置的限制,操作历史记录可以保留在主索引分片上,并在从索引分片任务重放操作历史记录时可供其使用。

必须为要用作主索引的索引启用软删除。 启用软删除需要在创建索引时添加一些索引设置项。 必须将这些设置项添加到创建索引请求或用于管理新索引创建的索引模板中。

这意味着跨集群复制不能用于现有索引。 如果您想要从另一个集群复制现有数据,则必须将数据重新索引到启用软删除的新索引。

软删除配置
  • index.soft_deletes.enabled

    索引上是否启用软删除。 软删除只能在创建索引时配置,并且只能在 6.5.0 或之后创建的索引上配置。 默认值为false

  • index.soft_deletes.retention_lease.period

    在分片历史保留租约被视为过期之前保留分片历史保留租约的最长期限。 分片历史保留租约可确保在 Lucene 索引合并期间保留软删除。 如果软删除在复制到从索引之前被合并,则由于主索引的历史记录不完整,后续过程将失败。 默认值为12h

自动创建从索引

在您想要复制定期创建的新索引(例如每日 Beats 索引)的时间序列用例中,为每个新的主索引手动配置从索引可能会成为操作负担。 跨集群复制中的自动复制功能旨在减轻这种负担。 通过自动复制功能,您可以指定自动复制远程集群中名称与模式匹配的新索引。

管理自动复制模式

您可以使用创建自动跟随模式 API。 当您创建新的自动遵循模式配置时,您正在针对单个远程集群配置模式集合。 每当在远程集群中创建名称与集合中的模式之一匹配的新索引时,都会在本地集群中配置从索引。 从索引使用新索引作为其主索引。

您可以使用获取自动跟踪模式 API 。 要删除已配置的自动跟随模式集合,请使用删除自动跟随模式 API。

由于自动跟踪功能是在后台代表您自动处理的,因此错误报告是通过所选主节点上的日志和跨集群复制统计 API完成的。

CCR快速入门指南

  • Connect a local cluster to a remote cluster 将本地集群连接到远程集群
  • Create a leader index in a remote cluster 在远程集群中创建主索引
  • Create a follower index that replicates a leader index 创建复制主索引的从索引
  • Automatically create follower indices 自动创建从索引
常规的开始之前
  1. 安装两个集群作为本地集群和远程集群。

  2. 购买具有CCR使用权的license

  3. 如果在本地和远程集群中启用了 Elastic 安全功能,则您需要具有适当权限的用户来执行本教程中的步骤。

    跨集群复制功能使用集群权限和内置角色,可以更轻松地控制哪些用户有权管理跨集群复制。

    默认情况下,您可以使用内置的“elastic”用户执行本教程中的所有步骤。 但是,必须先为此用户设置密码,然后用户才能执行任何操作。 有关如何设置该密码的信息,请参阅教程:安全性入门。

    如果您在生产环境中执行这些步骤,请格外小心,因为 elastic用户具有superuser 角色,您可能会无意中进行重大更改。

    或者,您可以将适当的权限分配给您选择的用户 ID。 在包含主索引的远程集群上,用户将需要主索引的read_ccr集群权限以及monitorread权限。

    ccr_user:cluster:- read_ccrindices:- names: [ 'leader-index' ]privileges:- monitor- read
    

    在包含从索引的本地集群上,同一用户将需要从索引的manage_ccr集群权限以及monitorreadwritemanage_follow_index权限。

    ccr_user:cluster:- manage_ccrindices:- names: [ 'follower-index' ]privileges:- monitor- read- write- manage_follow_index
    

    如果您正在管理连接到远程集群 通过集群更新设置 API,您还需要一个具有all集群权限的用户。

连接到远程集群

跨集群复制功能要求将本地集群连接到远程集群。 我们将使用集群别名leader将本地集群连接到远程集群。

PUT /_cluster/settings
{"persistent" : {"cluster" : {"remote" : {"leader" : {"seeds" : ["127.0.0.1:9300" ]}}}}
}

指定远程集群中种子节点的主机名和传输端口。

您可以验证本地集群与远程集群是否成功连接。

GET /_remote/info

API 将通过显示本地集群已连接到远程集群来做出响应。

{"leader" : {"seeds" : ["127.0.0.1:9300"],"http_addresses" : ["127.0.0.1:9200"],"connected" : true, "num_nodes_connected" : 1, "max_connections_per_cluster" : 3,"initial_connect_timeout" : "30s","skip_unavailable" : false}
}

这表明本地集群已连接到远程集群,集群别名为leader

这显示了本地集群连接到的远程集群中的节点数。

创建主索引

主索引需要一个特殊的索引设置,以确保当从索引向主索引请求时,需要复制的操作是可用的。该设置用于在领导者索引上启用软删除。每当删除或更新文档时,就会发生软删除。软删除只能在 Elasticsearch 6.5.0 或之后创建的新索引上启用。

在下面的示例中,我们将在远程群集中创建一个主索引:

PUT /server-metrics
{"settings" : {"index" : {"number_of_shards" : 1,"number_of_replicas" : 0,"soft_deletes" : {"enabled" : true }}},"mappings" : {"metric" : {"properties" : {"@timestamp" : {"type" : "date"},"accept" : {"type" : "long"},"deny" : {"type" : "long"},"host" : {"type" : "keyword"},"response" : {"type" : "float"},"service" : {"type" : "keyword"},"total" : {"type" : "long"}}}}
}

开启主索引的软删除。

创建从索引

从索引是通过create follower API创建的。创建从索引时,必须引用remote cluster 和在远程群集中创建的leader index。

PUT /server-metrics-copy/_ccr/follow?wait_for_active_shards=1
{"remote_cluster" : "leader","leader_index" : "server-metrics"
}

从索引使用 remote recovery 进程初始化。远程恢复过程会将现有的 Lucene 段文件从主索引传输到从索引。远程恢复过程完成后,复制索引就开始了。

现在,当你将文档索引到主索引中时,你会看到这些文档被复制到从索引中。您可以使用 get follower stats API 查看复制的状态。

自动创建从索引

跨群集复制中的auto-follow功能有助于在时间序列用例中跟踪远程群集定期创建的新指数(如每日 Beats 指数)。自动跟踪可使用创建自动跟踪模式 API进行配置。通过自动跟踪模式,您可以引用与本地集群相连的远程集群。您还必须指定一个与要自动跟踪的索引相匹配的模式集合。

For example:

PUT /_ccr/auto_follow/beats
{"remote_cluster" : "leader","leader_index_patterns" :["metricbeat-*", "packetbeat-*" ],"follow_index_pattern" : "{{leader_index}}-copy" 
}

自动复制新的 Metricbeat 索引。

自动复制新的 Packetbeat 索引。

从索引的名称是通过在主索引的名称上添加后缀-copy而从主索引的名称派生而来的。

远程恢复

当您创建从索引时,在其完全初始化之前您无法使用它。 remote recovery过程通过从主索引所在集群中的主分片复制数据来在从索引的节点上构建分片的新副本。 Elasticsearch 使用此远程恢复过程,使用主索引中的数据来引导从索引。 此过程为从索引提供了主索引当前状态的副本,即使由于 Lucene 段合并导致领导者无法获得完整的更改历史记录。

远程恢复是一个网络密集型过程,它将所有 Lucene 段文件从主索引的集群传输到从索引的集群。 从索引请求在主索引集群中的主分片上启动恢复的会话。 然后,从索引同时向主索引请求文件块。 默认情况下,进程同时请求5个大1mb文件块。 此默认行为旨在支持领导者和追随者集群之间存在高网络延迟。

您可以使用动态设置来限制传输数据的速率并管理远程恢复消耗的资源。 请参阅跨集群复制设置。

您可以使用从索引集群上的 recovery API 获取有关正在进行的远程恢复的信息。 远程恢复是使用snapshot and restore基础设施来实现的。 这意味着正在进行的远程恢复在恢复 API 中被标记为snapshot类型。

集群升级

主动使用跨集群复制的集群需要谨慎升级。 否则,在滚动升级过程中,以下索引可能会因以下原因而失败:

  • 如果新的索引设置或映射类型从升级的群集复制到未升级的群集,那么未升级的群集将拒绝接受,并导致索引跟随失败。
  • Lucene 并不向前兼容,当索引跟随回退到基于文件的恢复时,非升级群集中的节点将拒绝来自较新 Lucene 版本的索引文件。

跨集群复制的滚动升级集群在单向索引复制和双向索引复制的情况下是不同的。

索引单向复制

在两个集群之间的单向设置中,一个集群仅包含主索引,另一个集群仅包含复制第一个集群中的索引的从索引。

在此场景中,具有从索引的集群应首先升级,具有主索引的集群应最后升级。 如果集群按此顺序升级,则索引跟踪可以在升级期间继续进行,而无需停机。

请注意,链式索引跟随设置也可以通过这种方式升级。例如,如果集群 A 包含所有主索引,集群 B 复制集群 A 中的索引,集群 C 复制集群 B 中的索引。在这种情况下,应首先升级群集 C,然后升级群集 B,最后升级群集 A。

索引双向复制

在两个集群之间的双向设置中,每个集群都包含主索引和从索引。

在此设置中升级群集时,需要在升级两个群集之前使用pause follower API 暂停所有索引跟踪。升级两个群集后,可以使用resume follower API 恢复索引跟踪。

这篇关于【ES实战】Elasticsearch6开始的CCR的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/530146

相关文章

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

深度解析Spring Boot拦截器Interceptor与过滤器Filter的区别与实战指南

《深度解析SpringBoot拦截器Interceptor与过滤器Filter的区别与实战指南》本文深度解析SpringBoot中拦截器与过滤器的区别,涵盖执行顺序、依赖关系、异常处理等核心差异,并... 目录Spring Boot拦截器(Interceptor)与过滤器(Filter)深度解析:区别、实现

深度解析Spring AOP @Aspect 原理、实战与最佳实践教程

《深度解析SpringAOP@Aspect原理、实战与最佳实践教程》文章系统讲解了SpringAOP核心概念、实现方式及原理,涵盖横切关注点分离、代理机制(JDK/CGLIB)、切入点类型、性能... 目录1. @ASPect 核心概念1.1 AOP 编程范式1.2 @Aspect 关键特性2. 完整代码实

MySQL中的索引结构和分类实战案例详解

《MySQL中的索引结构和分类实战案例详解》本文详解MySQL索引结构与分类,涵盖B树、B+树、哈希及全文索引,分析其原理与优劣势,并结合实战案例探讨创建、管理及优化技巧,助力提升查询性能,感兴趣的朋... 目录一、索引概述1.1 索引的定义与作用1.2 索引的基本原理二、索引结构详解2.1 B树索引2.2

从入门到精通MySQL 数据库索引(实战案例)

《从入门到精通MySQL数据库索引(实战案例)》索引是数据库的目录,提升查询速度,主要类型包括BTree、Hash、全文、空间索引,需根据场景选择,建议用于高频查询、关联字段、排序等,避免重复率高或... 目录一、索引是什么?能干嘛?核心作用:二、索引的 4 种主要类型(附通俗例子)1. BTree 索引(

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

Redis 配置文件使用建议redis.conf 从入门到实战

《Redis配置文件使用建议redis.conf从入门到实战》Redis配置方式包括配置文件、命令行参数、运行时CONFIG命令,支持动态修改参数及持久化,常用项涉及端口、绑定、内存策略等,版本8... 目录一、Redis.conf 是什么?二、命令行方式传参(适用于测试)三、运行时动态修改配置(不重启服务

Python并行处理实战之如何使用ProcessPoolExecutor加速计算

《Python并行处理实战之如何使用ProcessPoolExecutor加速计算》Python提供了多种并行处理的方式,其中concurrent.futures模块的ProcessPoolExecu... 目录简介完整代码示例代码解释1. 导入必要的模块2. 定义处理函数3. 主函数4. 生成数字列表5.