0 CENTRO ESTADUAL DE EDUCAÇÃO TECNOLÓGICA PAULA SOUZA FACULDADE DE TECNOLOGIA DE LINS PROF. ANTONIO SEABRA CURSO SUPERIOR DE TECNOLOGIA EM REDES DE COMPUTADORES KLEDER AUGUSTO DE ANDRADE SILVA IMPLEMENTAÇÃO DE UMA INFRAESTRUTURA DE CLUSTER VIRTUALIZADA COM ALTA DISPONIBILIDADE LINS/SP 2º SEMESTRE/2012 1 CENTRO ESTADUAL DE EDUCAÇÃO TECNOLÓGICA PAULA SOUZA FACULDADE DE TECNOLOGIA DE LINS PROF. ANTONIO SEABRA CURSO SUPERIOR DE TECNOLOGIA EM REDES DE COMPUTADORES KLEDER AUGUSTO DE ANDRADE SILVA IMPLEMENTAÇÃO DE UMA INFRAESTRUTURA DE CLUSTER VIRTUALIZADA COM ALTA DISPONIBILIDADE Trabalho de Conclusão de Curso apresentado à Faculdade de Tecnologia de Lins para obtenção do Título de Tecnólogo em Redes de Computadores. Orientador: Prof.Ms Alexandre Ponce de Oliveira LINS/SP 2º SEMESTRE/2012 2 KLEDER AUGUSTO DE ANDRADE SILVA IMPLEMENTAÇÃO DE UMA INFRAESTRUTURA DE CLUSTER VIRTUALIZADA COM ALTA DISPONIBILIDADE Trabalho de Conclusão de Curso apresentado à Faculdade de Tecnologia de Lins, como parte dos requisitos necessários para obtenção do título de Tecnólogo em Redes de Computadores sob orientação do Prof. Ms Alexandre Ponce de Oliveira Data de Aprovação:__/__/____ ______________________________ Orientador (Alexandre Ponce de Oliveira) ______________________________ Examinador 1 ______________________________ Examinador 2 3 Dedico este trabalho à minha família que me apoiou em todos os momentos, na caminhada para um futuro de sucesso, baseado esforço e dedicação do presente. Kleder Augusto de Andrade Silva no 4 AGRADECIMENTOS Na conclusão de uma importante etapa da minha vida, venho agradecer a todos que estiveram presentes neste caminho. Primeiramente a Deus pela vida saúde que desfruto. A minha esposa Patricia que tanto se dedicou e me apoiou nesta caminhada. A minha filha Giovana por ser o brilho na minha vida e por ter compreendido a ausência enquanto me dedicava aos estudos. Ao meu pai Luiz Carlos e minha mãe Terezinha, que se dedicam carinhosamente a mim, meus irmãos e neta. Aos meus Irmãos Karise e Kledson que diretamente me apoiaram nesta etapa. Um agradecimento especial ao professor Alexandre Ponce, que além de proporcionar conhecimento durantes as aulas, foi fundamental na conclusão desta monografia sendo meu orientador compreendendo as dificuldades e compartilhando seu amplo conhecimento. A todos os professores que com competência e dedicação formam profissionais capacitados e pessoas mais preparadas para a vida. Agradeço a Fatec pelo espaço e organização, fundamentais para formação de alunos mais preparados para o mercado de trabalho. Um agradecimento especial aos amigos que fiz durante os estudos, pessoas importantes que se apoiaram durante as dificuldades e sorriram durante as alegrias Kleder Augusto de Andrade Silva 5 RESUMO Este trabalho teve como objetivo propor a utilização de virtualização sobre uma estrutura de cluster de computadores, com a utilização de softwares livres, estrutura de hardware de baixo custo e combinação de alta disponibilidade dos recursos, alta performance de processamento e segurança das informações. Para que seu entendimento seja possível, foram abordados conceitos de sistemas distribuídos sobre computação de grande porte, tecnologias que visam maior capacidade de processamento com a junção de vários equipamentos. Foi apresentado também um estudo sobre cluster, com a definição dos seus tipos, aplicações, vantagens e limitações. Para a estruturação do cluster foi utilizado LVM junto com o gerenciador de volumes DRBD que proporciona uma base de dados confiável e disponível para cluster. Outro assunto abordado foi a virtualização com sua evolução e aplicação sob o conceito de flexibilidade dos recursos, neste contexto foi utilizado o Hypervisor Xen em conjunto com o gerenciador de virtualização e cluster Ganeti, esta ferramenta foi desenvolvida pela empresa Google e utilizada no gerenciamento de seus servidores e cluster. A aplicação abrange todas as ferramentas e conceitos e resulta em uma infraestrutura altamente disponível, com grande capacidade de processamento, segura e de baixo custo. Este cenário é ideal para aplicação em ambiente acadêmico, corporativo ou qualquer outro que tenha necessidade de alinhar flexibilidade, escalabilidade e confiança na infraestrutura de TI para disponibilização de serviços. Palavras-chave: Cluster. Xen. DRBD. Ganeti. Disponibilidade. Performance. 6 ABSTRACT This work aimed to propose the use of virtualization on a structure of cluster computers, using free software, hardware structure of combination of low cost and high resource availability, high performance processing and information security. For the understanding to be possible, concepts of distributed system were discussed over computing of large size , technologies that aim higher processing capacity with the addition of various equipment. It was also presented a study on cluster, with the definition of their types, applications, advantages and limitations. For the structure of the cluster it was used LVM along with the volume manager DRBD that provides a reliable database and available for cluster. Another issue addressed was virtualization with its evolution and application under the concept of flexible resources in this context was used in conjunction with Xen Hypervisor virtualization manager and the cluster Ganeti, this tool was developed by Google and used in the management of their servers and cluster. The application includes all the tools, concepts and results in a highly available infrastructure with high processing capacity, safe and low cost. This scenario is ideal for applying in academic environment, corporate or any other in need of aligning flexibility, scalability and reliability in the IT infrastructure for provision of services. Keywords: Cluster. Xen. DRBD. Ganeti. Availability. Performance. 7 LISTA DE ILUSTRAÇÕES Figura 1.1 – Sistemas Distribuídos............................................................................ 16 Figura 1.2 – Diagrama de Cluster para Alta Disponibilidade ..................................... 20 Figura 1.3 – Computação em Grade ......................................................................... 22 Figura 2.1 - Cluster para serviço WEB ...................................................................... 24 Figura 2.2 – Diagrama de funcionamento do DRBD ................................................. 27 Figura 2.3 – Diagrama de funcionamento do Cluster HPC ....................................... 28 Figura 2.4 – Cluster Beowulf ..................................................................................... 29 Figura 3.1 – Diagrama da Virtualização .................................................................... 32 Figura 3.2 – Arquitetura da Virtualização .................................................................. 34 Figura 3.3 – Máquina Virtual ..................................................................................... 35 Figura 3.4 – Diagrama Virtualização Total ................................................................ 36 Figura 3.5 – Diagrama Paravirtualização .................................................................. 38 Figura 3.6 – Diagrama Virtualização Assistida .......................................................... 39 Figura 3.7 – Arquitetura Xen ..................................................................................... 40 Figura 4.1 – Diagrama da estrutura do cluster .......................................................... 42 Figura 4.2 – Inicialização do cluster .......................................................................... 50 Figura 4.3 – Verificação do status do cluster ............................................................ 51 Figura 4.4 – Progresso de criação de instância ........................................................ 52 Figura 4.5 – Status DRBD ......................................................................................... 52 Figura 4.6 – Listagem inicial das instâncias .............................................................. 53 Figura 4.7 – Incialização de instância ....................................................................... 53 Figura 4.8 – Conexão ao console da instância.......................................................... 53 Figura 4.9 – Diagrama cluster ................................................................................... 54 Figura 4.10 – Migração de instância ......................................................................... 54 Figura 4.11 – Listagem de instâncias após migração ............................................... 55 Figura 4.12 – Diagrama cluster pós migração da VM2 ............................................. 55 Figura 4.13 – Migração de todas instâncias de um nó .............................................. 56 Figura 4.14 - Diagrama do cluster pós migração de todas intancias ......................... 57 Figura 4.15 – Diagrama do cluster – simulação de falha .......................................... 57 Figura 4.16 - Diagrama do cluster pós falha no node2.............................................. 58 Figura 4.17 – Listagem de instâncias após falha de nó do cluster ............................ 58 Figura 4.18 – Listagem de instâncias pós failover..................................................... 59 8 Figura 4.19 - Diagrama do cluster pós failover .......................................................... 59 9 LISTA DE QUADROS QUADRO 1.1 – Diferenças entre computação de grande porte e distribuída............29 QUADRO 4.1 – Configuração das instâncias.............................................................52 10 LISTA DE ABREVIATURAS E SIGLAS AD – Active Directory CPU – Central Processing Unit DRBD - Distributed Replicated Block Device HA – High Avaliability HPC- Cluster High Performance Computing IP – Internet Protocol LVM – Logical Volume Manager LVS - Linux Virtual Server NIC – Network Interface Controller OOB – Out of Band OSI - Open Systems Interconnection PC – Personal Computer RAID - Redundant Array of Independent Disks TCP – Protocolo de Controle de Transmissão TI – Tecnologia da Informação VM – Virtual Machine 11 SUMÁRIO 1 SISTEMAS DISTRIBUÍDOS ............................................................................. 15 1.1 PARADIGMAS DA COMPUTAÇÃO DE GRANDE PORTE ......................... 17 1.2 SISTEMAS DE COMPUTAÇÃO DISTRIBUÍDOS ........................................ 18 1.3 COMPARATIVOS ENTRE COMPUTAÇÃO DE GRANDE PORTE E DISTRIBUÍDA ...................................................................................................... 19 1.4 COMPUTAÇÃO EM CLUSTER ................................................................... 20 1.5 COMPUTAÇÃO EM GRID ........................................................................... 21 2 CLUSTER DE COMPUTADORES .................................................................... 23 2.1 CLUSTERS DE ALTA DISPONIBILIDADE .................................................. 24 2.1.1 Linux Virtual Server ............................................................................... 25 2.1.2 Heartbeat ............................................................................................... 26 2.1.3 Distributed Replicated Block Device ...................................................... 26 2.2 CLUSTER DE ALTO DESEMPENHO .......................................................... 27 2.3 CLUSTER BEOWULF .................................................................................. 29 3 VIRTUALIZAÇÃO ............................................................................................. 31 3.1 MÁQUINA VIRTUAL .................................................................................... 34 3.2 HYPERVISORS ........................................................................................... 35 3.3 TÉCNICAS DE VIRTUALIZAÇÃO ................................................................ 35 3.3.1 Virtualização Total ................................................................................. 36 3.3.2 Paravirtualização ................................................................................... 37 3.3.3 Virtualização Assistida por Hardware .................................................... 38 3.4 SOFTWARES DE VIRTUALIZAÇÃO ........................................................... 39 3.4.1 VMware ................................................................................................. 39 3.4.2 Xen ........................................................................................................ 40 3.4.3 Hyper-V ................................................................................................. 41 4 IMPLEMENTAÇÃO ........................................................................................... 42 12 4.1 INSTALAÇÃO E CONFIGURAÇÕES INICIAIS ............................................ 44 4.1.1 Ganeti .................................................................................................... 45 4.1.2 Xen ........................................................................................................ 45 4.1.3 Configuração DRBD .............................................................................. 47 4.1.4 Topologia de Rede ................................................................................ 47 4.2 INICIALIZAÇÃO DO AMBIENTE .................................................................. 49 4.3 DEMONSTRAÇÃO DO AMBIENTE ............................................................. 51 4.3.1 Criação de Instâncias ............................................................................ 51 4.3.2 Movimentação de Instâncias entre nós do Cluster ................................ 54 4.3.3 Simulação de Desligamento Programado do Nó Máster ....................... 55 4.3.4 Simulação de Desligamento Não Programado do Nó Máster ............... 57 CONCLUSÃO ...................................................................................................... 61 REFERÊNCIAS ................................................................................................... 64 13 INTRODUÇÃO A necessidade de acesso constante a informação é uma realidade cada vez maior em nossa sociedade, onde qualquer ambiente que dependa da tecnologia da informação tem em seus principais objetivos a total disponibilidade dos recursos e informações. Com a crescente demanda para acesso a informação, a arquitetura de um ambiente de TI esta cada vez mais voltada para a alta-disponibilidade com ênfase na segurança dos dados. É cada vez mais importante que as empresas alinhem as estratégias de negócios com base nos investimentos na tecnologia da informação. (VERAS, 2011) Uma abordagem bem sucedida para a solução da necessidade de altadisponibilidade, segurança e grande poder de processamento baseia-se em tecnologias de software opensource, que unem todos os requisitos para atingir estes objetivos, com o uso de tecnologias gratuitas e altamente eficientes. (SALLES et. al., 2009) Atualmente a virtualização é uma tecnologia cada vez mais presente em ambientes de TI, através dela é possível obter o maior aproveitamento dos recursos físicos de hardware, tendo foco em flexibilidade e disponibilidade das informações e serviços. (CARISSIMI, 2008) A tecnologia de cluster é outra tecnologia amplamente utilizada atualmente, seja para alta disponibilidade dos recursos, quanto para atender a alta demanda para processamento. O cluster faz com que um ou mais computadores funcionem em cooperação para atender a demanda de processamento e requisição de recursos.(SLTI, 2006) A utilização aliada de virtualização e cluster fornece o conjunto de benefícios que cada um possui, consolidando uma estrutura completa para atendimento das atuais demandas da tecnologia da informação. Esta combinação proporciona agilidade aos negócios, facilidade de gerenciamento, capacidade de expansão e poder de processamento, ainda motivação pela segurança e confiabilidade na arquitetura. (ANTONOPOULOS, 2005) A importância deste estudo em um ambiente acadêmico é grande, uma vez que nesta etapa o estudante precisa ter contato com um ambiente amplamente tecnológico, alinhado as necessidades e demandas do mercado consumidor destas 14 tecnologias e recursos. Este contato promove uma base de conhecimento mais completa das principais tecnologias voltadas para o conceito de supercomputação. A pesquisa foi feita com base em bibliografia específica aos assuntos abordados, artigos acadêmicos, materiais disponibilizados na internet e também documentação oficial dos softwares descritos ou utilizados Este projeto tem como objetivo o desenvolvimento de uma arquitetura de virtualização baseada em um cluster de computadores, com a combinação de alta disponibilidade dos recursos e alta performance de processamento. O ambiente prático aqui desenvolvido tem por objetivo simular a situação real para aplicação destas tecnologias, onde são apresentadas situações que necessitam de contingência de operação para promover a alta disponibilidade dos recursos, bem como a segurança das informações contidas na estrutura em questão. Para atingir o objetivo da proposta, foi desenvolvido um cluster com dois nós, onde o volume de dados é compartilhado através do gerenciador de volumes DRBD. Estes volumes de dados são entregues ao Ganeti, que é o gerenciador de cluster escolhido para o projeto, sendo este também responsável pelo gerenciamento da camada de virtualização e suas instâncias. Dentro do cenário proposto será feita simulação de situações reais de manipulação e gerenciamento das instâncias alocadas no cluster o mais próximo de um ambiente real. Desta forma, o trabalho está estruturado da seguinte forma: o primeiro capítulo descreve os conceitos sobre sistemas distribuídos em suas definições e aspectos, no segundo capítulo é feito o estudo mais aprofundado da tecnologia de cluster, com a definição dos seus tipos, aplicações, vantagens e limitações, o conceito de virtualização, sua evolução, aplicação sob o contexto de disponibilização, flexibilidade dos recursos é descrito no terceiro capítulo, o quarto capítulo apresenta o estudo de caso, onde são aplicados os conceitos em ambiente que define uma situação real para aplicação da proposta, por fim, tem-se as conclusões finais sobre o trabalho. 15 1 SISTEMAS DISTRIBUÍDOS Neste capítulo são abordados todos os conceitos relacionados à essência da computação de grande porte, tecnologias que visam promover maior capacidade de processamento através da união de equipamentos em um único bloco de processamento central. Componentes assimétricos, ou seja, desde computadores convencionais até mesmo mainframes de grande porte. Esta composição é transparente ao usuário, que tem como apresentação de uso um frontend que não transparece a estrutura física e de gerenciamento envolvidos nesta arquitetura computacional. Segundo Tanenbaum e Steen (2007, p.1): “Um sistema distribuído é um conjunto de computadores independentes que se apresenta aos seus usuários como um sistema único e coerente”. Para Coulouris, Dollimore e Kindberg (2007, p.15), “Um sistema distribuído é aquele no qual os componentes localizados em computadores interligados em rede se comunicam e coordenam suas ações apenas passando mensagens”. Segundo Tanenbaum e Steen (2007), uma característica importante esperada de um sistema distribuído é a escalabilidade da estrutura, sendo possível a ampliação por meio de adição de componentes ao conjunto fazendo uso da independência das unidades no comportamento do conjunto, somando capacidade e recursos na estrutura como um todo Conforme explica Coulouris, Dollimore e Kindberg (2007), o motivo principal que leva a construção e definição de um sistema distribuído é o compartilhamento de recursos, que podem ser gerenciados por servidores a fim de atender aos clientes que os necessitam. Segundo Tanenbaum e Steen (2007), a entrega dos serviços independente da situação direta da estrutura é proporcionada pela independência dos componentes, mediante a administração do sistema de gerenciamento central, permanecendo o processamento disponível mesmo que componentes estejam avariados ou indisponíveis. Ainda segundo Tanenbaum e Steen (2007), pela transparência obtida, os usuários e sistemas não percebem que a estrutura está em processo de manutenção, uma vez que o cerne do sistema não atribui uma função específica a um determinado componente. 16 Para Caulouris, Dollimore e Kindberg (2007), a heterogeneidade de componentes, a segurança e a escalabilidade são fatores fundamentais nos desafios de concepção de um sistema distribuído, principalmente no que tange a ampliação de usuários, adição de componente e transparência da estrutura. Na figura 1.1 é mostrado como os computadores em paralelo se comportam durante a divisão das funções por meio da camada de sistema distribuído. Figura 1.1 – Sistemas Distribuídos Fonte: Tanenbaum; Steen, 2007, p.1 De acordo com Tanenbaum e Steen (2007), a funcionalidade de um sistema distribuído, tem como principal componente um software específico, também conhecido como Middleware, que desempenha a função de fazer a interconexão de todos os componentes físicos do conjunto, disponibilizando interface de processamento para as aplicações que serão executadas e entregues aos usuários dos sistemas. Segundo Tanenbaum e Steen (2007, p.222), “Para suportar computadores e redes heterogêneas e, simultaneamente oferecer uma visão de sistema único, os sistemas distribuídos costumam ser organizados por meio de uma camada de software”. Essa adaptabilidade aos diversos tipos de configuração e de componentes nos permite maior aproveitamento dos recursos não ficando restrito a uma arquitetura de hardware, sendo este um fator importante no custo de implantação e manutenção da estrutura, bem como a ampliação e escalabilidade futura do projeto em questão. (TANENBAUM; STEEN, 2007) 17 1.1 PARADIGMAS DA COMPUTAÇÃO DE GRANDE PORTE Conforme Slti (2006, p 28) “A computação de grande porte é definida como sistema de alta capacidade de computação, também conhecida como “Alta plataforma”, esta é caracterizada pela utilização de Mainframes e supercomputadores”. Nascidos em 1946, os Mainframes são sistemas de computação capazes de processar grande quantidade de solicitações de dados de milhares de usuários conectados através de uma rede distribuída. Estes equipamentos geralmente ocupam grandes espaços físicos e demandam ambientes específicos para o seu funcionamento, onde temperatura e umidade são alguns dos fatores ambientais importantes no projeto de sua instalação. (SLTI, 2006) Na década de 60 foi apresentado o conceito de supercomputador, que é um computador de alta capacidade de processamento e também com grande quantidade de memória, normalmente empregado em pesquisas científicas e militares. Este ambiente é voltado para pesquisas que exigem grande capacidade de processamento e disponibilidade de recursos, muitas vezes para simulações de resultados das pesquisas. (SLTI, 2006) A distinção entre supercomputadores e mainframes não é clara e direta, mas genericamente são diferenciados pelas tarefas submetidas, os supercomputadores são utilizados na solução de problemas em que o tempo de cálculo é um limite (processamento), enquanto os mainframes são utilizados em tarefas que exigem alta disponibilidade, envolvem alta taxa de transferência de dados (internos ou externos ao sistema) e acessos simultâneos. (SLTI, 2006) De acordo com Slti (2006), quando estes equipamentos chegam a sua capacidade limite de processamento, se faz necessária a ampliação de sua capacidade através da adição de novo hardware ao conjunto, ou até mesmo a substituição total do equipamento. Ambas as alternativas tem como principal impacto o elevado custo financeiro, uma vez que a aquisição de dispositivos de hardware proprietário significam valores elevados já que não existe componente compatível para aquisição no mercado. Outro ponto importante citado por Slti (2006), é que no sistema de computação de grande porte, não é possível calcular de forma precisa a demanda por processamento, as soluções adquiridas excedem a carga necessária de processamento. 18 1.2 SISTEMAS DE COMPUTAÇÃO DISTRIBUÍDOS Foco principal dos sistemas distribuídos no que diz respeito à arquitetura computacional, computação em cluster e computação em grade, tem como objetivo principal o alto desempenho computacional e a alta disponibilidade para entrega dos recursos. Para Tanenbaum e Steen (2007, p.222), “Uma classe importante de sistemas distribuídos é a utilizada para tarefas de computação de alto desempenho”. Esta classe permite a utilização modular de equipamentos de pequeno porte, trabalhando de forma coordenada promovendo maior capacidade de processamento. Segundo Morimoto (2005), clusters e grades computacionais tem como ideia central a cooperação de equipamentos ligados através de uma rede, fazendo uso da capacidade individual para executar processamento de grande carga. De acordo com Slti (2006), existem cinco gerações bem definidas de sistemas distribuídos, os quais podem ser elencados em um período de 20 anos. A primeira geração utilizava uma arquitetura muito lembrada nos dias atuais, popularmente conhecida como terminais burros, caracterizando pelo processamento e armazenamento centralizado das informações. Um servidor era responsável por receber as solicitações de inicialização dos terminais remotos, estabelecendo o processo de envio, recebimento, processamento e armazenamento das informações. (SLTI, 2006) A segunda geração, se baseia na primeira com relação ao processamento e armazenamento das informações, diferenciando-se por conter uma pequena capacidade de processamento local, a qual era utilizado para executar a emulação do terminal de acesso remoto. (SLTI, 2006) Já na terceira geração, o conceito de aplicações cliente/servidor é utilizado, onde o cliente conta com considerável capacidade de processamento. A interação de sistemas é feita por meio de compartilhamento de funções e tarefas, onde o terminal tem condição de executar tarefas juntamente com o servidor das aplicações. (SLTI, 2006) A quarta geração se caracteriza pela utilização de aplicações multicamadas e interfaces distintas para as aplicações. O processamento é delimitado de acordo com as regras do negócio. (SLTI, 2006) 19 E por fim a quinta geração é baseada em grid computing, caracterizada pela utilização do processamento contido em um pool virtual, permitindo ao cliente a utilização dos recursos necessários sob demanda, sem a necessidade de alocação rígida e inflexível dos recursos disponíveis na infraestrutura física dos componentes. (SLTI, 2006) 1.3 COMPARATIVOS ENTRE COMPUTAÇÃO DE GRANDE PORTE E DISTRIBUÍDA A computação de grande porte e a computação distribuída compartilham algumas semelhanças, as duas arquiteturas demandam estruturas físicas semelhantes no que diz respeito à segurança e controle de acesso ao ambiente, refrigeração, fornecimento ininterrupto de energia elétrica e organização do espaço físico. (SLTI, 2006) Pode-se citar o alto poder de processamento, alta disponibilidade, suporte a milhares de transações e usuários simultâneos, contingenciamento de recursos, administração do ambiente e grande capacidade de armazenamento de dados. (SLTI, 2006) O quadro 1.1 exibe as diferenças entre computação distribuída e de grande porte. Quadro 1.1- Diferenças entre computação de grande porte e distribuída Computação de grande porte Sistemas distribuídos: Cluster e Grid - Alto custo de implantação; - Baixo custo de implantação; - Dependência de fornecedor único; - Independência de fornecedores; - Utilização de hardware específico; - Facilidade de negociação; - Alto custo de manutenção; - Utiliza hardware comum, padrão PC; - Dificuldade de redimensionamento do - Baixo custo de manutenção; ambiente; - Facilidade de redimensionamento do - Utilização parcial da capacidade de ambiente; processamento; - - Grande custo total de propriedade; processamento; - Tecnologia estabelecida no mercado. - Baixo custo total de propriedade; Maximização da - Tecnologia inovadora. Fonte: (SLTI, 2006) capacidade de 20 1.4 COMPUTAÇÃO EM CLUSTER Segundo Tanenbaum e Steen (2007), computação em cluster tem seu conceito uma maior homogeneidade dos componentes (computadores) que participam da sua implementação, comunicando-se através de uma rede e compartilhando uma camada de sistema que gerencia os sistemas operacionais de cada nó do cluster, deixando transparente este processo ao cliente, ou seja, o mesmo não percebe onde ou como é processada a carga de trabalho. Conforme Morimoto (2005) explica, um cluster é formado por um conjunto de equipamentos gerenciado por um ponto central, onde cada nó se torna um escravo executando tarefas escalonadas por um gerenciador central. É utilizado principalmente para aplicações com alta necessidade e complexidade de processamento, bem como atividades de renderização. A computação em cluster na maioria dos casos é utilizada para computação paralela, onde diversas máquinas desempenham a tarefa de processamento de forma compartilhada. (TANENBAUM; STEEN, 2007) A figura 1.2 demonstra o diagrama de um cluster de alta disponibilidade e performance. Figura 1.2 – Diagrama de Cluster para Alta Disponibilidade Fonte: Cloud, 2010. 21 Segundo Tanenbaum e Steen (2007), este modelo de computação distribuída, tornou-se popular com a diminuição dos custos de aquisição dos equipamentos. Como sua implementação podia ser feita com equipamentos convencionais, a aquisição de componentes para manutenção ou ampliação tornava a estrutura mais barata, flexível e simplificada. 1.5 COMPUTAÇÃO EM GRID Conforme definido por Slti (2006, p.169) “Os grids computacionais surgiram na década de 90 com o intuito de viabilizar a execução de aplicações de forma paralela e recursos computacionais geograficamente dispersos pertencente à uma mesma organização”. No primeiro momento a computação em grid tinha como principal objetivo substituir as plataformas baseadas em supercomputadores, que tinham elevados custos de aquisição e manutenção, além de se tornarem obsoletos em um espaço de tempo relativamente curto, sendo necessária a sua substituição por completo. (SLTI, 2006) A segunda proposta tangia a questão de execução de grande volume de processamento, superando a capacidade que um computador individual teria condições de executar. (SLTI, 2006) Para Morimoto (2005), a tecnologia de computação em grade é mais democrática, tanto no sentido de heterogeneidade dos componentes, onde diversos tipos de equipamentos tem condição de participar da estrutura, bem como sua forma de participação nas tarefas necessárias. A diferenciação prática com relação ao conceito de computação em cluster é o fato que a arquitetura em grid faz com que a parte ociosa de um nó seja destacada para atender a demanda de processamento necessário para determinada tarefa no grid, desta forma gerando autonomia na utilização dos recursos uteis e disponíveis (MORIMOTO, 2005) O nó não fica dedicado ao processamento, disponibiliza somente a capacidade ociosa naquele momento, retomando esta capacidade disponibilizada caso tenha necessidade. Existe também a troca, onde o nó pode fazer uso da capacidade de processamento do grid, caso tenha necessidade por esta demanda de processamento. (MORIMOTO, 2005) 22 A figura 1.3 ilustra o conceito de diversidade de equipamentos que podem compor um grid. Figura 1.3 – Computação em Grade Fonte: Salustino, 2012. Segundo Tanenbaum e Steen (2007), diversas tecnologias podem compor uma estrutura de computação em grade, desde computadores convencionais até supercomputadores passando por componentes periféricos. Tem como base o compartilhamento e interoperabilidade dos recursos, formando um conjunto de funções amplamente disponíveis para utilização dos usuários participantes da organização ou domínios. (TANENBAUM; STEEN, 2007) Os recursos são dispostos à medida que passam a participar da organização, desta forma a escalabilidade de recursos é facilitada, evitando complexidade na participação de componentes. (TANENBAUM; STEEN, 2007) Segundo Morimoto (2005), um grid pode ser formado por computadores de uma empresa distribuídos geograficamente pelo mundo, interligados através da WEB, e que podem executar funções de processamento em tempo integral, pois devido ao fuso horário sempre haverá equipamentos disponíveis para execução de funções. Este capítulo abordou vários conceitos importantes e que serviram de base para o desenvolvimento do segundo capítulo que aborda com maiores detalhes computadores em cluster, sendo este, tecnologia fundamental na implementação deste projeto. 23 2 CLUSTER DE COMPUTADORES Desenvolvido na década de 60 pela empresa IBM, quando duas máquinas permitiram a interligação de seus mainframes a um custo moderado. Este conceito ainda hoje é aplicado, uma vez que a utilização de dois ou mais equipamentos para a solução de um problema é considerado tecnicamente um cluster. (PITANGA, 2008) Cluster são grupos de servidores trabalhando juntos para alcançar determinada funcionalidade. Estes atuam como se fossem um único servidor, propiciando funções de alta disponibilidade e performance para o ambiente proposto. (VERAS, 2011) Segundo Pitanga (2003), um cluster é formado por dois ou mais computadores denominados nodos, interligados através de uma interface de rede, com a finalidade de executar as funções ou tarefas necessária, transparecendo ao usuário que esta foi executada por um único computador, sendo isto denominado transparência de sistema. Para Morimoto (2005) um modelo lógico de composição de cluster, é aquele que faz uso de computadores parecidos entre si, para evitar gargalos no processamento devido ao fato de um equipamento ser mais lento que os outros. Na década de 80 esta arquitetura passou a ganhar espaço e importância, quando fatores determinantes surgiram, tais como, desenvolvimento de processadores de alto desempenho, desenvolvimento de redes de computadores com baixa latência e padronização das ferramentas de computação paralela e distribuídas, foram determinantes para a consolidação desta arquitetura. (PITANGA, 2008) De acordo com Veras (2011) a ideia central da utilização de cluster e a combinação de seus tipos, é promover a disponibilidade e desempenho, diminuindo a complexidade de gerenciamento. O termo clustering atualmente é ligado a diversas denominações de tecnologias e configurações, podendo ser divididas em duas grandes arquiteturas básicas, sendo a primeira denominada Cluster High-availability (HA), ou em sua tradução, Cluster de Alta Disponibilidade e a segunda categoria o Cluster High Performance Computing (HPC), conhecido como Cluster de Alto Desempenho. (PITANGA, 2008) 24 2.1 CLUSTERS DE ALTA DISPONIBILIDADE Atualmente sistemas de computação são responsáveis pelos mais diversos tipos de atividades, dentro de um ambiente corporativo isto esta ligado a tarefas administrativas, financeiras, gestão de pessoas e propriamente a comunicação. (SLTI, 2006) Estas necessidades formam um ambiente de alta dependência de recursos e informação, tendo uma arquitetura operacional crítica, onde a inoperância ou instabilidade na entrega de serviços e informações poderá acarretar diretamente em prejuízos operacionais e financeiros. (SLTI, 2006) A alta disponibilidade vem a foco justamente para resolver este tipo de situação, garantindo o funcionamento de serviços de rede, armazenamento de dados, processamento e comunicação mesmo se houver uma ou mais falhas e dispositivos, sejam eles hardware ou software. (PITANGA, 2008) A alta disponibilidade tem como objetivo disponibilizar uma função ou serviço permanentemente ou segundo padrões de somente paradas programadas. Paradas não planejadas estão diretamente ligadas à qualidade do serviço e prejuízos financeiros. (PITANGA, 2008). Figura 2.1 - Cluster para serviço WEB Fonte: Hamc, 2008 Na figura 2.1 é exemplificado o funcionamento de serviço WEB, onde caso o servidor principal falhe, o secundário atende o serviço sem qualquer prejuízo ao cliente. 25 A disponibilidade de sistemas e recursos é vital para qualquer negócio, visto que a indisponibilidade destes pode significar prejuízos financeiros diretos. Uma empresa que trabalha com sistema de e-commerce (vendas pela internet) necessita que seus servidores WEB e meios de comunicação estejam 24 horas disponíveis, com capacidade suficiente para atender qualquer demanda. (PITANGA, 2008) Em qualquer projeto que dependa de recursos ou sistemas, é importante levar em consideração fatores ligados a infraestrutura, como por exemplo, o fato de qualquer hardware estar sujeito a falhas, seja ela por fatores ligados a saturação de componentes e defeitos de fabricação, e no caso de software, problemas ligados à configuração incorreta e inconsistência de desenvolvimento. (PITANGA, 2008) Do ponto de vista tecnológico temos duas categorias de soluções que são ligadas diretamente a alta disponibilidade de recursos. Alta disponibilidade por hardware é alcançada basicamente pelo monitoramento e redundância de recursos de hardware, o que impacta diretamente nos custos físicos da estrutura. Nesta categoria os equipamentos possuem duas fontes de alimentação, dois sistemas independentes de fornecimento de energia, discos rígidos com espelhamento, utilização de tecnologia Hotswap onde os componentes podem ser substituídos sem a necessidade de desligamento do equipamento. (SLTI, 2006) Alta disponibilidade por software, nesta categoria são aplicados softwares que tem a função de gerenciar um conjunto de equipamentos ou servidores, fazem o monitoramento de funcionamento, e em caso de falha de um deste, o mecanismo de decisão é acionado a fim de redirecionar ou redistribuir tarefas aos demais equipamentos disponíveis. Linux Virtual Server (LVS), HeartBeat e Distributed Replicated Block Device (DRBD) são alguns softwares relacionados a esta solução e serão foco do projeto. (SLTI, 2006) 2.1.1 Linux Virtual Server Tecnologia que permite desenvolver ambientes de alta escalabilidade, onde a expansão de capacidade e recursos é garantida pela facilidade de adição de novos nós de armazenamento e processamento. Pode oferecer serviços de maior capacidade, desempenho ou redundância, sendo este último essencial no caso de parada de um dos servidores por problema ou manutenção. (SLTI, 2006) 26 O LVS opera como um roteador da camada do modelo Open Systems Interconnection (OSI), onde o cliente ao acessar um serviço não consegue saber a qual servidor esta conectado, ou a qual será numa próxima conexão ao serviço. (SLTI, 2006) 2.1.2 Heartbeat Resultado do projeto GNU/Linux que visa promover confiança, disponibilidade e suportabilidade, tem como principal objetivo efetuar monitoramentos que resultam ações. (SLTI, 2006) Heartbeat monitora o funcionamento dos dois equipamentos através de uma interface de rede, caso um falhe, o outro assume o serviço do nó que ficou indisponível. Utiliza o conceito de servidor primário e servidor secundário, onde o servidor secundário fica a espera de qualquer falha do primeiro para assumir os serviços neles alocados, sem qualquer prejuízo ao funcionamento ou aos dados processador. (SLTI, 2006) O mecanismo de funcionamento deste cenário é delimitado a partir do ponto em que um intervalo de tempo de resposta é configurado como máximo aceito, o qual o servidor primário tem que enviar informação de funcionamento, caso este tempo seja excedido o servidor secundário assume que o primeiro não esta mais em operação, e assim passa a responder pelo servidor inoperante, atribuído a si a funções que estavam sendo executadas no dispositivo que está inoperante. (SLTI, 2006) 2.1.3 Distributed Replicated Block Device O DRBD é formado por um módulo no kernel do Linux juntamente com um conjunto de programas e scripts, tem como principal função formar um sistema de arquivo distribuído pela rede. Seu funcionamento é semelhante à criação de um Redundant Array of Independent Disks (RAID) de discos físicos locais em um único equipamento. (SLTI, 2006) Todas as transferências do DRBD são feitas através da interface de rede, utilizando um conjunto de protocolos, dentre eles o Protocolo de Controle de Transmissão (TCP) e o Internet Protocol (IP). (SLTI, 2006) 27 Em todos os nós da rede é criado um vínculo pelo gerenciador central que aloca uma partição local comum a cada um, não sendo acessível diretamente pelo equipamento em que esta alocado o volume de dados. Toda escrita é feita no nó controlador e redirecionada por está para os níveis inferiores, propagando para o restante dos servidores secundários, que gravam as informações nos blocos de nível mais baixo. (SLTI, 2006) Na figura 2.2 são exibidos os níveis de partições e a arquitetura de nó primário e secundário. Figura 2.2 – Diagrama de funcionamento do DRBD Fonte:Hellman, et al, 2012 Caso ocorra alguma falha no dispositivo primário, imediatamente o dispositivo secundário é promovido a primário e as transferências serão feitas no sentido do dispositivo disponível. Assim que o servidor defeituoso voltar à operação, o seu estado de primário poderá ser devolvido ou não, dependendo da configuração estabelecida. (SLTI, 2006) 2.2 CLUSTER DE ALTO DESEMPENHO Esta solução é muito atrativa para ambientes que necessitam de alto poder de processamento, tais como universidades e empresas, que tem como principal obstáculo os custos relacionados à aquisição de um computador de grande porte. (PITANGA, 2008) 28 Cluster de Alto Desempenho tem a capacidade de processamento com grande volume de Gigaflops, a partir de um conjunto de computadores comuns e com utilização de software gratuito, o seu custo é muito inferior a um único servidor de capacidade equivalente. (SALLES et. al., 2009) Esta arquitetura tem grande aceitação no mercado não somente pelo seu custo de implantação, mas também pelos custos relacionados a manutenção e ampliação de capacidade. A capacidade pode ser ampliada de acordo com a necessidade do negócio, não tendo impacto significativo principalmente de comparado quando existe esta necessidade em uma estrutura que utiliza a arquitetura de supercomputador (PITANGA, 2008) Questões relativas a processamento paralelo e distribuído foram evidenciadas, a busca por maior taxa de transferência, baixa latência de rede e confiabilidade eram pontos colocados em propósitos especiais de análise nos projetos das infraestruturas. (PITANGA, 2008) Esta arquitetura tem como principal objetivo atribuir performance e disponibilidade para grandes tarefas, sendo esta dividida em pequenas tarefas que são distribuídas para as estações (nodos) através de interface de rede. (SALLES et. al., 2009) Na figura 2.3 é demonstrado um Cluster HPC . Figura 2.3 – Diagrama de funcionamento do Cluster HPC Fonte: Anterio, 2012 29 Nesta categoria de cluster é comum ser lembrado o nome Beowulf, sistema de cluster desenvolvido pela National Aeronautics and Space Administration (NASA), são utilizados em computação científica, área financeira e médica, sendo funções diretamente ligadas a necessidade de alto processamento. (SALLES et. al., 2009) 2.3 CLUSTER BEOWULF Com nome de um grande herói inglês que enfrentava grandes desafios tais como monstros e dragões, o software foi batizado com este nome em referência ao desafio que enfrentaria a alta demanda de processamento. (SALLES et. al., 2009) A sua arquitetura é dividida em um nó central de controle, denominado nó mestre, que tem a função de controlar o cluster através do monitoramento, recepção e distribuição das tarefas entre os nós. (SALLES et. al., 2009) Os nós escravos são conhecidos como backends, que tem como única função executar as funções de processamento atribuídas pelo nó mestre. Nestes backends não existe a necessidade de instalação de teclado ou mouse, também não é necessária a utilização de discos rígidos. (SALLES et. al., 2009) Os nós de frontend desempenham função de servidores de arquivos para os demais clusters e função de gateway. O gateway fornece o acesso ao ambiente externo do cluster, a figura 2.4 ilustra este mecanismo. Figura 2.4 – Cluster Beowulf Fonte: (SALLES et. al., 2009) 30 A utilização de cluster baseado no Beowulf permite a construção de uma solução que pode alcançar altas taxas de gigaflops, com a utilização de computadores simples e sistemas operacionais de código aberto. São evidentes as vantagens na utilização de cluster em situações onde grande poder de processamento é imposto. Empresas e instituições que possuem esta demanda logo percebem esta vantagem frente aos custos de computadores de grande porte. Esta percepção se dá ao fato de que tudo no ambiente corporativo esta ligado diretamente ao investimento para aquisição, manutenção e capacidade de processamento para atender a demanda requisitada. (PITANGA, 2008) Independência de arquitetura e fornecedores é importante, pois a instituição não depende de um mesmo padrão de hardware para manutenção e ampliação, podendo utilizar equipamentos de custo acessível. 31 3 VIRTUALIZAÇÃO A virtualização é atualmente uma das tecnologias mais lembradas nos ambientes ligados a Tecnologia da Informação (TI), e tido como o futuro dos ambientes computacionais. (CARISSIMI, 2008) Virtualização não é uma tecnologia contemporânea, teve seu início na década de 60, onde se buscava obter maior aproveitamento dos caros mainframes. Cada equipamento possuía seu sistema operacional padrão e era necessária uma solução que permitisse a utilização de software legados das empresas. (CARISSIMI, 2008) O primeiro sucesso nesta direção foi obtido pela empresa IBM, que buscava formas de administrar seus mainframes, aproveitar todo recurso disponível e aumentar a disponibilidade dos serviços e recursos. Outra questão foco ter somente um sistema operacional por equipamento, sendo este fator ligado diretamente aos resultados dos investimentos e custos. (BLOKDIJK; MENKEN, 2008) Com a evolução dos sistemas operacionais e restrição de quantidade destes no mercado, capacidade cada vez maior em hardware e o paradigma de estruturas distribuídas, voltou o foco sobre a tecnologia de virtualização. (CARISSIMI, 2008) A virtualização tornou-se a base estrutural de qualquer Data Center, onde se obtêm a divisão física de um servidor em vários servidores virtuais, com impacto na administração e benefícios obtidos com esta tecnologia. (VERAS, 2011) Os benefícios da virtualização estão ligados diretamente a necessidade atual por demanda de processamento e administração de recursos, sendo assim aplicadas em diferentes soluções para usuários, organizações empresariais, instituições governamentais, ensino e ciência. (BLOKDIJK; MENKEN, 2008) Com a ampliação na utilização de redes de computadores, é comum o administrador de infraestrutura lidar com diferentes tecnologias ao mesmo tempo. Em estruturas computacionais, é comum o atendimento desta demanda ser feito por soluções baseadas em um único servidor, compatibilizando e direcionando o conjunto de clientes dependentes daquela tecnologia. (BLOKDIJK; MENKEN, 2008) O paradigma de “um servidor por serviço” em muito se deve a conceitos que variam da compatibilidade à segurança. Na maioria dos casos o resultado desta exclusividade é o não aproveitamento total da capacidade do processamento ou recursos disponíveis, o que significa diretamente prejuízo financeiro já que o investimento esta sendo utilizado com capacidade inferior a total disponível. (CARISSIMI, 2008) 32 A virtualização já foi definida como a emulação de hardware ou software, através de uma plataforma de sistema sob um hardware físico. Esta emulação definia soluções relacionadas a emular memória, discos, funções de redes, sistemas, dentre outros. (BLOKDIJK; MENKEN, 2008) De acordo com Blokdijke Menken (2008), o conceito de emulação foi redefinido a partir do momento que o próprio hardware passou a disponibilizar suporte a virtualização, onde começou a participar diretamente da administração do sistema e das funções virtualizadas. (BLOKDIJK; MENKEN, 2008) O sentido prático do uso da virtualização esta primeiramente ligado ao aproveitamento máximo dos recursos físicos disponíveis. É conhecido que a média inicial de consolidação de servidores é de 10 a 30% dos recursos disponíveis, o restante da capacidade de processamento fica ociosa. (VERAS, 2011) A virtualização visa prover solução para este problema, tornando eficiente a utilização dos recursos disponíveis. Por exemplo, uma empresa que utiliza cinco diferentes servidores para cinco serviços diferentes, com a virtualização passa a ter condição de executar os cinco serviços em um único servidor físico, mesmo que os sistemas sejam aplicados em diferentes plataformas, este exemplo é ilustrado pela figura 3.1 Diagrama da Virtualização. (VERAS, 2011) SERVIDOR 1 SERVIDOR 2 SERVIDOR 3 SERVIDOR 4 SERVIDOR 5 MÁQUINA VIRTUAL 1 MÁQUINA VIRTUAL 2 MÁQUINA VIRTUAL 3 MÁQUINA VIRTUAL 4 MÁQUINA VIRTUAL 5 SERVIDOR VIRTUALIZADO 5:1 Figura 3.1 – Diagrama da Virtualização Fonte: (VERAS, 2011) 33 Além do aproveitamento financeiro muito observado pelas empresas em seus negócios, outro fator que traz aplicação prática para a virtualização é o aproveitamento de espaço físico do ambiente, tornando-o mais funcional. (BLOKDIJK; MENKEN, 2008) A administração de uma estrutura virtualizada é facilitada, pois o ambiente físico é otimizado e sua operação é centralizada. Várias máquinas virtuais podem ser administradas de um mesmo local físico, não sendo necessários espaços diferentes para administrar o Data Center. Insto se torna cada vez mais importante em ambientes onde o aproveitamento de espaço é cada vez mais valorizados nos projetos de infraestrutura.(VERAS, 2011) Em momento onde a sustentabilidade e autossuficiência são termos cada vez mais presentes em qualquer debate, no ambiente tecnológico não seria diferente. A virtualização esta ligada diretamente ao termo TI Verde, onde se busca o menor impacto ambiental resultante da infraestrutura, sem deixar de lado os resultados e beneficios esperados para o projeto. (VERAS, 2011) Disponibilidade dos recursos é outro ponto bastante explorado com a utilização de uma estrutura virtualizada, fator determinante no projeto, uma vez que qualquer empresa dependente de recursos computacionais necessita do menor tempo de parada possível. Qualquer negocio que dependa de recursos computacionais tem como principal foco, a constante disponibilização do recursos para o perfeito andamento das atividades. (BLOKDIJK; MENKEN, 2008) Outro aspecto bastante importante em um ambiente virtualizado é a portabilidade, pode-se utilizar sistemas de diversas plataformas em ambiente de teste virtualizado, sem a necessidade de plataformas físicas para execução de testes ou simulação de ambiente de produção. Com este modelo a economia de equipamentos, tempo de teste e segurança são fatores determinantes na utilização desta tecnologia em qualquer ambiente que exija prévio desenvolvimento e simulação antes da aplicação real do projeto, sendo isto fator determinante no sucesso da pesquisa em questão. (CARISSIMI, 2008) A virtualização como componente central da infraestrutura, é responsável por entregar ao sistema hóspede um conjunto de instruções relativas ao acesso de hardware, permitindo que estes funcionem da mesma forma como se estivessem sendo executados diretamente sobre o hardware físico do equipamento. A camada de virtualização é conhecida como Hypervisor ou monitor de máquina virtual. (VERAS, 2011) 34 Na figura 3.2 é ilustrada a virtualização com Hypervisor. VM 1 AP 1 VM 2 AP N SO 1 AP 1 VM N AP N SO 2 AP 1 AP N SO 3 HYPERVISOR SERVIDOR FÍSICO Figura 3.2 – Arquitetura da Virtualização Fonte: (VERAS, 2011) 3.1 MÁQUINA VIRTUAL Máquina Virtual é a denominação dada ao sistema operacional responsável por dar suporte e gerenciamentos aos sistemas operacionais nele instalados. (VERAS, 2011) “Uma máquina virtual é um container de software totalmente isolado e capaz de executar sistemas operacionais e aplicações próprias como se fosse um servidor físico”. (VERAS, 2011, p.88) Esta máquina virtual funciona como se fosse o servidor físico, não podendo ser notada estas diferenças pelo sistema operacional hospede acima desta camada. O comportamento de acesso ao hardware é transparente, isso faz com que o sistema operacional acesse o disco rígido, memória, CPU e placa de rede como se estivesse tendo controle total e único sobre estes componentes de hardware. (VERAS, 2011) 35 A figura 3.3 exibe a interação da maquina virtual RAM VIRTUAL DISCO VIRTUAL NIC VIRTUAL IDE VIRTUAL VM SCSI VIRTUAL CPU VIRTUAL CD-ROM VIRTUAL Figura 3.3 – Máquina Virtual Fonte: (VERAS, 2011) 3.2 HYPERVISORS Hypervisor é uma máquina virtual de sistema que permite a coexistência de diversos sistemas operacionais, serviços e usuários em uma mesma plataforma de hardware. Sua principal função é organizar o acesso dos sistemas operacionais ao hardware, de forma que uma não interfira no funcionamento da outra ou mesmo que percebam a existência de outros sistemas operacionais sobre a mesma plataforma de hardware. (VERAS, 2011) Esta camada de virtualização é responsável também por garantir a segurança e o isolamento entre os sistemas operacionais que estão instalados na estrutura. Esse isolamento não permite que qualquer execução de processo isolado no sistema operacional possa degradar o funcionamento do servidor físico, assim impactar no funcionamento dos outros sistemas hospedados neste hypervisor. (VERAS, 2011) 3.3 TÉCNICAS DE VIRTUALIZAÇÃO 36 A virtualização pode ser obtida de acordo com algumas técnicas: Virtualização Total, Paravirtualização e Virtualização assistida por hardware. (VERAS, 2011 3.3.1 Virtualização Total Nesta categoria de virtualização o hypervisor cria uma imagem do hardware e apresenta esta ao sistema operacional hospedado, dando a este a impressão de estar rodando diretamente sob o hardware. (VERAS, 2011) Não existe a necessidade de qualquer mudança de hardware ou no software mesmo porque o conjunto de drivers é genérico, isto se faz necessário devido à grande quantidade de dispositivos e modelos. (VERAS, 2011) Uma das vantagens desta modalidade é a portabilidade do sistema operacional instalado, uma vez que os drivers são genéricos. Desta forma o sistema operacional hospedado pode ser ligado a qualquer servidor sem a necessidade de adaptação ou instalação de novos drivers. (VERAS, 2011) A figura 3.4 ilustra o mecanismo de funcionamento da Virtualização total. Execução direta dos requests da Aplicação Ring 3 (Aplicações do Usuário) Ring 2 Ring 1 (SO convidado) Translação Binários dos requests do SO Ring 0 (VMM) SERVIDOR Figura 3.4 – Diagrama Virtualização Total Fonte: (VERAS, 2011) 37 Esta categoria de virtualização tem sua desvantagem ligada diretamente ao fato de os conjuntos de drivers serem genéricos. O hardware físico real pode ser subutilizado pelo fato de as instruções de utilização seguirem o padrão definido pelo hypervisor, assim não aproveita a capacidade máxima do hardware disponivel. (VERAS, 2011) Outro fator de desvantagem é o fato deste hypervisor funcionar como interpretador das instruções, principalmente as sensíveis ao funcionamento. Desta forma os comandos e instruções são interpretados e testados pelo hypervisor, o que acaba degradando a performance do sistema operacional hospedado. (VERAS, 2011) 3.3.2 Paravirtualização Esta categoria de virtualização surgiu como uma alternativa de solução dos problemas encontrados na virtualização total. (VERAS, 2011) Na paravirtualização, o sistema hóspede é modificado para chamar o hypervisor sempre que uma instrução sensível for executada. Desta forma o hóspede que tem seu kernel modificado, tem condições de executar instruções sem a necessidade de acompanhamento ou interpretação do hypervisor. (VERAS, 2011) Estas técnicas permitem que o sistema operacional hóspede tenha mais desempenho de execução, pois o acesso ao hardware não necessita de todas as interpretações das instruções, tal como acontece no modelo de virtualização total. (VERAS, 2011) O gerenciamento de drivers é feito de forma diferente, onde não mais é utilizado um conjunto de drivers genéricos. Na Paravirtualização o conjunto de drivers é nativo. Esta técnica permite que o acesso ao hardware por parte dos sistemas hóspedes, seja feito através de drivers específicos e compatíveis com as características do hardware, assim faz com que o sistema ganhe uma maior performance, pois aproveitará toda capacidade de hardware disponível. (VERAS, 2011) Conforme a figura 3.5 exemplifica, o sistema operacional é modificado para acesso direto ao hardware, fazendo a entrega e recebimentos dos comandos, fazendo que as instruções de acesso ao hardware sejam feitas diretamente no equipamento físico. 38 Execução direta dos requests da Aplicação Ring 3 (Aplicações do Usuário) Ring 2 Ring 1 Ring 0 (SO CONVIDADO PARAVIRTUALIZADO) Hypercalls para a camada de virtualização Substituem instruções do SO não virtualizadas CAMADA DE VIRTUALIZAÇÃO SERVIDOR Figura 3.5 – Diagrama Paravirtualização Fonte: (VERAS, 2011) A desvantagem desta categoria de virtualização se deve ao fato de exigir que o sistema operacional hospedado permita alteração em sua estrutura de kernel. Esta característica pode ser encontrada em sistemas operacionais baseados em Linux,o contrário desta condição acontece com o sistema operacional Windows, que não permite alteração em sua estrutura. (VERAS, 2011) 3.3.3 Virtualização Assistida por Hardware A virtualização assistida por hardware surgiu com a participação dos fabricantes de processadores na busca de melhorar o desempenho da virtualização. Os fabricantes passaram a utilizar extensões específicas para virtualização dentro de seus processadores da plataforma x86. (VERAS, 2011) As tecnologias Intel (Intel VT) e AMD (AMD-VT) modificaram a forma de como as instruções eram gerenciadas internamente e entregue ao sistema, desta forma houve um ganho significativo de performance, em estrutura que utiliza a virtualização total, praticamente equiparando a performance da paravirtualização. (VERAS, 2011) 39 O mecanismos de funcionamento da virtualização assistida por hardware é exibido na figura 3.6. Execução direta dos requests da Aplicação Ring 3 (Aplicações do Usuário) Ring 2 Ring 1 Ring 0 (SO CONVIDADO PARAVIRTUALIZADO) Requests do SO para o VMM sem translação binária ou PARAVIRTUALIZAÇÂO CAMADA DE VIRTUALIZAÇÃO SERVIDOR Figura 3.6 – Diagrama Virtualização Assistida Fonte: (VERAS, 2011) 3.4 SOFTWARES DE VIRTUALIZAÇÃO Existem diversas ferramentas no mercado para implementação de uma infraestrutura de virtualização,e fazendo uso de tecnologias variadas. (CARISSIMI, 2008) 3.4.1 VMware O VMware é na realidade um conjunto de soluções para virtualização e administração desta estrutura. Fazem parte deste conjunto o VMware ESX, VMware ESXi, Virtual SMP, VMFS, VMware Server, VMware Workstation, Fusion, VMware Player e o VCenter. (CARISSIMI, 2008) 40 Diretamente voltado para virtualização de plataforma de servidores, estão o VMware ESXi e o VMware ESX, tendo estes diferenças internas de projeto e como alguns procedimentos de gerenciamento são executados. (CARISSIMI, 2008) 3.4.2 Xen O Xen é uma arquitetura de virtualização baseado na doutrina de software livre, desenvolvido na universidade de Cambridge. Este projeto resultou em uma empresa chamada XenSource inc, que foi adquirida pela empresa Citrix no ano de 2007. (CARISSIMI, 2008) Os domínios são dois tipos de máquinas virtuais, diferenciados pelo nível de privilégio que cada um tem para acessar o hardware. Estes domínios são chamados de domínio 0 (privilegiado) e domínio U (não privilegiado). (CARISSIMI, 2008) Por não ser capaz de interagir diretamente com os sistemas hóspedes, o Xen necessita de um sistema inicial, o domínio 0, somente depois deste ser iniciado, as máquinas virtuais no domínio U podem se gerenciadas. (CARISSIMI, 2008) O domínio 0 pode executar ações de acesso e gerenciamento ao hardware físico, bem como acesso as demais máquinas virtuais que estão em domínio U. O domínio 0 pode ser um sistema operacional modificado, dotado de dois drivers especiais responsáveis por gerenciar as requisições de acesso a rede e ao disco, feitos por máquinas virtuais que se encontrar em domínio U. (CARISSIMI, 2008) A arquitetura de funcionamento do Xen é ilustrado na figura 3.7. Máquina Virtual 1 AP1 Máquina Virtual 2 APn AP1 APn Domínio 0 Gerenciamento Núcleo Linux (modificado) Núcleo Linux (modificado) OpenSolaris (modificado) Driver virtual Driver virtual Drivers físicos Hypervisor (Xen) Gerenciamento de CPU e memória Hardware Dispositivos de E/S Figura 3.7 – Arquitetura Xen Fonte: (VERAS, 2011) 41 A primeira versão do hypervisor Xen foi desenvolvida para atender os quesitos de paravirtualização, ou seja, primou-se pela performance do sistema. (CARISSIMI, 2008) Esta característica tornava seu uso restrito somente a sistemas operacionais baseados em Unix modificável, ficando de lado softwares como, por exemplo, o Microsoft Windows. (CARISSIMI, 2008) Com o intuito de compatibilizar a ferramenta com o conceito de virtualização total, a partir da versão 3, o Xen passou a dar suporte aos sistema operacionais não modificáveis, entretanto somente em plataforma dotada de processadores com tecnologia Intel-VT ou AMD-V. (CARISSIMI, 2008) 3.4.3 Hyper-V O Hyper-V é a aposta da Microsoft para atingir o mercado de virtualização mais amplo. Este hypervisor é a sequência de softwares da família Microsoft, voltados para o ambiente de virtualização. (CARISSIMI, 2008) Antes do Hyper-V, softwares como Virtual PC e Microsoft Virtual Server faziam a vez da Microsoft no nicho de mercado da virtualização. (CARISSIMI, 2008) Baseado em Microsoft Windows 2008 Server, o Hyper-V conta com um conjunto de ferramentas que visam facilitar e automatizar o processo de virtualização. (CARISSIMI, 2008) Exemplo destas ferramentas é Manager Physical-to-Virtual, responsável por auxiliar a conversão de servidores instalados diretamente sob o hardware em servidores virtuais, e também o Shadow Copy Services, que permite procedimentos eficientes de backup e de alta disponibilidade dos recursos. (CARISSIMI, 2008) O aspecto de segurança do Hyper-V recebeu atenção especial, podendo citar a utilização do “execute-disable-bit”, mecanismo este existente nos novos processadores e que diminui muito os ataques por vírus e outras ameaças. (CARISSIMI, 2008) Ainda dentro de ferramentas Microsoft outro aspecto de segurança é a integração deste Hypervisor ao Active Directory (AD), fazendo assim uso das políticas de segurança. (CARISSIMI, 2008) 42 4 IMPLEMENTAÇÃO O desenvolvimento do ambiente neste trabalho foi feito de uma forma mais aprofundada, sem abordar conceitos básicos de funcionamento e configuração de ambiente. No decorrer deste capítulo foram utilizadas ferramentas específicas, sendo descritas durante o desenvolvimento do trabalho. Os manuais dos softwares utilizados neste trabalho podem ser encontrados em seus sites oficiais e também nos manuais disponibilizados após a instalação destes: DRBD - http://www.drbd.org/docs/install/ Xen - http://wiki.xen.org/wiki/Category:Tutorial Ganeti - http://docs.ganeti.org/ganeti/current/html/install.html Toda a implementação foi feita em ambiente pré-virtualizado em Oracle Virtual Box, instalado no sistema operacional Windows 7. Neste ambiente foram criadas as máquinas virtuais necessárias para composição do cluster. Estas máquinas virtuais têm características idênticas diferenciando-se unicamente por configurações de comunicação em rede e identificação. A figura 4.1 ilustra a arquitetura proposta e seus relacionamentos. VM1 VM2 VM3 Hypervisor Xen GANETI DRBD NODE1 Figura 4.1 – Diagrama da estrutura do cluster Fonte: Elaborado pelo autor, 2012. NODE2 43 A primeira máquina virtual foi nomeada node1, desempenha função de membro do cluster e nó primário, sendo esta responsável em um primeiro momento como ponto central de gerenciamento do cluster. A segunda máquina virtual tem o nome de node2, sendo esta membro do cluster com característica de membro secundário, pode em determinado momento ou necessidade assumir a função de nó primário, executando assim as funções de gerenciamento do ambiente. A partir deste ponto cada nó é tratado como uma unidade autônoma, sem a necessidade de mencionar que esta se encontra em um ambiente virtualizado. Para implementação do cluster foram utilizados equipamentos virtualizados e idênticos com as seguintes características: 1 processador 1024 mb de memória 1 disco rígido 10 GB para sistema operacional 1 disco rígido 30 GB para o volume de dados compartilhado pelo DRBD 1 placa de rede padrão 100/1000 O sistema operacional escolhido para a implementação do projeto foi o Linux Debian Squeeze 64 bits, sua instalação foi feita sem qualquer pacote adicional ou interface gráfica, isso disponibiliza um sistema operacional mais leve e enxuto. Pacotes adicionais necessários para o funcionamento do projeto serão adicionados com o andamento da implementação, através dos repositórios oficiais da distribuição. A escolha do sistema operacional é unicamente pessoal, podendo ser utilizadas outras distribuições, resguardando apenas características operacionais e comandos de cada uma. Os sistemas operacionais das máquinas virtuais que serão instaladas no cluster também farão uso do mesmo sistema operacional. Os principais softwares utilizados foram: DRBD 8 – Conforme já mencionado, este software tem a função de compartilhar o volume de dados selecionados em cada membro do cluster. Através deste é feita a sincronização dos volumes lógicos entre os dispositivos, isso faz com que todos os nós tenham acesso às mesmas informações. 44 Este também garante a segurança e integridade do cluster, uma vez que os dados se encontram replicados nas unidades físicas de cada membro do cluster. Xen 4.0 amd64 – hypervisor de código aberto já mencionado anteriormente. Cluster manager Ganeti – É uma ferramenta desenvolvida pela empresa Google para gerenciamento de cluster, amplamente utilizada em sua estrutura de clusters. Ganeti-instance-debootstrap 0.9 – responsável por gerar o sistema operacional que fica hospedado no cluster, disponibiliza uma imagem básica para download e instalação do Debian. 4.1 INSTALAÇÃO E CONFIGURAÇÕES INICIAIS Como ponto inicial, todos os nós membros do cluster são considerados inicializados e com comunicação entre si e para a internet, com isso, é preciso fazer a instalação de pacotes que são necessários para o funcionamento da estrutura. Não foram descritas as funcionalidades, pois não faz parte do escopo do projeto, alguns softwares são pré-requisitos para o funcionamento de outros. A instalação é feita através do comando #aptitude install seguido do nome do software desejado. Os pacotes necessários são: - xen-linux-system - drbd8-utils - lvm2 - openssh - bridge utilities - iproute2 - arping - ndisc6 - python, versão 2.4 superior, exceto 3.0 - python openssl bindings - simplejson python module - pyparsing python module - pyinotify python module - pycurl python module - ctypes python module 45 - socat - paramiko 4.1.1 Ganeti Com a conclusão da instalação dos pacotes, é necessário efetuar a instalação do gerenciador de cluster Ganeti. Esta instalação é feita através do download direto do software e sua respectiva instalação. Alguns diretórios são necessários para acomodação de funções, os comandos a seguir descrevem estas etapas: # wget http://ganeti.googlecode.com/files/ganeti-2.4.2.tar.gz # tar xvzf ganeti-2.4.2.tar.gz # cd ganeti-2.4.2 # ./configure --localstatedir=/var --sysconfdir=/etc # make # make install # mkdir /srv/ganeti # mkdir /srv/ganeti/os # mkdir /srv/ganeti/export Deste ponto em diante todos os softwares necessários estão instalados, agora pode-se iniciar o processo de configuração e inicialização do cluster e suas instâncias. 4.1.2 Xen Após a instalação do Xen na etapa inicial, algumas configurações e procedimentos são necessários para seu perfeito funcionamento da infraestrutura proposta. Uma função importante a ser configurada é migração em tempo real das máquinas virtuais entre os nós do cluster. Esta função permite a movimentação das instâncias entre os nós do cluster para melhor adequação da estrutura, cópia destas instâncias e recuperação de falhas caso algum dos nós do cluster apresente problema. 46 Para isto é necessário modificar as configurações do arquivo "/etc/xen/xen-config.sxp", fazendo a alteração ou inclusão das seguintes entradas: (xend-relocation-server yes) (xend-relocation-port 8002) (xend-relocation-address '') (xend-relocation-hosts-allow '^10\\.0\\.0\\.[10-13]+$') (vncpasswd '') (vnc-listen '0.0.0.0') A linha (xend-relocation-hosts-allow…) delimita o intervalo de IP´s dos nós que participam do cluster. Esta configuração deve estar de acordo com o escopo da rede. Outro ponto importante nesta etapa de configuração é a definição das configurações de hardware, sendo estes parâmetros assumidos pelo hypervisor quando do início da estrutura. Deve se observar o limite da capacidade física dos equipamentos que serão utilizados na composição do cluster. Para a configuração do ambiente de teste, foi delimitado o uso de 1 processador e 1024 MB de memória, sendo estes parâmetros inseridos no arquivo de configuração "/etc/default/grub" com a inserção das seguintes linhas: GRUB_CMDLINE_XEN=dom0_mem=1024M maxcpus=1 Para a validação da alteraçãofeitas é necessário executar o seguinte comando: # update-grub2 Outro parâmetro necessário é a definição do kernel padrão para o dom0 e para domU. # ln -s /boot/vmlinuz-2.6.32-5-xen-amd64 /boot/vmlinuz2.6-xenU 47 # ln -s /boot/initrd.img-2.6.32-5-xen-amd64 /boot/initrd2.6-xenU Após a reinicialização dos equipamentos, as novas opções de kernel iniciadas são Xen 4.0. 4.1.3 Configuração DRBD O DRBD trabalha em conjunto com o gerenciador de volumes LVM, faz com que os volumes localizados em diferentes equipamentos trabalhem em RAID-1, assim espelha as informações entre os volumes. Na descrição inicial do ambiente onde foi delimitada a configuração de hardware, em cada nó do cluster foi reservado uma unidade de disco de 30GB, para utilização como volume compartilhado no DRBD. Esta unidade não pode ter qualquer volume criado, fica a cargo do LVM criar este volume para então o DRBD assumir o sincronismo das unidades. Após a criação do volume este é entregue ao Ganeti, que é responsável pelo gerenciamento do cluster e seus respectivos volumes. O Ganeti por padrão tem um nome comum para buscar o volume do grupo, sendo este necessariamente chamado de xenvg. A criação deste volume é feito através do comando a seguir: # pvcreate /dev/sda # vgcreate xenvg /dev/sda A partir deste ponto o volume criado por LVM e sincronizado pelo DRBD já está pronto para gerenciamento pelo Ganeti. 4.1.4 Topologia de Rede É preciso que todos os membros do cluster tenham em seus arquivos de reconhecimento de nomes “/etc/hosts”, as configurações que indiquem os nomes e IP´s de todos os nós envolvidos na estrutura, bem como cada sistema operacional hospedado na camada de virtualização. 48 Ainda existe a necessidade de uma entrada como IP e nome que foi dado ao cluster, sendo este IP responsável pela interface de gerenciamento do cluster. As entradas para o arquivos de nomes são: 127.0.0.1 localhost # node1 que participa fisicamente do cluster: 10.0.0.11 node1.google.com.br node1 # node2 que participa fisicamente do cluster: 10.0.0.12 node2.google.com.br node2 # vm1, vm2 e vm3 que são máquinas virtuais hospedadas: 10.0.0.20 vm1.google.com.br vm1 10.0.0.21 vm2.google.com.br vm1 10.0.0.22 vm3.google.com.br vm3 # endereço de acesso que gerencia o cluster: 10.0.0.100 cluster01.google.com.br cluster01 A utilização do domínio google.com.br é apenas uma ilustração do ambiente. A interface de rede física foi modificada para trabalhar em modo bridge, onde além de responder pelo próprio nó físico, também irá responder pelos IPs do cluster e das máquinas virtuais. A modificação foi feita no arquivo /etc/network/. Após a modificação, o conteúdo do arquivo referente à configuração de rede no primeiro nó ficou da seguinte forma: auto xen-br0 iface xen-br0 inet static address 10.0.0.12 netmask 255.255.255.0 network 10.0.0.0 broadcast 10.0.0.255 gateway 10.0.0.1 bridge_ports eth0 bridge_stp off bridge_fd 0 As configurações do segundo nó são semelhantes, resguardando as devidas configurações para configuração da rede. Após esta etapa os nós estão habilitados para comunicação, desta forma, torna-se apto para a configuração do DRBD 49 4.2 INICIALIZAÇÃO DO AMBIENTE A inicialização do cluster é o primeiro passo para começar a operar o ambiente, neste ponto é necessário informar quais equipamentos farão parte do cluster e qual papel é desempenhado. A definição de nó primário e secundário é necessária para informar ao cluster de onde partem os comandos de gerenciamento do ambiente. Na estrutura proposta o nó primário é denominado node1, enquanto o node2 é o secundário. O gerenciador de cluster Ganeti possui um conjunto de comandos específicos para gerenciamento dos nós do cluster e também das máquinas virtuais que nele estejam em execução. A partir deste ponto as máquinas virtuais serão chamadas de instâncias para melhor compreensão. O Ganeti possui dois modos de operação, sendo o primeiro modo o xen-pvm que dá suporte a paravirtualização do ambiente e o segundo modo o xen-hvm, sendo este responsável por virtualização assistida por hardware. Com o modo de suporte de paravirtualização, as instâncias devem ser baseadas em sistemas operacionais modificáveis, ou seja, a camada de virtualização pode modificar o sistema operacional, para melhor adequar e gerenciar o funcionamento. Para ambiente onde o sistema operacional não é modificável, é necessário habilitar o modo de virtualização assistida por hardware, onde os conjuntos de instruções contidos no processador darão auxilio na execução desta instância. Nesta situação o hardware deve conter a tecnologia de suporte à virtualização em seu hardware físico. Durante a inicialização do cluster já é definida a característica de suporte a virtualização, bem como quais nós farão parte do cluster. Posteriormente é possível adicionar novos nós ao ambiente e também fazer a mudança de suporte da virtualização. O comando a seguir inicia o cluster com as características desejadas e com o nome cluster1 para o ambiente. # gnt-cluster init -H xen-pvm:kernel_path=/boot/vmlinuz2.6-xenU,initrd_path=/boot/initrd-2.6xenU,blockdev_prefix=xvd,root_path=/dev/xvda1 cluster01 50 Figura 4.2 – Inicialização do cluster Fonte: Elaborado pelo autor, 2012. Após a inicialização do cluster já é possível interagir com o ambiente criado. Com o comando #gnt-cluster verify é possível verificar o estado da estrutura do cluster. Neste ponto o cluster já esta inicializado, entretanto, com um único nó. Este nó assume a condição de nó primário e a partir dele é feito o gerenciamento dos nós e instancias participamentes da infraestrutura. A próxima etapa foi adicionar o segundo nó ao cluster, nó este identificado como node2. O comando a seguir cria o nó secundário e passa como parâmetro a opção de assumir a função de primário caso seja necessário, muitas vezes isto é necessário casa ocorra alguma falaha no nó principal. Sem esta possibilidade o cluster ficaria sem o nó principal de gerenciamento # gnt-node add --master-capable=yes node2 Deste ponto em diante o cluster contém dois nós e seus volumes compartilhados pelo DRBD já estão sincronizados. Todas as informações gravadas por qualquer um dos nós serão automaticamente gravadas nas unidades compartilhadas entre os equipamentos, permitindo a sempre disponibilização dos dados gravados. A figura 4.3 exibe a situação de funcionamento do cluster e seus respectivos nós. 51 Figura 4.3 – Verificação do status do cluster Fonte: Elaborado pelo autor, 2012. O próximo passo é a criação de instâncias no cluster e a sua manipulação entre os nós, isto é feito pelo comando a seguir: # gnt-instance add -t drbd --disk 0:size=5g -B memory=128 -o debootstrap+default -n node1:node2 vm2 gnt-instance add –t DRBD indica que a instância foi criada no volume DRBD. --disk 0:size=5g indica que o tamanho do disco é de 5Gb. -o debootstrap+default indica origem dos arquivos de instalação do sistema operacional. -n node1:node2 vm1 define os nós onde a instância pode ser alocada. 4.3 DEMONSTRAÇÃO DO AMBIENTE 4.3.1 Criação de Instâncias Para simulação e teste do ambiente, foram feitos testes de migração de instância entre os dois nós do cluster de acordo com as etapas descritas e exibidas a seguir. Como primeiro passo foram criadas três instâncias Linux no cluster, com configurações conforme quadro 4.1. Quadro 4.1 – Configuração das instâncias 52 Nome vm1 vm2 vm3 IP 10.0.0.20 10.0.0.21 10.0.0.22 Memória 256 Mb 128 Mb 64 Mb HD 10GB 4GB 2GB Fonte: Elaborado pelo autor, 2012. Todas as instâncias foram criadas com o nó primário node1 e com failover em node2. Durante o processo de criação da instância a tela de progresso é exibida pela figura 4.4. Figura 4.4 – Progresso de criação de instância Fonte: Elaborado pelo autor, 2012. O comando #watch cat /proc/drbd, ilustrado pela figura 4.5, exibe informações relativas à sincronização do volume de dados DRBD entre os nós do cluster. Figura 4.5 – Status DRBD Fonte: Elaborado pelo autor, 2012. Na figura 4.6 pode ser verificado o status, após criação das instâncias. 53 Figura 4.6 – Listagem inicial das instâncias Fonte: Elaborado pelo autor, 2012. Na figura 4.7 pode ser visto que a instância vm3 esta com status ADMIN_down, isto é devido a mesma não ter sido iniciada após a sua criação. A inicialização é feita através do comando mostrado pela figura 4.6. Figura 4.7 – Incialização de instância Fonte: Elaborado pelo autor, 2012. Deste ponto em diante as instâncias já estão operacionais e pode comportar serviços, sistemas e demais funções necessárias. O acesso ao console de uma instância é feito através do comando mostrado pela figura 4.8, neste caso foi feito acesso na instância vm1 e verificado seu sistema de arquivos. Figura 4.8 – Conexão ao console da instância. Fonte: Elaborado pelo autor, 2012. Para sair do console de determinada instância, é necessário pressionar as teclas CTRL + ] simultaneamente. 54 4.3.2 Movimentação de Instâncias entre nós do Cluster Após a criação das instâncias, as mesmas se encontram no node1 do cluster e o segundo nó do cluster fica ocioso. A figura 4.9 ilustra esta situação. Figura 4.9 – Diagrama cluster Fonte: Elaborado pelo autor, 2012. Para um cluster com características de alto desempenho e balanceamento de carga, as instâncias precisam ser divididas entre os nós. Para simular este ambiente, a instância vm2 é movimentada para o segundo nó. O comando gnt-instance migrate é utilizado para migrar a instância vm2, posicionando-a no nó secundário conforme pode ser visualizado pela figura 4.10. Figura 4.10 – Migração de instância Fonte: Elaborado pelo autor, 2012. A figura 4.11 exibe a listagem das instâncias e é possível verificar a modificação da instância vm2 do nó primário para o nó secundário. 55 Figura 4.11 – Listagem de instâncias após migração Fonte: Elaborado pelo autor, 2012. Este processo é rápido e a instância teve poucos segundos de parada durante a transferência. Isto se deve ao fato de que o tempo necessário para transferência é referente às mudanças de mapeamento e endereçamento de memória, a base de dados sempre esta disponível através do DRBD. Com esta migração caso node1 apresente problemas, a instância vm2 permanece em funcionamento. Também está garantido o maior aproveitamento dos recursos de hardware, pois ambos nós desempenham função de processamento. A figura 4.12 ilustra a nova situação do cluster: Figura 4.12 – Diagrama cluster pós migração da VM2 Fonte: Elaborado pelo autor, 2012. 4.3.3 Simulação de Desligamento Programado do Nó Máster As situações aqui exibidas ilustram os procedimentos tomados caso algum dos nós do cluster tenha que ser desligado de forma planejada. Este cenário tem como ponto de partida a necessidade de manutenção do node1, mesmo com duas instâncias em operação. Para este processo pode ser aplicada a situação anterior de migração de instâncias, mas existe uma condição onde é possível fazer failover completo do nó. 56 Com o comando gnt-instace failover, todas as instâncias do node1 são migradas para o node2 ao mesmo tempo. Este processo é ilustrado pela figura 4.13. Figura 4.13 – Migração de todas instâncias de um nó Fonte: Elaborado pelo autor, 2012. Após o processo é possível verificar que todas as instâncias estão alocadas no node2, este procedimento é similar ao processo de migração, onde as instâncias permanecem indisponíveis por pouco tempo, tendo como tempo médio 4 minutos para a efetivação da migração de todas instâncias. Antes que o node1 seja desligado é necessário informar ao cluster que node2 é o novo nó master. Isto se faz necessário, pois todos os comandos de gerenciamento do cluster necessariamente tem que ser feito a partir do nó máster. Para este procedimento é necessário acessar o console do node2 e executar os seguintes comandos: # gnt-cluster masterfailover, # gnt-cluster redist-info O segundo comando informa ao node1 que existe um novo master no cluster, automaticamente node1 é definido como secundário, não sendo possível executar a administração do cluster a partir deste. Com estes procedimentos executados é possível desligar node1 e a nova estrutura das instâncias no cluster é ilustrada pela figura 4.14: 57 Figura 4.14 - Diagrama do cluster pós migração de todas intancias Fonte: Elaborado pelo autor, 2012. 4.3.4 Simulação de Desligamento Não Programado do Nó Máster Caso o nó master seja desligado de forma inesperada, a capacidade de gerenciamento do cluster é perdida até que este nó seja restabelecido ou até que seja definido que o nó secundário assuma esta posição de gerenciamento. Outra questão a ser tratada nesta situação é o fato de que as instâncias que se encontravam no nó master não foram migradas da forma convencional. Desta forma será necessária a execução de failover forçado. Para esta simulação é assumida a condição que node2 é o nó primário, nele estão contidas as instâncias vm1 e vm3. Já o node1 é secundário e contém somente a instância vm2, conforme ilustrado pela figura 4.15. Figura 4.15 – Diagrama do cluster – simulação de falha Fonte: Elaborado pelo autor, 2012. Após o desligamento do node2 uma mensagem de erro é apresentada no console do node1 esta mensagem informa que o nó primário está indisponível, neste ponto as instâncias que estavam alocadas em node2 também estão indisponíveis. A figura 4.16 ilustra a nova condição do cluster após o desligamento do node2 58 Figura 4.16 - Diagrama do cluster pós falha no node2 Fonte: Elaborado pelo autor, 2012. Diante desta situação é necessário tornar node1 o nó de gerenciamento do cluster para permitir a execução de comandos de gerenciamento e posterior recuperação das instâncias vm1 e vm3. Para o início da recuperação é necessário acessar o console do node1 e executar o comando: # gnt-cluster masterfailover --no-voting. O parâmetro --no-voting não verifica se existe outro nó primário, e força node1 assumir a condição de gerenciamento. Após este procedimento node1 torna-se nó primário, agora com as funções de gerenciamento do cluster e das instâncias. Ainda têm-se as instância vm1 e vm3 paralisadas, pois estavam atribuídas ao nó que não esta mais operacional. A figura 4.17 exibe o atual status das instâncias que estavam alocadas em node2. Figura 4.17 – Listagem de instâncias após falha de nó do cluster Fonte: Elaborado pelo autor, 2012. Como o volume de dados do DRBD é replicado entre todos os nós do cluster, o node1 tem acesso às informações e dados das instâncias paralisadas, com isso é possível fazê-lo assumir o controle destas instâncias. 59 O comando descrito a seguir força node1 inicializar as instâncias que estavam em node2. #gnt-node failover --ignore-consistency node2 Após este procedimento todas as instâncias criadas no cluster estão alocadas no node1 e inicializadas, a figura 4.18 mostra o status das instâncias. Figura 4.18 – Listagem de instâncias pós failover Fonte: Elaborado pelo autor, 2012. Ao se restabelecer, o node2 permanece no cluster com status de primário, pois era sua condição no cluster quando foi desligado. A figura 4.19, ilustra o atual status do cluster: Figura 4.19 - Diagrama do cluster pós failover Fonte: Elaborado pelo autor, 2012. Para solucionar esta questão é necessário acessar o console do node1 e executar o comando descrito a seguir que define node2 como secundário. # gnt-cluster masterfailover Também é necessário informar a todos nós do cluster qual a atual situação de gerenciamento, isto é feito através do comando gnt-cluster redist-conf 60 Com isso, o cluster foi restabelecido e seus nós já podem gerenciar as instâncias. Para exibir quem é o nó primário do cluster basta executar o comando descrito a seguir. # gnt-cluster getmaster Este capítulo apresentou de uma forma prática e bem objetiva a configuração de todos os softwares necessários para funcionamento do cluster e simulações de alguns de seus recursos, é importante salientar que os capítulos anteriores serviram de base para a implementação do cluster. 61 CONCLUSÃO A proposta de utilização conjunta de virtualização com cluster permite flexibilidade e garantia de entrega de serviços em um ambiente de TI e tem como ponto chave a segurança das informações e a disponibilidade dos recursos. O custo e eficiência deste ambiente são fatores determinantes para sua aplicação. A utilização de softwares Open Source e a característica de hardwares flexíveis determinam o baixo custo, o que sempre é levado em consideração em qualquer projeto de infraestrutura de TI. O DRBD é uma solução para armazenamento de dados, sua utilização impacta diretamente no custo da infraestrutura e sua função é semelhante ao funcionamento de uma unidade de Storage, que em sua grande maioria tem elevados custos de aquisição e manutenção. A manipulação da estrutura é muito dinâmica e versátil, o que é muito importante em um ambiente de alta disponibilidade. Para exemplificar os resultados obtidos, vale citar os tempos de manipulação e parada das instâncias no cluster. Todo o processo de migração de uma determinada instância entre os nós do cluster teve tempo médio de 36 segundos na execução total do processo, com perca média de 3 pacotes do comando ping que fazia o monitoramento da disponibilidade. A quantidade de pacotes perdidos durante o monitoramento por ping mostra que a instância ficou pouco tempo indisponível. Estes resultados são expressivos porque denotam a alta disponibilidade dos recursos. Outra característica importante obtida foi o maior aproveitamento da capacidade de processamento da estrutura. As instâncias podem ser alocadas de acordo com a capacidade de processamento de cada nó do cluster, assim maximiza o aproveitamento dos recursos de hardware disponíveis. Ao alcançar os objetivos do projeto, foi possível avaliar o quanto esta solução atende as necessidades do ambiente que busca garantia e eficiência dos recursos de TI. Os resultados ilustram o que qualquer ambiente que depende de tecnologia de informação pode esperar da infraestrutura e entrega de serviços e recursos. A operação das funções de gerenciamento das instâncias se torna fácil e intuitivo com a utilização do Ganeti. 62 No ambiente proposto algumas características e funções não foram implementadas, tais como failover automáticos das instâncias, tolerância a falhas e comunicação com o ambiente externo ao cluster. As limitações se devem exclusivamente ao ambiente onde foi realizada a implementação. O cenário ideal é a utilização de equipamentos físicos reais e não máquinas virtuais criadas no sistema operacional Windows 7 em hardware limitado de um notebook, sendo este fator determinante nas limitações da arquitetura. Para comunicação com o meio externo ao cluster é necessário modificar a topologia de rede e utilizar um roteador para reconhecimento e acesso as rotas. De posse de uma estrutura de hardware mais robusta, funções como failover automático das instâncias e tolerância a falhas podem ser implementadas. O failover automático faz com que as instâncias alocadas em um nó, sejam migradas automaticamente para outro nó caso ocorra uma falha inesperada, a documentação oficial do Ganeti indica a configuração do Out of Band (OOB) para satisfazer esta necessidade, sendo isto passível de aplicação em projetos futuros. Outra função de melhoria seria a instalação do módulo Remus para garantir tolerância a falhas, onde o objetivo é zerar o tempo de parada de instância caso ocorra alguma falha em qualquer membro do cluster. Segundo a documentação oficial, esta função acaba por exigir elevada capacidade de comunicação dos membros do cluster, uma vez que as instruções de memoria e processador são sincronizadas em tempo real entre os nós. A arquitetura proposta foi implementada sobre a ferramenta de virtualização Virtual Box, o que causou bastante dificuldade e limitação da capacidade de processamento e comunicação da estrutura com o meio externo ao ambiente. Como a aplicação conjunta de cluster e virtualização é um tema recente existe pouco material de referência disponível, o que se torna um fator de dificuldade porque a utilização somente de referências técnicas dos fornecedores eleva o grau de dificuldade no entendimento e aplicação dos softwares relacionados. Para futuros projetos, além da implementação das funções dos softwares Remus e OOB conforme já citado, seria de grande importância elaborar um comparativo entre o funcionamento da virtualização sobre cluster frente a virtualização diretamente sobre um servidor físico. Este comparativo levaria em consideração a performance obtida em determinada função ou serviço alocados na infraestrutura em questão. Este 63 resultado pode ser determinante na adoção da arquitetura ou mesmo qualificar quais aplicações podem ser utilizadas em cada um dos cenários. 64 REFERÊNCIAS ANTERIO. High Performance Computing Cluster (HPC Cluster). 2012. Disponível em: <http://www.anterio.com/index.php?id=170> Acesso em: 20 Jun. 2012. ANTONOPOULOS, Andreas M.. Virtualization and clustering: combining two winning strategies. 2005. Disponível em: <http://www.networkworld.com/newsletters/2005/0404datacenter1.html> Acesso em: 20 Nov. 2012. BLOKDIJK, Gerard; MENKEN, Ivanka. Virtualization: The Complete Cornerstone Guide to Virtualization Best Practices: Concepts, Terms, and Techniques for Successfully Planning, Implementing and Managing Enterprise It Virtualization. 2. ed.: Emereo Pty Limited, 2008. CARISSIMI; A. Virtualização: da teoria a soluções. Minicurso do 26º Simpósio Brasileiro de Redes de Computadores e Sistemas Distribuídos, 2008 Rio de Janeiro. Disponível em: <http://www.gta.ufrj.br/ensino/CPE758/artigos-basicos/cap4-v2.pdf> Acesso em: 12 nov. 2011. CLOUD. Esquema do Alojamento "Cloud". 2010. Disponível http://www.3abytes.com/Alojamento/Cloud> Acesso em: 07 Jun. 2011. em: < COULOURIS, George, DOLLIMORE, Jean, KINDBERG, Tim. Sistemas Distribuídos – Conceitos de Projeto. 4. ed. Porto Alegre: (Bookman), 2007. HAMC. Introdução à Alta Disponibilidade: Heartbeat e DRBD. 2008. Disponível em: < http://ha-mc.org/node/15> Acesso em: 20 Jun. 2011. HELLMAN, B. et al. DRBD Users’s Guide. 2012. Disponível <http://www.drbd.org/docs/introduction> Acesso em: 20 nov. 2012. em: MORIMOTO, Carlos E. Clustering. Disponível em:<http://www.hardware.com.br/termos/clustering> Acesso em: 09 Jun. 2011. PITANGA, Marcos. Computação em Cluster. 2003. Disponível em: http://www.clubedohardware.com.br/artigos/Computacao-em-cluster/153/1> Acesso em: 05 Jun. 2011. PITANGA, Marcos. Computação em Grade - Uma Visão Introdutória. 2004. Disponível em: <http://www.clubedohardware.com.br/artigos/124/2> Acesso em: 08 Jun. 2011. PITANGA, Marcos. Construindo supercomputadores com Linux. 3. ed. Rio de Janeiro: Brasport, 2008. SALLES, D. et al. Cluster HPC – High Performance Computing. Artigo da disciplina de Sistemas Distribuídos. Faculdade de Tecnologia de Guaratinguetá, 2009. Disponível em:<http://www4.fct.unesp.br/ronaldo/uploads> 65 SALUSTINO, Alex. Computação em nuvem. 2012. Disponível em: <http://divulgabiblio.blogspot.com.br/2012/11/computacao-em-nuvem.html> Acesso em: 01 Dez. 2012. SLTI , Secretaria de Logística e Tecnologia da Informação. Guia de Estruturação e Administração do Ambiente de Cluster e Grid. Brasília, 2006. TANENBAUM, Andrew S., STEEN, Maarten Van. Sistemas Distribuídos – Conceitos e Paradigmas. 2. ed. São Paulo: Person, 2007. VERAS, Manoel. Virtualização – Componente Central do Datacenter. 1. ed. Rio de Janeiro: Brasport, 2011.