Pesquisar neste blog

quinta-feira, 27 de novembro de 2008

Fazendo um Cluster de alta-disponibilidade com LVS no CentOS

Primeiro vou explicar o que é um cluster de alta-disponibilidade (HA), no caso estes modelos de clusters são construídos para prover uma disponibilidade de serviços e recursos de forma ininterruptas através do uso da redundância implícitas ao sistema. A idéia geral é que se um nó do cluster vier a falhar (failover), aplicações ou serviços possam estar disponíveis em outro nó.

Estes tipos de cluster são utilizados para base de dados de missões críticas, correio, servidores de arquivos, aplicações web, e uma série de outros serviços.

Resumo

Para quem tem uma grande quantidade de acessos e roda aplicações que são essências, que não podem ter a produção afetada por uma queda, mesmo que temporariamente, bom, ai vai um exemplo de como montar um cluster de servidores web usando o recurso do LVS (Linux Virtual Server).

Topologia

Teremos a seguinte topologia em nosso exemplo, na qual iremos nos basear para efetuarmos a configuração logo abaixo.
Iremos usar o modo DR do LVS (Direct Routing)

Servidor real (Servidor onde está instalado o software de gerenciamento das conexões)

Nosso servidor real, ou seja, nosso front-end terá dois ips:
IP REAL (eth0) = 10.0.20.10/24
IP VIRTUAL (eth0:1)= 10.0.20.20/32

Os servidores que fazem parte do cluster, irão possuir o mesmo endereço ip, que no caso nós chamamos de IP VIRTUAL.

Servidor web 01
IP REAL (eth0) = 10.0.20.11/24
IP VIRTUAL (l0:1) = 10.0.20.20/32

Servidor web 02
IP REAL (eth0) = 10.0.20.12/24
IP VIRTUAL (l0:1) = 10.0.20.20/32

Servidor web 03
IP REAL (eth0) = 10.0.20.13/24
IP VIRTUAL (l0:1) = 10.0.20.20/32

Pré-requisitos

Distribuição: CentOS 4.x ou CentOS 5.x
Pacotes: ipvsadm, piranha

O pacote ipvsadm é responsável pela administração da distribuição das conexões aos servidores.

O pacote piranha é apenas a interface (GUI) de administração, é nela que iremos configurar os servidores que fazem parte do cluster, qual tipo, e outras mais...

Instalação

[root@centos ]# yum install ipvsadm piranha

Após instalados os pacotes acima, vamos definir uma senha de acesso a interface de administração do piranha usando o comando abaixo:

[root@centos ]# piranha-passwd

Após termos definidos uma senha para o usuário piranha, vamos iniciar o serviço usando o seguinte comando:

[root@centos ]# service piranha-gui start
[root@centos ]# chkconfig piranha on

Depois de termos inicializado o serviço vamos abrir a interface de administração:

http://meuservidor.com.br:3636




Após efetuarmos o login, será mostrado a tela de controle e monitoramento (CONTROL/MONITORING)

Agora vamos clicar no link Global Settings para iniciarmos as configurações:

Primary server public IP: 10.0.20.10 (IP REAL)
Primary Server private IP: deixe em branco
Use network type: direct



Na aba REDUNDANCY só é necessária quando utilizamos um servidor secundário para alta disponibilidade, não sendo necessário neste caso.

Vamos então a aba VIRTUAL SERVERS


Nesta aba criaremos o host virtual, responsável pelo encaminhamento das solicitações. Para criarmos um servidor virtual, clique em ADD, depois selecione o novo servidor e clique em EDIT. Será exibida a tela abaixo onde em VIRTUAL SERVER devemos entrar com as seguintes informações:

Name: Nome do servidor virtual
Application port: Endereço do serviço onde está rodando sua aplicação
Virtual Network Mask: Máscara de rede da rede virtual, que no caso é de 32bits (255.255.255.255).
Firewall Mark: Não aplicável.
Device: O nome do dispositivo que será criado na interface virtual.
Re-entry Timeout: Intervalo de verificações, no caso de uso do HEARTHBEAT, não aplicável no nosso caso.
Service Timeout: Define o intervalo de tempo em que o servidor será considerado como DEAD, retirando o mesmo do Cluster.
Quiesce Server: Habilita a limpeza automática das das tabelas de roteamento caso um host anteriormente considerado como DEAD retorna ao status de ativo.
Load monitoring tool: Usado para monitorar os status dos hosts em caso de uso com o HEARTHBEAT. Não aplicável.
Scheduling: É o algoritmo que será utilizado para decidir como será efetuado o balanceamento das conexões entre os REAL SERVERS. Neste caso utilizamos o tipo Weighted least-connections, ele irá enviar as conexões para os serviços que possuírem o menor numero de conexões ATIVAS.

Na aba REAL SERVER exibe o status dos servidores reais que fazem parte do grupo de um servidor virtual, exibe se o host está UP, nome dado a máquina virtual e o endereço IP.

Adicionando ou editando um REAL SERVER
Name: nome do servidor REAL
Address: IP do servidor REAL
Weight: Prioridade usada pelo algoritmo de balanceamento.


Na aba MONITORING SCRIPTS, são mostrado os scripts utilizados para verificar se um host está UP ou DOWN.


Após realizar toda configuração indicada acima, vamos iniciar o serviço pulse, responsável pelo gerenciamento do cluster.

[root@centos ]# service pulse start
[root@centos ]# chkconfig pulse on

8 comentários:

Ueider disse...

Ola Marcos... parabéns pelo artigo. Eu queria saber se tem como funciona o ipvs para configurar sem o modo grafico.

Marcos Abadi disse...

Olá Ueider, tem sim!
você pode fazer toda a configuração do ipvs pelo arquivo de configuração do lvs.conf

Ueider disse...

Não consegui fazer essa configuração pelo lvs.conf. Eu instalei o heardbeat e o ldirectord, e fiz as configurações no ldirectord.ha. Coloquei lá o ip e porta das máquinas que eu estou direcionando.

Marcos Abadi disse...

Ueider,
não cheguei a utilizar o heardbeat e nem o ldirectord. Recomendo que você siga o tutorial ou me explique melhor o que você deseja fazer para eu poder te ajudar.

Ueider disse...

Na verdade Marcos, eu quero criar um balanceamento para 2 servidores web, sem utilizar interface gráfica. Estou utilizando o heardbeat para atualizar as info de um web para outro, e o ldrirectord para fazer o load balancer. Não sei se tem um modo mais fácil ... mas encontrei tutoriais parecidos ...

Marcos Abadi disse...

Ueider,
no meu caso, estou usando um servidor de frontend com o lvs instalado, esse servidor faz a distribuição das conexões httpd de formal igual para os servidores http que tem atras dele. Todos os servidores web tem a mesma configuração e mesmos dados. O heardbeat só é usado em caso de contingência, no caso se seu servidor lvs parar você deve ter outro de backup para assumir as conexões.

rn.neto disse...

Marcos, muito bom seu post! Talvez me ajude muito, preciso criar um cluster para balancear httpd, squid, iptables, samba... tenho mais outro servidor com oracle e outro SAN para dos dados

node1 (master)
node2 (node)
node3 (node)
oracle
san 1TB

também com uma rede privada para os servers.
seria uma estrutura correta?

Rafael
SP

Edson F. Cunha disse...

Ola como vc configurou sua interfase de loopback
IP VIRTUAL (l0:1) = 10.0.20.20/32
Vc. poderia colocar um exemplo de uma delas