View a markdown version of this page

Pré-requisitos e configuração do cluster - AWS IoT Greengrass

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Pré-requisitos e configuração do cluster

Nesta seção, você configura a infraestrutura para o tutorial de alta disponibilidade. Você cria um grupo de segurança, cria um key pair, inicia instâncias do Amazon EC2, instala o Pacemaker e o DRBD, cria um cluster e configura a replicação em nível de bloco entre instâncias.

Criar e configurar um grupo de segurança

Crie um grupo de segurança que permita todo o tráfego entre as instâncias do cluster. Neste tutorial, você abre todas as portas para simplificar a configuração. Essa etapa exige uma VPC. Se você não tiver uma, consulte Criar uma VPC.

Console
  • Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  • No painel de navegação, escolha Grupos de segurança e, em seguida, escolha Criar grupo de segurança.

  • Insira um nome (por exemplo,pacemaker-cluster-sg) e uma descrição.

  • Selecione a VPC.

  • Escolha Criar grupo de segurança.

  • Após a criação, selecione o novo grupo de segurança e edite suas regras de entrada. Escolha Adicionar regra. Defina Tipo como Todo o tráfego e Fonte como a ID do próprio grupo de segurança. Isso permite todo o tráfego entre instâncias nesse grupo de segurança.

  • Adicione uma segunda regra de entrada para acesso SSH. Defina Tipo como SSH e Fonte como Meu IP.

AWS Command Line Interface
  • Criar o grupo de segurança

    aws ec2 create-security-group \ --group-name pacemaker-cluster-sg \ --description "Security group for Pacemaker HA cluster" \ --vpc-id your-vpc-id

    Observe o GroupId da saída (por exemplo,sg-0123456789abcdef0).

  • Adicione uma regra de entrada para permitir todo o tráfego de instâncias no mesmo grupo de segurança.

    aws ec2 authorize-security-group-ingress \ --group-id security-group-id \ --protocol all \ --source-group security-group-id
  • Adicione uma regra de entrada para permitir o acesso SSH a partir do seu endereço IP.

    aws ec2 authorize-security-group-ingress \ --group-id security-group-id \ --protocol tcp \ --port 22 \ --cidr your-ip/32

Criar um par de chaves.

Crie um key pair para usar no acesso SSH a todas as instâncias. Use o mesmo key pair para todas as instâncias neste tutorial.

Console
  • Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  • No painel de navegação, escolha Key Pairs e, em seguida, escolha Create key pair.

  • Insira um nome (por exemplo,pacemaker-key).

  • Selecione RSA como o tipo de par de chaves e .pem como formato de arquivo.

  • Escolha Create key pair (Criar par de chaves). O arquivo de chave privada é baixado automaticamente.

Atenção

Salve o arquivo de chave privada (.pem) em um local seguro. Você não pode baixá-lo novamente. Você precisa desse arquivo para entrar por SSH em suas instâncias.

AWS Command Line Interface
  • Crie o par de chaves.

    aws ec2 create-key-pair \ --key-name key-name \ --query 'KeyMaterial' \ --output text > pacemaker-key.pem
  • Defina as permissões corretas no arquivo de chave privada.

    chmod 400 pacemaker-key.pem

Inicie instâncias do EC2

Inicie duas instâncias do Ubuntu Amazon EC2 no grupo de segurança que você criou. Um tipo de instância pequena (por exemplo,t3.small) é suficiente para este tutorial.

Console
  • Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

  • Selecione Iniciar instâncias.

  • Insira um nome para a instância (por exemplo,pacemaker-instance-1).

  • Em Imagens do aplicativo e do sistema operacional, pesquise Ubuntu e selecione uma AMI do Ubuntu Server (por exemplo, Ubuntu Server 24.04 LTS).

  • Em Tipo de instância, selecione t3.small.

  • Em Par de chaves, selecione a chave que você criou anteriormente.

  • Em Configurações de rede, escolha Editar, selecione sua VPC e uma sub-rede e, em Firewall (grupos de segurança), escolha Selecionar grupo de segurança existente e selecione. pacemaker-cluster-sg

  • Escolha Iniciar instância.

  • Repita o procedimento para cada instância adicional (por exemplo,pacemaker-instance-2). Certifique-se de que todas as instâncias estejam na mesma VPC e no mesmo grupo de segurança.

AWS Command Line Interface
  • Execute uma instância.

    aws ec2 run-instances \ --image-id ubuntu-ami-id \ --instance-type t3.small \ --key-name key-name \ --security-group-ids security-group-id \ --subnet-id subnet-id \ --count 1 \ --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=pacemaker-instance-1}]'

    Repita com Value=pacemaker-instance-2 para a segunda instância.

Você precisa do endereço IP privado de cada instância para a configuração do cluster.

  • Console: no console do Amazon EC2, selecione uma instância e encontre o endereço IPv4 privado na guia Detalhes.

  • AWS Command Line Interface:

    aws ec2 describe-instances \ --filters "Name=tag:Name,Values=pacemaker-instance-*" \ --query "Reservations[*].Instances[*].[Tags[?Key=='Name'].Value|[0],PrivateIpAddress]" \ --output table

Instale os utilitários do Pacemaker

Faça SSH em cada instância e instale os utilitários do Pacemaker.

ssh -i pacemaker-key.pem ubuntu@instance-public-ip
sudo apt update sudo apt install -y pacemaker pcs resource-agents-extra resource-agents-common resource-agents-base

Configurar a comunicação de rede

  1. Teste a comunicação entre instâncias. Na instância de destino, execute o comando a seguir para ouvir os pings da instância de origem.

    sudo tcpdump host source-instance-private-ip

    Na instância de origem, execute o comando a seguir para executar ping na instância de destino.

    ping -c 4 destination-instance-private-ip

    Você deve ver as respostas de ping nos dois lados. Caso contrário, verifique se seu grupo de segurança permite todo o tráfego entre instâncias.

  2. Desative o gerenciamento de nomes de host cloud-init. Nas instâncias do Ubuntu Amazon EC2, o cloud-init pode reverter o nome do host e as alterações na reinicialização. /etc/hosts Execute isso em cada instância para evitar isso.

    sudo bash -c 'cat > /etc/cloud/cloud.cfg.d/99-preserve-hostconfig.cfg <<EOF preserve_hostname: true manage_etc_hosts: false EOF'
  3. Defina o nome do host em cada instância. O Pacemaker usa nomes de host para identificar instâncias de cluster.

    Na instância 1:

    sudo hostnamectl set-hostname instance1

    Na instância 2:

    sudo hostnamectl set-hostname instance2
  4. Configurar/etc/hosts. Em cada instância, anexe os pares de IP privado e nome de host a. /etc/hosts Isso permite que as instâncias se resolvam pelo nome do host.

    sudo tee -a /etc/hosts <<EOF instance1-private-ip instance1 instance2-private-ip instance2 EOF

Crie o cluster Pacemaker

  1. Inicie o daemon pcs em cada instância.

    sudo systemctl enable pcsd.service sudo systemctl start pcsd.service
  2. Defina a senha do hacluster. O hacluster usuário é uma conta do sistema criada automaticamente quando você instala o pcs pacote. O Pacemaker usa essa conta para autenticação de cluster entre instâncias. Defina a mesma senha em cada instância.

    sudo passwd hacluster
  3. Autorize hosts de computadores. Autorize as instâncias do cluster umas com as outras. Execute isso em cada instância.

    sudo pcs host auth instance1 instance2

    Você será solicitado a fornecer o nome de hacluster usuário e a senha.

  4. Configure o cluster. Execute esse comando somente em uma instância. O --force sinalizador destrói qualquer cluster existente no dispositivo.

    sudo pcs cluster setup my-gg-cluster instance1 instance2 --force
  5. Inicie o cluster. Execute esse comando somente em uma instância.

    sudo pcs cluster start --all sudo pcs cluster enable --all
  6. Verifique o status do cluster em qualquer instância.

    sudo pcs status

Configurar o DRBD

O DRBD (Distributed Replicated Block Device) é um módulo do kernel Linux que replica dispositivos de armazenamento entre instâncias em tempo real. Ele funciona no nível do dispositivo de bloco — o nível do disco bruto abaixo do sistema de arquivos — para que todos os dados gravados no disco em uma instância sejam espelhados na outra. Isso garante que, se a instância primária falhar, a instância em espera tenha uma cópia idêntica dos dados.

  1. Crie e anexe volumes do EBS. Crie um volume do EBS para cada instância. O volume deve estar na mesma zona de disponibilidade da instância.

    Console
    • Abra o console do Amazon EC2 em https://console.aws.amazon.com/ec2/.

    • No painel de navegação, escolha Volumes e, em seguida, escolha Criar volume.

    • Defina o tipo de volume como gp3, o tamanho para 8 GiB e a zona de disponibilidade para a mesma zona da sua instância.

    • Escolha Create volume (Criar volume).

    • Selecione o novo volume, escolha Ações > Anexar volume, selecione a instância de destino, defina o nome do dispositivo como /dev/xvdbz e escolha Anexar volume.

    • Repita o procedimento para cada instância.

    AWS Command Line Interface
    • Crie um volume na mesma zona de disponibilidade da sua instância.

      aws ec2 create-volume \ --volume-type gp3 \ --size 8 \ --availability-zone instance-availability-zone

      Observe o VolumeId da saída.

    • Conecte o volume a uma instância.

      aws ec2 attach-volume \ --volume-id volume-id \ --instance-id instance-id \ --device /dev/xvdbz

      Repita o procedimento para cada instância.

  2. Verifique o volume. Faça o SSH em cada instância e verifique se o volume está conectado listando os dispositivos de bloco.

    lsblk

    Em tipos de Nitro-based instânciat3.small, como, o volume aparece como um dispositivo NVMe (por exemplo,/dev/nvme1n1) em vez de. /dev/xvdbz Use lsblk para identificar o nome real do dispositivo e use esse nome na configuração do DRBD.

  3. Instale os utilitários DRBD em cada instância.

    sudo apt install -y drbd-utils
  4. Configure o recurso DRBD. Crie o diretório e o arquivo de configuração de recursos DRBD nas duas instâncias.

    sudo mkdir -p /etc/drbd.d sudo vi /etc/drbd.d/greengrass.res

    Adicione a seguinte configuração. Substitua os nomes de host e endereços IP pelos seus valores.

    resource greengrass { protocol C; on instance1 { device /dev/drbd0; disk /dev/instance1-device-name; address instance1-private-ip:7788; meta-disk internal; } on instance2 { device /dev/drbd0; disk /dev/instance2-device-name; address instance2-private-ip:7788; meta-disk internal; } }
  5. Crie e inicie o recurso DRBD. Execute nas duas instâncias.

    sudo drbdadm create-md greengrass sudo drbdadm up greengrass

    Verifique se o lsblk que drbd0 aparece abaixo do seu dispositivo de volume EBS (por exemplo, xvdbz ounvme1n1).

  6. Defina a instância primária. Execute os comandos a seguir na instância1 somente para forçá-la a ser primária e aguardar a sincronização.

    sudo drbdadm -- --overwrite-data-of-peer primary greengrass sudo drbdadm status

    Espere até que ambas as instâncias mostrem UpToDate o estado do disco. Depois de sincronizadas, todas as outras instâncias se tornam instâncias em espera.

  7. Formate e monte o dispositivo DRBD.

    Somente na instância primária, formate o dispositivo DRBD:

    sudo mkfs.ext4 /dev/drbd0

    Em todas as instâncias, crie o diretório de montagem:

    sudo mkdir -p /greengrass/v2

    Somente na instância primária, monte o dispositivo DRBD:

    sudo mount /dev/drbd0 /greengrass/v2
  8. Verifique o status de sincronização do DRBD.

    sudo drbdadm status mount | grep 'drbd'