Este tutorial mostra como criar dois nós no servidor Web Apache em cluster que fornece alta disponibilidade. No Apache criaremos uma carga balanciada em cluster que divide-se entre os dois pedidos recebidos nodos do apache. Porque não queremos que a carga balanceada a tornar-se um ponto de falha, temos de proporcionar alta disponibilidade para a carga balanciada, também. Por isso a nossa carga balanciada irá consistir no fator das duas cargas balanceadas nos nodos que monitoram simultaneamente usando alta disponibilidade, e se uma carga balanceada falhar, o outro assume silenciosamente.
A vantagem de utilizar uma carga balanceada comparada a usar DNS round robin é que cuida da carga sobre o servidor web nodos e envia pedidos diretos para o nó com menor carga, e também cuida de conexões / sessões. Muitas aplicações web (por exemplo, fórum software, carrinhos de compras, etc) fazem uso de sessões.
Para esta configuração, temos quatro nodos (Apache dois nós e duas cargas balanceada nos nós) e cinco endereços IP: um para cada nó e um endereço IP virtual que será partilhado pela carga balanceada dos nodos e utilizados para as solicitações HTTP.
Vou usar a seguinte configuração aqui:
Apache node 1: webserver1.example.com (webserver1) - IP address: 192.168.0.101; Apache document root: /var/www
Apache node 2: webserver2.example.com (webserver2) - IP address: 192.168.0.102; Apache document root: /var/www
Load Balancer node 1: loadb1.example.com (loadb1) - IP address: 192.168.0.103
Load Balancer node 2: loadb2.example.com (loadb2) - IP address: 192.168.0.104
Virtual IP Address: 192.168.0.105 (used for incoming requests)
Veja a figura abaixo como exemplo:
Neste tutorial vou usar o Debian Sarge para todos os quatro nós. Eu presumo que você tenha instalado uma base instalação Debian em todos os quatro nós, e que você tenha instalado o Apache webserver1 e webserver2, com o / var / www sendo o documento raiz do site principal.
Quero dizer em primeiro lugar, que esta não é a única forma de criar um sistema desse tipo. Há muitas maneiras de configura, mas esta foi a base da minha configuração.
1: Ativar IPVS sobre a carga balanceada:
Primeiro temos de permitir IPVS em nossa carga balanceadas. IPVS (IP Virtual Server) implementa o transporte da camada de balanceamento de carga dentro do kernel do Linux, chamado Layer-4 switching.
loadb1/loadb2:
echo ip_vs_dh >> /etc/modules
echo ip_vs_ftp >> /etc/modules
echo ip_vs >> /etc/modules
echo ip_vs_lblc >> /etc/modules
echo ip_vs_lblcr >> /etc/modules
echo ip_vs_lc >> /etc/modules
echo ip_vs_nq >> /etc/modules
echo ip_vs_rr >> /etc/modules
echo ip_vs_sed >> /etc/modules
echo ip_vs_sh >> /etc/modules
echo ip_vs_wlc >> /etc/modules
echo ip_vs_wrr >> /etc/modules
Então fazemos assim:
loadb1/loadb2:
modprobe ip_vs_dh
modprobe ip_vs_ftp
modprobe ip_vs
modprobe ip_vs_lblc
modprobe ip_vs_lblcr
modprobe ip_vs_lc
modprobe ip_vs_nq
modprobe ip_vs_rr
modprobe ip_vs_sed
modprobe ip_vs_sh
modprobe ip_vs_wlc
modprobe ip_vs_wrr
Se você receber erros, então muito provavelmente o seu kernel não foi compilado com IPVS, você irá precisar compilar um novo kernel com IPVS (ou instalar uma imagem do kernel com suporte IPVS) agora.
2: Instalar Ultra Monkey On The Load Balancers
O que é o Ultra Monkey ?
É um projecto para a criação de carga balanceada e serviços disponíveis em uma rede local utilizando componentes de código aberto sobre o sistema operacional Linux .
Para instalar Ultra Monkey, temos que editar /etc/apt/sources.list, agora e adicionar estas duas linhas (não retire os outros repositórios):
vi /etc/apt/sources.list
deb http://www.ultramonkey.org/download/3/ sarge main deb-src http://www.ultramonkey.org/download/3 sarge main |
Segue como instalar:
loadb1/loadb2:
apt-get update
loadb1/loadb2:
apt-get install ultramonkey
Irá aparecer a mensagem de atenção:
¦ libsensors3 not functional ¦ ¦ ¦ ¦ It appears that your kernel is not compiled with sensors support. As a ¦ ¦ result, libsensors3 will not be functional on your system. ¦ ¦ ¦ ¦ If you want to enable it, have a look at "I2C Hardware Sensors Chip ¦ ¦ support" in your kernel configuration. ¦
Pode ignorar e seguir conforma abaixo:
Do you want to automatically load IPVS rules on boot?
<-- No
Select a daemon method.
<-- none
3: Habilitar o pacote de Load Balancers
A carga balanceada deve ser capaz de rotear o tráfego para o Apache nodos. Por isso, temos de permitir que os pacotes sejam encaminhados para o balanceamento. Adicione as seguintes linhas ao arquivo /etc/sysctl.conf:
loadb1/loadb2:
vi /etc/sysctl.conf
# Enables packet forwarding net.ipv4.ip_forward = 1 |
Em seguida, faça o seguinte:
sysctl -p
4: Configurar heartbeat e ldirectord
Agora temos que criar três arquivos de configuração para heartbeat. Eles devem ser idênticos em loadb1 e loadb2!
loadb1/loadb2:
vi /etc/ha.d/ha.cf
logfacility local0 bcast eth0 # Linux mcast eth0 225.0.0.1 694 1 0 auto_failback off node loadb1 node loadb2 respawn hacluster /usr/lib/heartbeat/ipfail apiauth ipfail gid=haclient uid=hacluster |
Importante: Como nodenames temos de utilizar a saída:
uname -n
on loadb1 and loadb2.
loadb1/loadb2:
vi /etc/ha.d/haresources
loadb1 \ ldirectord::ldirectord.cf \ LVSSyncDaemonSwap::master \ IPaddr2::192.168.0.105/24/eth0/192.168.0.255 |
Logo após faça
uname -n
Irá aparecer:
loadb1
Importante: Não importa se você criou o arquivo no loadb1 ou loadb2! Após IPaddr2 colocamos o endereço IP virtual 192.168.0.105.
loadb1/loadb2:
vi /etc/ha.d/authkeys
auth 3 3 md5 somerandomstring |
somerandomstring: é uma senha que os dois heartbeat daemons, usam para autenticar um com o outro. Você tem a escolha entre três mecanismos de autenticação. Eu uso md5 como é o mais segur.
/etc/ha.d/authkeys deve ser lido apenas pelo root:
loadb1/loadb2:
chmod 600 /etc/ha.d/authkeys
ldirectord: É o verdadeira balanceador. O que vamos fazer é configurar os nossas dois carga balanceada (loadb1.example.com e loadb2.example.com) em um ativo / passivo na configuração, o que significa que temos uma carga balanceada ativa, e os outros é um hot-standby e torna-se activo se a uma falha na ativa. Para fazê-la funcionar, temos de criar ldirectord o arquivo de configuração /etc/ha.d /ldirectord.cf o que mais uma vez deve ser idêntica em loadb1 e loadb2.
loadb1/loadb2:
vi /etc/ha.d/ldirectord.cf
checktimeout=10 checkinterval=2 autoreload=no logfile="local0" quiescent=yes virtual=192.168.0.105:80 real=192.168.0.101:80 gate real=192.168.0.102:80 gate fallback=127.0.0.1:80 gate service=http request="ldirector.html" receive="Test Page" scheduler=rr protocol=tcp checktype=negotiate
virtual = a linha virtual, colocamos nosso endereço IP virtual (192.168.0.105 neste exemplo)
real = linhas que lista os endereços IP dos nossos Apache nodos (192.168.0.101 e 192.168.0.102 neste exemplo).
request = linha que lista o nome de um arquivo em webserver1 e webserver2 que ldirectord irá pedir várias vezes para ver se webserver1 e webserver2 ainda estão vivos. Este arquivo (que vão criar mais adiante) deve conter a seqüência de caracteres listados na
receive = linha.
Depois teremos que criar o sistema de inicialização no heartbeat e remover o start do ldirectord, porque o ldirectord será iniciado pelo heartbeat.
loadb1/loadb2:
update-rc.d heartbeat start 75 2 3 4 5 . stop 05 0 1 6 .
update-rc.d -f ldirectord remove
Finalmento o start será feito pelo heartbeat
loadb1/loadb2:
/etc/init.d/ldirectord stop
/etc/init.d/heartbeat start
5: Testando o Load Balancers
Vamos verificar se as duas cargas balanceadas estão funcionando como esperamos:
loadb1/loadb2:
ip addr sh eth0
A carga balanceada ativa deve listar o endereço IP virtual (192.168.0.105):
2: eth0:mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:16:3e:40:18:e5 brd ff:ff:ff:ff:ff:ff inet 192.168.0.103/24 brd 192.168.0.255 scope global eth0 inet 192.168.0.105/24 brd 192.168.0.255 scope global secondary eth0
O hot-standby deve mostrar isto:
2: eth0:mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:16:3e:50:e3:3a brd ff:ff:ff:ff:ff:ff inet 192.168.0.104/24 brd 192.168.0.255 scope global eth0
loadb1/loadb2:
ldirectord ldirectord.cf status
Saída com a participação ativa carga balanceada:
ldirectord for /etc/ha.d/ldirectord.cf is running with pid: 1455
Saída sobre o hot-standby:
ldirectord is stopped for /etc/ha.d/ldirectord.cf
loadb1/loadb2:
ipvsadm -L -n
Saída partição ativa:
IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.0.105:80 rr -> 192.168.0.101:80 Route 0 0 0 -> 192.168.0.102:80 Route 0 0 0 -> 127.0.0.1:80 Local 1 0 0
Saída partição hot-standby:
IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn
loadb1/loadb2:
/etc/ha.d/resource.d/LVSSyncDaemonSwap master status
Saída partição ativa:
master running (ipvs_syncmaster pid: 1591)
Saída partição hot-standby:
master stopped
PS: Se o obteve sucesso no seu teste, agora vamos o Apache dois nodos.
6: Configurar o Apache com Dois Nodes
Finalmente, devemos configurar nosso cluster Apache nodos webserver1.example.com e webserver2.example.com a aceitar pedidos sobre o endereço IP virtual 192.168.0.105.
webserver1/webserver2:
apt-get install iproute
Adicionar a seguinte configuração dentro de /etc/sysctl.conf
webserver1/webserver2:
vi /etc/sysctl.conf
# Enable configuration of arp_ignore option net.ipv4.conf.all.arp_ignore = 1 # When an arp request is received on eth0, only respond if that address is # configured on eth0. In particular, do not respond if the address is # configured on lo net.ipv4.conf.eth0.arp_ignore = 1 # Ditto for eth1, add for all ARPing interfaces #net.ipv4.conf.eth1.arp_ignore = 1 # Enable configuration of arp_announce option net.ipv4.conf.all.arp_announce = 2 # When making an ARP request sent through eth0 Always use an address that # is configured on eth0 as the source address of the ARP request. If this # is not set, and packets are being sent out eth0 for an address that is on # lo, and an arp request is required, then the address on lo will be used. # As the source IP address of arp requests is entered into the ARP cache on # the destination, it has the effect of announcing this address. This is # not desirable in this case as adresses on lo on the real-servers should # be announced only by the linux-director. net.ipv4.conf.eth0.arp_announce = 2 # Ditto for eth1, add for all ARPing interfaces #net.ipv4.conf.eth1.arp_announce = 2 |
Em seguida, execute o seguinte:
webserver1/webserver2:
sysctl -p
Adicione o endereço IP virtual em /etc/network/interfaces
webserver1/webserver2:
vi /etc/network/interfaces
auto lo:0 iface lo:0 inet static address 192.168.0.105 netmask 255.255.255.255 pre-up sysctl -p > /dev/null |
Em seguida, execute o seguinte:
webserver1/webserver2:
ifup lo:0
Finalmente, temos de criar o arquivo ldirector.html. Este arquivo é solicitado pela Load Balancers nos dois nodos repetidamente para que eles possam ver se o Apache nos dois ainda estão sendo veiculados. Parto do princípio de que o documento raiz do site principal apache sobre webserver1 e webserver2 é /var/www, portanto, nós criamos o arquivo /var/www/ldirector.html
webserver1/webserver2:
vi /var/www/ldirector.html
Test Page |
Mais Testes
Você já pode acessar o web site que está hospedado pelo Apache nos dois nodos http://192.168.0.105 escrevendo em seu navegador.
Agora, pare o Apache em ambos webserver1 ou webserver2. Você deve, ainda assim, consultar o site sobre a carga balanceada http://192.168.0.105 porque direciona os pedidos para o trabalho Apache nó. Claro, se você quer parar todos os Apaches, então o seu pedido falhará.
Agora vamos assumir que é o nosso ativo loadb1 com carga balanceada , e loadb2 é o hot-standby. Agora parar heartbeat em loadb1:
loadb1:
/etc/init.d/heartbeat stop
Aguarde alguns segundos e, em seguida, tente novamente http://192.168.0.105 no seu navegador. Você ainda deve ver o seu site porque loadb2 tomou o papel ativo agora.
Ative novamente o heartbeat no nó loadb1
loadb1:
/etc/init.d/heartbeat start
Se você também passou esses testes e, em seguida, o cluster loadbalanced Apache está funcionando como esperado. Divirta-se!
Nenhum comentário:
Postar um comentário