LVS + Debian Wheezy

LVS Linux Virtual Server (LVS) é uma solução de balanceamento de carga avançada para sistemas Linux. É um projeto Open Source começado por Wensong Zhang em maio de 1998. A missão do projeto é construir um servidor de alto desempenho e altamente disponível para Linux usando a tecnologia de clustering, que fornece altos níveis de escalabilidade, confiabilidade e usabilidade.

O trabalho principal do projeto de LVS deve agora desenvolver o software de balanceamento de carga avançado de IP (IPVS), o software de balanceamento de carga a nível aplicativo (KTCPVS) e componentes de gerenciamento de cluster.

IPVS: é um software balanceador de carga avançado do IP executado dentro do Linux. O código de IPVS era já incluído no núcleo padrão 2.4 e 2.6 de Linux.

KTCPVS: executa a carga do nível de aplicação que balança dentro do Linux, atualmente sob desenvolvimento.

Os usuários podem usar as soluções de LVS para construir serviços de rede altamente escaláveis e altamente disponíveis, tais como o serviço de mídia, serviço de email. Os meios prestam serviços de manutenção e serviços de VoIP, e integram serviços de rede escaláveis em aplicações de confiança em grande escala do e-comércio ou do e-governo.

As soluções de LVS têm sido desdobradas já em muitas aplicações reais durante todo o mundo.

A topologia geral do LVS é como a figura abaixo:

Topologia LVS com HA é como a figura abaixo:

O que muda é a forma como configuramos cada um destes modelos.

LVS por NAT

No modelo por NAT o servidor diretor gerencia todas as conexões entre os clientes e os servidores reais, embora este modelo seja o mais interessante pelo fato dos servidores reais utilizarem qualquer sistema operacional que suporte TCP/IP, ele acaba tendo o diretor como o gargalo do modelo.

LVS por Túneis

No modelo por túneis os servidores precisam suportar conexão por túnel, mas o mais interessante é que a topologia final pode ser espalhada pela Internet, ou seja, os servidores reais podem tanto estar na rede local LAN como atráves da WAN (e neste caso, podemos utilizar geolocalização para balancear as conexões entre os cliente e os servidores de forma a reduzir a latência de resposta)

LVS por Roteamento Direto

Neste modelo o diretor e os servidores reais estão no mesmo barramento de rede, o maior problema aqui é que neste modelo cada servidor real deve possuir o IP público que é utilizado pelo cliente, mas este IP público (que estará armazenado em uma interface virtual/dummy) não deve responder a requisições ARP para o cliente. A pergunta é: por que isso é necessário? porque se o servidor real reponde-se o IP público diretamente para o cliente, o balanceamento só ocorreria na primeira requisição para o cliente e nas demais as requisições não seriam mais encaminhadas para o diretor, quebrando toda a estrutura de balanceamento.

Da mesma forma que a topologia por túneis, a por roteamento direto entrega as requisições diretamente para o cliente

Aqui vamos configurar o LVS para fazer o balanceamento de carga no serviço http porta 80, vamos utilizar o LVS com nat que é no meu ponto de vista o mais simples, podemos fazer o balanceamento de carga com outro serviço depois vou mostrar o que devemos mudar.

Requisitos:

1 Servidor Debian Squeeze com 2 interfaces de rede este que vai ser o servidor de load balancer.

2 Servidores Debian Squeeze cada um com 1 interface de rede estes servidores que vão ter o servidor apache instalados, este 2 servidores podem ser outro SO que suporte apache EX: Windows, FreeBSD ou outra distribuição Linux.

Ips utilizados.

Servidor 1:

  • eth1: 200.200.200.1/24 → Ip da WAN
  • eth0: 192.168.25.40/24 → Ip da LAN

Servidor 2:

  • eth0: 192.168.25.41/24 → Ip da LAN
  • GW: 192.168.25.40

Servidor 3:

  • eth0: 192.168.25.42/24 → Ip LAN
  • GW: 192.168.25.40

OBS: O LVS do tipo NAT não funciona com todos os ips sendo da mesma rede, no nosso exemplo estou levando em consideração que o primeiro servidor tenha as 2 interfaces de rede, por exemplo para testes insira 2 interfaces em uma VM e configure a sua maquina local para acessar com um ip da faixa externa.

EX: Servidor está com o ip 200.200.200.1/24, com isso a sua maquina pode ser configurada com o ip 200.200.200.2/24 somente para ter acesso ao servidor para testes, em caso de um ip publico dai não precisa.

Como vai funcionar ?

O cliente vai fazer a requisição para o 200.200.200.1 ele vai fazer o direcionamento da requisição para o servidor 2 ou servidor 3 dependendo do algoritmo que utilizarmos com LVS.

Algoritmos de balanceamento:

  • rr - Round Robin: Distribui as requisições igualmente entre os servidores disponíveis reais.
  • wrr - Weighted Round Robin: Atribui requisições aos servidores reais proporcionalmente ao peso. Servidores com pesos mais elevados receber novas requisições primeiro e obtém mais requisições do que os servidores com pesos inferiores. Servidores com pesos iguais obtém uma distribuição igual de novas requisições.
  • lc - Least-Connection: Atribui mais requisições para os servidores reais com menos requisições ativas.
  • wlc - Weighted Least-Connection: Atribui mais requisições para os servidores com menos requisições e em relação ao peso dos servidores reais. Este é o padrão.
  • lblc - Locality-Based Least-Connection: Atribui requisições destinadas para o mesmo endereço IP para o mesmo servidor, se o servidor não está sobrecarregado e impossibilitado de receber novas requisições, caso contrário, atribuir requisições a servidores com menos requisições, e mantem para a atribuição de futuras.
  • lblcr - Locality-Based Least-Connection with Replication: Atribui requisições destinadas para o mesmo endereço IP para o nó que contém menos requisições definido para o endereço IP. Se todos os nós no conjunto de servidores estão carregados, ele pega um nó com menos requisições no cluster e adiciona ele no corte. Se o conjunto de servidores não foi modificado durante o tempo especificado, o nó mais carregado é removido a partir do conjunto de servidores, afim de evitar elevado grau de replicação.
  • dh - Destination Hashing: Atribui postos de trabalho para os servidores através de uma tabela de hash atribuído estaticamente por seus endereços IP de destino. (1º Melhor opção pra aplicações autenticadas)
  • sh - Source Hashing: Atribui postos de trabalho para os servidores através de uma tabela de hash atribuído estaticamente por seus endereços IP de origem. (2º Melhor opção para aplicações autenticadas)

OBS: Caso esteja utilizando aplicações autenticadas os melhores algoritmos são dh e sh pois vão sempre mandar a requisição do cliente para o mesmo nodo do cluster não perdendo a autenticação, caso contrário o servidor vai ficar matando a autenticação pois a cada requisição a solicitação do cliente pode ir para um servidor diferente matando a autenticação :(

Para obter mais informações sobre os algoritmos podemos consultar o man do ipvsadm com o seguinte comando

man 8 ipvsadm

Prepare o seu sistema com o seguinte script http://wiki.douglasqsantos.com.br/doku.php/confinicialwheezy_en para que não falte nenhum pacote ou configuração.

Vamos configurar o servidor que vai trabalhar como load balancer

Vamos mandar atualizar os repositórios e fazer um upgrade do sistema

aptitude update && aptitude dist-upgrade -y

Vamos instalar o ipsvadm que é o agente de configuração do load balancer

aptitude install ipvsadm -y

Agora precisamos reconfigurar ele

vim /etc/default/ipvsadm
#/etc/default/ipvsadm
#habilitar o  ipvsadmin a iniciar no boot da maquina
AUTO="true"

#Metodo de trabalho do daemon (none|master|backup)
DAEMON="backup"

#Qual interface vai ser utilizada (eth0,eth1...)
IFACE="eth1"    

#Sincronismo de syncid que serve para especificar o id que sera enviando pelo daemon master quando for 
#enviar uma mensagem de multicast
SYNCID="1"

Agora vamos recarregar a configuração do ipvsadm

dpkg-reconfigure ipvsadm
debconf: Campo de template desconhecido '__choices', na stanza #1 de /var/lib/dpkg/info/ipvsadm.templates

debconf: Campo de template desconhecido '_description', na stanza #1 de /var/lib/dpkg/info/ipvsadm.templates

debconf: Campo de template desconhecido '_description', na stanza #2 de /var/lib/dpkg/info/ipvsadm.templates

debconf: Campo de template desconhecido '_description', na stanza #3 de /var/lib/dpkg/info/ipvsadm.templates

debconf: Campo de template desconhecido '_description', na stanza #4 de /var/lib/dpkg/info/ipvsadm.templates

[....] Stopping IPVS Connection Synchronization Daemon: backupNo daemon is running
 failed!
. ok 
[ ok ] Clearing the current IPVS table...done.
[ ok ] Clearing the current IPVS table...done.
[ ok ] Loading IPVS configuration...done.
[ ok ] Starting IPVS Connection Synchronization Daemon: backup.

Agora vamos instalar o apache e o php5 no servidor 2

aptitude install php5 apache2 -y

Agora vamos criar uma pagina de index no servidor 2 somente para diferenciarmos os dois servidor

echo "<h1>Servidor 2</h1>" > /var/www/index.html

Agora vamos instalar o apache e o php5 no servidor 3

aptitude install php5 apache2 -y

Agora vamos criar uma pagina de index no servidor 3 somente para diferenciarmos os dois servidor

echo "<h1>Servidor 3</h1>" > /var/www/index.html

Configuração do serviço LVS utilizando o algoritmo wlc

Agora vamos criar as regras para o balanceamento utilizando o algoritmo wlc

Agora vamos criar o serviço virtual do LVS.

ipvsadm -A -t 200.200.200.1:80 -s wlc 

Aqui especificamos a criação do serviço com a opção -A, o tipo de protocolo com a opção -t é o protocolo tcp se utilizamos a opção -u é o protocolo udp, precisamos especificar qual o ip que irá responder as requisições para os clientes no nosso caso o ip 200.200.200.1 e a porta 80 com isso temos 200.200.200.1:80 o -s é utilizado para especificarmos o algoritmo de balanceamento.

Agora vamos listar a regra do LVS

ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  200.200.200.1:80 wlc

Agora vamos especificar para quais servidores vamos fazer o balanceamento, vamos inserir o servidor 2 nas regras do LVS.

ipvsadm -a -t 200.200.200.1:80 -r 192.168.25.41:80 -m

Aqui especificamos a adição de um servidor real ou seja o servidor que tem os serviços que vão ser disponibilizados para os clientes, o tipo de protocolo com a opção -t é o protocolo tcp, precisamos especificar qual o ip que irá responder as requisições dos clientes 200.200.200.1:80 o -r é utilizado para especificarmos o ip do servidor real que tem os serviços que vão ser disponibilizados para os cliente no nosso caso o servidor 192.168.25.41 e qual a porta neste caso 80 com isso temos 192.168.25.41:80 e o -m significa que o tipo de balanceamento é nat.

Agora vamos especificar para quais servidores vamos fazer o balanceamento, vamos inserir o servidor 3 nas regras do LVS.

ipvsadm -a -t 200.200.200.1:80 -r 192.168.25.42:80 -m

Aqui especificamos a adição de um servidor real ou seja o servidor que tem os serviços que vão ser disponibilizados para os clientes, o tipo de protocolo com a opção -t é o protocolo tcp, precisamos especificar qual o ip que irá responder as requisições dos clientes 200.200.200.1:80 o -r é utilizado para especificarmos o ip do servidor real que tem os serviços que vão ser disponibilizados para os cliente no nosso caso o servidor 192.168.25.42 e qual a porta neste caso 80 com isso temos 192.168.25.42:80 e o -m significa que o tipo de balanceamento é nat.

Agora vamos listar as regras do LVS

ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  200.200.200.1:80 wlc
  -> 192.168.25.41:80               Masq    1      0          0         
  -> 192.168.25.42:80               Masq    1      0          0     

Parâmetros que aparecem na listagem:

  • Foward: define o tipo de balanceamento, neste caso NAT.
  • Weight: define se o servidor real esta acessível (1) ou não (0).
  • ActiveConn: define se existem conexões ativas (1) ou não (0).
  • InActConn: define os pacotes que estão entrando em conexão com o serviço.

Agora precisamos habilitar o roteamento do servidor LVS para que ele possa encaminhar e responder as requisições dos clientes.

sed -i "s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/" /etc/sysctl.conf

Agora vamos fazer mais um ajuste no kernel

echo "net.core.wmem_max = 16777216" >> /etc/sysctl.conf
echo "net.core.rmem_max = 16777216" >> /etc/sysctl.conf

Agora precisamos recarregar a configuração.

sysctl -p

Agora podemos acessar o nosso load balancer em http://200.200.200.1

Agora vamos listar as regra do LVS

ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  200.200.200.1:80 wlc
  -> 192.168.25.41:80               Masq    1      0          1         
  -> 192.168.25.42:80               Masq    1      0          2 

Depois de alguns acessos podemos notar que temos alguns valores que mudaram em InAcConn.

Configuração do serviço LVS utilizando o algoritmo round robin

Agora vamos testar o algoritmo round robin

Primeiro temos que limpar as regras

ipvsadm -C

Agora vamos listar as regras

ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

Agora vamos fazer a implementação do load balancer com o algoritmo round robin

Agora vamos criar o serviço virtual do LVS.

ipvsadm -A -t 200.200.200.1:80 -s rr

Aqui especificamos a criação do serviço com a opção -A, o tipo de protocolo com a opção -t é o protocolo tcp se utilizamos a opção -u é o protocolo udp, precisamos especificar qual o ip que irá responder as requisições para os clientes no nosso caso o ip 200.200.200.1 e a porta 80 com isso temos 200.200.200.1:80 o -s é utilizado para especificarmos o algoritmo de balanceamento.

Agora vamos listar a regra do LVS

ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  200.200.200.1:80 rr

Agora vamos especificar para quais servidores vamos fazer o balanceamento, vamos inserir o servidor 2 nas regras do LVS.

ipvsadm -a -t 200.200.200.1:80 -r 192.168.25.41:80 -m

Aqui especificamos a adição de um servidor real ou seja o servidor que tem os serviços que vão ser disponibilizados para os clientes, o tipo de protocolo com a opção -t é o protocolo tcp, precisamos especificar qual o ip que irá responder as requisições dos clientes 200.200.200.1:80 o -r é utilizado para especificarmos o ip do servidor real que tem os serviços que vão ser disponibilizados para os cliente no nosso caso o servidor 192.168.25.41 e qual a porta neste caso 80 com isso tempos 192.168.25.41:80 e o -m significa que o tipo de balanceamento é nat.

Agora vamos especificar para quais servidores vamos fazer o balanceamento, vamos inserir o servidor 3 nas regras do LVS.

ipvsadm -a -t 200.200.200.1:80 -r 192.168.25.42:80 -m

Aqui especificamos a adição de um servidor real ou seja o servidor que tem os serviços que vão ser disponibilizados para os clientes, o tipo de protocolo com a opção -t é o protocolo tcp, precisamos especificar qual o ip que irá responder as requisições dos clientes 200.200.200.1:80 o -r é utilizado para especificarmos o ip do servidor real que tem os serviços que vão ser disponibilizados para os cliente no nosso caso o servidor 192.168.25.42 e qual a porta neste caso 80 com isso tempos 192.168.25.42:80 e o -m significa que o tipo de balanceamento é nat.

Agora vamos listar as regras do LVS

ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  200.200.200.1:80 rr
  -> 192.168.25.41:80               Masq    1      0          0         
  -> 192.168.25.42:80               Masq    1      0          0 

Parâmetros que aparecem na listagem:

  • Foward: define o tipo de balanceamento, neste caso NAT.
  • Weight: define se o servidor real esta acessível (1) ou não (0).
  • ActiveConn: define se existem conexões ativas (1) ou não (0).
  • InActConn: define os pacotes que estão entrando em conexão com o serviço.

Agora podemos acessar o nosso load balancer em http://200.200.200.1

Agora vamos listar as regra do LVS

ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  200.200.200.1:80 rr
  -> 192.168.25.41:80               Masq    1      0          1         
  -> 192.168.25.42:80               Masq    1      0          2  

Depois de alguns acessos podemos notar que temos alguns valores que mudaram em InAcConn.

Agora vamos salvar as nossas regras para que elas possam subir junto com o servidor

ipvsadm-save -n > /etc/ipvsadm.rules

OBS: Tente sempre salvar as regras com a opção -n para salvar tudo em formato numérico, caso salve com nomes que precisem de DNS, se o serviço de DNS não estiver funcionando o ipvsadm não consegue subir todas as regras.

Agora vamos visualizar o arquivo que mandamos salvar as regras

cat /etc/ipvsadm.rules 
-A -t 200.200.200.1:80 -s rr
-a -t 200.200.200.1:80 -r 192.168.25.41:80-m -w 1
-a -t 200.200.200.1:80 -r 192.168.25.42:80 -m -w 1

Agora vamos reiniciar o servidor para testar a inicialização das regras.

reboot

Agora vamos listar as regras do LVS

ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  200.200.200.1:80 rr
  -> 192.168.25.41:80               Masq    1      0          0         
  -> 192.168.25.42:80               Masq    1      0          0 

Agora vamos verificar o uptime do servidor

uptime
 15:52:05 up 1 min,  1 user,  load average: 0,03, 0,01, 0,01

Configuração do serviço LVS utilizando o algoritmo dh

Agora vamos testar o algoritmo dh

Primeiro temos que limpar as regras

ipvsadm -C

Agora vamos listar as regras

ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

Agora vamos fazer a implementação do load balancer com o algoritmo round robin

Agora vamos criar o serviço virtual do LVS.

ipvsadm -A -t 200.200.200.1:80 -s dh

Aqui especificamos a criação do serviço com a opção -A, o tipo de protocolo com a opção -t é o protocolo tcp se utilizamos a opção -u é o protocolo udp, precisamos especificar qual o ip que irá responder as requisições para os clientes no nosso caso o ip 200.200.200.1 e a porta 80 com isso temos 200.200.200.1:80 o -s é utilizado para especificarmos o algoritmo de balanceamento.

Agora vamos listar a regra do LVS

ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  200.200.200.1:80 dh

Agora vamos especificar para quais servidores vamos fazer o balanceamento, vamos inserir o servidor 2 nas regras do LVS.

ipvsadm -a -t 200.200.200.1:80 -r 192.168.25.41:80 -m

Aqui especificamos a adição de um servidor real ou seja o servidor que tem os serviços que vão ser disponibilizados para os clientes, o tipo de protocolo com a opção -t é o protocolo tcp, precisamos especificar qual o ip que irá responder as requisições dos clientes 200.200.200.1:80 o -r é utilizado para especificarmos o ip do servidor real que tem os serviços que vão ser disponibilizados para os cliente no nosso caso o servidor 192.168.25.41 e qual a porta neste caso 80 com isso tempos 192.168.25.41:80 e o -m significa que o tipo de balanceamento é nat.

Agora vamos especificar para quais servidores vamos fazer o balanceamento, vamos inserir o servidor 3 nas regras do LVS.

ipvsadm -a -t 200.200.200.1:80 -r 192.168.25.42:80 -m

Aqui especificamos a adição de um servidor real ou seja o servidor que tem os serviços que vão ser disponibilizados para os clientes, o tipo de protocolo com a opção -t é o protocolo tcp, precisamos especificar qual o ip que irá responder as requisições dos clientes 200.200.200.1:80 o -r é utilizado para especificarmos o ip do servidor real que tem os serviços que vão ser disponibilizados para os cliente no nosso caso o servidor 192.168.25.42 e qual a porta neste caso 80 com isso tempos 192.168.25.42:80 e o -m significa que o tipo de balanceamento é nat.

Agora vamos listar as regras do LVS

ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  200.200.200.1:80 dh
  -> 192.168.25.41:80               Masq    1      0          0         
  -> 192.168.25.42:80               Masq    1      0          0 

Parâmetros que aparecem na listagem:

  • Foward: define o tipo de balanceamento, neste caso NAT.
  • Weight: define se o servidor real esta acessível (1) ou não (0).
  • ActiveConn: define se existem conexões ativas (1) ou não (0).
  • InActConn: define os pacotes que estão entrando em conexão com o serviço.

Agora podemos acessar o nosso load balancer em http://200.200.200.1

Agora vamos listar as regra do LVS

ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  200.200.200.1:80 dh
  -> 192.168.25.41:80               Masq    1      0          2         
  -> 192.168.25.42:80               Masq    1      0          0  

Depois de alguns acessos podemos notar que temos alguns valores que mudaram em InAcConn.

Note que o servidor 192.168.25.41 tem 2 requisições, porque o cliente conectou e mandou atualizar a tela, como o algoritmo dh trabalha com uma tabela de hash de destino o cliente que requisitou uma solicitação sempre vai ser respondido pelo menos servidor que o atendeu na primeira requisição, com isso não perdemos sessões autenticadas que é um grande problema quando trabalhamos com balanceamento.

Ex: Quando estamos trabalhando com round robin o balanceamento de requisições é dividido igualmente para os dois, com isso se o cliente se autenticada no servidor 1 e a próxima requisição dele de uma página autenticada vai ser jogada para o segundo servidor com isso a autenticação não vai ser mais válida forçando o cliente a se autenticar novamente e matando a sessão anterior, porém na próxima solicitação vai acontecer a mesma coisa novamente entrando em um loop infinito :(

Aqui no balanceamento podemos criar em um mesmo servidor o balanceamento de vários serviços simultaneamente exemplo:

ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  200.200.200.1:25 dh
  -> 192.168.25.41:25              Masq    1      0          0          
  -> 192.168.25.42:25              Masq    1      0          0          
TCP  200.200.200.1:80 dh
  -> 192.168.25.41:80              Masq    1      0          0          
  -> 192.168.25.42:80              Masq    1      0          0          
TCP  200.200.200.1:110 dh
  -> 192.168.25.41:110             Masq    1      0          0          
  -> 192.168.25.42:110             Masq    1      0          0          
TCP  200.200.200.1:143 dh
  -> 192.168.25.41:143             Masq    1      0          0          
  -> 192.168.25.42:143             Masq    1      0          0          
TCP  200.200.200.1:443 dh
  -> 192.168.25.41:443             Masq    1      0          2          
  -> 192.168.25.42:443             Masq    1      0          0          
TCP  200.200.200.1:587 dh
  -> 192.168.25.41:587             Masq    1      0          0          
  -> 192.168.25.42:587             Masq    1      0          0          
TCP  200.200.200.1:993 dh
  -> 192.168.25.41:993             Masq    1      0          0          
  -> 192.168.25.42:993             Masq    1      0          0          
TCP  200.200.200.1:995 dh
  -> 192.168.25.41:995             Masq    1      0          0          
  -> 192.168.25.42:995             Masq    1      0          0 

Aqui temos o balanceamento de vários serviços simultaneamente, precisando apenas inserir mais da seguinte forma:

Aqui vamos fazer o balanceamento do servidor MySQL, aqui estamos utilizando o algoritmo dh mais podemos utilizar um algoritmo diferente para cada tipo de serviço.

ipvsadm -A -t 200.200.200.1:3306 -s dh

Agora vamos jogar para os servidores

ipvsadm -a -t 200.200.200.1:3306 -r 192.168.25.25:3306 -m
ipvsadm -a -t 200.200.200.1:3306 -r 192.168.25.26:3306 -m

Agora é só ir administrando e adicionando mais serviços.

Referências