Configurando Cluster Nginx com Pacemaker e corosync

Tempo de leitura: 7 minutos

Neste Post iremos criar um cluster de alta disponibilidade para um servidor Nginx. A ideia deste post e demostrar o uso do pacemaker, que pode ser usado em vários ambiente e aplicações diferentes, então o foco é o pacemaker.

O pacemaker é um software open source de gerenciamento de recursos de alta disponibilidade usado em clusters de computadores desde 2004 para alcançar alta disponibilidade de sistemas. Até 2007, era uma parte do projeto Linux-HA e depois foi dividido para ser seu próprio projeto. Ele alcança a máxima disponibilidade para seus serviços de cluster, detectando e recuperando de falhas de nó e nível de recurso, fazendo uso das capacidades de mensagens e de associação. O Pacemaker fornece uma Base de Informações de Cluster (CIB) distribuída em que registra a configuração e o status de todos os recursos de cluster entre eles. O CIB replica automaticamente para todos os nós de cluster do Coordenador Designado. O Coordenador Designado é um nó que  elege automaticamente de todos os nós de cluster disponíveis. No Pacemaker, o shell nos permite configurar recursos de cluster. O Policy Engine (PE) do Pacemaker verifica periodicamente a configuração do cluster em relação ao status do cluster e inicia as ações conforme necessário.

Abaixo a ilustração de nosso ambiente que iremos utilizar nesse Post.

Cluster2

Pré-requisitos

  • Inicialmente iremos utilizar dois Servidores, que no caso estão utilizando CentOS 7, onde iremos instalar todos os pacotes para que seja feito o cluster.
  • Endereços IPs distintos. Um endereço de rede privado ou público diferente para cada servidor e nomes distintos com resolução de nomes em ambos, ou seja, deverá ter um DNS ou apenas configurar o arquivo hosts com endereços e nomes.
  • Um IP virtual que será usado pelo servidor que estiver ativo no momento (pacemaker).

Configurando Hostname com resolução de nome local

Um dos primeiros itens que devem ser feitos, é o configuração correta dos nodes (servidores em cluster), para isso devemos editar o arquivo /etc/hosts.

Em nosso caso termos dois servidores CentOS 7, e devemos preencher o arquivo /etc/hosts com os seguintes dados:

192.168.195.130  cluster1.localhost

192.168.195.131 cluster2.localhost

 

É necessário também alterar o hostname para os nomes vistos acima. Para alterar o hostname de cada Servidor devemos editar o arquivo /etc/hostname. 

Para verificar a alteração é necessário forçar a alteração do /proc/hostname ou reiniciar a maquina. Logicamente, é bem mais facíl alterar o arquivo /proc/hostname manualmente ou através do comando hostnamectl. Veja abaixo as duas formas. A primeira alterando o /proc:

echo “cluster1.localhost” >/proc/hostname

E agora o comando hostnamectl.

hostnamectl set-hostname cluster1.localhost

Segurança

Como todos nós sabemos, o CentOS vem com alguns itens de segurança habilitados, que é o SeLinux e o FirewallD. Ao final do Post mostrarei como liberar no firewall pelo menos, e nesse momento iremos desabilitar e parar ambos.  Abaixo iremos desabilitar e parar o firewall.

systemctl disable firewalld

systemctl stop firewalld

O próximo passo é para o Selinux, para tanto devemos editar o /etc/selinux/config e alterar o valor de SELINUX=enforcing para SELINX=permissive.

E também podemos executar o comando :

setenforce 0

Este comando já irá desabilitar, ou melhor permitir a passagem das regras sem bloqueio e sem necessidade de reiniciar.

Instalação do Pacotes

Agora vamos ver como instalar os pacotes, nesse Tutorial irei usar o padrão Centos. Primeiro vamos instalar os pacotes do nginx. Deverá ser feito em ambos servidores

yum install epel-release -y

yum install nginx -y

#Executar no Cluster 1

echo “Server: Cluster 1, IP ADDRESS: 192.168.195.130>/usr/share/nginx/html/index.html 

#Executar no Cluster 2

echo “Server: Cluster 2, IP ADDRESS: 192.168.195.131>/usr/share/nginx/html/index.html 

systemctl enable nginx

systemclt restart nginx

Com isso, fizemos a instalação do Nginx em ambos os servidores, e criamos uma página especifica para cada cluster. O próximo passo é instalar o pacemaker.

yum install corosync pcs pacemaker

Devemos gerar uma senha para o usuário hacluster, que será usado como forma de autenticação nos cluster. Também é necessário fazer em ambos os servidores.

passwd hacluster 

Agora iniciaremos a configuração do Cluster.

Promocao-50

Configurando o Cluster

Agora iremos configurar nosso cluster, é muito importante que eles sejam alcançados por resolução de nomes. Um simples pingue entre eles será o suficiente para testar isso. Uma vez que tudo esteja funcionando, vamos iniciar o serviço fazer a autorização através de autenticação dos clusters.

systemctl enable pcsd;systemctl enable corosync; 

systemctl enable pcsd;systemctl start pcsd

pcs cluster setup –name cluster_web cluster1 cluster2
Destroying cluster on nodes: cluster1, cluster2…
cluster2: Stopping Cluster (pacemaker)…
cluster1: Stopping Cluster (pacemaker)…
cluster2: Successfully destroyed cluster
cluster1: Successfully destroyed cluster

Sending cluster config files to the nodes…
cluster1: Succeeded
cluster2: Succeeded

Synchronizing pcsd certificates on nodes cluster1, cluster2…
cluster2: Success
cluster1: Success

Restarting pcsd on the nodes in order to reload the certificates…

No comando acima, além de habilitarmos os serviços necessários, iniciamos o serviço pcsd, que fará a autenticação dos nodes (membros dos cluster) criando um cluster chamado cluster_web.

Alguns itens podem não funcionar corretamente, por virem default, entre eles o STONITH, que pode causar uma degradação ao acesso, já que ele realmente se certifica que um node está offline, para então liberar acesso ao outro node. Por isso devemos desabilitar.

property set stonith-enabled=false

pcs property set no-quorum-policy=ignore

No diretório /usr/lib/ocf/resource.d/heartbeat poderemos ver todos os recursos disponiveis, inclusive o nginx que usaremos nesse Post.

 

cluster

Podemos ver que já temos muitos recursos como apache, nginx, dhcpd, squid, etc. Em nosso exemplo usaremos dois recursos, que é IPaddr2 para criar um ip virtual e nginx para monitor nosso servidor WEB.

TodosCursos2016

Bom vamos a configuração de nossos recursos, o primeiro item será nosso ip virtual, que usarei nesse exemplo 192.168.195.132.

pcs resource create virtual_ip ocf:heartbeat:IPaddr2 ip=192.168.195.132 cidr_netmask=32 op monitor interval=30s

pcs status resources
virtual_ip (ocf::heartbeat:IPaddr2): Started cluster1
pcs status | grep virtual_ip
virtual_ip (ocf::heartbeat:IPaddr2): Started cluster1

Neste momento já criamos nosso ip virtual, que se encontra no cluster1. Para testar abra o browser apontando para o ip virtual. As informações exibidas deverão ser do cluster1.

Agora iremos configurar o recurso nginx, que alem disso, iremos informar o vinculo com o recurso do ip virtual, qual o node preferido e qual a ordem que os recursos serão disponibilizados.

#pcs resource create webserver ocf:heartbeat:nginx configfile=/etc/nginx/nginx.conf op monitor timeout=”5s” interval=”5s”

#pcs constraint colocation add webserver virtual_ip INFINITY

#pcs constraint order virtual_ip then webserver
Adding virtual_ip webserver (kind: Mandatory) (Options: first-action=start then-action=start)

#pcs constraint location webserver prefers cluster1=50

Temos acima quatro comandos, o primeiro é o que realmente cria o recurso do nginx em nosso cluster. A partir de agora o serviço será monitorado.

Os outros comando são para regras, onde estão vinculados os dois recusos virtual_ip e webserver.  A primeira regra vincula os dois recursos, a segunda informa a ordem que os serviços serão disponibilizados, e por fim a ultima regra informa qual o node preferido, em caso de ambos estarem disponíveis.

Visualizando informações

Os comandos de visualização sempre partem basicamente do comando pcs, como pcs status, pcs property, pcs resorces, entre outros. Abaixo o comando status, que traz os nodes, recursos utilizados, onde está up, online e offline.

# pcs status
Cluster name: cluster_web
Stack: corosync
Current DC: cluster1 (version 1.1.15-11.el7_3.4-e174ec8) – partition with quorum
Last updated: Mon Mar 20 13:36:34 2017 Last change: Mon Mar 20 13:20:10 2017 by root via cibadmin on cluster12 nodes and 2 resources configured

Online: [ cluster1 ]
OFFLINE: [ cluster2 ]

Full list of resources:

virtual_ip (ocf::heartbeat:IPaddr2): Started cluster1
webserver (ocf::heartbeat:nginx): Started cluster1

Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled

Para testar basta desligar o principal, e verificar que nosso serviço ainda está ativo.

Bom é isso, espero que gostem e aproveitem.

 

.’.André Stato Filho

 

You may also like...