O Protocolo Comum de Redundância de Endereços (CARP) permite que vários hosts compartilhem o mesmo endereço IP e ID de Host Virtual (VHID) para fornecer alta disponibilidade para um ou mais serviços. Isso significa que um ou mais hosts podem falhar e os outros hosts assumem o controle de modo transparente, de modo que os usuários não percebam uma falha de serviço.
Além do endereço IP compartilhado, cada host tem seu próprio endereço IP para gerenciamento e configuração. Todas as máquinas que compartilham um endereço IP têm o mesmo VHID. O VHID para cada endereço virtual de IP deve ser exclusivo no domínio de broadcast da interface de rede.
A alta disponibilidade usando o CARP é nativa no FreeBSD, embora os passos para configurá-lo variem um pouco dependendo da versão do FreeBSD. Esta seção fornece a mesma configuração de exemplo para versões anteriores, iguais ou posteriores ao FreeBSD 10.
Este exemplo configura o suporte a failover com três hosts, todos com endereços exclusivos de IP, mas que fornecem o mesmo conteúdo da web. Ele tem dois mestres diferentes chamados hosta.example.org
e hostb.example.org
, com um backup compartilhado chamado hostc.example.org
.
O balanceamento de carga destas máquinas é feito por meio de uma configuração de DNS Round Robin. As máquinas principais e de backup são configuradas de forma idêntica, exceto por seus nomes de host e endereços de gerenciamento IP. Esses servidores devem ter a mesma configuração e executar os mesmos serviços. Quando o failover ocorre, as solicitações para o serviço no endereço IP compartilhado só podem ser respondidas corretamente se o servidor de backup tiver acesso ao mesmo conteúdo. A máquina de backup tem duas interfaces CARP adicionais, uma para cada endereço IP do servidor de conteúdo mestre. Quando ocorre uma falha, o servidor de backup selecionará o endereço IP da máquina mestre com falha.
Ative o suporte para CARP na inicialização do sistema, adicionando uma entrada para o módulo do kernel carp.ko
em /boot/loader.conf
:
carp_load="YES"
Para carregar o módulo agora sem reiniciar:
#
kldload carp
Para usuários que preferem usar um kernel personalizado, inclua a seguinte linha no arquivo de configuração do kernel personalizado e compile o kernel como descrito em Capítulo 8, Configurando o kernel do FreeBSD:
device carp
O nome do host, o endereço IP de gerenciamento e a máscara de sub-rede, o endereço IP compartilhado e o VHID são definidos adicionando entradas ao /etc/rc.conf
. Este exemplo é para o hosta.example.org
:
hostname="hosta.example.org
" ifconfig_em0
="inet192.168.1.3
netmask255.255.255.0
" ifconfig_em0
_alias0="inet vhid1
passtestpass
alias192.168.1.50
/32"
O próximo conjunto de entradas é para o hostb.example.org
. Como ele representa um segundo mestre, ele usa um endereço IP compartilhado diferente e VHID. No entanto, as senhas especificadas com pass
devem ser idênticas, pois o CARP somente ouvirá e aceitará anúncios de máquinas com a senha correta.
hostname="hostb.example.org
" ifconfig_em0
="inet192.168.1.4
netmask255.255.255.0
" ifconfig_em0
_alias0="inet vhid2
passtestpass
alias192.168.1.51
/32"
A terceira máquina, hostc.example.org
, é configurada para lidar com o failover de um dos mestres. Esta máquina é configurada com dois CARP VHIDs, um para manipular o endereço IP virtual para cada um dos hosts principais. O desvio de publicidade CARP, advskew
, é definida para garantir que o host de backup seja anunciado depois do mestre, pois advskew
controla a ordem de precedência quando existem vários servidores de backup.
hostname="hostc.example.org" ifconfig_em0
="inet192.168.1.5
netmask255.255.255.0
" ifconfig_em0
_alias0="inet vhid1
advskew100
passtestpass
alias192.168.1.50
/32" ifconfig_em0
_alias1="inet vhid2
advskew100
passtestpass
alias192.168.1.51
/32"
Ter dois CARP VHIDs configurados significa que o hostc.example.org
notará se um dos servidores principais ficar indisponível. Se um mestre falhar em anunciar antes do servidor de backup, o servidor de backup selecionará o endereço IP compartilhado até que o mestre se torne disponível novamente.
Se o servidor mestre original se tornar disponível novamente, o hostc.example.org
não liberará o endereço virtual IP de volta a ele automaticamente. Para que isso aconteça, a preempção deve ser ativada. O recurso está desabilitado por padrão, ele é controlado por meio da variável sysctl(8) net.inet.carp.preempt
. O administrador pode forçar o servidor de backup a retornar o endereço IP para o mestre:
#
ifconfig em0 vhid 1 state backup
Quando a configuração estiver concluída, reinicie a rede ou reinicie cada um dos sistemas. A alta disponibilidade está agora ativada.
A funcionalidade CARP pode ser controlada através de diversas variáveis sysctl(8) documentadas nas páginas de manual do carp(4). Outras ações podem ser acionadas a partir de eventos CARP usando devd(8).
A configuração para estas versões do FreeBSD é similar àquela descrita na seção anterior, exceto que o dispositivo CARP deve ser criado primeiro e referenciado na configuração.
Ative o suporte de tempo de inicialização para o CARP carregando o módulo do kernel if_carp.ko
no /boot/loader.conf
:
if_carp_load="YES"
Para carregar o módulo agora sem reiniciar:
#
kldload carp
Para usuários que preferem usar um kernel personalizado, inclua a seguinte linha no arquivo de configuração do kernel personalizado e compile o kernel como descrito em Capítulo 8, Configurando o kernel do FreeBSD:
device carp
Em seguida, em cada host, crie um dispositivo CARP:
#
ifconfig carp0 create
Defina o nome do host, o endereço IP de gerenciamento, o endereço IP compartilhado e o VHID adicionando as linhas necessárias ao /etc/rc.conf
. Como um dispositivo virtual CARP é usado em vez de um alias, uma máscara de subrede real /24
é usada em vez de uma /32
. Aqui estão as entradas para o hosta.example.org
:
hostname="hosta.example.org
" ifconfig_fxp0
="inet192.168.1.3
netmask255.255.255.0
" cloned_interfaces="carp0" ifconfig_carp0="vhid1
passtestpass
192.168.1.50/24
"
Em hostb.example.org
:
hostname="hostb.example.org
" ifconfig_fxp0
="inet192.168.1.4
netmask255.255.255.0
" cloned_interfaces="carp0" ifconfig_carp0="vhid2
passtestpass
192.168.1.51/24
"
A terceira máquina, hostc.example.org
, está configurada para lidar com o failover de qualquer um dos hosts principais:
hostname="hostc.example.org
" ifconfig_fxp0
="inet192.168.1.5
netmask255.255.255.0
" cloned_interfaces="carp0 carp1" ifconfig_carp0="vhid1
advskew100
passtestpass
192.168.1.50/24
" ifconfig_carp1="vhid2
advskew100
passtestpass
192.168.1.51/24
"
A preempção está desabilitada no kernel GENERIC
do FreeBSD. Se a preempção tiver sido ativada com um kernel personalizado, o hostc.example.org
poderá não liberar o endereço IP de volta ao servidor de conteúdo original. O administrador pode forçar o servidor de backup a retornar o endereço IP para o mestre com o comando:
#
ifconfig carp0 down && ifconfig carp0 up
Isso deve ser feito na interface carp
, que corresponde ao host correto.
Quando a configuração estiver concluída, reinicie a rede ou reinicie cada um dos sistemas. A alta disponibilidade está agora ativada.
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.