Obtenha resiliência entre regiões com o Amazon OpenSearch Ingestion


Implantações entre regiões fornecem maior resiliência para manter a continuidade dos negócios durante interrupções, desastres naturais ou outras interrupções operacionais. Muitas grandes empresas projetam e implantam planos especiais para prontidão durante tais situações. Elas contam com soluções criadas com serviços e recursos da AWS para melhorar sua confiança e tempos de resposta. Serviço Amazon OpenSearch é um serviço gerenciado para Pesquisa Abertaum mecanismo de pesquisa e análise em escala. O OpenSearch Service fornece alta disponibilidade em uma região da AWS por meio de seu modelo de implantação Multi-AZ e fornece resiliência regional com replicação entre clusters. Amazon OpenSearch sem servidor é uma opção de implantação que fornece dimensionamento automático sob demanda, ao qual continuamos trazendo muitos recursos.

Com o recurso de replicação entre clusters existente no OpenSearch Service, você designa um domínio como líder e outro como seguidor, usando um modelo de replicação ativo-passivo. Embora esse modelo ofereça uma maneira de continuar as operações durante o comprometimento regional, ele exige que você configure manualmente o seguidor. Além disso, após a recuperação, você precisa reconfigurar o relacionamento líder-seguidor entre os domínios.

Nesta postagem, descrevemos duas soluções que fornecem resiliência entre regiões sem a necessidade de restabelecer relacionamentos durante um failback, usando um modelo de replicação ativo-ativo com Ingestão do Amazon OpenSearch (OSI) e Serviço de armazenamento simples da Amazon (Amazon S3). Essas soluções se aplicam tanto aos clusters gerenciados do OpenSearch Service quanto às coleções do OpenSearch Serverless. Usamos o OpenSearch Serverless como exemplo para as configurações neste submit.

Visão geral da solução

Descrevemos duas soluções neste submit. Em ambas as opções, fontes de dados locais para uma região gravam em um pipeline de ingestão OpenSearch (OSI) configurado dentro da mesma região. As soluções são extensíveis para várias regiões, mas mostramos duas regiões como um exemplo, pois a resiliência regional entre duas regiões é um padrão de implantação widespread para muitas empresas de grande porte.

Você pode usar essas soluções para atender às necessidades de resiliência entre regiões para implantações do OpenSearch Serverless e às necessidades de replicação ativa-ativa para opções provisionadas e sem servidor do OpenSearch Service, especialmente quando as fontes de dados produzem dados distintos em diferentes regiões.

Pré-requisitos

Conclua as seguintes etapas de pré-requisito:

  1. Implantar domínios do OpenSearch Service ou Coleções sem servidor OpenSearch em todas as Regiões onde a resiliência é necessária.
  2. Criar buckets S3 em cada região.
  3. Configurar Gerenciamento de identidade e acesso da AWS (IAM) permissões necessárias para OSI. Para obter instruções, consulte Amazon S3 como fonte. Escolher Serviço Amazon Easy Queue (Amazon SQS) como método de processamento de dados.

Depois de concluir essas etapas, você pode criar dois pipelines OSI, um em cada região, com as configurações detalhadas nas seções a seguir.

Use o OpenSearch Ingestion (OSI) para gravações entre regiões

Nesta solução, o OSI pega os dados que são locais para a Região em que está e os grava na outra Região. Para facilitar as gravações entre Regiões e aumentar a durabilidade dos dados, usamos um bucket S3 em cada Região. O pipeline OSI na outra Região lê esses dados e grava na coleção em sua Região native. O pipeline OSI na outra Região segue um fluxo de dados semelhante.

Ao ler dados, você tem opções: Amazon SQS ou Amazon S3 scans. Para esta publicação, usamos Amazon SQS porque ele ajuda a fornecer entrega de dados quase em tempo actual. Esta solução também facilita a gravação diretamente nesses buckets locais no caso de fontes de dados OSI baseadas em pull. Consulte Fonte sob Conceitos-chave para entender os diferentes tipos de fontes que o OSI usa.

O diagrama a seguir mostra o fluxo de dados.

Obtenha resiliência entre regiões com o Amazon OpenSearch Ingestion

O fluxo de dados consiste nas seguintes etapas:

  1. Fontes de dados locais para uma região gravam seus dados no pipeline OSI em sua região. (Esta solução também oferece suporte a fontes que gravam diretamente no Amazon S3.)
  2. O OSI grava esses dados em coleções seguidas por buckets S3 na outra região.
  3. O OSI lê os outros dados da região do bucket S3 native e os grava na coleção native.
  4. As coleções em ambas as regiões agora contêm os mesmos dados.

Os snippets a seguir mostram a configuração dos dois pipelines.

#pipeline config for cross area writes
model: "2"
write-pipeline:
  supply:
    http:
      path: "/logs"
  processor:
    - parse_json:
  sink:
    # First sink to identical area assortment
    - opensearch:
        hosts: ( "https://abcdefghijklmn.us-east-1.aoss.amazonaws.com" )
        aws:
          sts_role_arn: "arn:aws:iam::1234567890:function/pipeline-role"
          area: "us-east-1"
          serverless: true
        index: "cross-region-index"
    - s3:
        # Second sink to cross area S3 bucket
        aws:
          sts_role_arn: "arn:aws:iam::1234567890:function/pipeline-role"
          area: "us-east-2"
        bucket: "osi-cross-region-bucket"
        object_key:
          path_prefix: "osi-crw/%{yyyy}/%{MM}/%{dd}/%{HH}"
        threshold:
          event_collect_timeout: 60s
        codec:
          ndjson:

O código para o pipeline de gravação é o seguinte:

#pipeline config to learn information from native S3 bucket
model: "2"
read-write-pipeline:
  supply:
    s3:
      # S3 supply with SQS 
      acknowledgments: true
      notification_type: "sqs"
      compression: "none"
      codec:
        newline:
      sqs:
        queue_url: "https://sqs.us-east-1.amazonaws.com/1234567890/my-osi-cross-region-write-q"
        maximum_messages: 10
        visibility_timeout: "60s"
        visibility_duplication_protection: true
      aws:
        area: "us-east-1"
        sts_role_arn: "arn:aws:iam::123567890:function/pipe-line-role"
  processor:
    - parse_json:
  route:
  # Routing makes use of the s3 keys to make sure OSI writes information solely as soon as to native area 
    - local-region-write: "accommodates(/s3/key, "osi-local-region-write")"
    - cross-region-write: "accommodates(/s3/key, "osi-cross-region-write")"
  sink:
    - pipeline:
        title: "local-region-write-cross-region-write-pipeline"
    - pipeline:
        title: "local-region-write-pipeline"
        routes:
        - local-region-write
local-region-write-cross-region-write-pipeline:
  # Learn S3 bucket with cross-region-write
  supply:
    pipeline: 
      title: "read-write-pipeline"
  sink:
   # Sink to local-region managed OpenSearch service 
    - opensearch:
        hosts: ( "https://abcdefghijklmn.us-east-1.aoss.amazonaws.com" )
        aws:
          sts_role_arn: "arn:aws:iam::12345678890:function/pipeline-role"
          area: "us-east-1"
          serverless: true
        index: "cross-region-index"
local-region-write-pipeline:
  # Learn local-region write  
  supply:
    pipeline: 
      title: "read-write-pipeline"
  processor:
    - delete_entries:
        with_keys: ("s3")
  sink:
     # Sink to cross-region S3 bucket 
    - s3:
        aws:
          sts_role_arn: "arn:aws:iam::1234567890:function/pipeline-role"
          area: "us-east-2"
        bucket: "osi-cross-region-write-bucket"
        object_key:
          path_prefix: "osi-cross-region-write/%{yyyy}/%{MM}/%{dd}/%{HH}"
        threshold:
          event_collect_timeout: "60s"
        codec:
          ndjson:

Para separar gestão e operações, usamos dois prefixos, osi-local-region-write e osi-cross-region-writepara buckets em ambas as regiões. O OSI usa esses prefixos para copiar apenas dados da região native para a outra região. O OSI também cria as chaves s3.bucket e s3.key para decorar documentos escritos em uma coleção. Removemos essa decoração ao escrever entre Regiões; ela será adicionada de volta pelo pipeline na outra Região.

Esta solução fornece entrega de dados quase em tempo actual entre Regiões, e os mesmos dados estão disponíveis em ambas as Regiões. No entanto, embora o OpenSearch Service contenha os mesmos dados, os buckets em cada Região contêm apenas dados parciais. A solução a seguir aborda isso.

Use o Amazon S3 para gravações entre regiões

Nesta solução, usamos o Recurso de replicação de região do Amazon S3. Esta solução suporta todos os fontes de dados disponíveis com OSI. O OSI usa novamente dois pipelines, mas a principal diferença é que o OSI grava os dados no Amazon S3 primeiro. Depois de concluir as etapas comuns a ambas as soluções, consulte Exemplos de configuração de replicação ao vivo para obter instruções sobre como configurar a replicação entre regiões do Amazon S3. O diagrama a seguir mostra o fluxo de dados.

O fluxo de dados consiste nas seguintes etapas:

  1. Fontes de dados locais de uma região gravam seus dados no OSI. (Esta solução também oferece suporte a fontes que gravam diretamente no Amazon S3.)
  2. Esses dados são primeiro gravados no bucket S3.
  3. O OSI lê esses dados e os grava na coleção native da Região.
  4. O Amazon S3 duplicate dados entre regiões e o OSI lê e grava esses dados na coleção.

Os snippets a seguir mostram a configuração de ambos os pipelines.

model: "2"
s3-write-pipeline:
  supply:
    http:
      path: "/logs"
  processor:
    - parse_json:
  sink:
    # Write to S3 bucket that has cross area replication enabled
    - s3:
        aws:
          sts_role_arn: "arn:aws:iam::1234567890:function/pipeline-role"
          area: "us-east-2"
        bucket: "s3-cross-region-bucket"
        object_key:
          path_prefix: "pushedlogs/%{yyyy}/%{MM}/%{dd}/%{HH}"
        threshold:
          event_collect_timeout: 60s
          event_count: 2
        codec:
          ndjson:

O código para o pipeline de gravação é o seguinte:

model: "2"
s3-read-pipeline:
  supply:
    s3:
      acknowledgments: true
      notification_type: "sqs"
      compression: "none"
      codec:
        newline:
      # Configure SQS to inform OSI pipeline
      sqs:
        queue_url: "https://sqs.us-east-2.amazonaws.com/1234567890/my-s3-crr-q"
        maximum_messages: 10
        visibility_timeout: "15s"
        visibility_duplication_protection: true
      aws:
        area: "us-east-2"
        sts_role_arn: "arn:aws:iam::1234567890:function/pipeline-role"
  processor:
    - parse_json:
  # Configure OSI sink to maneuver the recordsdata from S3 to OpenSearch Serverless
  sink:
    - opensearch:
        hosts: ( "https://abcdefghijklmn.us-east-1.aoss.amazonaws.com" )
        aws:
          # Function should have entry to S3 OpenSearch Pipeline and OpenSearch Serverless
          sts_role_arn: "arn:aws:iam::1234567890:function/pipeline-role"
          area: "us-east-1"
          serverless: true
        index: "cross-region-index"

A configuração para esta solução é relativamente mais simples e depende da replicação entre regiões do Amazon S3. Esta solução garante que os dados no bucket do S3 e na coleção OpenSearch Serverless sejam os mesmos em ambas as regiões.

Para obter mais informações sobre o SLA para esta replicação e métricas disponíveis para monitorar o processo de replicação, consulte Atualização de replicação S3: SLA de replicação, métricas e eventos.

Cenários de imparidade e considerações adicionais

Vamos considerar um cenário de comprometimento regional. Para este caso de uso, supomos que seu aplicativo é alimentado por uma coleção OpenSearch Serverless como backend. Quando uma região é prejudicada, esses aplicativos podem simplesmente fazer failover para a coleção OpenSearch Serverless na outra região e continuar as operações sem interrupção, porque a totalidade dos dados presentes antes do comprometimento está disponível em ambas as coleções.

Quando o comprometimento da Região for resolvido, você pode fazer failback para a coleção OpenSearch Serverless naquela Região imediatamente ou depois de permitir algum tempo para que os dados ausentes sejam preenchidos naquela Região. As operações podem então continuar sem interrupção.

Você pode automatizar essas operações de failover e failback para fornecer uma experiência de usuário perfeita. Essa automação não está no escopo deste submit, mas será abordada em um submit futuro.

A solução de replicação entre clusters existente exige que você restabeleça manualmente um relacionamento líder-seguidor e reinicie a replicação do início, uma vez recuperado de um comprometimento. Mas as soluções discutidas aqui retomam automaticamente a replicação do ponto em que ela parou pela última vez. Se por algum motivo apenas o serviço Amazon OpenSearch que são coleções ou domínio falhar, os dados ainda estarão disponíveis em um bucket native e serão preenchidos novamente assim que a coleção ou o domínio ficarem disponíveis.

Você pode usar efetivamente essas soluções em um modelo de replicação ativa-passiva também. Nesses cenários, é suficiente ter um conjunto mínimo de recursos na região de replicação, como um único bucket S3. Você pode modificar essa solução para resolver diferentes cenários usando serviços adicionais como Amazon Managed Streaming para Apache Kafka (Amazon MSK), que possui um recurso de replicação.

Ao construir soluções inter-regionais, considere custos de transferência de dados entre regiões para AWS. Como prática recomendada, considere adicionar um fila de mensagens mortas para todos os seus pipelines de produção.

Conclusão

Nesta publicação, descrevemos duas soluções que alcançam resiliência regional para clusters gerenciados OpenSearch Serverless e OpenSearch Service. Se você precisa de controle explícito sobre a gravação de dados entre regiões, use a solução um. Em nossos experimentos com poucos KBs de dados, a maioria das gravações foi concluída em um segundo entre duas regiões escolhidas. Escolha a solução dois se você precisa da simplicidade que a solução oferece. Em nossos experimentos, a replicação foi concluída completamente em alguns segundos. 99,99% dos objetos serão replicados em 15 minutos. Essas soluções também servem como uma arquitetura para um modelo de replicação ativo-ativo no OpenSearch Service usando o OpenSearch Ingestion.

Você também pode usar o OSI como um mecanismo para pesquisar dados disponíveis em outros serviços da AWS, como o Amazon S3, Amazon DynamoDBe Amazon DocumentDB (com compatibilidade com MongoDB). Para mais detalhes, veja Trabalhando com integrações de pipeline de ingestão do Amazon OpenSearch.


Sobre os autores

Muthu Pitchaimani é um especialista em pesquisa no Amazon OpenSearch Service. Ele cria aplicativos e soluções de pesquisa em larga escala. Muthu se interessa pelos tópicos de rede e segurança e está baseado em Austin, Texas.

Aruna Govindaraju é uma Arquiteta de Soluções Especialista em OpenSearch da Amazon e trabalhou com muitos mecanismos de busca comerciais e de código aberto. Ela é apaixonada por busca, relevância e experiência do usuário. Sua experience em correlacionar sinais do usuário remaining com o comportamento do mecanismo de busca ajudou muitos clientes a melhorar sua experiência de busca.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *