Monte um cluster OpenSolaris para alta disponibilidade TUTORIAL OpenSolaris em conjunto No OpenSolaris, a alta disponibilidade depende do Open HA Cluster. Conheça toda a flexibilidade dessa solução da Sun. por Nicholas Solter U ma forma de garantir que os seus serviços estejam disponíveis quase 100% do tempo é executá-los em um cluster de alta disponibilidade (HA, na sigla em inglês). Existem diversas soluções para criação de clusters HA de código aberto. No caso do Linux HA, o componente Heartbeat do Linux está disponível em muitas distribuições populares. O foco deste artigo, no entanto, é o cluster HA disponível para OpenSolaris: o Open HA Cluster. Trata-se da versão de código aberto do Solaris Cluster, produto que roda em Solaris 10 e versões anteriores. Com o Open HA Cluster, é possível tornar altamente disponíveis a maioria dos aplicativos de código aberto sem modificá-los. Se você já conhece clusters HA em geral, já usou o Linux HA ou qualquer outro cluster HA, já pode começar a usar o Open HA; a próxima seção dará informações básicas 58 para iniciar. No entanto, se esse for um conceito novo, é melhor ler as informações da seção “Por que alta disponibilidade?”. Experimentos Embora seja possível testar o Open HA Cluster em um cluster de múltiplos nós físicos reais, há certas exigências de hardware que envolvem rede e armazenamento e podem atrapalhar a experiência inicial com o software. Por isso, geralmente é melhor testar o Open HA Cluster em nós virtuais instalados em uma única máquina física. Apesar de essa configuração não alcançar uma alta disponibilidade de fato, ela permite conhecer um pouco mais do programa. O Open HA Cluster pode ser usado até em clientes VirtualBox [1], portanto, é possível usá-lo sem uma máquina dedicada. As instruções escritas pela equipe da Sun especificamente para utilizar o Open HA Cluster com VirtualBox encontram-se em [2]. Para experimentar o Open HA Cluster, é necessário baixar e instalar o OpenSolaris [3] em todas as máquinas (físicas ou virtuais) do cluster. O Open HA Cluster está disponível no repositório de pacotes em http:// pkg.sun.com. Para obtê-lo, é preciso registrar-se em https://pkg.sun.com/ register/ e seguir as instruções de configuração em todas as máquinas do cluster. Em seguida, instale o pacote hacluster-full em todas as máquinas. O colunista Alexandre Borges já explicou diversos detalhes do sistema de pacotes IPS [4]. Consulte a documentação do OpenSolaris para mais detalhes sobre o uso do sistema de pacotes IPS. Por fim, execute /usr/cluster/bin/scinstall em uma das máquinas do cluster e siga as instruções de configuração que são exibidas. http://www.linuxmagazine.com.br Open HA Cluster | TUTORIAL Ao final dessa etapa, o cluster já está funcional e pode começar a usar seus recursos, que serão descritos em seguida com mais detalhes. Por que HA? Se você não tem familiaridade com clusters HA, talvez valha a pena explicar por que ela é desejável. A resposta é que os computadores falham. Todos eles. Discos, processadores, memória, barramento, placas de rede e todos os outros componentes físicos estão sujeitos às mesmas limitações físicas de qualquer objeto. Não é uma questão de se, é uma questão de quando. Além disso, falhas em softwares desde os aplicativos até o sistema operacional e drivers de dispositivos podem derrubar serviços ou a máquina inteira. Por último, um erro de usuário pode desativar um sistema inteiro. Muitos sistemas têm embutida redundância de hardware, como processadores múltiplos, mas sempre há falhas de sistema, como o barramento ou o kernel do sistema operacional. Assim, há um limite para a disponibilidade de um único computador físico. Embora falhas eventuais em laptops e desktops talvez não sejam tão alarmantes, os sistemas que fornecem serviços a outras pessoas e empresas precisam permanecer no ar ininterruptamente. Os clientes desses serviços, sejam eles bancos de dados de empresas ou blogs pessoais, esperam uma disponibilidade constante. A inatividade desses serviços pode levar à insatisfação dos clientes, à diminuição da satisfação do usuário e à perda de receita. Clusters para HA Com todas essas considerações, como garantir a disponibilidade consistente dos serviços, dadas as limitações inerentes aos sistemas? Uma resposta é unir duas ou mais máquinas físicas e usar o hardware redundante para superar qualquer falha a qualquer Linux Magazine #63 | Fevereiro de 2010 momento, desde uma falha na placa de rede até uma pane completa no sistema. Desta forma, é possível proporcionar maior disponibilidade do sistema como um todo, mais do que seria possível com um único componente. Sistemas configurados dessa forma geralmente são chamados de clusters de alta disponibilidade (ou clusters HA). A infraestrutura de um cluster HA consiste em dois componentes principais: o hardware redundante e o software do cluster. O software do cluster faz parte do próprio sistema operacional ou está diretamente acima do sistema operacional, ou ambos. Esse software oferece alta disponibilidade, monitorando todo o sistema desde o estado do hardware até a “saúde” dos aplicativos. Se o software do cluster detecta um problema, ele pode reiniciar o aplicativo na máquina ou passar o serviço para outra máquina “saudável” no cluster. O software do cluster também garante que a detecção de falhas e a recuperação ocorram de forma automática, de forma que a intervenção do administrador não seja necessária. Além disso, esse serviço de recuperação não é visível para os clientes, ou seja, os clientes do serviço não sabem em qual máquina do cluster o serviço está realmente funcionando. Em certo sentido, pode-se pensar em um cluster HA como uma miniatura da computação em nuvem. Hardware Como mencionado anteriormente, o Open HA Cluster tem alguns requisitos específicos de configuração de hardware. A boa notícia, porém, é que o Open HA Cluster usa hardware comum – não há necessidade de discos rígidos especializados, interconexões ou outros componentes. O cluster é composto por duas ou mais máquinas físicas, chamadas de nós. Para configurar um cluster de dois nós, são necessárias duas máquinas da mesma arquitetura (SPARC ou x86/ x64) na mesma sub-rede. Além das máquinas, é preciso levar em consideração as redes, o armazenamento e as configurações de dispositivos de quorum devem ser considerados. A arquitetura típica do cluster é mostrada na figura 1. Rede Cada nó do cluster deve ser capaz de se comunicar com a rede pública, a fim de prestar serviços a clientes fora da sub-rede do cluster. Cada nó também deve ser capaz de se comunicar com todos os demais nós do cluster, de preferência através de uma conexão dedicada, para garantir comunicação rápida e detecção de falhas. Assim, se disponível, recomenda-se dedicar uma ou duas placas de rede de cada máquina para a comunicação privada entre os nós e cabeá-los de tal forma que esse tráfego privado seja separado da rede pública. No entanto, ainda é possível formar um cluster mesmo que haja apenas um adaptador de rede em cada nó e que não haja cabeamento privado: basta utilizar o recurso de placa virtual de rede do OpenSolaris. A figura 1 mostra uma arquitetura típica, com uma interconexão privada entre os dois nós. Mais informações sobre placas virtuais de rede no OpenSolaris estão disponíveis em [5]. Armazenamento A maioria dos aplicativos usa dados armazenados no disco. Ao serem executados em um cluster, os aplicativos não usam o disco local diretamente, pois ele não está obrigatoriamente disponível no mesmo nó do cluster onde os aplicativos são executados. Para isso, há várias soluções possíveis: use um ou mais discos rígidos ligados diretamente ao nó, ou SANs que possam ser acessadas por todos os nós do cluster. A figura 1 mostra essa configuração; 59 TUTORIAL | Open HA Cluster disponibilize dispositivos NAS que possam ser acessados por todos os nós do cluster; em um cluster com mais de dois nós, conecte diretamente um disco ou SAN a dois ou mais nós, mas disponibilize-o para todos os nós usando o sistema de arquivos global do cluster; em um cluster com dois nós, exporte o disco local de cada um dos nós como um alvo iSCSI e monte um espelho ZFS sobre eles [6], acessível aos dois nós do cluster. Mais informações sobre armazenamento na documentação do Open HA Cluster [7]. Dispositivos de quorum Um problema clássico em sistemas distribuídos é o que se chama de condição split-brain (cérebro dividido). Esse cenário pode ocorrer como resultado de uma partição de rede: quando dois subconjuntos de nós do cluster têm problemas para se comunicar, mas continuam funcionando e se comunicando com a rede pública. Como cada subconjunto do cluster é incapaz de diferenciar entre uma falha no outro subconjunto e uma falha na outra partição da rede, cada subconjunto pode tentar hospedar todos os serviços prestados pelo cluster. O split-brain pode levar a modificações simultâneas de dados compartilhados, o que causaria a corrupção destes dados. Por exemplo, imagine os erros que poderiam ocorrer em um banco de dados se o servidor funcionasse em dois nós do cluster ao mesmo tempo, sem que um se comunicasse com o outro. A fim de resolver esse problema, o Open HA Cluster usa o conceito de quorum para garantir que apenas uma das partições do cluster permaneça 60 ativa no cenário acima. Em geral, o quorum exige a maioria de nós do cluster. Assim, em um cluster de três nós, dois nós teriam que fazer parte de uma partição para poder continuar a prover o serviço. No entanto, esse algoritmo não funciona em um cluster de dois nós. Se um nó parar de funcionar, o outro precisa ser capaz de continuar oferecendo o serviço, caso contrário, não existe alta disponibilidade. Mas como o nó restante conseguiria distinguir uma falha legítima no nó de uma falha na partição de rede? Na verdade, ele não consegue; portanto, um cluster de dois nós exige algum tipo de arbitragem de terceiros. O Open HA Cluster suporta duas formas de arbitragem, ambas formas de dispositivos de quorum. A primeira opção de arbitragem é um dispositivo de disco conectado diretamente a ambos os nós do cluster, funcionando como um voto de desempate no caso de uma partição de rede; o nó que chegar primeiro ao dispositivo reserva-o e exclui o outro nó. Essa opção é chamada de disco de quorum. A segunda opção de arbitragem do Open HA Cluster é semelhante a um dispositivo de quorum, mas usa o serviço de um software executado em uma terceira máquina, em vez de um dispositivo de hardware. Isso é chamado de servidor de quorum. Embora o disco ou servidor de quorum só seja necessário em clusters de dois nós, também é possível usá-los em clusters com mais nós para otimizar a disponibilidade no caso de múltiplas falhas simultâneas de nós. Portanto, o último passo da configuração do hardware é escolher o mecanismo de arbitragem e configurá-lo. Na figura 1, o dispositivo de quorum é uma parte do armazenamento que está conectado diretamente. Para mais detalhes sobre quorum e dispositivos de quorum, confira a documentação oficial do Cluster Solaris [8]. Agentes Agora que já abordamos a instalação do Open HA Cluster, a teoria por trás de tudo isso e a instalação do hardware, vejamos outros recursos e detalhes. Como mencionado anteriormente, os aplicativos podem ser disponibilizados no Open HA Cluster sem modificações. Em vez disso, cada aplicativo requer uma camada de “cola”, chamada de agent (agente). Ele não faz parte do próprio aplicativo e não precisa ser escrito pela mesma pessoa ou equipe que o produziu, mas sabe como iniciar, parar e controlar o aplicativo, e também sabe como se comunicar com a plataforma de cluster. O Open HA Cluster inclui agentes para diversos aplicativos populares, como Apache, Apache Tomcat, MySQL, NFS e outros de código aberto. Consulte a documentação do Open HA Cluster [9] para uma lista completa. Os agentes também são chamados, às vezes, de data services (serviços de dados). Se você não conseguir encontrar um agente para seu aplicativo favorito, não se desespere. Há uma série de maneiras de tornar seu aplicativo altamente disponível, mesmo sem escrever uma única linha de código. A abordagem mais fácil é usar o Serviço Genérico de Dados (Generic Data Service – GDS). Esse agente permite que você registre o comando de inicialização e a porta de escuta de um aplicativo (além de outras propriedades opcionais), e o GDS cuida do resto. O Open HA Cluster inclui também um agente genérico similar chamado SMF Proxy agent, que permite tornar altamente disponível qualquer serviço OpenSolaris SMF, novamente sem qualquer programação ou scripts. Consulte as páginas de manual SUNW.gds(5) e http://www.linuxmagazine.com.br Open HA Cluster | TUTORIAL SUNW.Proxy_SMF_failover(5) para mais detalhes. Para exercer mais poder sobre o agente, é possível escrever scripts sofisticados que tiram vantagem do GDS, ou escrever seus próprios agentes com o Agent Builder, seja pela interface gráfica ou pela linha de comando. No entanto, a funcionalidade básica do GDS e do SMF Proxy deve ser suficiente para a maioria dos aplicativos. Gerenciamento de serviços Além dos recursos esperados em um cluster HA, o Open HA Cluster fornece uma plataforma de gerenciamento de serviços. Para usá-la, é preciso primeiramente entender os conceitos e a terminologia usados pelo Open HA Cluster. Em primeiro lugar, todo o serviço gerenciado pelo cluster é chamado de recurso. Apesar de um recurso geralmente ser um aplicativo como um servidor web ou um servidor de banco de dados, um recurso pode ser qualquer coisa que possa ser iniciada e parada em uma máquina, incluindo até mesmo coisas como um endereço de rede ou um sistema de arquivos. A configuração estática de cada recurso é definida por seus agentes ou serviços de dados (também chamada de tipo de recurso). Em termos de programação orientada a objetos, o recurso é a instanciação do tipo de recurso. Por fim, os recursos são agrupados em grupos de recursos. Recursos e grupos de recursos têm propriedades, tais como o número de nós em que eles podem ser executados simultaneamente, e estão sempre em um estado, como online ou offline, em cada nó. Um recurso que estiver online em um nó está sendo executado nesse nó. Um recurso offline não está funcionando. O grupo de recursos é a unidade de gerenciamento e failover do cluster. Linux Magazine #63 | Fevereiro de 2010 Isto é, todo recurso em um grupo de recursos é colocado online ou offline em um nó ao mesmo tempo (embora seja possível personalizar esse comportamento desabilitando recursos individuais). Depois de determinar um agente para o aplicativo que deve ser altamente disponibilizado, é preciso criar um grupo de recursos e um recurso para o aplicativo. O grupo de recursos é composto pelo recurso do aplicativo e, opcionalmente, os recursos de armazenamento e rede. Esses tipos de recursos serão vistos nas próximas duas seções. O Open HA Cluster também permite a criação de dependências entre recursos, para controlar a ordem de inicialização e parada dos serviços subjacentes. Por exemplo, é possível definir que o recurso de um aplicativo dependa de um recurso de rede, de modo que o recurso de rede será sempre inicializado antes e parado depois do recurso do aplicativo. Essas dependências têm vários “sabores” diferentes, incluindo dependências de reinicialização, para reiniciar um recurso caso outro recurso do qual ele depende seja reiniciado. As dependências também podem abranger os grupos de recursos. Ou seja, o recurso dependente e o alvo da dependência não precisam estar no mesmo grupo de recursos. Além disso, o Open HA Cluster suporta o conceito de afinidades entre os grupos de recursos, para controlar a localização de grupos de recursos nos nós do cluster. O Open HA Cluster possui um conjunto de comandos orientados a objetos para manipular objetos do cluster, incluindo o clresource(1CL), o clresourcegroup(1CL) e assim por diante. Consulte a documentação desses comandos para mais detalhes. Armazenamento Como mencionado anteriormente, existem vários mecanismos para liberar o armazenamento em disco para todos os nós do cluster. Mas isso é apenas o primeiro passo. Também é necessário disponibilizar o sistema de arquivos para os aplicativos em todos os nós em que são executados. O Open HA Cluster suporta os sistemas de arquivos UFS e ZFS. No caso do UFS, o cluster Rede pública Nós físicos distintos Interconexão privada do cluster Armazenamento compartilhado redundante com caminhos para cada nó Figura 1Arquitetura típica do cluster HA. 61 TUTORIAL | Open HA Cluster tem de montar o sistema de arquivos no nó em que o aplicativo está sendo executado. No caso do ZFS, o cluster deve importar o zpool no nó em questão. Esses dois sistemas de arquivos podem ser gerenciados como recursos do cluster usando a estrutura de serviço de gerenciamento do cluster. O Open HA Cluster inclui um tipo de recurso especial chamado HAStoragePlus (HASP). Recursos desse tipo podem gerenciar sistemas de arquivos UFS ou zpools ZFS quando estes são montados ou importados em nós que precisem deles. Para usar o HASP, é necessário criar um recurso do tipo HASP no mesmo grupo de recursos do seu aplicativo. Em seguida, em todos os nós em que o aplicativo for executado, o HASP irá garantir que o sistema de arquivos utilizado também esteja disponível. Veja a página de manual SUNW.HAStoragePlus(5) para mais detalhes. Rede Tal como acontece com o sistema de arquivos, o cluster também deve assegurar que os endereços IP usados pelos aplicativos estejam configurados nos nós em que são executados e sejam derrubados nos nós onde os aplicativos não estão funcionando. O Open HA Cluster fornece um tipo de recurso para os endereços IP similar ao recurso de armazenamento HASP, chamado logical hostname. Esse recurso gerencia um endereço IP, fazendo-o funcionar em um nó onde o recurso está online, e derrubando-o no nó em que está offline. É possível utilizar os recursos desse tipo do mesmo modo como se usa o HASP, para garantir que os endereços IP exigidos estejam disponíveis em todos os nós em que haja aplicativos em execução. Consulte a página de manual clreslogicalhostname(1CL) para mais detalhes. 62 Conclusão Este artigo fornece algumas noções sobre clusters de alta disponibilidade, e introduz o Open HA Cluster do OpenSolaris. No entanto, pelo fato do Open HA Cluster ser um sistema de software complexo (como são todos os clusters HA), este artigo se manteve apenas na superfície. Muitos recursos, tais como o software de balanceamento de carga, “cercamento” de discos, atualizações etc., ficaram de fora. Para mais detalhes sobre os assuntos abordados neste artigo, e também para uma infinidade de outros aspectos não abordados, consulte as referências abaixo. n Mais informações [1]Download do VirtualBox: http://www.virtualbox.org/ [2]Open HA Cluster com VirtualBox: http://opensolaris.org/os/project/ colorado/files/Whitepaper-OpenHAClusterOnOpenSolaris-external.pdf [3]OpenSolaris: http://www.opensolaris.com [4]Alexandre Borges, “OpenSolaris, parte 4”: http://lnm.com.br/article/2969 [5]Placas virtuais de rede no OpenSolaris: http://opensolaris.org/os/project/crossbow/ [6]iSCSI e ZFS no OpenSolaris: http://opensolaris.org/os/community/storage/ [7]Armazenamento e Open HA Cluster: http://docs.sun.com/app/docs/doc/820-7821 [8]Documentação de quorum: http://docs.sun.com/app/docs/doc/820-4676/cacfchja?a=view [9]Documentação do Open HA Cluster: http://stage.opensolaris. org/os/community/ha-clusters/translations/ptBR/ohac_pt_BR/ [10]Comunidade Open HA Cluster: http://opensolaris.org/os/community/ha-clusters/ohac/ [11]Blog Sun Cluster: http://blogs.sun.com/SC [12]Nicholas A. Solter, Gerald Jelinek e David Miner, “OpenSolaris Bible”. Wiley, 2009. Sobre o autor Nicholas A. Solter é autor dos livros “OpenSolaris Bible” e “Professional C++””. Ele trabalha há nove anos com software de alta disponibilidade na Sun Microsystems e é mestre em Ciência da Computação pela Universidade de Stanford. Gostou do artigo? Queremos ouvir sua opinião. Fale conosco em [email protected] Este artigo no nosso site: http://lnm.com.br/article/3287 http://www.linuxmagazine.com.br Livro C e r t i fi c ição d e ª 2 2 I P L o ã aç A Linux Magazine está lançando a 2ª edição revisada e ampliada do livro que te prepara para a Certificação LPIC-2 com as seguintes novidades: • Exercícios em todos os tópicos • Todo conteúdo ampliado para a nova versão da prova, atualizada em abril/2009 Garanta já o seu pelo site da Linux Magazine www.linuxmagazine.com.br