Observação:

Configure um cluster ativo/passivo de Alta Disponibilidade pfSense com o Corosync/Pacemaker no Oracle Cloud Infrastructure

Observação: o suporte oficial do pfSense não é feito no Oracle Cloud Infrastructure pelo Netgate ou pela Oracle. Entre em contato com a equipe de suporte pfSense antes de experimentar este tutorial.

Introdução

O OCI (Oracle Cloud Infrastructure) é um conjunto complementar de serviços de nuvem que permite criar e executar uma grande variedade de aplicativos e serviços em um ambiente hospedado altamente disponível. O Oracle Cloud Infrastructure (OCI) oferece recursos de computação de alto desempenho (como instâncias de hardware físicas) e capacidade de armazenamento em uma rede virtual de sobreposição flexível que pode ser acessado com segurança na sua rede local.

pfSense é um firewall e roteador de código aberto e gratuito que também apresenta gerenciamento de ameaças unificado, balanceamento de carga, várias WAN e muito mais.

Objetivo

Configure o appliance virtual pfSense em uma configuração ativa/passiva de alta disponibilidade com a ajuda do Corosync/Pacemaker no OCI.

Pré-requisitos

Pontos para Observação

Tarefa 1: Instalar dois pfSense Virtual Appliances no Oracle Cloud

Neste tutorial, usaremos dois appliances virtuais pfSense para Alta Disponibilidade. É possível configurar vários nós com base em seus requisitos. Siga as etapas deste tutorial Instalar e Configurar pfSense no Oracle Cloud Infrastructure.

Observação:

Instale os pacotes necessários

  1. Os repositórios FreeBSD estão desativados por padrão. Para ativar o repositório FreeBSD, siga estas etapas:

    1. Defina FreeBSD: { enabled: yes } in /usr/local/etc/pkg/repos/FreeBSD.conf
    2. Defina FreeBSD: { enabled: yes } in /usr/local/share/pfSense/pkg/repos/pfSense-repo.conf
  2. Depois de ativar o repositório FreeBSD, atualize o gerenciador de pacotes.

    Node1@ pkg update
    Node2@ pkg update
    

    Observação: Isso atualizará o gerenciador de pacotes e os metadados de repositório.

  3. Instale os quatro pacotes a seguir necessários para configurar o cluster de alta disponibilidade.

    1. Marcador
    2. Corossincronização
    3. Crmsh
    4. CLI do OCI

    Execute os comandos a seguir para instalação

    Node1@ pkg install pacemaker2 corosync2 crmsh devel/oci-cli
    Node2@ pkg install pacemaker2 corosync2 crmsh devel/oci-cli
    

    Siga os prompts para concluir a instalação.

Tarefa 3: Configurar Pacemaker/Corosync nas instâncias

Configurar Corosync

  1. Crie um novo arquivo de confirmação do Corosync executando o comando a seguir em ambas as instâncias.

    Node1@ touch /usr/local/etc/corosync/corosync.conf
    Node2@ touch /usr/local/etc/corosync/corosync.conf
    
  2. Cole a configuração a seguir no script em ambos os nós.

    Observação: certifique-se de substituir seus endereços IP na lista de nós.

    # Please read the corosync.conf.5 manual page
    totem {
       version: 2
       crypto_cipher: none
       crypto_hash: none
       transport: udpu
    }
    logging {
       fileline: off
       to_logfile: yes
       to_syslog: yes
       logfile: /var/log/cluster/corosync.log
       debug: on
       timestamp: on
    logger_subsys {
       subsys: QUORUM
       debug: on
       }
    }
    nodelist {
       node {
           ring0_addr: 192.0.2.2 # make sure to replace with your IP
           nodeid: 1
           }
       node {
           ring0_addr: 192.0.2.5 # make sure to replace with your IP
           nodeid: 2
           }
       }
    quorum {
       # Enable and configure quorum subsystem (default: of
       # see also corosync.conf.5 and votequorum.5
       provider: corosync_votequorum    
    }
    

Configuração de Corosync

Se você tentar iniciar o Corosync agora, ele falhará com a mensagem de erro "Sem espaço no dispositivo".

Ativar disco RAM nos dois nós

O Corosync e o Pacemaker contam com o diretório /var para seu runtime e, se você tiver feito uma instalação padrão, o espaço disponível no /var será muito limitado. Você deve configurar e usar a memória (RAM) para os diretórios /var e /tmp, isso também nos ajudará a melhorar o desempenho.

  1. No console pfSense, navegue até Sistema, clique em Avançado e, em seguida, clique em Diversos.

    Menu Ramdisk

  2. Role para baixo até Definições de Disco de Ram e marque a caixa de seleção Usar Discos de Ram.

  3. Informe o tamanho do disco RAM que você deseja alocar para os diretórios /tmp e /var.

  4. Salvar a configuração. Você será solicitado a reinicializar pela primeira vez que ativar o Disco RAM, mais tarde, poderá aumentar ou diminuir o tamanho do Disco RAM em qualquer lugar.

    Configuração de ramdisk

    Observação: Como estamos usando os Discos Ram, no caso de um Shutdown do Sistema, todos os nossos arquivos em /tmp e /var serão perdidos. Devemos configurar um script de inicialização (arquivo rc.d) que criará os diretórios que o Corosync e o Pacemaker precisam para funcionar corretamente.

  5. Abra o arquivo /usr/local/etc/rc.d/corosync e adicione as linhas a seguir ao código após a linha 17 em ambos os nós.

    mkdir -p /var/lib/corosync
    mkdir -p /var/run/qb
    chmod 777 /var/run/qb
    
  6. Depois de fazer as alterações, o Jle terá esta aparência:

    #!/bin/sh
         # PROVIDE: corosync
         # REQUIRE: LOGIN FILESYSTEMS
         # KEYWORD: shutdown
         . /etc/rc.subr
         name="corosync"
         rcvar="corosync_enable"
         start_precmd="corosync_precmd"
         corosync_precmd()
         {
             if [ `${SYSCTL_N} kern.ipc.maxsockbuf` -lt 18874368 ]; then
                 err 3 "sysctl:kern.ipc.maxsockbuf must be at least 18874
             fi
             mkdir -p /var/lib/corosync
             mkdir -p /var/run/qb
             chmod 777 /var/run/qb
          }
         load_rc_config $name
         : ${corosync_enable:=YES}
         command="/usr/local/sbin/corosync"
         run_rc_command "$1"
    

    Configurações de Corosync

Iniciar o serviço Corosync e Pacemaker em todos os nós

Agora podemos adicionar corosync_enable=YES e pacemaker_enable=YES ao arquivo /etc/rc.conf. Execute o comando a seguir em todos os nós.

Node1@ sysrc corosync_enable=YES
Node2@ sysrc corosync_enable=YES
Node1@ sysrc pacemaker_enable=YES
Node2@ sysrc pacemaker_enable=YES
Node1@ service corosync start
Node2@ service corosync start
Node1@ service pacemaker start
Node2@ service pacemaker start

Observação:

Verifique o status do cluster

  1. Agora que temos o Pacemaker e o Corosync em execução em todos os nós, vamos verificar o status do cluster. Execute o seguinte comando para verificar o status:

    Node1@ crm status
    

    Status de correlação

  2. Desative o Stonith por enquanto, pois não estamos cobrindo o Stonith neste tutorial.

    Node1@ crm configure property stonith-enabled=false
    Node2@ crm configure property stonith-enabled=false
    

    Menu Ramdisk

    Como você pode ver na imagem, o status informa que 2 nós estão configurados e on-line.

    Observação:

    • Se você não vir que ambos os nós estão configurados e on-line, conforme mostrado na imagem, isso indicará que apenas uma instância está configurada e on-line. Isso significa que os nós não conseguem conversar uns com os outros.
    • Para resolver isso, verifique as pfSense e as Listas de Segurança do Oracle Cloud para Permitir tráfego UDP e ICMP.

Tarefa 4: Configurar a CLI do Oracle Cloud Infrastructure

Precisamos da CLI do OCI para mover e associar o IP Flutuante Virtual entre os nós no nível da infraestrutura. Já instalamos a CLI do OCI anteriormente com outros pacotes. Agora, vamos configurar a configuração. Queremos usar 'instance principals' para autorizar nossos comandos da CLI. Você pode saber mais sobre Diretores de Instância. e cli do OCI

Siga este blog e configure os principais da instância do Oracle Cloud Infrastructure.

Configurar IP Flutuante Virtual

Neste tutorial, usaremos 192.0.2.3/29 como o IP flutuante virtual. Não podemos configurar uma pulsação IPaddr2 em pfSense que é baseada em FreeBSD. Se tentarmos de qualquer forma, ele lançará um erro "IP não está disponível", o IP do pacote é apenas linux. Em vez disso, configuraremos um heatbeat IPaddr.

  1. Abra /usr/local/lib/ocf/resource.d/heartbeat/IPaddr no editor de arquivos.

  2. Adicione algumas linhas de código que iniciarão a CLI do OCI para mover o IP de uma vNIC para outra. Adicione as seguintes linhas de código após a linha 584 no método add_interface() do script.

  3. Atribua valores node1vnic, node2vnic, vnicip e nome do host no script. Você pode encontrar os OCIDs da sua vNIC no menu Console do Oracle Cloud, Compute, vNICs anexado.

    else
    ##### OCI vNIC variables
        server="`hostname -s`"
        node1vnic="<node1vnic>"
        node2vnic="<node2vnic>"
        vnicip="<floating_IP>"
        export LC_ALL=C.UTF-8
        export LANG=C.UTF-8
        touch /tmp/ip_switch_error.log
    ##### OCI/IPaddr Integration
        if [ $server = "<host_name>" ]; then
            /usr/local/bin/oci network vnic assign-private-ip --auth instance_principal --unassign-if-already-assigned --vnic-id $node1vnic  --ip-address $vnicip >/tmp/ip_switch_error.log 2>&1
        else
            /usr/local/bin/oci network vnic assign-private-ip --auth instance_principal --unassign-if-already-assigned --vnic-id $node2vnic  --ip-address $vnicip >/tmp/ip_switch_error.log 2>&1
        fi
    
    

    Configuração de pulsação

  4. Para o Nó 1: Na Console do Oracle Cloud, vá para Compute, clique em pfSense-principal e, em seguida, clique em VNICs anexadas. Selecione a vNIC principal e adicione um IP privado secundário (igual ao floating_IP no script acima)

    Vnic - adicionar novo ip

  5. Para os dois Nós: no console pfSense, vá para firewall e clique em IPs Virtuais e adicione um Alias de IP (o mesmo que floating_IP no script acima).

    pfSense ip virtual

Configurar Heartbeat

  1. No shell pfSense, execute o comando a seguir no Nó 1.

    crm configure primitive IP ocf:heartbeat:IPaddr params ip=192.0.2.3  cidr_netmask="29" nic=”vtnet0” op monitor interval="5s"
    
  2. Neste tutorial, 192.0.2.3 é o IP flutuante. Certifique-se de substituir os valores ip, netmask e nic por seus valores. Isso deve criar um recurso IP no Pacemaker.

    status do pacemaker

Se você executar crm status agora, verá dois nós on-line e um recurso disponível que está apontando para pfSense-primary. Você também pode executar ipconfig vtnet0 para verificar se o IP Virtual agora está associado à interface no nó principal.

Testar Failover

Estado Atual

Teste de failover antes

  1. Execute o seguinte comando para forçar um switch over:

    crm resource move IP pfSense-secondary.example.com  
    
  2. Execute o comando crm status e você verá que o recurso IP flutuante agora foi movido para o secundário pfSense.

  3. Verifique os avachments vNIC da Console do Oracle Cloud para seus nós. Você verá que o IP flutuante agora foi movido para o segundo nó.

    Teste de failover após

    Observação: Se você tentar fazer shutdown agora, o recurso será movido para o estado interrompido, pois não será possível descobrir qual nó deve ser considerado como Mestre, pois pfSense precisa de pelo menos 50% de votos para designar um mestre. Como temos apenas 2 nós e um deles está inativo, o Pacemaker não poderá definir um como mestre.

  4. Execute o seguinte comando para ignorar a política de 50% de votos:

    crm configure property no-quorum-policy=ignore
    
  5. Agora teste um shutdown e você pode ver a movimentação do IP Flutuante.

Tarefa 5: Configurar XLMRPC e pfsync

Queremos que nossos nós tenham um estado sincronizado se quisermos ter um cluster verdadeiramente altamente disponível, basta mover os IPs não vai fazer isso. Precisamos configurar outro conjunto de vNICs em cada uma de nossas instâncias para a sincronização.

Configurar interface de sincronização

  1. Para Ambos os Nós: Vá para Compute, selecione a instância, abra Vnics Anexadas e clique em criar vnic.

    Criar vnic secundário

  2. Depois que a vNIC for criada e anexada, vá para console pfSense, clique em interfaces e, em seguida, clique em Designações e adicione a interface recém-detectada.

    Interface pfSense

  3. Clique na interface recém-atribuída e configure sua configuração.

  4. Designe o endereço IPv4 estático e a máscara de sub-rede que criamos na etapa anterior na console do OCI.

    pfSense Interface de Sincronização

  5. Clique em Salvar e aplique as alterações.

Configurar Alta Disponibilidade no nó principal

  1. Vá para a console pfSense, clique em Sistema e, em seguida, clique em Sincronização de Alta Disponibilidade.
  2. Ativar a sincronização de estado do pfsync.
  3. Escolha a interface de sincronização.
  4. Adicione o IP do nó secundário.
  5. Configuração de sincronização XMLRPC: Adicione o IP do nó secundário.
  6. Defina o nome de usuário e a senha e verifique o que deseja sincronizar. pfSense Configuração de Sincronização de HA
  7. Clique em Salvar e Aplicar.

Configurar Alta Disponibilidade no nó secundário

  1. Vá para a console pfSense, clique em Sistema e, em seguida, clique em Sincronização de Alta Disponibilidade.
  2. Ativar a sincronização de estado do pfsync.
  3. Escolha a interface de sincronização.
  4. Adicione o IP do nó principal.
  5. Clique em Salvar e Aplicar.

Os estados do firewall são sincronizados entre os dois nós e você pode tentar adicionar uma regra de firewall em sua instância principal. Você também verá o mesmo que aparece no nó secundário. Agora podemos tentar testar o failover novamente com um shutdown do sistema.

Confirmação

Autor - Mayank Kakani (Arquiteto de Nuvem OCI)

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal YouTube do Oracle Learning. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.