-
Notifications
You must be signed in to change notification settings - Fork 2
334_High_Availability_Cluster_management
Peso: 5
Description: Candidates should understand the properties and design approaches of high availability clusters. Key Knowledge Areas:
Understand the most important cluster architectures Understand recovery and cluster reorganization mechanisms Design an appropriate cluster architecture for a given purpose Application aspects of high availability Operational considerations of high availability
Terms and Utilities:
Active/Passive Cluster, Active/Active Cluster Failover Cluster, Load Balanced Cluster Shared-Nothing Cluster, Shared-Disk Cluster Cluster resources Cluster services Quorum Fencing Split brain Redundancy Mean Time Before Failure (MTBF) Mean Time To Repair (MTTR) Service Level Agreement (SLA) Desaster Recovery Replication Session handling
"Um Cluster é um conjunto de máquinas independentes, chamadas nós, que cooperam umas com as outras para atingir um determinado objetivo comum. Para usuários externos, o cluster é visto como sendo um único sistema."
- 3 Tipos principais de clusters:
- Alta disponibilidade: (High Availability (ha) and Failover): Utilizados por serviços críticos
- Balanceamento de carga (Load Balancing): Utilizados por serviços críticos
- Processamento distribuído ou processamento paralelo ou alto desempenho(HPC - Hight Performance Computing): Utilizado quando necessário grande poder de processamento.
- Alta disponibilidade (HA):
- Feito para prover disponibilidade de forma ininterrupta
- Se um nó do cluster falhar, os serviços estarão disponíveis em outro nó
- Active/Passive Cluster: Provê uma instância totalmente redundante de cada nó, que só é colocado online quando seu nó principal associado falha. Esta configuração requer tipicamente um hardware extra adicional.
Exemplo de uso: Este tipo compreende duas infra-estruturas idênticas próximas, logicamente configuradas lado a lado. Um nó hospeda o serviço de banco de dados ou aplicativo, enquanto o outro descansa "braços cruzados" à espera no caso de o sistema primário cair. Eles compartilham um componente de armazenamento e o servidor primário entrega 'graciosamente/gentilmente' o controle do armazenamento para o outro servidor ou nó quando ele falhar. Em caso de falha do nó primário, o nó inativo torna-se o principal e hospeda o banco de dados ou aplicativo Fonte: https://technet.microsoft.com/en-us/library/cc737532%28v=ws.10%29.aspx
- Active/Active Cluster: Tráfego destinado para o nó com falha é repassado para um nó ou feito um 'load balanced' entre os nós restantes. Isso geralmente só é possível quando os nós utilizam uma configuração de software homogênea.
Exemplos de uso: Neste tipo, um nó (NO-01) age como primário para uma instância do banco de dados e o nó secundário (NO-02) como failover para esta instância. Ao mesmo tempo, o nó secundário (NO-02) age como primário para outra instância de banco de dados e o NO-01 como failover desta instância de banco. A configuração Active/Active traz um melhor custo benefício em comparação ao Active/Passive, mas isto pode resultar em problemas de performance no momento do FailOver onde duas instâncias de banco de dados vão rodar no mesmo nó Fonte: https://technet.microsoft.com/en-us/library/cc737532%28v=ws.10%29.aspx
- Balanceamento de carga (Load Balancing):
- As tarefas de processamento são distribuídas o mais uniformemente possível entre os nós. Cada servidor recebe e atende a uma requisição e não, necessariamente, que divida uma tarefa.
- Exemplo: Balanceamento de servidor WEB. Encaminha e balanceia as requisições entre servidores Web. Nginx é um programa que faz isso.
- Exemplo2: Projeto Linux Virtual Server: http://pt.wikipedia.org/wiki/LVS
- Definição de - Disponibilidade: Capacidade de um usuário de determinado sistema acessar, incluir ou modificar os dados existentes em qualquer intervalo de tempo. Caso o usuário não tenha acesso, ele fica indisponível. Total de tempo de indisponibilidade é o downtime.
- Shared-Nothing Cluster;
Fontes:
- http://www.evidian.com/products/high-availability-software-for-application-clustering/shared-nothing-cluster-vs-shared-disk-cluster/
- http://en.wikipedia.org/wiki/Shared_nothing_architecture
- http://www.dba-oracle.com/real_application_clusters_rac_grid/pdb.html
- http://www.mullinsconsulting.com/db2arch-sd-sn.html
- Shared-Disk Cluster:
- Demais fontes do tópico:
- Cluster: http://www.infowester.com/cluster.php
- http://pt.wikipedia.org/wiki/Sistema_de_alta_disponibilidade
- http://en.wikipedia.org/wiki/High-availability_cluster
- http://www.dba-oracle.com/real_application_clusters_rac_grid/fo_cluster.htm
- Introdução a Cluster: http://www.clubedohardware.com.br/artigos/computacao-em-cluster/153
-
Cluster resources:
- "Um recurso representa certa funcionalidade oferecida em um nó. Ele pode ser físico ou lógico, como um endereço IP. Recursos são a unidade básica de gerenciamento, e podem migrar de um nó para outro. O processo de migração de um recurso de um nó para outro é chamado de Failover. Um recurso tem associado a si um tipo, que descreve seus atributos genéricos e seu comportamento." Recursos também podem ser chamados de serviços (como serviço de HTTP por exemplo) que por sua vez tem dependências de outros recursos/serviços.
- Redundancy: Redundância é basicamente hardware ou software adicional que pode ser usado como backup se o hardware ou software principal falhar. A redundância pode ser alcançada através de cluster, failover, RAID, balanceamento de carga e alta disponibilidade de forma automatizada. Uma camada superior de redundância é alcançada quando o dispositivo de suporte é completamente separado do dispositivo principal. Por exemplo, uma linha de internet de backup é fornecida por outro provedor ISP, com uma ligação física completamente separada, ou um hardware redundante que reside em outro prédio.
- Cluster services
- Split brain (cérebro dividido):
- Fencing:
- Resource Fencing: É a ideia de que se você sabe que recursos um nó pode estar usando, então você pode usar algum método de bloqueá-lo de acessar esses recursos. Por exemplo, se tem um disco que é acessado por um interruptor de canal de fibra, então pode-se falar com o interruptor de canal de fibra e dizer a ele para negar o acesso do nó defeituoso à SAN.
- Node Fencing: É a ideia de que se pode manter um nó desligado de todos os recursos - sem saber que tipo de recursos que ele pode estar acessando, então como se poderia negar o acesso a eles. Uma maneira comum de fazer isso é desligar ou reiniciar o nó problemático. Este é um método um tanto deselegante mas muito eficaz de bloqueá-lo de acessar qualquer coisa. Essa técnica também é chamada STONITH - que é um acrônimo gráfico de Shoot The Other Node In The Head (atirar na cabeça do outro nó).
- Outros recursos que podem ser utilizados, alternativos ao fencing é o Node Suicide e o self-shutdown, que são técnicas que dependem do nó problemático, onde ele ou se desligará ou reiniciará caso perca o quorum.
-
Quorum: O Fencing consegue isolar corretamente o nó ou a parte do cluster problemática. Mas como definir qual parte do cluster é a problemática (e deve ser isolada) e qual a correta e deve se manter em funcionamento? Para solucionar esta questão temos o quorum. A ideia de quorum representa o processo de seleção de um único subcluster. A solução mais clássica para a seleção de um único subgrupo é uma maioria de votos, ou seja, o subgrupo que tiver mais votos que a metade da quantidade de membros do cluster assume o controle do cluster.
- Quorum em cluster com 2 nós: Em um cluster com dois nós, a solução clássica não funciona pois cada nós tem igual número de votos. Neste caso existem alguns métodos disponíveis para resolver o problema. Dois deles são SCSI Reserve (hardware) e Quorum Daemon (software).
- No caso do SCSI Reserve: Quando duas maquinas tentam reservar (acessar) uma partição, o dispositivo garante que apenas uma conseguirá. Chamado também de quorum disk é utilizado normalmente por soluções de cluster da Microsoft.
- No caso do Quorum Daemon: É uma solução de software utilizada pelo Linux-HA para arbitrar disputas de quorum entre membros de clusters. É basicamente um SCSI reserve implementado em software, escrito para isso.
- Quorum em cluster com 2 nós: Em um cluster com dois nós, a solução clássica não funciona pois cada nós tem igual número de votos. Neste caso existem alguns métodos disponíveis para resolver o problema. Dois deles são SCSI Reserve (hardware) e Quorum Daemon (software).
- Fontes:
- Este tópico se baseia na capacidade de identificarmos a real necessidade do cluster e indicarmos a melhor alternativa de configuração (de arquitetura) do cluster.
- Isto está vinculado aos tipo de clusters vistos anteriormente, ou seja:
- Cluster de alto desempenho: Utilizado em tarefas que exigem alto desempenho, como reinderação de objetos 3d, cálculos climáticos, etc. Parte do conceito de dividir uma grande tarefa (calculo) em tarefas menores.
- Exemplo: Cluster Beowulf, com um nó controlador que envia as tarefas para os demais nós, para execução paralela.
- Cluster de alta disponibilidade: Utilizado em ambientes que devem garantir que um serviço esteja ativo em mais de um nó ao mesmo tempo. Utiliza replicação de dados ou serviços. Utiliza por exemplo o HeartBeat para identificar qual serviço esta ativo ou inativo através da troca de mensagens.
- Cluster de balanceamento de carga: Distribui as solicitações através dos nós de um cluster. Usado por sistemas que possuem grande quantidade de acessos e precisam de informação em tempo real (Web Apache) . Alguns algorítmos de escalonamento (definição de qual server será enviada a próxima requisição): Least connections; Round Robin; Weighted Fair
- Cluster de alta disponibilidade e balanceamento de carga: Une os dois mundos anteriores. Exemplo, balanceamento para server Web e Alta disponibilidade para Server de banco de dados.
- Cluster de alto desempenho: Utilizado em tarefas que exigem alto desempenho, como reinderação de objetos 3d, cálculos climáticos, etc. Parte do conceito de dividir uma grande tarefa (calculo) em tarefas menores.
- Fonte: http://pt.slideshare.net/scfofudo/clusters-o-que
- Fonte: http://www.clubedohardware.com.br/artigos/computacao-em-cluster/153
Informações necessárias para identificar o percentual de disponibilidade dos serviços:
- Mean Time Before Failure (MTBF): É o tempo médio entre as falhas 'mean time between failures'
MTBF = (Total up time) / (número de breakdowns)
- Mean Time To Repair (MTTR): É o tempo máximo para reparos 'maximum time to repair'
MTTR = (Total down time) / (número de breakdowns)
- Disponibilidade: O percentual do tempo em que o serviço esta disponível
MTBF / (MTBF + MTTR) = % Disponibilidade
- Service Level Agreement (SLA): SLA (Service Level Agreement), que traduzido significa Acordo de Nível de Serviço que é negociado entre empresa e cliente descrevendo o serviço de TI, suas metas de nível de serviço, além dos papéis e responsabilidades de ambos. Geralmente um de seus itens se baseia no percentual de disponibilidade dos serviços.
- Fontes:
-
Disaster Recovery (Recuperação de desastres): Envolve um conjunto de políticas e procedimentos para permitir a recuperação ou continuação da infraestrutura de tecnologia e sistemas vitais na sequência de um desastre natural ou provocado pelo homem. O plano de recuperação de desastres é composto, por cenários e procedimentos, que deverão ser aplicados sempre que ocorrer uma falha. Geralmente é composto de três fases:
- Programa de Administração de Crise: Plano desenvolvido em conjunto, com definição de atividade, pessoas, dados lógicos e físicos
- Plano de Continuidade Operacional: Possui diretivas do que fazer em cada operação em caso de desastres
- Plano de Recuperação de Desastres; É a aplicação na prática do plano de continuidade operacional
-
Replication (Active Replication)
- Replicação ativa faz a transferência de informações entre réplicas. Serve também para coordenar e sincronizar as transações. Cada réplica possui uma cópia consistente das informações. Representa um 'alto custo' a nível de hardware.
- Replicação Passiva (Passive ou Lazy Replication): A ideia é que não se deseja que todo o estado esteja compartilhado, mas somente parte dele.
- Session handling: O gerenciamento de sessões pode ser um problema quando trabalhamos com alta disponibilidade e balanceamento de cargas. Principalmente quando utilizamos soluções http que necessitam de informações das seções. Neste caso o tratamento das sessões deve ser previsto, armazenando as informações de sessões em locais onde todos os servidores do balanceamento tem acesso. Existe a possibilidade de 'prender' uma sessão de um usuário a um determinado servidor, chamado de “sticky sessions”, mas isso pode trazer problemas de perda de conexão do usuário caso o nó em que o usuário esteja preso venha a falhar.
- Fontes:
Peso: 6
Description: Candidates should know how to install, configure, maintain and troubleshoot LVS. This includes the configuration and use of keepalived and ldirectord. Candidates should further be able to install, configure, maintain and troubleshoot HAProxy. Key Knowledge Areas:
Understanding of LVS / IPVS Basic knowledge of VRRP Configuration of keepalived Configuration of ldirectord Backend server network configuration Understanding of HAProxy Configuration of HAProxy
Terms and Utilities:
ipvsadm syncd LVS Forwarding (NAT, Direct Routing, Tunneling, Local Node) connection scheduling algorithms keepalived configuration file ldirectord configuration file genhash HAProxy configuration file load balancing algorithms ACLs
O 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. No momento, o trabalho principal do projeto LVS é 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. (wikipedia)
- IPVS: é um software balanceador de carga avançado do IP executado dentro do Linux. IPVS rodando em um host atua como um balanceador de carga na frente de um cluster de servidores reais, pode dirigir pedidos de serviços baseados em TCP / UDP para os servidores reais, e faz os serviços dos servidores reais funcionarem como um serviço virtual através um endereço IP único.
- Via NAT: Reescreve os pacotes TCP-IP enviados para ele, alterando o endereço e encaminhando para o destino. Pode gerar lentidão com grande fluxo de dados.
- Via IP Tunneling: O load balancer encaminha as requisições dos clientes para os servidores reais e estes respondem diretamente para os usuários. Todos os servidores do cluster precisam ter o IP Tunneling (Encapsulamento IP) habilitado.
- Via Direct Routing: Só processa requisições de entrada, deixando os servidores reais responderem diretamente para os usuários, utilizando roteamento direto ao invés de IP Tunneling. Para isso tanto o load balancer quanto os real servers precisam estar na mesma rede (mesmo enlace de rede).
- Nomenclatura utilizada pelo projeto LVS:
- LVS: É um conjunto entre o director e os RealServers
- Director: É o nó que roda o código IPVs. Os clientes conectam no Director que encaminha a requisição para os RealServers
- RealServer: Servidor real que tem o serviço que o cliente precisa acessar
- Client: Quem inicia a conexão, busca a informação, cliente final
- Sheduling: É o algoritmo que o director utiliza para escolher qual realserver ele vai enviar uma nova conexão do cliente.
- ipvsadm: É a interface linha de comando, para o usuário utilizar o LVS
- O LVS já esta habilitado nos kernels dês de a versão 2.4. Para instalar o aplicativo para gerenciamento e configuração do LVS instalar o pacote abaixo no director:
No caso do Debian: # aptitude install ipvsadm
Responsável pela configuração, controle e gerenciamento do IPVS.
- ipvsadm-save: Salva as regras criadas pelo ipvsadm
- ipvsadm-restore: Restaura as regras criadas pelo ipvsadm
- ipvsadm --help: Mostra as diversas opções de ipvsadm
Opção "-s" ou --scheduler scheduling-method → rr - Round Robin: Distribui a carga igualmente entre os RealServers disponíveis. → wrr - Weighted Round Robin: Distribui carga aos RealServers proporcionalmente ao peso de cada um. Servidores com maiores pesos receberão mais cargas que servidores com pesos menores. RealServers com pesos iguais receberão carga de distribuição igual. → lc - Least-Connection: Atribui mais carga ao RealServer com um menor número de carga ativa. → wlc - Weighted Least-Connection: Atribui mais carga ao RealServer com menor carga ativa e relativa ao peso definido ap RealServer. Este é o padrão. → lblc - Locality-Based Least-Connection: Atribui carga destinada do mesmo IP address (cliente) para o mesmo RealServer, se este não esta sobrecarregado e esta disponível. Caso contrário atribui carga ao RealServer com menor carga e mantém esta informação em caso de nova conexão do IP. → lblcr -Atribui cargas destinadas ao mesmo ip para o nó com menos conexões no servidor definido para o endereço IP. Se todos os nós estão sobre carregados, ele sobe um novo nó no cluster e adiciona neste servidor setado para o destino. Se o conjunto de servidores não foram modificados pelo tempo especificado, o nó mais carregado será removido do conjunto de servidores, afim de evitar o alto grau para replicação. → dh - Destination Hashing: Atribui carga ao RealServer verificando uma tabela hash estática por seu IP de destino. → sh - Source Hashing: Atribui carga ao RealServer verificando uma tabela hash estática por seu IP de origem. Todas as conexões requisitadas de um cliente vão para o mesmo RealServer → sed - Shortest Expected Delay: Atribui uma carga ao servidor com o menos atraso esperado. O atraso esperado que a carga vai testar é (Ci + 1) / Ui. Se for enviado para o servidor em que Ci é o numero de jobs/tarefas do servidor e Ui é o Peso. → nq - Never Queue: Atribui a carga de entrada ao servidor disponível (idle), se houver, ao invés de ficar aguardando o mais rápido. Se todos os servidores estão ocupados ele adota o SED (Shortest Expected Delay) para encaminhar a carga.
- LBLC, DH schedulers: Usado para cache de internet, prevê a conexão no mesmo RealServer que mantém um determinado dominio ja cacheado anteriormente
- Dividido em duas partes, a primeira se refere ao serviço que será adicionado, a segunda as regras referentes a este serviço. Semelhante a estrutura utilizada no 'iptabes'.
- Abaixo a primeira parte referente a adição do serviço de encaminhamento
* No Director # ipvsadm -A -t $VIP:$SERVICE -s $SHEDULER
Mais opções referentes a gerenciamento de serviço:
--add-service -A add virtual service with options --edit-service -E edit virtual service with options --delete-service -D delete virtual service --clear -C clear the whole table --restore -R restore rules from stdin --save -S save rules to stdout
Na manutenção de serviços, outras opções são opcionais.
--tcp-service -t service-address service-address is host[:port] --udp-service -u service-address service-address is host[:port] --scheduler -s scheduler one of rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq, the default scheduler is wlc. --persistent -p [timeout] persistent service --pe engine alternate persistence engine may be sip, not set by default. --netmask -M netmask persistent granularity mask --daemon output of daemon information --stats output of statistics information --rate output of rate information --exact expand numbers (display exact values) --thresholds output of thresholds information --persistent-conn output of persistent connection info --numeric -n numeric output of addresses and ports
- A segunda parte se refere a adição/manutenção de direcionamentos para o serviço anteriormente adicionado, chamados de rules ou regras.
* No Director # ipvsadm -a -t $VIP:$SERVICE -r $REALSERVER_NAME:$SERVICE $FORWARDING -w 1
Opções referentes a controle de rules/regras de um serviço:
--add-server -a add real server with options --edit-server -e edit real server with options --delete-server -d delete real server --list -L|-l list the table --zero -Z zero counters in a service or all services
Tipo de encaminhamento para o serviço (FORWARDING). Dependendo do tipo de encaminhamento escolhido, a composição da rede deve estar adequada para isso, conforme explicado no início do capítulo em Understanding of LVS / IPVS.
# Tipos de encaminhamento possíveis: --gatewaying -g gatewaying (direct routing) (default) → Opção explicada em: "Via Direct Routing" --ipip -i ipip encapsulation (tunneling) → Opção explicada em: "Via IP Tunneling" --masquerading -m masquerading (NAT) → Opção explicada em: "Via NAT"
Outras opções 'mais usadas' referentes ao detalhamento da regra
--tcp-service -t service-address service-address is host[:port] --udp-service -u service-address service-address is host[:port] --real-server -r server-address server-address is host (and port) --weight -w weight capacity of real server --u-threshold -x uthreshold upper threshold of connections --l-threshold -y lthreshold lower threshold of connections --timeout output of timeout (tcp tcpfin udp)
- Fontes:
Exemplo
Director# ipvsadm -A -t 200.0.0.10:80 -p 600 -s rr Director# ipvsadm -a -t 200.0.0.10:80 -r 192.168.3.2 -m -w 100 Director# ipvsadm -a -t 200.0.0.10:80 -r 192.168.3.3 -m -w 100Onde:
-A → Adiciona um serviço de balanceamento -t → Indica que é um serviço TCP. Para UDP usar '-u' -s → Tipo de algoritmo de encaminhamento que será utilizado (sheduler) -p → Serviço persistente. Todas as requisições dos clientes são enviador para um servidor. O timeout 600, se o servidor real não responde em 600 segundos, então será feita uma requisição para um outro servidor. -a → Adiciona uma nova ??regra?? a um serviço anteriormente adicionado. -r → Servidor real (RealServer) que será encaminhada a requisição. -m → Usa mascaramento. NAT (Network Address Translation). -w → weight (peso). O IPVS assume que quanto maior o peso, mais requisições serão encaminhadas, O servidor com peso menor, terá menos encaminhamentos. O peso '0' indica que o servidor (RealServer) não receberá encaminhamentos.
Salvar as regras de forma permanente:
Director# ipvsadm -S -n >> /etc/ipvsadm.rules (funciona no Debian-8)
Obs: Para correto funcionamento do NAT com 2 redes tivemos que adicionar um MASQUERADE na placa de recepção da conexão para funcionar OK.
Tunelamento IP (IP tunneling) é uma tecnica para encapsular datagramas IP em datagramas IP, o que permite que datagramas destinados a um endereço de IP seja redirecionado a outro endereço de IP.
- Os servidores reais podem ter qualquer ip real e podem estar distribuídos geograficamente, porém devem suportar o encapsulamento IP.
- No servidor Real, um ip virtual localhost deve ser criado e ao ser acessado o serviço deve escutar este IP
- A conexão entre o Balanceador e o servidor Real funciona como uma VPN, um túnel.
- Fluxo da conexão:
- Cliente requisita uma conexão ao serviço balanceado
- Balanceador de carga analisa o pacote e encapsula a requisição em um datagrama IP
- Balanceador envia a requisição para o servidor Real
- Servidor Real desencapsula o datagrama IP, processa a requisição
- Servidor Real retorna a requisição diretamente para o cliente conforme sua própria tabela de roteamento
- Exemplo de ativação do LVS por tunelamento:
* Configuração de IPs ** O load balancer (LinuxDirector), kernel 2.2.14 # echo 1 > /proc/sys/net/ipv4/ip_forward # ipvsadm -A -t 172.26.20.110:23 -s wlc # ipvsadm -a -t 172.26.20.110:23 -r 172.26.20.112 -i ** O real server 1, kernel 2.2.14 # echo 1 > /proc/sys/net/ipv4/ip_forward # modprobe ipip # ifconfig tunl0 0.0.0.0 up # echo 1 > /proc/sys/net/ipv4/conf/all/hidden # echo 1 > /proc/sys/net/ipv4/conf/tunl0/hidden # ifconfig tunl0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
- Fontes:
- Configuração no LVS server (balanceador)
Exemplo: # ipvsadm -A -t 192.168.90.171:80 -s rr # ipvsadm -a -t 192.168.90.171:80 -r 192.168.90.175 -g # ipvsadm -a -t 192.168.90.171:80 -r 192.168.90.176 -g
- Configuração nos servidores reais (real server) que tem o serviço instalado;
- Adicionar o ip virtual (VIP) a interface de loopback (lo:0) na mascara /32
- Ajustar serviço para responder também por este IP (VIP)
- Fontes:
- http://pt.wikipedia.org/wiki/LVS
- http://www.linuxvirtualserver.org/software/ipvs.html
- http://www.vivaolinux.com.br/artigo/Alta-Disponibilidade-com-LVS
- http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/
- https://access.redhat.com/documentation/pt-BR/Red_Hat_Enterprise_Linux/5/html/Virtual_Server_Administration/ch-lvs-setup-VSA.html
- http://hercules-now.com/tag/lvs-dr-direct-routing/
- Virtual Router Redundancy Protocol (VRRP) É um protocolo de rede de computador que prevê atribuição automática de IPs de roteadores disponíveis, para os hosts. Isso aumenta a disponibilidade e confiabilidade de caminhos de roteamento através de seleções automáticas de gateway padrão em uma sub-rede IP.
- O protocolo consegue isso através da criação de roteadores virtuais, que são uma representação abstrata de vários roteadores, ou seja, Roteador mestre e roteadores de backup, atuando como um grupo. O gateway padrão de um host participante é atribuído ao roteador virtual (ip do grupo) em vez de um roteador físico. Se o roteador físico (que é quem esta roteando pacotes em nome do roteador virtual) falhar, outro roteador físico é selecionado para substituí-lo automaticamente. O roteador físico que está encaminhando pacotes em um determinado momento é chamado de roteador mestre.
- O VRRP fornece informações sobre o estado de um router, não as rotas processadas e trocadas por esse roteador. Cada instância VRRP é limitada, no âmbito de aplicação, a uma única sub-rede. Ela não anuncia rotas IP para além dessa sub-rede ou afeta a tabela de roteamento de qualquer forma.
- Requisitos: right
- Habilitar Multicast na interface que fará a comunicação entre os roteadores
- Exemplo de configuração:
# vim /etc/sysctl.conf net.ipv4.ip_nonlocal_bind=1 * Habilitar Multicast caso necessário. # ip link set dev eth1 multicast on * No firewall Master # vrrpd -i eth1 -v 1 -p 255 -d 60 10.1.1.254 -n & * No Firewall backup # vrrpd -i eth1 -v 1 -p 1 -d 60 10.1.1.254 -n & * Onde: --- -i = Interface -v = Id do grupo que o firewall/roter faz parte -p = Peso ou prioridade do host dentro do grupo, quanto maior, maior será a prioridade -d = Delay, ou tempo de aguardo para ser considerado falha -n = Não alterar o IP do Mac virtual ---
- Fontes:
- Com o Keepalived unen-se dois softwares, criando uma solução completa para balanceamento de carga utilizando o LVS e a alta disponibilidade do balanceador através do VRRP.
- Keepalived é um software de roteamento escrito em C. O principal objetivo deste projeto é fornecer instalações simples e robustas para balanceamento de carga e alta disponibilidade para o sistema Linux e infra-estruturas de base Linux. O Loadbalancing framework é confiado ao bem-conhecido e amplamente utilizado módulo do kernel Linux Virtual Server (IPVS) fornecendo balanceamento de carga em layer4. Keepalived implementa um conjunto de checagens para dinamicamente e de forma adaptativa manter e gerenciar pool de servidores loadbalance de acordo com a sua saúde (status). Por outro lado a alta disponibilidade é obtida pelo protocolo VRRP. VRRP é uma peça fundamental para o router failover. Framework keepalived pode ser usado de forma independente ou em conjunto para proporcionar as infra-estruturas resilientes.
- O Keepalived configura um LVS, monitora a saúde dos serviços nos servidores reais e gera um daemon vrrpd para LVS que permite "director failover".
- Como o Keepalived é um framework e facilitador para as implementações LVS e VRRP, todas as configurações são feitas neste arquivo de configuração, que é organizado conforme explicado abaixo:
* Arquivo de configuração dividido em 3 partes principais que se subdividem em outras partes: * Globals configurations * Global definitions * Static routes * VRRP configuration * VRRP scripts * VRRP Synchronization group * VRRP instance * LVS configuration * Virtual server group * Virtual server Obs: Documentação explicativa em: /usr/share/doc/keepalived/keepalived.conf.SYNOPSIS
Exemplo de configuração do Keepalived utilizando VRRP e LVS
* Exemplo de configuração no servidor de balanceamento-01 # Global # Configurações de aviso por email são colocadas aqui # Configuração do protocolo VRRP (Virtual Router Redundancy) Redundancia do Balanceador vrrp_instance dir01 { # Nome da instancia virtual_router_id 1 # VRID - Deve ser o mesmo para todos routers participantes do grupo interface eth0 # Interface. Deve ter a opção multicast habilitada priority 100 # Prioridade. Quanto maior mais prioritario virtual_ipaddress { # Ip virtual que será criado para acesso na interface 192.168.90.171/24 } } # Configurações de balanceamento - LVS virtual_server 192.168.90.171 80 { # Configurações do respectivo Ip virtual delay_loop 2 # Tempo em segundos entre as verificações de servidores reais. lb_algo rr # Algoritmo utilizaro Round Robin lb_kind DR # Tipo de balanceamento (utilizando o Direct Routing) protocol TCP # Protocolo real_server 192.168.90.175 80 { # Configuração do servidor real 01 - Backend weight 1 ## Peso do servidor HTTP_GET { ## Tipo de checagem do server por HTTP url { path /index.html digest e2a7f39699ee49225bfb41535537470f ## Utilizando hash que é obtido pelo comando genhash } } TCP_CHECK { ## Tipo de checagem Tcp/IP na porta connect_port 80 ## Porta e checagem connect_timeout 3 ## Tempo de timeout } } real_server 192.168.90.176 80 { # Configuração do servidor real 02 - Backend weight 1 HTTP_GET { url { path /index.html digest 2d6e55b4e9d6acaa9536c776a846532f } } TCP_CHECK { connect_port 80 connect_timeout 3 } } } * Também deve ser configurado o servidor de balanceamento-02, alterando as opções: ''vrrp_instance'' e ''priority''.
- Fontes:
- https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/Load_Balancer_Administration/ch-lvs-overview-VSA.html#s1-lvs-keepalived-VSA
- http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.failover.html#keepalived_vrrpd
- http://www.keepalived.org/
- https://2011.jres.org/archives/110/index.htm
- Fontes de configuração:
- Configuração: http://www.sartori.eti.br/2012/12/balanceamento-de-carga-utilizando.html
- Configuracao2: https://kludgelinux.wordpress.com/2011/10/25/ip-virtual-com-keepalived/
- conf 3: http://www.cooperati.com.br/2011/06/14/apache-com-alta-disponibilidade-e-load-balancer/
- Tutorial bom de configuração: https://raymii.org/s/tutorials/Keepalived-Simple-IP-failover-on-Ubuntu.html
- Ldirectord é um daemon para monitorar e administrar servidores reais em um cluster de balanceamento de carga, utilizando o LVS. o ldirectord usa os recursos do projeto Linux-HA, mas também pode ser rodado a partir da interface de linha de comando.
- O Ldirectord tem um arquivo de configuração que especifica o virtual services e associa aos servidores reais. Quando o ldirectord é inicializado ele cria os serviços virtuais para o cluster.
- Por fim o ldirectord monitora a saúde dos servidores reais através de requisições periódicas a URL configurada, verificando se a resposta é a resposta esperada. Se o servidor real falha, então o servidor é removido do balanceamento LVS e será reativado apenas quando seu status retornar para on-line. Se todos os servidores reais estiverem apresentando falha, um servidor de espera (fall-back) pode ser inserido no pool. Tipicamente o servidor de espera é o próprio localhost, e isto é util para retornar uma página de indisponibilidade momentânea.
* Arquivo de configuração: /etc/ldirectord.cf -- checktimeout=3 # Tempo de espera para definição de servidor Down checkinterval=5 # Intervalo de checagem autoreload=yes # Se houver alteração no arquivo de con. durante a execução, o ldirectord vai automaticamente carregá-la logfile="/var/log/ldirectord.log" # Local do arquivo e log quiescent=no # Em caso de algum RealServer ficar down, Ldirectord retira este Realserver do balanceamento LVS virtual=192.168.90.171:80 # Ip Virtual de acesso real=192.168.90.175:80 gate # IP_Servidor_real:Porta tipo de encaminhamento lvs. Gate=Direct Routing real=192.168.90.176:80 gate scheduler=rr # Tipo de algoritmo de balanceamento protocol=tcp # Tipo de protocolo checktype=connect # Tipo de checagem do serviço checkport=80 # Porta do serviço a ser verificado --
Algumas configurações são necessárias nos servidores de backend, ou seja servidores que provem os serviços reais, para o correto funcionamento de um sistema de balanceamento e alta disponibilidade.
- Configuração do servidor de backend para uso do LVS
- Adicionar o ip virtual (VIP) a interface de loopback (lo:0) na mascara /32
- Ajustar os parametros sysctl para o IP virtual criado no backend não responder ARP. Mais detalhes ver O problema ARP
- Ajustar serviço para responder também por este IP (VIP)
* Definindo IP virtual na interface lo:0 auto lo:0 iface lo:0 inet static address 172.16.1.1 # Lembre-se esse é o VIP que setamos na conf do keepalived netmask 255.255.255.255 * Resolvendo o problema Arp sysctl net.ipv4.conf.all.arp_ignore = 1 sysctl net.ipv4.conf.eth0.arp_ignore = 1 sysctl net.ipv4.conf.eth1.arp_ignore = 1 sysctl net.ipv4.conf.all.arp_announce = 2 sysctl net.ipv4.conf.eth0.arp_announce = 2 sysctl net.ipv4.conf.eth1.arp_announce = 2 * Para ativar a feature hidden echo 1 > /proc/sys/net/ipv4/conf/all/hidden * Para fazer o lo:0 não responder a ARP mas lo sim echo 1 > /proc/sys/net/ipv4/conf/<interface_name>/hidden
- Fontes:
HAProxy é uma solução livre, muito rápida e confiável. Oferece Alta Disponibilidade, load balancing e proxy para TCP/HTTP. Isto é adequado e usado para alto tráfego a Web sites. É oferecido no repositório das principais distribuições e também por default nas plataformas de cloud.
- O modo de operação da ferramenta permite fazer integração com arquiteturas existentes de maneira muito fácil e baixo risco, enquanto oferece a possibilidade de não expor a web diretamente o servidor WEB.
- Possui connection persistence através de cookies HTTP, balanceamento de carga, adição de cabeçalho, modificação e exclusão. Ele tem capacidades de solicitação de bloqueio e fornece uma interface WEB para exibir o status do servidor.
- HAProxy trabalha sob camada de rede 7 (layer 7)
- Seu uso mais comum é para melhorar o desempenho e a confiabilidade de um ambiente de servidor, distribuindo a carga de trabalho entre vários servidores. É utilizado por muitos ambientes conhecidos como o Titter e Instagram.
- HAProxy pode trabalhar em conjunto com o Nginx agregando as funções de cache (nginx) com balanceamento e HA (haproxy)
- Veja abaixo as características principais do HAProxy:
- Modo de proxy-reverso
- Disponibilidade de tunnel mode
- Básico e avançado load-balancing
- Checagem de saúde do server
- Suporte IPv6
- Management socket (CLI)
- Multiplos métodos para conexões persistentes
- Mitigação DOS e DDOS
- Interface Web
- Server / proteção do aplicativo por meio do gerenciamento de filas
- ACLs
- Full HTTP 1.1 support no lado do servidor
- Pode trabalhar com TCP level com qualquer L7 protocolo
- Poderosa ferramenta de análise de logs (halog)
- Algumas terminologias utilizadas na configuração do HAProxy:
- Access Control List(ACL):
- Backend:
- Frontend:
- Configuração de IP Address e porta
- ACLs
- Regras Use_backend. Definem que backends serão usados dependendo de qual condição ACL são correspondidas, e/ou uma regra default_backend que lida com todos os outros casos. Um Frontend pode ser configurado para vários tipos de tráfego de rede.
- Sobre o Layer 7 Load Balancing
- Fontes:
A configuração do HAProxy é feita utilizando um arquivo de configuração, geralmente situado em /etc/haproxy/haproxy.cfg.
- O arquivo de configuração é dividido em blocos conforme o tipo de configuração:
- global: Configurações globais referentes ao serviço
- defaults: Configurações padrões, que serão utilizadas caso não especificadas em outros blocos
- frontend: Configuração do encaminhador
- backend: Configuração de encaminhamento para servidores de serviço
global maxconn 2000 # Numero máximo de conexoes simultaneas no Frontend log /dev/log local0 # Criação de LOG log /dev/log local1 notice chroot /var/lib/haproxy stats socket /run/haproxy/admin.sock mode 660 level admin stats timeout 30s user haproxy group haproxy daemon # Default SSL material locations ca-base /etc/ssl/certs crt-base /etc/ssl/private # Default ciphers to use on SSL-enabled listening sockets. # For more information, see ciphers(1SSL). This list is from: # https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/ ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS ssl-default-bind-options no-sslv3 defaults # Configuracao de monitoramento de estatistica por console WEB stats enable stats auth usuario:senha # Usuario e senha para acesso as estatisticas do Haproxy stats refresh 2s stats uri /haproxystat # Uri para acesso das estatisticas http://servidor/haproxystat log global mode http option httplog option dontlognull timeout connect 5000 timeout client 50000 timeout server 50000 errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http frontend Director-HTTP # Configuração do Frontend-Director-Encaminhador bind 192.168.90.171:80 # Responde pelo IP virtual maxconn 3000 # Máximo de conexões simultâneas ## Configuração de captura de cabeçalho para posterior tratamento de ACL capture request header Host len 20 capture request header User-Agent len 16 capture request header Content-Length len 10 capture request header Referer len 20 capture response header Content-Length len 10 # # ACL de bloqueio de ataques comuns (awstats, manual discovery...) acl forbidden_uris path_dir -i chat main.php read_dump.php viewtopic.php phpbb sumthin horde _vti_bin MSOffice acl forbidden_uris url_reg -i (\.php\?temppath=|\.php\?setmodules=|[=:]http://) block if forbidden_uris # default_backend App-Servers # Acesso por este frontend encaminha para servidores do Backend App-server backend App-Servers # Configuração dos servidores backend balance roundrobin # Algoritmo de balanceamento option forwardfor # Encaminha ip do cliente p/ backend option httpchk GET / HTTP/1.1\r\nHost:\ localhost # Checa serviço no backend server App01 192.168.90.175:80 check # Configuração de Servidor App1. Muitas outras opções podem # ser colocadas após a porta, por exemplo cookie, inter, fall # que ativam o cookie p/ conexao permanente, define o tempo de checagem # do server e limite de falha p/ server ser considerado morto. server App02 192.168.90.176:80 check # Configuração de Servidor App2
Além deste modelo de blocos, outro modelo de configuração é possível, utilizando ao invés dos blocos frontend e backend, o bloco listen que reúne as informações dos dois blocos anteriores em um só conforme o simplificado exemplo abaixo:
# Configuração simples utilizando um único listen block. É mais curto porém menos explicativo global daemon maxconn 256 defaults mode http timeout connect 5000ms timeout client 50000ms timeout server 50000ms listen http-in bind 192.168.90.171:80 server server1 192.168.90.175:80 maxconn 32 server server1 192.168.90.176:80 maxconn 32
- Fontes;
- http://www.phcco.com/alta-disponibilidade-e-balanceamento-de-carga-http-com-haproxy
- https://www.digitalocean.com/community/tutorials/how-to-use-haproxy-to-set-up-http-load-balancing-on-an-ubuntu-vps
- https://www.digitalocean.com/community/tutorials/how-to-use-haproxy-as-a-layer-4-load-balancer-for-wordpress-application-servers-on-ubuntu-14-04
- http://cbonte.github.io/haproxy-dconv/configuration-1.5.html
Peso: 6
Description: Candidates should have experience in the installation, configuration, maintenance and troubleshooting of a Pacemaker cluster. This includes the use of Corosync. The focus is on Pacemaker 1.1 for Corosync 2.x. Key Knowledge Areas:
Pacemaker architecture and components (CIB, CRMd, PEngine, LRMd, DC, STONITHd) Pacemaker cluster configuration Resource classes (OCF, LSB, Systemd, Upstart, Service, STONITH, Nagios) Resource rules and constraints (location, order, colocation) Advanced resource features (templates, groups, clone resources, multi-state resources) Pacemaker management using pcs Pacemaker management using crmsh Configuration and Management of corosync in conjunction with Pacemaker Awareness of other cluster engines (OpenAIS, Heartbeat, CMAN)
Terms and Utilities:
pcs crm crm_mon crm_verify crm_simulate crm_shadow crm_resource crm_attribute crm_node crm_standby cibadmin corosync.conf authkey corosync-cfgtool corosync-cmapctl corosync-quorumtool stonith_admin
Uma pequena introdução:
- O Pacemaker precisa ser configurado de forma diferente, dependendo da distribuição. Chamamos cada combinação de Pacemaker + corosync (ou heartbeat) uma Stack "pilha".
- No RHEL6 a stack suportada é baseada no CMAN que tem APIs Pacemaker que podem ser usadas para obter as informações de membros e quorum quando necessário. Embora o CMAN use corosync por baixo, ele é configurado via cluster.conf e o Pacemaker é iniciado como um script de inicialização separado.
- O SLES11 não suporta CMAN, então seus usuários configuram corosync.conf diretamente e permitem um plugin personalizado que será carregado no corosync (porque corosync 1.4 não tem as APIs de quórum e de membros necessários para o Pacemaker). Este plugin também começa o Pacemaker automaticamente quando corosync é iniciado. Usuários SLES iniciam o corosync com o script de inicialização OpenAIS porque ele é utilizado por ser parte desse projeto.
- Eventualmente todo mundo vai mudar para corosync 2 (RHEL7), que remove o suporte para Cman e plugins personalizados mas nativamente inclui a APIs Pacemaker necessárias para quorum e membership.
- Há algumas diferenças de arquitetura entre as diferentes pilhas, e algumas são mais elegante do que outras, mas a coisa mais importante, é que todos estão pegando informações de quorum e membership a partir do mesmo lugar.
- Arquitetura do Pacemaker
Em um alto nível, o custer é formado pelas seguintes partes:
- Non-cluster-aware components: Estas partes incluem os recursos próprios; scripts para iniciar, parar e monitorar, e um daemon local que mascara as diferenças entre os diferentes padrões para implementar esses scripts. Apesar de interações desses recursos quando executados como várias instâncias pode assemelhar-se a um sistema distribuído, eles ainda não têm os mecanismos apropriados de HA e/ou governança de todo o cluster autônomo como englobado no item seguinte.
- Resource management: O Pacemaker fornece o cérebro que processa e reage a eventos relacionados ao cluster. Estes eventos incluem nós que entram ou saem do cluster; eventos de recursos causadas por falhas, manutenção e atividades programadas; e outras ações administrativas. Pacemaker irá calcular o estado ideal do cluster e traçar um caminho para alcançá-lo depois de qualquer um desses eventos. Isso pode incluir a transferência de recursos, parando os nós e até mesmo forçá-los para ficarem offline com power switches remotos.
- Low-level infrastructure: Projetos como Corosync, CMAN e Heartbeat provê mensagens confiáveis, filiação (membership) e informações de quorum sobre o cluster.
- Componentes internos do Pacemaker:
- Cluster Information Base (CIB)
- Cluster Resource Management daemon (CRMd)
- Local Resource Management daemon (LRMd)
- Policy Engine (PEngine or PE)
- Fencing daemon (STONITHd)
- O CIB usa XML para representar tanto as configurações do cluster como o estado atual de todos os recursos (resources) no cluster. O conteúdo do CIB é automaticamente mantido em sincronia entre os clusters e é utilizado pelo PEngine para computar o 'estado ideal' do cluster e como fazer para alcançá-lo. A lista de instruções é então alimentada para o Designated Controller (DC). O Pacemaker centraliza todas as decisões, elegendo uma instância CRMd para agir como master. Se o processo CRMd eleito falha, um novo (master) é rapidamente estabelecido.
- O DC executa as instruções do PEngine na ordem estabelecida, passando então para o daemon Local Resource Management (LRMd) ou para o CRMd se as ações devem ser executadas em outro nó. Esta conexão entre CRMd's é feita via cluster messaging infrastructure. O CRMd do outro nó por sua vez passa as instruções para o processo LRMd Local.
|NO-01 <LRMd> <--> <CRMd>| <--> |<CRMd> <--> <LRMd> NO-02|
- Todos os nós reportam suas operações de volta para o DC e baseado na expectativa de resultado e do atual resultado, irá executar algumas ações, como precisar aguardar, ou abortar processo e pedir para PEgine para recalcular o estado ideal do cluster baseado nos resultados inesperados. E muitos casos, é necessário desligar nós para proteger dados compartilhados. Para isso o Pacemaker utiliza o STONITHd.
- STONITH é um acronimo para "Atire na cabeça do outro nó" (Shoot-The-Other-Node-In-The-Head), uma prática recomendada quando um nó não se comporta de forma adequada, ele é prontamente isolado (desligado, corte de recursos compartilhados ou outra forma de isolamento), e é usualmente implementada com um power switch remoto. No Pacemaker, dispositivos STONITH são modelados como recursos (e configurados no CIB) para habilitar que sejam facilmente monitorados por falha, no entanto STONITHd cuida de compreender a topologia STONITH de tal forma que seus clientes simplesmente solicitam para que um nó seja cercado, e ele faz o resto.
- Fontes:
- Devemos configurar antes do Pacemaker o programa de sincronização de informações chamdo corosync,
. Criar relação de confiança # pcs cluster auth node01 node02 . Configurar o Corosync # pcs cluster setup --name meucluster node01 node01
- Após isto seguir com as configurações do Pacemaker.
- Configurando Pacemaker:
. Comando de verificação de configuração atual # crm_verify -L -V . Comando para exibir as configurações atuais # pcs cluster cib
- Tipos de clusters:
- Active/Passive: Utilizando o Pacemaker e o DRBD é uma ótima solução de alta disponibilidade.
- Ao suportar muitos nós, o Pacemaker pode reduzir drasticamente os custos de hardware, permitindo vários clusters active/passive, combinados e compartilhando um nó de backup comum.
- Quando um Storage está disponível, cada nó pode potencialmente ser usado como failover, O Pacemaker pode rodar várias copias do serviço para espalhar a carga estre os nós.
- Fontes:
O papel de um agente de recursos (resource agent) é abstrair o serviço que presta e apresentar uma visão consistente ao cluster, que permite que o cluster não precise ter todo o conhecimento sobre os recursos que gere. O cluster não precisa entender como o recurso funciona porque ele depende do agente do recurso para fazer a coisa certa quando são dados os comandos stop, start ou monitor.
- Estas são as classes de agentes suportadas pelo Pacemaker:
- OCF
- LSB
- Upstart
- Systemd
- Service
- Fencing
- Nagios Plugins
- O padrão OCF é basicamente uma extensão das convenções do Linux Standard Base para init scripts para:
- Suporte de parâmetros
- Torná-los auto-descritivos
- Torná-los extensíveis
- O Recurso LSB pode ser encontrado em /etc/init.d Geralmente eles são fornecidos pela distribuição do S.O. a fim de ser utilizado no cluster. Para o correto funcionamento estes scripts devem estar no padrão LSB.
- O recurso Systemd é um substituto do SysV O pacemaker pode utilizar os arquivos chamados unit files para gerenciar os serviços do cluster usando Systemd
- O recurso Upstart é um substituto do SysV O pacemaker pode utilizar os chamados jobs para gerenciar os serviços do cluster usando Upstart
- O pacemaker suporta a utilização do Service para gerenciamento dos serviços, através de uma utilização inteligente, tentando identificar o tipo de gerenciador de serviços utilizado pelo nó, na seguinte ordem: Primeiro scripts LSB/init.d, SystemD/UnitFile e por fim Job Upstart
- O Plugin Nagios Nos permite monitorar serviços em um host remoto. O Pacemaker é capaz de fazer o monitoramento remoto com os plugins, se estiverem presentes. Um caso de uso comum é para configurá-los como recursos que pertencem a um contêiner de recursos (Uma maquina virtual) e o contêiner será reiniciado se houver falha.
- Sobre o STONITH: Só porque um nó não está respondendo, isso não significa que não está acessando seus dados. A única maneira de ter 100% de certeza de que seus dados estão seguros, é usar STONITH para que possamos ter certeza de que o nó está realmente off-line, antes de permitir que os dados sejam acessados a partir de outro nó. STONITH também tem um papel a desempenhar no caso em que um serviço do cluster não pode ser interrompido. Neste caso, o cluster utiliza STONITH para forçar o desligamento do nó inteiro, tornando-o seguro para iniciar o serviço em outro lugar.
- O STONITH pode ser iniciado pelo pacemaker ou por outras partes do cluster (tais como recursos como DRBD ou DLM). Para acomodar isto, o pacemaker não necessita que o recurso STONITH esteja no estado iniciado.
- Opções dos recursos: http://clusterlabs.org/doc/en-US/Pacemaker/1.1-pcs/html/Pacemaker_Explained/primitive-resource.html
- Adicionando um recurso para ser monitorado no Pacemaker
# pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=192.168.90.180 cidr_netmask=24 op monitor interval=15s . Onde: .. ClusterIP: é o nome do recurso .. ocf: é o recurso padrão de scripts. O comando "# pcs resource standards" exibe os padrões .. heartbeat: É um recurso padrão específico para OCF. O comando "# pcs resource providers" exibe os padrões disponíveis OCF .. ipaddr2: É o nome do script do recurso. O comando "# pcs resource agents ocf:heartbeat" exibe uma lista dos scripts disponíveis para o recurso. * Monitorar um recurso criado: # pcs status
- Testar a falha do cluster e o consequente redirecionamento de recursos
# pcs cluster standby <NODE> . Para retornar # pcs cluster unstandby <NODE>
- Diretórios dos Resources: /usr/lib/ocf/resource.d/
- Fontes:
- http://clusterlabs.org/doc/en-US/Pacemaker/1.1-pcs/html/Clusters_from_Scratch/_add_a_resource.html
- http://clusterlabs.org/doc/en-US/Pacemaker/1.1/html/Pacemaker_Explained/s-resource-supported.html
- Stonith: http://clusterlabs.org/doc/en-US/Pacemaker/1.1-pcs/html/Pacemaker_Explained/ch13.html#ch-stonith
Algumas definições importantes dentro do pacemaker vinculadas ao uso dos serviços ou recursos são as constraints e rules, elas definem através de sub-comandos o local onde o recurso será iniciado, a ordem de inicialização, se um conjunto de recursos deverão rodar juntos em um mesmo nó, assim como regras complementares que deixam a configuração do cluster ainda mais flexível, baseadas e tempo por exemplo. Cada ferramenta de administração utiliza estes conceitos de uma forma. Abaixo vamos apresentar os conceitos e a aplicação conforme o uso no crm ou pcs
-
Scores: Os Scores são calculados com base nos recursos, e qualquer nó com um resultado negativo para um recurso não pode correr esse recurso. Depois de calcular as pontuações (score) para um recurso, o cluster, em seguida, escolhe o nó com a pontuação mais alta.
- Há duas estratégias para especificar em quais nós um dos recursos pode ser executado.
- Opt-out: Por padrão, eles podem ser executados em qualquer lugar e, em seguida, criar restrições de localização para nós que não são permitidos.
- Opt-in: Nenhum recurso pode rodar em qualquer lugar, em seguida ativar seletivamente os nós permitidos para execução do recurso.
- Há duas estratégias para especificar em quais nós um dos recursos pode ser executado.
. Exemplo de configuração de cluster Opt-IN # pcs property set symmetric-cluster=false
-
Location: Utilizada para definir em qual nó o recurso ou um grupo de recursos será inicializado preferencialmente.
- Exemplo de definição de Location usando crm
# crm configure location HTTP_Server GrupodoServidor 100: no02
- Exemplo de definição de Location usando pcs
. pcs constraint location rsc avoids node[=score] ... # pcs constraint location Webserver prefers example-1=200
- Order: Utilizado para determinar a ordem que o recurso irá rodar. Pode ser configurado (dentro do constraint) para definir a ordem de inicialização e parada do recurso. Também é configurada a dependência entre recursos, um não inicializa antes de outro inicializar.
. pcs constraint order [action] resource_id then [action] resource_id [options] .. Para inicializar na sequencia os serviços, utilizar: # pcs constraint order set D1 D2 D3
- Colocation: Determina que a localização de um recurso depende da localização de outro recurso
. Exemplo de utilização do colocation .. pcs constraint colocation add [master|slave] source_resource with [master|slave] target_resource [score] [options] # pcs constraint colocation add myresource1 with myresource2 score=INFINITY
- Rules: Os rules são utilizados para tornar as configurações mais dinâmicas. Regras associadas a horários de migração de recursos é um exemplo. Cada regra pode conter um número de expressões ou até outras regras.
. pcs constraint rule add <constraint id> [id=<rule id>] [role=master|slave] [score=<score>|score-attribute=<attribute>] <expression> .. Exemplo de configuração de rule definindo como verdadeira a expressão durante o ano de 2015 # pcs constraint location Webserver rule score=INFINITY date-spec years=2015
- Exemplo geral:
. Priorizar WebDataClone e depois executar WebFS # pcs -f fs_cfg constraint colocation add WebFS with WebDataClone INFINITY with-rsc-role=Master # pcs -f fs_cfg constraint order promote WebDataClone then start WebFS . Exibir informações de constraints # pcs -f fs_cfg constraint show
- Fontes:
- http://www.vivaolinux.com.br/artigo/Cluster-de-alta-disponibilidade-para-servidores-web-com-Debian-71-Corosync-Pacemaker-DRBD?pagina=5
- http://clusterlabs.org/doc/en-US/Pacemaker/1.1-pcs/html/Clusters_from_Scratch/_ensure_resources_run_on_the_same_host.html
- Constraints Detalhado: http://clusterlabs.org/doc/en-US/Pacemaker/1.1-pcs/html/Pacemaker_Explained/ch06.html
- Documentação bem explicativa na RedHat: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Configuring_the_Red_Hat_High_Availability_Add-On_with_Pacemaker/s1-colocationconstraints-HAAR.html
Algumas características avançadas dos resources no Pacemaker.
- Resource Templates: Auxilia na tarefa de criação de muitos recursos com configurações semelhantes. Após a criação de um recurso do tipo template, ele pode ser referenciado utilizando o recurso primitive. Um dos exemplos é o uso para migração de maquinas virtuais, onde podemos ter várias maquinas virtuais com poucas alterações entre elas.
--- <template id="vm-template" class="ocf" provider="heartbeat" type="Xen"> <meta_attributes id="vm-template-meta_attributes"> <nvpair id="vm-template-meta_attributes-allow-migrate" name="allow-migrate" value="true"/> </meta_attributes> <utilization id="vm-template-utilization"> <nvpair id="vm-template-utilization-memory" name="memory" value="512"/> </utilization> <operations> <op id="vm-template-monitor-15s" interval="15s" name="monitor" timeout="60s"/> <op id="vm-template-start-0" interval="0" name="start" timeout="60s"/> </operations> </template> ---
Exemplo de XML com resource primitive apontando para o template criado anteriormente.
--- <primitive id="vm1" template="vm-template"> <instance_attributes id="vm1-instance_attributes"> <nvpair id="vm1-instance_attributes-name" name="name" value="vm1"/> <nvpair id="vm1-instance_attributes-xmfile" name="xmfile" value="/etc/xen/shared-vm/vm1"/> </instance_attributes> </primitive> ---
- Resource Groups: Os grupos foram criados com o objetivo de facilitar a configuração de dependência entre serviços(recursos) e localização dos mesmos. Ou seja, podemos criar um grupo e nele colocar os recursos que são necessários as suas execuções em conjunto, assim como a definição da ordem de inicialização dos mesmos no grupo. O comando para adicionar os grupos é pcs resource group add
. pcs resource group add <group name> <resource id> [resource id] ... [resource id] [--before <resource id> | --after <resource id>] [--wait[=n]] .. Pode utilizar --before ou --after para especificar a posição dos recursos adicionais relativamente a algum recurso já existente no grupo. Se --wait for especificado, o pcs vai esperar até 'n' segundos para mover o recurso, em seguida, retornar 0 se os recursos forem movidos, ou 1 se os recursos ainda não foram movidos.
-
Clone Resource: Recurso que se ativa em vários hosts. Utilizado por uma gama de recursos como o OCFS2. Pode-se clonar qualquer recurso. Existem três tipos de cloned resources:
- Anonymous: O mais simples. Os recursos comportam-se de forma completamente idênticas em todos os lugares que estão executando. Devido a isso, pode haver apenas uma cópia de um clone anonymous ativo por máquina.
- Globally unique: São entidades distintas. cópia de um clone rodando em uma maquina não é equivalente a outra instância em outro nó. Nem duas cópias no mesmo nó são equivalentes.
- Stateful: Convertida em Multi-state resource
- Multi-state resource: Recurso que tem vários modos. Permite que as instâncias podem estar em um de dois modos (chamados roles). Os modos são chamados master e slave. Uma limitação é que quando uma instância inicia ele deve vir com o estado slave.
# pcs resource create resource_id standard:provider:type|type [resource options] --master [meta master_options]
- Fontes:
- Resource Templates: http://clusterlabs.org/doc/en-US/Pacemaker/1.1/html/Pacemaker_Explained/ch12.html
- Resource Groups: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/High_Availability_Add-On_Overview/s1-rules-HAAO.html
- Clone Resource: http://clusterlabs.org/doc/en-US/Pacemaker/1.1/html/Pacemaker_Explained/s-resource-clone.html
- Multi-state resource: http://clusterlabs.org/doc/en-US/Pacemaker/1.1/html/Pacemaker_Explained/s-resource-multistate.html
- Comandos utilizados para configuração inicial de um cluster simples, através da configuração do corosync:
. Adiciona usuario autenticado entre os nós do cluster # pcs cluster auth pcmk-1 pcmk-2 . Configura cluster entre os nós e cria arquivo de configuração corosync configurado # pcs cluster setup --name meucluster pcmk-1 pcmk-2 . Iniciar o Cluster # pcs cluster start --all . Verificar Status # pcs cluster status
- Base de uso do pcs:
# pcs Usage: pcs [-f file] [-h] [commands]... Control and configure pacemaker and corosync. Options: -h, --help Display usage and exit -f file Perform actions on file instead of active CIB --debug Print all network traffic and external commands run --version Print pcs version information Commands: cluster Configure cluster options and nodes resource Manage cluster resources stonith Configure fence devices constraint Set resource constraints property Set pacemaker properties acl Set pacemaker access control lists status View cluster status config View and manage cluster configuration
- Uma das práticas comuns é antes de aplicar novas alterações diretamente na configuração vigente do Pacemaker, aplicá-la como teste em uma configuração extraída da configuração em funcionamento, e executar os testes. Para fazer isto, deve-se extrair as configurações atuais de cluster e recurso conforme procedimento abaixo:
* Criar arquivo XML teste com a configuração de Pacemaker atual: # pcs cluster cib teste * Fazer as alterações no arquivo de teste: # pcs -f teste resource create WebFS Filesystem device="/dev/drbd1" directory="/var/dados" fstype="xfs" * Verificar o status diretamente o arquivo teste # pcs -f teste status * Comitar as alterações do arquivo teste na configuração padrão # pcs cluster cib-push teste
- Fontes:
O crmsh começou como uma interface incluída ao gerenciador de clusters Pacemaker, mas tem crescido além de simplesmente configurar Pacemaker para lidar com muitos mais aspectos da pilha Linux HA. Ela também serve como o back-end para a interface web Hawk.
Comandos utilizados:
- Comando crm:
. Status do Cluster # crm status . Saúde das maquinas do cluster # crm cluster health . Adicionar um recurso # crm configure primitive p0 Dummy .. Adicionar um recuro específico crm configure primitive ClusterIP ocf:heartbeat:IPaddr2 \ params ip=192.168.9.101 cidr_netmask=32 \ op monitor interval=30s .. Listar ocf's disponíveis # crm ra list ocf heartbeat . O comando crm sem argumento leva a uma sessão interativa # crm
- Comando crm_mon: Provê um sumário com informações sobre o estado atual do cluster.
- Comando crm_verify: Verifica a configuração completa de sintaxe e erros conceituais comuns.
. Verifica a consistência da configuração que esta rodando no cluster: # crm_verify −−live−check . Verifica a consistência de configuração de um arquivo XML: # crm_verify −−xml−file file.xml −−verbose
- Comando crm_simulate: Ferramenta para simulação de resposta do cluster a eventos.
- Comando crm_shadow: Define-se um ambiente no qual as ferramentas de configuração (cibadmin, crm_resource, etc) trabalham off-line em vez de rodarem em um cluster ativo, permitindo visualizar mudanças e testar os efeitos colaterais.
. Criar uma configuração shadow de um cluster que esteja rodando: # crm_shadow −−create myShadow
- Comando crm_resource: Executa tarefas relacionadas aos recursos do cluster. Permite que os recursos sejam consultados, modificado e movidos no Cluster.
. Lista os recursos configurados: # crm_resource −−list . Move myResource para uma maquina específica: # crm_resource −−resource myResource −−move −−node altNode . Exibe a localização atual de ´MyResource': # crm_resource −−resource myResource −−locate
- Comando crm_attribute: Gerencia os atributos dos nós e opções do cluster.
. Altera o valores de 'location' atribuído ao node 'myhost': # crm_attribute −−node myhost −−name location −−update backoffice . Deleta o atributo do node 'location' do host 'myhost': # crm_attribute −−node myhost −−name location −−delete . Pesquisa o valor da opção cluster-delay: # crm_attribute −−type crm_config −−name cluster−delay −−query
- Comando crm_node: Ferramenta que exibe informações de baixo-nível do Node.
- Comando crm_standby: Uma espécie de front-end para crm_attribute com a função de colocar um determinado Node em Standby
- Fontes:
- comandos de configuração do Corosync usando pcs:
. Sincronizar autenticação dos nós # pcs cluster auth pcmk-1 pcmk-2 . Gerar e sincronizar as configurações do corosync # pcs cluster setup --name mycluster pcmk-1 pcmk-2
- Comandos de monitoramento Corosync:
. Exibe o status da conexão atual # corosync-cfgtool -s . Detalhes de configuração # corosync-cmapctl . Informações de votos dos membros # pcs status corosync
- Arquivo /etc/corosync/corosync.conf: Gerado automaticamente pelos comandos acima.
. Exemplo de um arquivo simples # cat /etc/corosync/corosync.conf -- totem { version: 2 secauth: off cluster_name: meucluster transport: udpu } nodelist { node { ring0_addr: ov-centos-ha01 nodeid: 1 } node { ring0_addr: ov-centos-ha02 nodeid: 2 } } quorum { provider: corosync_votequorum two_node: 1 } logging { to_syslog: yes } --
- Fonte:
- OpenAIS: É uma implementação do Aplication Interface Specification (AIS) provido pelo Service Availability Forum. Ele é uma camada de mensagem e membership (filiação) assim como o heartbeat. O OpenAis implementa um padrão de industria para esta troca de mensagens, dizendo ao pacemaker que um nó faz parte do cluster e fornece uma maneira de enviar mensagem entre eles.
- HeartBeat: É um daemon que também provê a infraestrutura do cluster, mensagem e membership (filiação), permitindo que os clientes saibam sobre a presença ou o desaparecimento de pares, trocando mensagem entre eles. O heartbeat necessita de uma camada superior de gerenciamento de cluster chamada de CRM para funcionar completamente.
- CMAN: É um plugin ligado ao Corosync que monitora o nome e o número de nodes ativos no cluster, entregando informações de membership e quorum aos clientes. O CMAN é considerado um cluster manager e roda em cada nó. A escolha de utilizar o CMAN ao invés do daemon Pacemaker, muitas vezes é necessária devido a compatibilidade com algum software (como o GFS2 por exemplo). A RedHat busca uma compatibilidade com o CMAN em sua pilha de cluster.
- Fontes:
- Cluster do zero: http://clusterlabs.org/doc/en-US/Pacemaker/1.1-pcs/html/Clusters_from_Scratch/index.html
- Cluster do zero2: http://www.clusterlabs.org/doc/Cluster_from_Scratch.pdf
- Cluster RedHat 7: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/High_Availability_Add-On_Overview/s1-Pacemakerarchitecture-HAAO.html
- CRM Cli: http://www.clusterlabs.org/doc/crm_cli.html
- Configuração do Pacemaker: http://www.clusterlabs.org/doc/en-US/Pacemaker/1.0/html/Pacemaker_Explained/s-intro-pacemaker.html
-
http://clusterlabs.org/wiki/Main_Page
- Em Portugues:
- http://www.douglas.wiki.br/doku.php?id=pt-br:corosync_pacemaker_lcmc_no_debian_wheezy_portuguese
- http://www.vivaolinux.com.br/artigo/Cluster-de-alta-disponibilidade-para-servidores-web-com-Debian-71-Corosync-Pacemaker-DRBD
- http://asilva.eti.br/instalar-cluster-high-availbility-no-centos-7-com-pacemaker/
- http://tobias.ws/wiki/index.php/Vis%C3%A3o_geral_da_alta_disponibilidade_em_linux
Peso: 1
Description: Candidates should be aware of how enterprise Linux distributions integrate High Availability technologies. Key Knowledge Areas:
Basic knowledge of Red Hat Enterprise Linux High Availability Add-On Basic knowledge of SUSE Linux Enterprise High Availability Extension
Terms and Utilities:
Distribution specific configuration tools Integration of cluster engines, load balancers, storage technology, cluster filesystems, etc.
A Redhat fornece um add-on para adicionar funcionalidades de Alta disponibilidade ao RedHat Enterprise Linux. Este Add-on que é adquirido separadamente possui as seguintes características:
- Cluster Manager: Até a versão Enterprise 6 utilizava o CMAN para distribuição do gerenciamento de cluster através de todos os nós do cluster. A partir da versão Enterprise 7 o CMAN foi substituído pelo Pacemaker. O Cluster manager também administra a filiação (membership) e monitora a atividade do cluster para remover nós com falhas caso necessário. Para comunicação entre os nós é utilizado o Corosync, que entre outras características implementa o protocolo "Totem Single Ring Ordering"
- Lock Management: é uma serviço de infra estrutura do cluster que provê um mecanismo para os componentes de infra estrutura de cluster para sincronizar o seu acesso a recursos compartilhados. O DLM (Distributed Lock Manager) roda em cada nó do cluster e de forma eficiente, distribui 'lock management' através de todos os nós do cluster. Utilizado geralmente em conjunto com o GFS2
- Fencing: Se um nó é identificado com falha, o nó é automaticamente cortado para fora do storage compartilhado no cluster. este procedimento é chamado de fencing. O Add-on inclui uma variedade de métodos de fencing. Um nó pode ser configurado para um ou vários metodos de fencing.
- Command-Line Cluster Configuration (CSS): O CSS permite usuários e não somente privilégios de root, administrar o cluster. Foi substituído pelo comando pcs na versão Enterprise 7 e pelo programa gráfico pcsd.
- Conga - Administração de cluster por interface Web: Neste Add-on, o gerenciamento do cluster pode ser feito por interface Web, através do conga, que é uma ferramenta que trabalha na lógica cliente/servidor, onde o agente (chamado de ricci) sofre a conexão do servidor de aplicação (chamado de luci). Através da amigável interface Web, é possível adicionar clusters, sistema de storages, entre outras tarefas administrativas.
- Fontes:
A Suse Linux utiliza a extensão High Availability para implementar as tecnologia de cluster e alta disponibilidade em seu produto SUSE Linux Entreprise. Esta extensão é tanto uma Interface Gráfica de usuário como interface por linha de comando. Além disso ela possui a possibilidade de configuração por Web utilizando o chamado HA Web Konsole (Hawk). As características principais da extensão são:
- Corosync/OpenAIS: Utilizados como camada de comunicação entre os nós.
- Pacemaker: Utilizado para gerenciamento do cluster
- Suporta CTDB; Cluster Trivial Database
- Por padrão utiliza o OCFS2 como sistema de arquivo distribuído.
- Suporte a cluster em locais físicos diferentes:
- Local Clusters: Em um mesmo datacenter
- Metro Clusters: Múltiplos datacenters conectados por canal de fibra (latência abaixo de 5ms)
- Geo Clusters (Multi-sites): Geograficamente disperso. O Storage é replicado de forma assincrona
- Ferramentas de administração do cluster:
- Pacemaker Gui: Ferramenta gráfica para facilitar o gerenciamento do cluster
- HA Web Konsole (Hawk): Criação e configuração de recursos através de inferface WEB right
- crm shell: Poderoso e unificado interface de linha de comando para administrar, monitorar e gerenciar todas as tarefas do cluster.
- Fontes:
- https://access.redhat.com/documentation/pt-BR/Red_Hat_Enterprise_Linux/6/html/Cluster_Administration/index.html
- https://alteeve.ca/w/AN!Cluster_Tutorial_2