Ativando o espelhamento

Estas informações descrevem como configurar dois clusters do Event Streams Enterprise como um par espelhado. Os casos de uso incluem recuperação de desastre, backups e replicação geográfica.

Ao criar uma solução que envolva espelhamento em Event Streams, considere como sua solução lidará com os dois cenários a seguir:

perda de dados
Espelhamento é assíncrono. Ou seja, as mensagens devem ser produzidas com êxito no cluster de origem antes de serem espelhadas no cluster de destino. Se ocorrer uma falha no cluster de origem antes que essas mensagens sejam espelhadas, os aplicativos precisarão lidar com a perda dessas mensagens
Ao menos uma vez
A duplicação de mensagens pode ocorrer no processo de espelhamento Os deslocamentos do grupo de consumidores confirmadas no cluster de origem podem não ser convertidas em pontos de verificação no cluster de destino No failover, um consumidor pode precisar reprocessar mensagens já consumidas e consolidadas no cluster de origem.

O uso do espelhamento com Event Streams incorre em uma cobrança extra para cada hora de unidade de capacidade de espelhamento. Para obter mais informações, acesse o Catálogo e procure por Event Streams É possível então visualizar planos de precificação.

Atualmente, a ativação do espelhamento para uma instância de serviço do Event Streams requer o uso da CLI do IBM Cloud.

Para instalar a CLI, consulte Ampliação da CLI do IBM Cloud com plug-ins.

A CLI do IBM Cloud usa o comando service-instance-update para atualizar o recurso de instância de serviço do Event Streams.O ID do usuário na conta usada para executar o comando service-instance-update deve receber as mesmas políticas de acesso necessárias quando você cria recursos. Para obter informações sobre os requisitos de acesso, consulte Acesso necessário para criar recursos.

O tempo necessário para ativar o espelhamento para a instância de serviço do Event Streams varia, mas em circunstâncias normais ele não excede 2 horas.

Instalação

Certifique-se de que você provisione dois clusters do plano Enterprise. Ambos os clusters devem ter o mesmo rendimento e capacidade de armazenamento e ligações de serviço para serviço (consulte Etapa 2 para obter mais informações).

Como o espelhamento é unidirecional, decida qual direção de espelhamento você deseja. Um cluster é a origem e o outro cluster é o destino.

Decida quais tópicos do seu cluster de origem você deseja espelhar. Por padrão, nenhum tópico é espelhado e você pode ativar o espelhamento usando os controles do usuário depois que o espelhamento for ativado, conforme mostrado na etapa 4. Deve-se especificar a seleção como um ou mais padrões

Considere seus requisitos de largura da banda; há largura da banda suficiente disponível no cluster de origem?Seu cluster de origem precisa ter alguma altura livre para executar o espelhamento.Consulte Escolhendo seu plano para saber os limites de largura de banda do cluster e use as métricas do site Event Streams para determinar o nível de ocupação do cluster de origem e se ele tem espaço para espelhamento.

Embora seja permitido o espelhamento de um cluster Enterprise de várias regiões de zona para um cluster Enterprise de região de zona única e vice-versa, essa configuração não é recomendada, a menos que você tenha requisitos específicos de residência e esteja ciente das implicações. A política de SLA (Service Level Agreement, Contrato de Nível de Serviço) de um cluster Enterprise de várias regiões de zona para um cluster Enterprise de região de zona única pode ser menor ou vice-versa.

Habilitar associações de serviço a serviço

Deve-se configurar uma ligação de serviço para serviço entre ambas as instâncias para permitir que ambas as instâncias se comuniquem. Para configurar, conclua as etapas a seguir:

Quando você cria uma associação de serviço a serviço, o IAM usa a terminologia "origem" e "destino" de forma oposta à de Event Streams. A conta de origem do IAM contém a instância de destino de espelhamento Event Streams e vice-versa.

  1. Selecione a conta do IBM Cloud contendo a Event Streams instância de serviço de origem de espelhamento.
  2. Navegue até o painel Autorizações no IAM e clique em Criar.
  3. Para a seção Origem:
    • Se estiver espelhando para uma instância de destino em uma conta diferente, selecione "outra conta" no cabeçalho de origem e, em seguida, escolha a conta que contém a instância de destino de espelhamento. Se você for um espelhamento entre instâncias de serviço na mesma conta, será possível deixar o padrão de "esta conta" selecionado.
    • Selecione a instância de destino do Event Streams como a instância de serviço de origem do IAM.
  4. Para a seleção Destino, selecione a instância de origem de espelhamento Event Streams como a instância de serviço de destino do IAM.
  5. Atribua a função Reader e clique em Authorize (Autorizar ).

Se o seu requisito for o fail back, você também precisará da ligação serviço a serviço na direção oposta.

O exemplo a seguir mostra como usar a linha de comandos para configurar a ligação de serviço para serviço.

  1. Faça login na conta IBM Cloud® que contém a instância Event Streams que você deseja que atue como instância de origem de espelhamento:

    ibmcloud login -c <account containing mirroring source instance>
    
  2. Configure uma política de autorização, como segue:

    ibmcloud iam authorization-policy-create messagehub messagehub Reader --source-service-instance-id <instance id of the mirroring target cluster> [--source-service-account <account containing mirroring target instance>] --target-service-instance-id <instance id of the mirroring source cluster>
    

    Observe que a opção --source-service-account pode ser omitida se você estiver configurando o espelhamento entre duas instâncias Event Streams na mesma conta IBM Cloud.

Para obter mais informações sobre associações de serviço a serviço, consulte o painel Gerenciar autorizações e Usar autorizações para conceder acesso entre serviços.

Habilite o espelhamento e selecione os tópicos a serem espelhados

Para ativar o espelhamento, você precisa executar um comando service-instance-update em seu cluster de destino usando a CLI com os seguintes parâmetros necessários:

Parâmetros necessários para ativar o espelhamento
Parâmetros necessários Descrição
source_crn O crn do cluster de origem a ser espelhado
source_alias O alias usado para o cluster de origem
alias_alvo O alias usado para o cluster de destino
  • O site source_crn está neste formato: crn:v1:bluemix:public:messagehub:us-south:a/aaa:aaaa::
  • O source_alias e o target_alias são os alias que você deseja configurar para cada uma das duas instâncias de serviço ao ativar o espelhamento. As aliases aparecem em nomes de tópicos. Escolha nomes curtos e descritivos. Por exemplo, "us-south" e "us-east".

Comando CLI de Exemplo

ibmcloud resource service-instance-update "Event Streams resource instance name" -p '{"mirroring":{"source_crn":"<source_crn>", "source_alias":"<source_alias>", "target_alias":"<target_alias>"}}'

Selecione os tópicos a serem espelhados

Quando a atualização da instância de serviço for concluída, você deverá selecionar quais tópicos serão espelhados do cluster de origem para o cluster de destino. Isso é feito com a CLI usando o comando "ibmcloud es mirroring-topic-selection-set". Todos os grupos de consumidores usados para consumir desses tópicos selecionados serão espelhados da origem para o cluster de destino. A seleção de tópico está na forma de um padrão de expressão regular ou de uma lista separada por vírgula de tais padrões.

O comando a seguir seleciona todos os tópicos a serem espelhadas:

ibmcloud es mirroring-topic-selection-set --select '.*'

É possível selecionar tópicos listando os tópicos que você deseja espelhar da seguinte forma:

ibmcloud es mirroring-topic-selection-set --select topic1,topic2,topic3

Para obter mais informações sobre como fazer a seleção, consulte Espelhamento de controles do usuário

Após a conclusão da seleção de tópicos, o cluster de destino mostra os tópicos selecionados para espelhamento usando os controles de usuário de espelhamento com o sufixo do alias do cluster de origem.

Etapa 3.1: Especifique como os nomes de tópicos e grupos são transformados

Você pode especificar regras de transformação que permitem espelhar dados em tópicos com nomes diferentes no cluster de destino. Os três cenários a seguir descrevem as possíveis transformações e explicam os casos de uso de cada uma delas.

Você pode especificar quais tópicos ou grupos de consumidores serão espelhados a qualquer momento após a ativação do espelhamento; no entanto, a transformação de tópicos ou grupos só é possível no momento em que o espelhamento é ativado. Se o espelhamento já estiver ativado, ele precisará ser desativado antes que uma solicitação de ativação subsequente seja feita para especificar a transformação de tópico ou grupo.

Cenário 1: transformação de tópicos removendo o prefixo ou sufixo antigo e adicionando um novo prefixo ou sufixo

Configure os quatro parâmetros adicionais a seguir.

| Parâmetros necessários para renomear tópicos Descrição | -- | -- | | Remove_prefix O prefixo a ser removido dos nomes de tópicos no cluster de origem. | | Remove_suffix O sufixo a ser removido dos nomes de tópicos no cluster de origem. | | Add_prefix O prefixo a ser adicionado aos nomes de tópicos no cluster de destino. | | O sufixo a ser adicionado aos nomes dos tópicos no cluster de destino. |

O comando ibmcloud resource service-instance-update precisa ser especificado por meio do argumento de linha de comando -p. Quando essas opções forem especificadas, somente os tópicos com os prefixos ou sufixos correspondentes estarão qualificados para espelhamento. Por exemplo, se você tiver um remove_prefix de app1- e especificar uma seleção de tópico de abc.*, somente os tópicos que começarem com app1-abc serão espelhados.

Se você especificar o tipo de transformação "renomear" e não especificar os parâmetros para add_prefix ou add_suffix, o tópico espelhado no cluster de destino terá esses parâmetros removidos. Os padrões de tópico são aplicados ao nome do tópico depois que qualquer prefixo ou sufixo de origem é removido e antes que qualquer prefixo ou sufixo seja adicionado.

Veja o exemplo de comando da CLI a seguir:

{
  "mirroring": {
    "source_crn": "crn:v1:...",
    "source_alias": "source",
    "target_alias": "target",
    "options": {
      "topic_name_transform": {
        "type": "rename",
        "rename": {
          "add_prefix": "newprefix-",
          "remove_prefix": "oldprefix-",
          "add_suffix": "-newsuffix",
          "remove_suffix": "-oldsuffix"
        }
      }
    }
  }
}

Cenário 2: adicionar o alias de origem como um sufixo aos tópicos espelhados

Aplicar uma transformação de nome de tópico com o tipo topic_name_transform definido como use_alias. Com essa configuração, um tópico chamado app1-topic no cluster de origem será espelhado em um tópico chamado app1-topic.source no cluster de destino, porque o alias de origem especificado na configuração é source.

Veja o exemplo de comando da CLI a seguir:

{
  "mirroring": {
    "source_crn": "crn:v1:...",
    "source_alias": "source",
    "target_alias": "target",
    "options": {
        "topic_name_transform": {
            "type": "use_alias"
      }
    }
  }
}

Cenário 3: Os tópicos são espelhados com seus nomes inalterados

Nesse cenário, você também aplica o topic_name_transform com o tipo definido como none. Com essa configuração, um tópico chamado app1-topic no cluster de origem será espelhado em um tópico chamado app1-topic no cluster de destino.

Veja o exemplo de comando da CLI a seguir:

{
  "mirroring": {
    "source_crn": "crn:v1:...",
    "source_alias": "source",
    "target_alias": "target",
    "options": {
        "topic_name_transform": {
            "type": "none"
      }
    }
  }
}

Etapa 3.2: Transformação de IDs de grupos de consumidores correspondentes

Por padrão, o Mirror Maker não modificará os IDs do grupo de consumidores ao espelhar para o cluster de destino. No entanto, o site Event Streams permite que você modifique os dados dos IDs de grupo, conforme descrito nos dois cenários a seguir. Semelhante aos tópicos, os padrões de ID de grupo são aplicados após a remoção de qualquer prefixo ou sufixo de origem e antes da adição de qualquer prefixo ou sufixo. Se você especificar o tipo de transformação "renomear" e não especificar os parâmetros para add_prefix ou add_suffix, o ID do grupo espelhado no cluster de destino terá esses parâmetros removidos.

O comando ibmcloud resource service-instance-update precisa ser especificado por meio do argumento de linha de comando -p.

Cenário 1: Transforme a ID do grupo removendo o prefixo ou sufixo antigo e adicionando um novo prefixo ou sufixo

Configure os quatro parâmetros adicionais a seguir.

| Parâmetros necessários para renomear o ID do grupo Descrição | -- | -- | | Remove_prefix O prefixo a ser removido do ID do grupo no cluster de origem. | | Remove_suffix O sufixo a ser removido do ID do grupo no cluster de origem. | | Add_prefix O prefixo a ser adicionado ao ID do grupo no cluster de destino. | | O sufixo a ser adicionado ao ID do grupo no cluster de destino. |

Quando essas opções forem especificadas, somente os IDs de grupo com os prefixos ou sufixos correspondentes estarão qualificados para o espelhamento. Por exemplo, se você tiver um remove_prefix de aaa e um add_prefix de bbb, os grupos de consumidores que começam com aaa-group-id no cluster de origem serão espelhados para bbb-group-id no cluster de destino.

Veja o exemplo de comando da CLI a seguir:

{
  "group_id_transform": {
    "type": "rename",
    "rename": {
       "add_prefix": "newprefix-",
       "remove_prefix": "oldprefix-",
       "add_suffix": "-newsuffix",
       "remove_suffix": "-oldsuffix"
    }
  }
}

Cenário 2: Os IDs de grupos de consumidores são espelhados com seus nomes inalterados

Nesse cenário, você também aplica o topic_name_transform com o tipo definido como none. Com essa configuração, um tópico chamado aaa-group-id no cluster de origem será espelhado em um tópico chamado aaa-group-id no cluster de destino.

Veja o exemplo de comando da CLI a seguir:

"group_id_transform": {
  "type": "none"
}

Abordagens de migração de esquema em Event Streams

Event Streams fornece duas abordagens para a migração de esquemas, cada uma utilizando uma estratégia diferente.

  1. Ferramenta de importação/exportação de esquemas em massa: Esse método preserva as IDs de esquema exatamente como elas existem no cluster de origem. Use essa abordagem quando não houver transformações entre os clusters de origem e de destino ou para cenários diretos de lift and shift em que a compatibilidade do esquema deve ser mantida de ponta a ponta. Para obter mais informações, consulte Importação de dados de outros registros de esquemas.

  2. Sincronização de esquema por meio de espelhamento com transformação de ID. Esse método, descrito abaixo, transforma as IDs de esquema durante a migração do cluster de origem para o cluster de destino. Use essa abordagem para migrações em fases ou quando as transformações forem necessárias. Esse método garante que os esquemas estejam sincronizados entre os clusters de registro, o que significa que os consumidores no cluster de destino podem ler as mensagens imediatamente. Isso também permite que novos esquemas sejam registrados sem o risco de colisões de ID com esquemas que possam ser migrados posteriormente.

Sincronização de esquema por meio de espelhamento com transformação de ID

A sincronização de esquemas por meio de espelhamento funciona encaminhando solicitações de registro de esquemas de uma instância para outra. Isso permite que os usuários leiam e gravem em uma instância de origem por meio da instância de destino, pois o registro de esquema de destino opera em um "modo de espelhamento" especial, fazendo proxy transparente de solicitações relacionadas a esquemas para o registro de origem e aplicando transformações de ID conforme necessário. Essa abordagem simplifica o acesso a dados entre instâncias e oferece suporte à sincronização perfeita de esquemas entre ambientes.

Precauções

Antes de sincronizar esquemas usando o espelhamento, examine as seguintes precauções:

  1. Uma janela de manutenção é necessária enquanto os esquemas são exportados/importados em massa entre os dois registros - isso seria da ordem de algumas horas ou menos.
  2. Para que a renomeação de tópicos funcione, os esquemas devem usar Confluent Avro Serdes, para que o assunto possa ser derivado do nome do tópico. Confluent Avro Serdes porque o assunto associado a um esquema pode ser derivado do nome do tópico (por exemplo, para estratégias de nomeação de tópicos e tópicos/registros).
  3. O espelhamento da autorização S2S deve ser ininterrupto; a desativação da autorização s2s ou do espelhamento impedirá que as solicitações de registro de esquema sejam encaminhadas.
  4. Se a transformação for necessária, o registro do esquema da instância de destino deverá ser configurado com regras de renomeação de tópicos antes de qualquer migração.
  5. As regras de renomeação não podem ser alteradas até que a migração seja concluída. Fazer alterações durante a migração resultará em inconsistências entre os registros.

Instruções

As instruções a seguir descrevem como usar o espelhamento de registro de esquema para mover esquemas entre duas instâncias.

Um utilitário de exportação ainda não foi adicionado à CLI.

Valores de esquema permitidos

valor | Descrição | Valor | Descrição | -- | -- | | As solicitações são encaminhadas da instância de destino para a instância de origem. | | Somente leitura | São permitidas solicitações que exigem a função Reader do IAM. Todos os outros são rejeitados (403). | | O encaminhamento de solicitações está desativado. Esse é o padrão. |

Exemplo de solicitação

Veja o exemplo de comando da CLI a seguir:

ibmcloud resource service-instance-update \
"trgt-instance-name" \
-p '{
"mirroring": {
"source_crn": "<src instance crn>",
"source_alias": "source",
"target_alias": "target",
"schemas": "proxied"
}
}'

Transformação do nome do tópico

Os nomes de tópicos podem ser transformados durante o encaminhamento. Por exemplo, com as regras corretas,old-my-topic poderia se tornar new-my-topic. Quando ativado, a instância de origem reconhece apenas o nome original, enquanto a instância de destino reconhece apenas o novo nome de tópico (transformado). Todos os resultados retornados são transformados de acordo.

Se nenhuma regra de transformação for fornecida, o site use_alias será usado, de acordo com o comportamento de espelhamento existente em Event Streams. Para encaminhar sem alterar os nomes dos tópicos, use topic_name_transform e digite none. A transformação é configurada usando os campos de transformação existentes na CLI.

Fluxo de migração

Ao migrar entre duas instâncias do Event Streams, sugere-se o seguinte fluxo.

  1. Habilite o espelhamento entre duas instâncias, especificando schemas: proxied.
  2. Atualize seus aplicativos para usar o registro do esquema de destino.
  3. Bloqueie todas as gravações no registro de destino mudando para schemas: read-only. Antes de fazer essa alteração, o espelhamento deve ser desativado momentaneamente.
  4. Exportar todos os esquemas da instância de origem.
  5. Importar todos os esquemas exportados da instância de origem para o destino. Isso pode ser feito usando a CLI do IBM Cloud®: ibmcloud [...].
  6. Desativar o espelhamento.

Exportação de esquemas

Para obter informações mais detalhadas, consulte a documentação do site Confluent.

A CLI do Event Streams exige que as importações de esquemas tenham um valor v1 exportVersion.

  1. Faça o download do código-fonte mais recente do v2.x.x, por exemplo, https://github.com/Apicurio/apicurio-registry/archive/refs/tags/2.6.13.Final.zip.

  2. Crie o cliente de exportação: mvn -pl utils/exportConfluent -am -DskipTests -Pprod package.

  3. Execute o exportador (salva a saída em confluent-schema-registry-export.zip ):

    java -jar utils/exportConfluent/target/apicurio-registry-utils-exportConfluent-2.6.13.Final.jar \
    "https://token:<password>@<my-event-streams-instance.com>/confluent" \
    --client-props basic.auth.credentials.source=URL
    

Importação de esquemas

Os esquemas podem ser importados usando a CLI do Event Streams.

  1. Verifique se você tem o plug-in event-streams[es] instalado: ibmcloud plugin list.

  2. Faça login em IBM Cloud®: ibmcloud login [...].

  3. Inicialize a instância do Event Streams para a qual você gostaria de importar: ibmcloud es init.

  4. Importar o esquema:

    ibmcloud es schema-import \
    -f confluent-schema-registry-export.zip
    

Validação

Você pode obter as informações da instância de serviço atual executando o seguinte comando:

ibmcloud resource service-instance "Event Streams resource instance name" --output=json

Revise a seção da última operação da saída.As informações são atualizadas continuamente à medida que a atualização prossegue. Quando o processo de ativação do espelhamento é concluído, as informações da última operação indicam se a atualização foi bem-sucedida ou se a sincronização foi bem-sucedida.

"last_operation": {
  "type": "update",
  "state": "in progress",
  "description": "Update in progress.",
  "updated_at": null,
  "cancelable": false
}

Execute o comando novamente até que o sucesso seja indicado da seguinte forma:

"last_operation": {
  "type": "update",
  "state": "succeeded",
  "description": "Update succeeded.",
  "updated_at": null,
  "cancelable": false
}

O painel IBM Cloud Monitoring Event Streams Mirroring mostra o estado do espelhamento.