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 ANTONIO MARCOS HONORIO MAIKON HENRIQUE DA SILVA SOUZA ESTUDO E ANÁLISE DO BALANCEAMENTO DE CARGA DE SERVIDORES COM LINUX VIRTUAL SERVER (LVS) LINS/SP 1° SEMESTRE /2014 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 ANTONIO MARCOS HONORIO MAIKON HENRIQUE DA SILVA SOUZA ESTUDO E ANÁLISE DO BALANCEAMENTO DE CARGA DE SERVIDORES COM LINUX VIRTUAL SERVER (LVS) Trabalho de Conclusão de Curso apresentado à Faculdade de Tecnologia de Lins para obtenção do Titulo de Tecnólogo em Redes de Computadores. Orientador: Prof. Me Julio Fernando Lieira. LINS/SP 1° SEMESTRE /2014 ANTONIO MARCOS HONORIO MAIKON HENRIQUE DA SILVA SOUZA ESTUDO E ANÁLISE DO BALANCEAMENTO DE CARGA DE SERVIDORES COM LINUX VIRTUAL SERVER (LVS) Trabalho de Conclusão de Curso apresentado à Faculdade de Tecnologia de Lins, como parte dos requisitos necessários para a obtenção do título de Tecnólogo em Redes de Computadores sob a orientação do Prof. Me Julio Fernando Lieira. Data de aprovação _______/________/________ ____________________________________________________ Orientador Julio Fernando Lieira ____________________________________________________ Examinador ____________________________________________________ Examinador Dedicamos este trabalho aos nossos Professores e familiares que estiveram presente conosco durante toda esta jornada. Antonio Marcos Honório Maikon Henrique da Silva Souza AGRADECIMENTOS Primeiramente agradeço a Deus por ter me dado saúde e força nesta caminhada para poder cumprir todas as etapas as quais me propus realizar. Agradeço a toda a minha família que sempre me apoiou e me ajudou a não desanimar nestes anos de estudos, principalmente aos meus pais Antonio e Gilda, minha sogra Antonia e meus irmãos Carlos, Gisele e Keli; agradeço a todos os meus primos e também a meu sobrinho, Diego, pela parceria nas aulas. Agradeço a Fatec por ter me dado esta chance de estudo que espero retribuir um dia. A todos os professores que com paciência e competência nos ajudam a nos tornar profissionais mais preparados para a vida. Ao professor Júlio Fernando Lieira, nosso orientador, que com muita dedicação nos ajudou em todos os momentos dessa caminhada e a professora Luciane Noronha que sempre me deu força nesta jornada. Um agradecimento especial a todos meus amigos de sala durante este curso, principalmente ao Maikon parceiro neste momento final e de muitas dificuldades. E como não poderia deixar de ser, agradeço a minha esposa Adriana, companheira e parceira de todas as horas, que não mediu esforços para me ajudar e me animar nos momentos de desânimo. E, claro, aos meus queridos filhos Karol e Marco Antonio, pois é por eles que concluo este curso. Antonio Marcos Honório AGRADECIMENTOS Nessa etapa muito importante da minha vida e que irei carregar comigo todo conhecimento adquirido nesse precioso período de tempo, venho agradecer a todos que contribuíram nessa jornada. Primeiramente a Deus que traçou o meu caminho até aqui, com alegrias e saúde. A minha mãe Vilma e ao meu pai Otacilio que desde sempre me apoiaram e ofereceram o alicerce necessário, não só para concluir essa etapa em minha vida, mas como todas que passei até o presente momento. A minha tia Lourdes que tenho como uma segunda mãe. A minha irmã Pâmela e a minha namorada Ana pelo apoio e dedicação nos momentos em que precisei. A toda a minha família que se manteve presente comigo durante essa caminhada. Ao meu parceiro e amigo nesse trabalho Antonio Marcos Honório, por partilhar todo o seu conhecimento e dedicação em prol desse trabalho. A cada um dos professores, com os qual tive o privilégio de conviver durante esse período. Um agradecimento especial ao professor Julio Fernando Lieira, que graças ao seu conhecimento, dedicação e disponibilidade nos ajudou a concluir esse trabalho nos orientando e enriquecendo nossos conhecimentos. Agradeço a Fatec por proporcionar todos os recursos necessários para os estudos, e por ser palco da fase mais importante da minha vida, por isso, serei eternamente grato a essa instituição. Também agradeço aos amigos que posso chamar de irmãos que tive a sorte de fazer durante essa jornada: João Luiz, Cezar Henrique, Luciano Kiyosaque, Bruno Carvalho, Antonio Marcos, Bruno Vinicius, Mauricio Gimenez, Fernando e Gustavo Cremonesi, Mari Nogueira e Alexandre Kenji. Maikon Henrique da Silva Souza RESUMO Este trabalho tem como objetivo apresentar uma solução que assegure um serviço web confiável e resguardado contra falhas, sejam elas de software ou de hardware. A solução adotada foi a criação de um cluster com balanceamento de carga utilizando a tecnologia do LVS, que é um projeto de código aberto cujas características de redundância, desempenho e escalabilidade se enquadram perfeitamente às necessidades deste trabalho. Para melhor compreensão do mesmo foram abordados conceitos de rede de computadores com suas topologias e arquitetura; assim como um levantamento bibliográfico sobre alta disponibilidade, clusters, além das tecnologias disponíveis para implementação do LVS. Todo processo de configuração e implantação da estrutura do LVS via Direct Routing foram descritos, bem como a coleta e análise dos dados do comportamento dos servidores WEB perante os testes de vários algoritmos de escalonamento definidos na estrutura do LVS. A tecnologia do LVS, além do fato de não incorrer em custo, se mostrou valiosa por oferecer um ambiente confiável não somente para um serviço web, mas como assegurar alta disponibilidade em um serviço de e-mail, banco de dados, proxy entre outros; assim torna-se uma tecnologia imprescindível para qualquer outro ambiente, seja ele acadêmico ou empresarial, e que tenha necessidade de garantir a total disponibilização de seus serviços. Palavras-chave: Cluster, balanceamento de carga, alta disponibilidade, Direct Routing. ABSTRACT This work had the purpose of presenting a solution that ensure a reliable web service and sheltered against failures, whether of software or hardware. The adopted solution was to create a cluster with load balancing using technology of LVS, which is an open source project whose features redundancy, performance and stability fit perfectly to the needs of this work. For better understanding of the work were discussed concepts of computer network with their topologies and architecture; as well as a bibliographical survey about high availability, clusters, beyond the technologies available for deployment of LVS. The whole process of configuration and deployment of the LVS structure by way of Direct Routing were described, as well as the collection and analysis of data on the behavior of WEB servers, before the testing of various scheduling algorithms defined in the LVS structure. The LVS technology, beyond the fact of not incurring cost, proved valuable for providing a trusted environment not only for a web service, how to ensure high availability in an email service, database, proxy among other; thus becoming an essential technology for any environment, be it academic or business that has the need of ensure the full provision of their services. Keywords: Cluster, Load Balancing, High Availability, Direct Routing. LISTA DE ILUSTRAÇÕES Figura 1. 1 - Modelo de computação centralizada ..................................................... 22 Figura 1. 2 - Modelo de computação distribuída ....................................................... 23 Figura 1. 3 - Exemplo de uma rede ponto-a-ponto .................................................... 24 Figura 1. 4 - Exemplo de uma rede cliente/servidor .................................................. 26 Figura 1. 5 - Topologia totalmente conectada ........................................................... 27 Figura 1. 6 - Topologia em malha .............................................................................. 28 Figura 1. 7 - Topologia em anel ................................................................................. 28 Figura 1. 8 - Topologia em barramento ..................................................................... 29 Figura 1. 9 - Topologia em estrela ............................................................................. 30 Figura 1. 10 - Topologia em árvore ........................................................................... 30 Figura 1. 11 - Topologia sem fio ................................................................................ 31 Figura 1. 12 - Camadas da arquitetura TCP/IP e respectivos protocolos.................. 34 Figura 1. 13 - Datagrama do protocolo IP ................................................................. 35 Figura 2. 1 - Esquema de Alta Disponibilidade.......................................................... 40 Figura 2. 2 - Exemplo de cluster de balanceamento de carga .................................. 41 Figura 2. 3 - Esquema geral de um Linux Virtual Server ........................................... 43 Figura 2. 4 - LVS via NAT.......................................................................................... 45 Figura 2. 5 - LVS via IP Tunneling ............................................................................. 46 Figura 2. 6 - LVS via Direct Routing .......................................................................... 47 Figura 3. 1 - Arquitetura LVS ..................................................................................... 53 Figura 3. 2 - Interface de Login do software piranha ................................................. 63 Figura 3. 3 - Definição do IP primário e tipo de LVS no servidor LVS1 e LVS2 ........ 64 Figura 3. 4 - Definição do IP Secundário e configurações de monitoramento ........... 65 Figura 3. 5 - Adicionando um servidor virtual ao cluster LVS .................................... 66 Figura 3. 6 - Adicionando um servidor real ao cluster LVS........................................ 67 Figura 3. 7 – Servidores reais adicionados ao cluster LVS ....................................... 67 Figura 3. 8 - Teste de funcionamento da estrutura .................................................... 69 Figura 4. 1 - Configurações do algoritmo Round-Robin no LVS................................ 72 Figura 4. 2 - Totalização das requisições recebidas - Algoritmo RR ......................... 72 Figura 4. 3 - Média de requisições recebidas pelo Apache no servidor WEB1 ......... 73 Figura 4. 4 - Média de tráfego de entrada/saída de rede no servidor WEB1............. 73 Figura 4. 5 - Média de consumo de CPU no servidor WEB1 ..................................... 74 Figura 4. 6 - Média de consumo de memória no servidor WEB1 .............................. 74 Figura 4. 7 - Configurações do algoritmo Weighted Round Robin no LVS ................ 75 Figura 4. 8 - Totalização das requisições recebidas - Algoritmo WRR ...................... 75 Figura 4. 9 - Requisições - Apache no WEB1 - algoritmo WRR ................................ 76 Figura 4. 10 - Tráfego de entrada/saída de rede no WEB1 - algoritmo WRR ........... 76 Figura 4. 11 - Média de consumo de CPU no - WEB1 - algoritmo WRR................... 77 Figura 4. 12 - Média de consumo de memória no WEB1 - algoritmo WRR............... 77 LISTA DE QUADROS Quadro 1. 1 - Diferenças entre redes cliente/servidor e ponto-a-ponto ..................... 26 Quadro 1. 2 - Modelo de Referência OSI .................................................................. 33 Quadro 2. 1 - Métodos de implementação do LVS .................................................... 44 Quadro 4. 1 - Resultados de testes com algoritmos de escalonamento ................... 78 LISTA DE SCRIPTS Script 3. 1 - Comandos para desabilitar o iptables .................................................... 55 Script 3. 2 - Desabilitando o SELinux ........................................................................ 55 Script 3. 3 - Configuração IP nas interfaces do servidor web 1 ................................. 55 Script 3. 4 - Configuração IP nas interfaces do servidor web 2 ................................. 56 Script 3. 5 Configuração IP nas interfaces do servidor web 3 ................................... 56 Script 3. 6 - Ativação das configurações IP nas interfaces ........................................ 56 Script 3. 7 - Procedimentos de instalação e configuração inicial do Apache ............. 57 Script 3. 8 - Configuração do Apache para gerar informações mais detalhadas ....... 58 Script 3. 9 - Instalação das dependências do Monitorix ............................................ 58 Script 3. 10 - Comandos para download e instalação do Monitorix ........................... 59 Script 3. 11 - Comandos instalação e configuração do arptables .............................. 60 Script 3. 12 - Configuração IP nas interfaces do servidor LVS 1 ............................... 61 Script 3. 13 - Configuração IP nas interfaces do servidor LVS 2 ............................... 61 Script 3. 14 - Ativação das configurações IP nas interfaces dos servidores LVS ...... 62 Script 3. 15 - Instalação dos pacotes ipvsadm e piranha nos servidores LVS .......... 62 Script 3. 16 - Configurações sysctl nos servidores LVS ............................................ 62 Script 3. 17 - Configuração e inicialização do software piranha ................................ 63 Script 3. 18 - Arquivo com as configurações do cluster LVS criado pelo Piranha ..... 68 Script 4. 1 - Script de requisição de página ............................................................... 70 Script 4. 2 - Configurações na máquina de requisição de páginas ............................ 71 LISTA DE ABREVIATURAS E SIGLAS ARP - Address Resolution Protocol ARPA – Advanced Research Projects Agency ARPANET - Advanced Research Projects Agency Network CAN - Campus Area Network CPU - Central Processing Unit CVS - Concurrent Version System DARPA - Defense Advanced Research Projects Agency DH - Destination hash DNS - Domain Name System FSP - Free Software Foundation FTP - File Transfer Protocol GNU - General Public License GUI - Graphical User Interface HTTP - Hyper Text Transfer Protocol HTTPS – Hyper Text Transfer Protocol Secure IAB - Internet Activity Board IEEE - Institute of Electrical and Electronics Engineers IP - Internet Protocol IPVS - IP Virtual Server ISO - International Organization for Standardization Kbps - kilobit por Segundo LAN - Local Area Network LBLC - Locality-Based Least-Connection LBLCR - Locality-Based Least-Connection with Replication Scheduling LC - Least-Connection LVS – Linux Virtual Server MAN - Metropolitan Area Network Mbps - Megabit por segundo NAT - Network Address Translation NAT - Network Address Translation NNTP - Network News Transfer Protocol NQ - Never Queue OSI - Open Systems Interconnection PC - Personal Computer PHP - Hypertext Preprocessor RR – Round Robin SED - Shortest Expected Delay SMTP - Simple Mail Transfer Protocol SRI - Stanford Research Institute SSH – Secure Shell TCP - Transmission Control Protocol UCLA - University of California, Los Angeles UCSB - University of California, Santa Barbara UDP - User Datagram Protocol VLAN - Virtual Local Area Network WAN - Wide Area Network WLAN - Wireless Local Area Network WLC - Weighted Least-Connection WRR - Weighted Round Robin SUMÁRIO INTRODUÇÃO .........................................................................................17 1 REDES DE COMPUTADORES............................................................20 1.1 MODELO COMPUTACIONAL ............................................................................. 21 1.2 TOPOLOGIAS DE REDES .................................................................................. 23 1.2.1 Redes Ponto-a-Ponto ....................................................................................... 23 1.2.2 Redes Cliente/Servidor..................................................................................... 25 1.3 TOPOLOGIAS DE CONEXÃO ............................................................................ 27 1.3.1 Topologia Totalmente Conectada..................................................................... 27 1.3.2 Topologia em Malha ......................................................................................... 27 1.3.3 Topologia em Anel............................................................................................ 28 1.3.4 Topologia em Barramento ................................................................................ 29 1.3.5 Topologia em Estrela........................................................................................ 29 1.3.6 Topologia em Árvore ........................................................................................ 30 1.3.7 Topologia Sem Fio ........................................................................................... 31 1.3.8 Topologia Híbrida ou Mista............................................................................... 31 1.4 MODELO DE REFERÊNCIA OSI ........................................................................ 31 1.5 MODELO DE REFERÊNCIA TCP/IP .................................................................. 33 1.5.1 Camada Física ................................................................................................. 34 1.5.2 Camada Inter-Redes ........................................................................................ 35 1.5.3 Camada de Transporte..................................................................................... 35 1.5.4 Camada de Aplicação ...................................................................................... 36 2 BALACEAMENTO DE CARGA E ALTA DISPONIBILIDADE EM SERVIDORES..........................................................................................38 2.1 CLUSTER............................................................................................................ 38 2.1.1 Aplicações para Clusters .................................................................................. 38 2.1.2 Tipos de Clusters.............................................................................................. 39 2.2 ALTA DISPONIBILIDADE ................................................................................... 39 2.3 BALACEAMENTO DE CARGA ........................................................................... 40 2.4 LINUX VIRTUAL SERVER (LVS) ........................................................................ 41 2.5 LVS VIA NAT ....................................................................................................... 44 2.6 LVS VIA IP TUNNELING ..................................................................................... 45 2.7 LVS VIA DIRECT ROUTING ............................................................................... 46 2.8 ALGORITMOS DE ESCALONAMENTO ............................................................. 47 2.8.1 Round-Robin (RR) ............................................................................................ 48 2.8.2 Weighted Round-Robin (WRR) ....................................................................... 48 2.8.3 Destination hash (DH) ...................................................................................... 48 2.8.4 Least-Connection (LC) ..................................................................................... 48 2.8.5 Weighted Least-Connection (WLC) .................................................................. 49 2.8.6 Shortest Expected Delay (SED) ....................................................................... 49 2.8.7 Never Queue (NQ) ........................................................................................... 50 2.8.8 Locality-Based Least-Connection (LBLC) ......................................................... 50 2.8.9 Locality-Based Least-Connection With Replication Scheduling (LBLCR)......... 50 2.9 FERRAMENTAS EXISTENTES .......................................................................... 51 2.9.1 HeartBeat ......................................................................................................... 51 2.9.2 Piranha ............................................................................................................. 51 2.9.3 KeepAlived ....................................................................................................... 52 2.9.4 Ultra Monkey .................................................................................................... 52 3 Balanceamento de Carga de servidores com LVS ..............................53 3.1 CONFIGURAÇÕES DOS SERVIDORES WEB .................................................. 54 3.1.1 Configurações de Rede .................................................................................... 54 3.1.2 Instalação e Configuração do Apache .............................................................. 57 3.1.3 Instalação e Configuração do Monitorix ........................................................... 58 3.1.4 Instalação e Configuração do Arptables ........................................................... 59 3.2 CONFIGURAÇÕES DOS SERVIDORES LVS .................................................... 60 3.2.1 Configurando o Cluster de Balanceamento Via Software Piranha ................... 63 3.2.1.1 Definindo IP para os Servidores LVS Primário e Secundário ........................ 64 3.2.1.2 Adicionar um Servidor Virtual ao Cluster LVS ............................................... 65 3.2.1.3 Adicionar e Ativar os Servidores Reais ......................................................... 67 3.2.2 Configuração dos Servidores LVS Via Arquivo ................................................ 68 3.3 TESTE DE FUNCIONAMENTO DA ESTRUTURA.............................................. 69 4 ANÁLISE DO FUNCIONAMENTO E DESEMPENHO DO LVS...........70 4.1 METODOLOGIA DE TESTES ............................................................................. 70 4.2 TESTES COM O ALGORITMO ROUND-ROBIN (RR) ........................................ 71 4.3 TESTES COM O ALGORITMO WEIGHTED ROUND ROBIN (WRR) ................ 74 4.4 RESULTADOS DOS TESTES COM DEMAIS ALGORITMOS ............................ 78 CONCLUSÃO ..........................................................................................81 REFERÊNCIAS BIBLIOGRÁFICAS ........................................................83 17 INTRODUÇÃO Cada vez mais empresas dependem da tecnologia da informação para conseguir manter, promover e expandir seus negócios. Com o crescimento da internet vem se tornando imprescindível para todos os tipos de empresas o uso de um servidor confiável e sem falhas e com uma boa relação custo-benefício para dar sustentabilidade e segurança aos dados. Problemas frequentemente encontrados na web, tais como “Página não encontrada”, “Tente novamente mais tarde”, “Serviço indisponível”; não só irritam o usuário como o impossibilita de realizar suas tarefas, causando prejuízo tanto para a empresa que disponibiliza o site quanto para o usuário. Alguns sites possuem tecnologias para suportar grandes números de acessos, como por exemplo, o site da Receita Federal que é conhecido por lidar de forma eficiente com situações de excesso de tráfego. Em 2005, foram entregues mais de 20 milhões de declarações do Imposto de Renda, sendo que 98% das declarações de IR Pessoa Física foram realizadas pela Internet. (AZEREDO, 2006) Entretanto, alguns sites ainda sofrem com o excesso de tráfego, como o site de compra coletiva Groupon, uma das principais empresas do mundo neste segmento do e-commerce e que apresentou desempenho abaixo do normal em sua infraestrutura de servidores. De acordo com um estudo da WatchMouse, uma empresa que realiza pesquisas sobre a internet, revelou que o gigante coletivo ficou 26 horas inoperante entre os dias 22 novembro a 22 dezembro de 2010, impedindo inúmeros usuários de comprarem em seu site. (E-COMMERCE, 2010) Outro exemplo de indisponibilidade que gerou transtornos e prejuízos aconteceu com o site do jornal on-line Africanidade.com em 25/04/2008, o servidor no qual o site estava hospedado, sofreu um grave problema técnico que provocou uma indisponibilidade no acesso ao site. Este problema técnico foi suficientemente grave ao causar perda de dados, o que obrigou a administração do jornal on-line a tomar a decisão de transferir os dados que se conseguiu recuperar para outro servidor e para outra empresa de hospedagem. (AFRICANIDADE, 2008) Como o objetivo de visar soluções eficazes para os problemas descritos acima, este trabalho tem como objetivo o estudo de técnicas para criar um serviço web confiável e protegido contra erros e falhas que possam acontecer, sejam elas 18 de software ou de hardware. Isso é possível por meio de um balanceamento de carga, que faz com que um servidor web não sobrecarregue e torne o serviço indisponível ou, em caso de falha de um servidor, automaticamente outra máquina assume o seu lugar e faz com que o sistema não pare de funcionar. A tecnologia base usada para o desenvolvimento do trabalho foi o Linux Virtual Server (LVS), que é um projeto open source e que tem como principal objetivo a criação de clusters com balanceamento de carga para aplicações críticas. Dentre suas características, pode-se mencionar sua redundância de serviços, desempenho e escalabilidade flexível. Para implantação de um serviço seguro e sem falhas é indispensável o uso da redundância como método para lidar com falhas em componentes confiáveis. Para que este método possa funcionar corretamente, um sistema tem que ter sempre um segundo servidor com as mesmas características do servidor principal, o qual assume as funções em caso de falha do servidor principal. A redundância fornece total segurança para o sistema como, por exemplo, caso um servidor precise ser removido para atualização ou manutenção, ele pode ser retirado e recolocado de volta, sem interrupção do serviço ao cliente. O LVS possui uma arquitetura totalmente transparente para o usuário final, na qual o cliente parece estar conectado a um servidor real. Porém é o LVS que realiza as requisições no lugar do cliente, assim, escolhe um entre dois ou mais servidores web, caso um desses servidores pare de responder, o LVS redireciona as requisições para os outros servidores Web que estão ativos, e fica transparente para o usuário. O fato da arquitetura ser transparente torna-se um fator de extrema importância, pois, a partir dele, um conjunto de servidores parece ser um servidor único, faz com que os usuários não saibam quantos servidores têm por trás do LVS, e tem-se apenas acesso as suas aplicações. Basicamente a transparência tem como objetivo esconder o fato de seus recursos e processos estarem distribuídos através de diversas máquinas. No que se refere à organização, este trabalho está dividido da seguinte forma: o primeiro capítulo descreve alguns conceitos importantes sobre redes de computadores, tais como topologia, protocolos e sua arquitetura; no segundo é feito um estudo sobre o conceito de alta disponibilidade, balanceamento de carga, a tecnologia de cluster e sobre LVS; o terceiro capítulo é demostrado um tutorial sobre 19 a instalação e configuração do software de balanceamento de carga, bem como outros utilitários necessários para a topologia de servidores utilizada neste trabalho; o quarto capítulo descreve os testes e resultados feitos com os diferentes algoritmos de balanceamento de carga, e por fim, têm-se as conclusões finais sobre o trabalho. 20 1 REDES DE COMPUTADORES Segundo Torres (2009), as redes de computadores surgiram da necessidade da troca de informações de dados que estão fisicamente localizados longe do usuário, ele afirma que é impossível não pensar em redes de computadores, quando o assunto é informática. Na Internet, essa troca de informações armazenadas remotamente vai ao extremo quando acessa dados em locais remotos, e o local onde geralmente estão armazenadas, não tem a menor importância para o usuário. Para Tanenbaum (1997), rede de computadores é um conjunto de computadores autônomos interconectados, trocando informações entre si, através de um fio de cobre, fibras ópticas, rádio, micro-ondas, satélites de comunicação, entre outros. Um exemplo de rede mundialmente difundida é a Internet, que possui milhares de computadores interconectados trocando as mais diversas informações, tais como e-mail, arquivos, páginas pessoais e corporativas. A Internet iniciou-se no final da década de 1960, quanto a Agência de Projetos de Pesquisas Avançadas do Departamento de Defesa dos Estados Unidos da América – Advanced Reserch Projects Agency (ARPA), mais tarde chamada de DARPA – começou a consolidar uma rede experimental de computadores de longa distância, chamada de ARPANET, que se espalhou pelos Estados Unidos. O objetivo original da ARPANET era permitir aos fornecedores do governo compartilhar caros e também escassos recursos computacionais. Inicialmente a ARPANET permitia que os laboratórios de pesquisa dos Estados Unidos da América (EUA) (Universidade da Califórnia – UCLA – em Los Angeles, Universidade de Utah, em Salt Lake City, Universidade da Califórnia em Santa Barbara – UCSB, e Stanford Research Institute – SRI – em Stanford) trocassem informações entre si. Desde o início, entretanto, usuários da ARPANET também usavam a rede para colaboração. Essa colaboração abrangia desde compartilhamento de arquivos e programas, e troca de mensagens via correio eletrônico (e-mail) até desenvolvimento conjunto de pesquisa usando computadores remotos. (TORRES, 2001) Segundo Torres (2009), atualmente, as redes de computadores podem ser classificadas de acordo com o tamanho da área geográfica que elas abrangem. 21 Local Area Network (LAN) é o nome dado às redes locais mais comuns, sua abrangência pode chegar até ao espaço de uma sala ou mesmo de um prédio inteiro, pois se ultrapassar essa demanda pertencerá á outra classificação. O padrão de mais comum deste tipo de rede chama-se Ethernet ou IEEE 802.3. Wireless Local Area Network (WLAN) o que diferencia esta da LAN é a ausência de cabos, utilizam transmissores de radiofrequência. A arquitetura mais popular deste tipo de rede chama-se Wi-Fi ou IEEE 802.11. Campus Area Network (CAN) também chamada de rede de campo é uma rede maior que a local, com a abrangência maior que um prédio, possui interligação de pelo menos duas redes locais. Exemplo disso são os hospitais, universidades e grandes empresas. Metropolitan Area Network (MAN) é uma rede metropolitana, podendo abranger até mesmo uma cidade inteira, interligando redes locais e de campo, que geralmente são realizadas por concessionárias de telecomunicações (Embratel, Oi, Vivo etc.). Wide Area Network (WAN) também chamada de rede de longa distância abrange uma área maior que uma cidade, atuando na esfera mundial, sua melhor definição é a internet. Virtual Local Area Network (VLAN) neste caso pode-se configurar uma rede de computadores distante fisicamente, que mesmo assim fazem parte de uma rede local, para que possam acessar e compartilhar recursos. Internet que é rede mundial de computadores e que interliga milhões de computadores em todo o mundo, de vários tipos e tamanhos, marcas e modelos e com diferentes sistemas operacionais. A Intranet, rede privada que usa o mesmo modelo da internet, navega por meio de um navegador web em um site interno da empresa, disponível para funcionários. Extranet é uma intranet que permite acesso remoto, através de um modem ou mesmo por meio da Internet. 1.1 MODELO COMPUTACIONAL Para Torres (2009) a classificação das redes de computadores varia conforme 22 o processamento dos dados e pode ser de processamento centralizado, processamento distribuído ou processamento cooperativo. A computação centralizada foi o primeiro modelo de redes de computadores, possuíam uma grande capacidade de processamento sendo acessado através de terminais sem qualquer poder de processamento (terminais burros), que apenas nos dão dispositivos de entrada (teclado e monitor) para conectarmos ao computador central conforme a figura 1.1. Figura 1. 1 - Modelo de computação centralizada Fonte: Farias, 2006, Adaptado pelos autores A computação cooperativa, segundo Torres (2009), é um tipo de computação distribuída. Nela vários computadores executam a mesma tarefa. Quando são utilizados computadores comuns conectados à internet, esse tipo de computação passa a chamar de computação em nuvem, mas se os computadores forem dedicados ela passa a chamar computação em grade. Na computação distribuída cada máquina tem seu próprio processador, logo, tem poder de processamento. Elas podem ser classificadas como cliente/servidor, ponto-a-ponto, baseada em servidor e front-end/back-end. A figura 1.2 demostra um exemplo de computação distribuída. Torres (2009) afirma que as redes baseadas em servidores são semelhantes 23 às de computação centralizada. A diferença é que na computação centralizada os terminais não possuem qualquer tipo de processamento, diferente das baseadas em servidor, nas quais os computadores não são terminais burros e sim usados como clientes, portanto capazes de realizar processamento de dados. Redes Front-End/Back-End são utilizadas na comunicação entre servidores (frontal e traseiro). O modelo mais comum é o servidor web (front-end) e o servidor de banco de dados (back-end). Assim quando é feita a solicitação de uma página para o servidor web ele busca os dados no servidor de banco e então envia ao usuário. O servidor web é responsável pela formatação e apresentação dos dados. (TORRES, 2009) Figura 1. 2 - Modelo de computação distribuída Fonte: Farias, 2006, Adaptado pelos autores 1.2 TOPOLOGIAS DE REDES Topologia de redes é o canal no qual o meio de rede está conectado e que pode ser descrito fisicamente ou logicamente. 1.2.1 Redes Ponto-a-Ponto As redes ponto-a-ponto possuem algumas características importantes que devem ser lembradas. Elas são utilizadas em locais geograficamente menores, são fáceis de serem implementadas, possuem baixo custo, o sistema de cabeamento é 24 simples, não necessitam de um administrador e não existem computadores servidores. Porém possuem pouca segurança, exigem que os computadores sejam independentes e instalados em um mesmo ambiente de trabalho e são de difícil expansão. A Figura 1.3 mostra um exemplo de rede ponto-a-ponto. (TORRES, 2001) Figura 1. 3 - Exemplo de uma rede ponto-a-ponto Fonte: Torres, 2001, p.8 Na rede ponto-a-ponto, os computadores compartilham dados e periféricos sem muita burocracia. Qualquer computador pode facilmente ler e escrever arquivos armazenados em outros computadores da rede bem como utilizar periféricos que estejam instalados em outros PC's. Obviamente tudo isso depende da configuração, que é feita em cada computador individualmente. Ou seja, não há papel de um computador “servidor” como nas redes cliente/servidor. (TORRES, 2001) Os computadores presentes em uma rede ponto-a-ponto são computadores “completos”, isto é, funcionam normalmente quando não estão ligados em rede, tanto no que diz respeito ao hardware quanto ao software. De acordo com Torres (2001), a grande vantagem das redes ponto-a-ponto é a facilidade de instalação e de configuração, onde os próprios usuários podem configurar manualmente quais serviços estarão disponíveis em seu computador. Essa vantagem, entretanto, traz alguns inconvenientes como, por exemplo, a vulnerabilidade em relação à segurança da rede. As redes ponto-a-ponto são ideais para escritórios nos quais existem poucas 25 estações, podendo haver o controle dos arquivos, pois nesse tipo de rede todas as estações conseguem ler e gravar informações em qualquer outra estação, sem perder a integridade das informações. O correto é existir regras entre os usuários da rede, definindo apenas uma estação para armazenamento das informações. O custo de implementação deste tipo de rede é baixo, pois não são necessários servidores e outros recursos de infraestrutura, que são caros para pequenas organizações. Não há grandes gastos com a administração da rede, pois somente as próprias estações dos usuários são configuradas. Também não se gasta muito com cabeamento, pois este tipo de rede é destinado a estruturas de pequeno porte, não sendo necessários recursos como fibras ópticas ou pontos para acesso sem fio. 1.2.2 Redes Cliente/Servidor Nesse tipo de rede existe a figura do servidor, geralmente um computador dedicado a fornecer recursos aos usuários da rede. O servidor é um computador especializado que executa apenas tarefas específicas como armazenar e compartilhar dados, por exemplo. A utilização de Servidores traz vários benefícios como segurança, disponibilidade e integridade das informações, além da otimização de recursos. (TANENBAUM, 2003) A configuração de uma rede cliente servidor e toda administração é feita de forma centralizada, ou seja, as configurações estão no servidor. Desta forma é possível executar processos diretamente no servidor, processos estes resultantes de aplicativos executados nas estações, aumentando a organização e segurança da rede. O custo para a implementação desse tipo de rede depende muito das necessidades da organização, pois essa rede poderá possuir vários servidores, cada um com uma função específica. É necessário um administrador de redes para configuração e manutenção dessa rede. Geralmente também são essenciais investimentos maiores em infraestrutura como um centro de dados para alocar estes servidores e cabeamento mais específico como fibras ópticas para interligação dos servidores e outros dispositivos da rede. (TANENBAUM, 2003) O desempenho dessa estrutura em relação a ponto-a-ponto, considerando um servidor que atenda às necessidades, é maior, pois, as estações não ficam responsáveis pelo processamento referente à rede, ou seja, o armazenamento de 26 arquivos ou o compartilhamento da Internet são de responsabilidade dos servidores. Os servidores desse tipo de rede podem ser computadores simples ou equipamentos sofisticados. A definição de qual utilizar depende das necessidades da organização, dos recursos disponíveis e da necessidade de futura expansão dos serviços disponibilizados. Nesse tipo de arquitetura é possível implementar bancos de dados oferecendo serviços de armazenamento e disponibilidade de informações para as demais estações, como mostra a Figura 1.4. Figura 1. 4 - Exemplo de uma rede cliente/servidor Fonte: Tanenbaum, 2003, p.4 No Quadro 1.1 podem ser observadas as principais diferenças existentes entre os dois modelos descritos. Quadro 1. 1 - Diferenças entre redes cliente/servidor e ponto-a-ponto Cliente/Servidor Ponto-a-Ponto Serviço de diretório Administração centralizada Não tem serviço de diretório Não tem administração centralizada Alta manutenção Baixa manutenção Implementação complexa Simples implementação Várias opções de segurança Segurança fraca Alto custo Baixo custo Fonte: Torres, 2009, p.13 27 1.3 TOPOLOGIAS DE CONEXÃO Segundo o autor Torres (2009) as redes de computadores podem ser conectadas das seguintes maneiras: 1.3.1 Topologia Totalmente Conectada Neste modelo cada computador possui uma conexão individual para cada outro computador, sendo assim ele oferece o maior nível de redundância, porque caso a conexão seja interrompida é possível continuar a conexão entre eles simplesmente mudando o caminho da conexão. É claro que neste caso o caminho será mais longo. A figura 1.5 a seguir mostra um exemplo deste tipo de topologia. Figura 1. 5 - Topologia totalmente conectada Fonte: Torres, 2009, p.21 1.3.2 Topologia em Malha Ela é parecida com a anterior, mais usa menos conexões e alguns computadores precisam passar por outros para acessar determinado destinatário. Para alguns autores não á distinção entre estes dois tipos, eles consideram os dois como rede em malha. A figura 1.6 mostra um modelo desta topologia. 28 Figura 1. 6 - Topologia em malha Fonte: Torres, 2009, p.21 1.3.3 Topologia em Anel De acordo com Torres (2009), cada computador possui dois cabos, um conectado ao anterior e outro conectado ao mais próximo computador da rede. Redes em anel são capazes de transmitir e receber dados em qualquer direção, mas as configurações mais usuais são unidirecionais, de forma a tornar menos sofisticado os protocolos de comunicação que asseguram a entrega da mensagem corretamente e em sequencia ao destino, conforme é demostrado na figura 1.7. Figura 1. 7 - Topologia em anel Fonte: Torres, 2009, p.22 29 1.3.4 Topologia em Barramento Neste tipo de topologia há um elemento central ao quais todos os computadores são conectados. Quando o elemento central é partido, a rede deixa de funcionar. Este modelo é muito usado em redes Ethernet usando cabo coaxial ou cabo de par trançado usando um periférico concentrador chamado hub. Este tipo de rede também é conhecido como topologia linear e fica bastante claro que nenhum micro pode usar o cabo enquanto uma comunicação está sendo efetuada. A figura 1.8 mostra como micros são ligados fisicamente. (TORRES, 2009) Figura 1. 8 - Topologia em barramento Fonte: Torres, 2009, p.22 1.3.5 Topologia em Estrela Redes do tipo estrela são aquelas em que os dispositivos de rede convergem para um ponto central, ou seja, um concentrador. Esse concentrador central é um hardware, que pode ser hub, switch ou roteador. Todos os equipamentos como computadores, impressoras de rede, pontos de acesso sem fio, etc. Convergem para o ponto concentrador da rede e, havendo problema nesse ponto da rede, toda a rede fica inoperante porque o concentrador é o equipamento responsável para servir as informações aos demais computadores da rede. Esse tipo de rede é mais eficiente e eficaz, porque, se existir uma interrupção em uma das estações de trabalho, a rede não será comprometida. 30 Outra vantagem da topologia em estrela é a sua flexibilidade, e também o uso de cabeamento estruturado, que permite melhor organização, controle e expansão do cabeamento da rede. A figura 1.9 mostra um exemplo de ligação desta topologia. Figura 1. 9 - Topologia em estrela Fonte: Torres, 2009, p.23 1.3.6 Topologia em Árvore É uma topologia também chamada estrela hierárquica e é feita ligando-se redes estrelas junta. Esta é a topologia mais comum atualmente, ela utiliza mais periféricos concentradores. A figura 1.10 demostra um exemplo de ligação. Figura 1. 10 - Topologia em árvore Fonte: Torres, 2009, p.23 31 1.3.7 Topologia Sem Fio Como o próprio nome diz, ela permite que computadores se conectem a rede sem a necessidade de uso de cabos. É necessário um equipamento chamado ponto de acesso Wireless Access Point (WAP) para fazer a conexão entre os computadores dotados de placa de rede sem fio e a rede física. A figura 1.11 demostra um exemplo deste tipo de rede. Figura 1. 11 - Topologia sem fio Fonte: Torres, 2009, p.24 1.3.8 Topologia Híbrida ou Mista São redes que usam mais de uma topologia descrita acima ao mesmo tempo. 1.4 MODELO DE REFERÊNCIA OSI O modelo Open Systems Interconnection (OSI), proposto pela Organização Internacional de Padronização, não é uma arquitetura de rede, pois não especifica os serviços e os protocolos que devem ser usados em cada camada e sim informa o que cada uma deve ser responsável. (TANENBAUM, 1997) 32 O modelo OSI descreve sete camadas, onde cada nova camada é criada quando há necessidade de outra camada de abstração. As camadas referenciadas devem executar funções bem definidas. Este modelo é tido como base das arquiteturas já existentes e para o desenvolvimento de novas arquiteturas de redes, sendo que nem sempre todas as camadas que o modelo propõe são implementadas. Em seguida, uma breve descrição das camadas embasada na literatura de Tanenbaum (1997) e Stallings (2005) será realizada, onde começa-se pela camada mais inferior: Camada Física: lida com as características de acesso ao meio físico, ou seja, é a camada responsável pela transmissão dos bits em um meio de comunicação. Esta camada é interconectada a outra camada física através de um meio físico para que haja a comunicação, seja ele, metálico, de fibra ou eletromagnético. Camada de Enlace: faz a interface entre o bloco de dados e o meio físico. Sua principal finalidade é dividir a informação recebida da camada superior (Rede) em quadros (do inglês: frames) com tamanho permitido pelo meio físico, o que reduz a perda dessas informações através de controle de fluxo, controle de erros e sincronização. Camada de Rede: provê às camadas superiores independência quanto à tecnologia de transmissão utilizada. Responsável também por endereçamento lógico e roteamento de pacotes, e por este motivo, é de fundamental importância para os projetos de rede. Camada de Transporte: realiza controle dos dados transmitidos e proporciona confiabilidade, controle de fluxo, recuperação de dados perdidos, transmissão e recepção simultânea (do inglês: full duplex). Camada de Sessão: camada responsável pelo controle de conexões entre aplicações como estabelecimento, gerenciamento e término de sessões entre as partes envolvidas. Também é responsável pela gerência do tráfego, tokens (conjunto de caracteres) e pela sincronização. Camada de Apresentação: esta camada é responsável pela adoção de um sistema padronizado de representação dos dados em alto nível, compressão e codificação de dados. Camada de Aplicação: serve de interface entre os usuários e as demais camadas OSI, é onde ocorrem todas as trocas de informações úteis ao usuário. 33 O Quadro 1.2 exemplifica as camadas, serviços e exemplos de utilização aplicados do modelo OSI, descrito anteriormente. Quadro 1. 2 - Modelo de Referência OSI Camadas Serviços Exemplos 7 Aplicação Aplicação do Usuário FTP, Web, Browser 6 Apresentação Encriptação, compressão ASCII, UniCode, jpg 5 Sessão Controle, sincronismo RPC, NetBios 4 Transporte Recuperação de erro TCP, UDP 3 Rede Roteamento, conexão IP, IPX 2 Enlace Controle de erro de fluxo FDDI, Frame Relay, PPP 1 Física Interface de acesso ao meio Conector, cabo Fonte: Stallings, 2005, Adaptado pelos autores 1.5 MODELO DE REFERÊNCIA TCP/IP Esse modelo baseia-se principalmente em um serviço de transporte orientado à conexão fornecido pelo Transmission Control Protocol (TCP), e em um serviço de rede não orientado à conexões (datagrama não confiável), fornecido pelo protocolo Internet Protocol (IP). (TANENBAUM, 2003) Diferente dos sistemas proprietários, o TCP/IP foi desenvolvido como padrão aberto no qual qualquer um pudesse usar em uma grande escala de interoperabilidade de sistemas. A ideia deste modelo surgiu no Departamento de defesa Americano, que tinha como objetivo manter a comunicação entre as bases militares em uma ocorrência de ataques ou catástrofes que afetassem os meios de comunicação. (MENDES, 2007) Os padrões da arquitetura TCP/IP não são elaborados por órgãos internacionais de padronização, como a ISO ou a IEEE. O coro técnico que coordena o desenvolvimento dos protocolos dessa arquitetura é um comitê denominado Internet Activity Board (IAB). O IAB é formado por pesquisadores seniores, tendo a maioria deles projetado e implementado os protocolos da arquitetura internet. O IAB, na realidade, produz poucos documentos. Qualquer 34 pessoa pode projetar, documentar, implementar e testar um protocolo para ser usado na Internet. (SOARES, 1995) Segundo Odom (2003), o TCP/IP possui uma série de protocolos menores: na verdade, o próprio nome TCP/IP é uma combinação de dois desses protocolos: o TCP e o IP. A arquitetura TCP/IP é composta por quatro camadas conforme é demostrado na figura 1.12. Figura 1. 12 - Camadas da arquitetura TCP/IP e respectivos protocolos Fonte: Odom, 2003, Adaptado pelos autores 1.5.1 Camada Física A camada de rede, ou física, é responsável por converter as tensões elétricas recebidas pela placa de rede em bits 1 ou 0. Em seguida, esses bits são agrupados em pacotes e entregues à camada superior que, por sua vez, continuará repassando até chegar à camada de aplicação, na qual o conteúdo recebido será processado e apresentado ao usuário. (MENDES, 2007) Na arquitetura Internet (TCP/IP) não há restrições às redes que são interligadas para formar a inter-rede. Para uma rede ser conectada ela deve apenas possuir uma interface que a torne compatível com o protocolo IP. Essa função se encontra mais especificamente no nível de interface da rede, que encaminha os datagramas IP para os destinos específicos. Para realizar este encaminhamento os endereços IP são traduzidos para os endereços de hardware dos dispositivos conectados à rede. (SOARES, 1995) 35 1.5.2 Camada Inter-Redes O nível inter-redes é responsável pela interligação de redes de comunicação. Sua tarefa è permitir que os hosts enviem e recebam pacotes em qualquer rede e garantir que estes pacotes trafegarão corretamente até seu destino. O roteamento de pacotes é uma questão de grande importância neste nível, assim como o controle de congestionamentos na rede. (TANENBAUM, 2003) Estas mensagens podem chegar a uma ordem diferente daquela em que foram enviadas, obrigando as camadas superiores a reorganizá-las, caso a entrega em ordem seja desejável. (TANENBAUM, 2003) A camada inter-rede define um formato de pacote oficial e o protocolo IP. O pacote ou datagrama (Figura 1.13) utilizado pelo protocolo IP consiste em um cabeçalho e um payload (pacotes de dados), sendo que o cabeçalho possui um comprimento fixo de 20 bytes mais um comprimento variável. A tarefa da camada inter-redes é entregar os pacotes IP onde são necessários. O roteamento é uma questão de grande importância nessa camada, assim como a necessidade de evitar congestionamentos. (TANENBAUM, 2003) Figura 1. 13 - Datagrama do protocolo IP Fonte: Tanenbaum, 2003, p.461 1.5.3 Camada de Transporte O nível de transporte provê uma conexão entre a acamada de aplicação e os 36 serviços oferecidos pelas camadas mais baixas (física e inter-redes). Isso torna as redes físicas transparentes para a camada de aplicação. A camada de transporte trata também do controle de conexão, oferecendo serviços orientados à conexão e serviços sem conexão. (FOROUZAN, 2008) Dois protocolos fim-a-fim atuam nesta camada. O primeiro deles, o TCP, é um protocolo orientado a conexão confiável que permite a entrega sem erros de um fluxo de bytes, originado de um determinado computador, em qualquer outro computador da inter-rede. Esse protocolo fragmenta o fluxo de bytes de entrada em mensagens e encaminha cada uma delas para a camada inter-redes. No destino, O TCP cuida também do controle de fluxo, impedindo que um transmissor rápido sobrecarregue um receptor lento com um volume de mensagens maior do que ele pode manipular. (TANEMBAUM, 2003) O segundo protocolo, o User Datagram Protocol (UDP), é um protocolo de conexão não confiável destinado a aplicações que não requerem controle de fluxo nem a manutenção da sequência das mensagens enviadas. Ele é amplamente usado em consultas e aplicações diretas do tipo cliente/servidor com solicitação e resposta, nas quais a entrega é mais importante do que a entrega precisa, como transmissão de dados de voz ou de vídeo. (TANEBAUM, 2003) 1.5.4 Camada de Aplicação A camada de aplicação trata de protocolos de alto nível. No modelo TCP/IP questões de representação, codificação e controle de diálogo foram tratados em uma única camada. O TCP/IP combina todas as questões relacionadas a aplicações e presume que esses dados estejam empacotados corretamente para a próxima camada. (MENDES, 2007) A camada de aplicação contém os protocolos de alto nível. Dentre eles estão o protocolo de terminal virtual (Telnet), o File Transfer Protocol (FTP) e o protocolo de correio eletrônico Simple Mail Transfer Protocol (SMTP). O protocolo de terminal virtual permite que o usuário de um computador estabeleça login em uma máquina remota e a utilize. O protocolo de transferência de arquivos permite mover dados com eficiência de uma máquina para outra. Originalmente, o correio eletrônico era um tipo de transferência de arquivos. Posteriormente um protocolo especializado foi desenvolvido para essa função. Muitos outros protocolos foram incluídos com o 37 decorrer dos anos como o Domain Name System (DNS), que realiza o mapeamento dos nomes de hosts para seus respectivos endereços de rede, o Network News Transfer Protocol (NNTP), protocolo usado para mover novos artigos e o Hyper Text Transfer Protocol (HTTP), utilizado para acessar páginas web, entre outros. (TANEMBAUM, 2003) Neste capítulo foram abordados aspectos gerais de rede de computadores, suas topologias e protocolos. No próximo capítulo serão abordados assuntos referentes à Alta Disponibilidade, Cluster, com ênfase em LVS. 38 2 BALACEAMENTO DE CARGA E ALTA DISPONIBILIDADE EM SERVIDORES Neste capítulo são abordados os conceitos relacionados a clusters, suas aplicações e seus tipos, balanceamento de carga, alta disponibilidade, escalabilidade computacional, estudo sobre a tecnologia do LVS, algoritmos de escalonamento e algumas das ferramentas existentes que possibilitam a implantação e funcionalidade do ambiente. 2.1 CLUSTER De acordo com o autor Dantas (2002) Cluster é um sistema que compreende um conjunto de computadores ou sistemas na qual trabalham de forma agregada para executar aplicações ou desempenhar outras tarefas, produzindo a ilusão de um recurso único. Esse conceito é denominado de transparência do sistema. Ele foi desenvolvido para balancear servidores entre computadores, tem como objetivo dividir certo processamento de dados com outras máquinas conectadas na mesma rede para acelerar o processamento. (DANTAS, 2002) 2.1.1 Aplicações para Clusters Os clusters podem ser utilizados para uma infinidade de aplicações. Basicamente, para qualquer uma que demande processamento pesado. Como exemplos de aplicações, destaca-se a previsão meteorológica (previsão do tempo e condições climáticas), simulações geotérmicas (simulação de eventos no solo), renderização de efeitos especiais (muito usado em filmes), simulações financeiras, distribuição de carga, entre outras. (DANTAS, 2002) Basicamente, qualquer tipo de aplicação crítica, ou seja, aplicações que não podem ser interrompidas ou não podem perder dados (como os sistemas de bancos, por exemplo), podem empregar as tecnologias de cluster, desde que devidamente configurados para não serem sujeitas a falhas graves. Assim, o cluster deve contar com nobreaks ou geradores que assegurem o funcionamento do sistema mesmo nos casos de queda de energia, além de meios de manutenção e detecção e falhas eficientes. (DANTAS, 2002) 39 2.1.2 Tipos de Clusters Segundo Pitanga (2003) Existem vários tipos de clusters, aqui estão descritos os tipos de clusters mais utilizados: Cluster de alta disponibilidade: os sistemas deste modelo conseguem permanecer ativos por um extenso período de tempo e em plena condição de uso de forma contínua através do uso da redundância implícita ao sistema, além disso, conseguem detectar erros se resguardando de possíveis falhas, esse tipo de cluster é muito empregado para base de dados de missões críticas, para os correios, servidores de arquivos e aplicações. Cluster de alto desempenho: esse tipo de cluster tem como papel permitir que a união de vários computadores comuns consiga-se um alto poder de processamento. Cluster para balanceamento de carga: este modelo tem como papel distribuir controladamente o processamento. Seu mecanismo de redundância exige constante monitoramento, se um nó falhar as requisições são redistribuídas entre os nós disponíveis no momento. São utilizados, por exemplo, em cluster de servidores de web. 2.2 ALTA DISPONIBILIDADE A Alta Disponibilidade está vinculada diretamente a crescente dependência dos serviços oferecidos pelos computadores. Atualmente, várias empresas contam com os recursos computacionais para fornecerem os seus serviços, como sistemas bancários, sites web, e-business, banco de dados, entre outros. Um cluster de Alta Disponibilidade tem como finalidade manter os serviços prestados, por um sistema computacional, disponíveis a todo o momento, mesmo em caso de falhas. Isso é obtido através da criação de réplicas dos serviços e servidores, onde os computadores atuam como um único sistema. Cada computador monitora os outros por meio de software, e no caso de ocorrer uma falha um deles assume os serviços daquele que ficou indisponível. (PITANGA, 2003) Segundo Pitanga (2003) A Alta disponibilidade pode ser classificada como: Disponibilidade básica: Empregada em máquinas comuns, sem mecanismos especiais, garantindo disponibilidade de 99% a 99,9%. Isto equivale a 40 dizer que em um ano a máquina pode ficar indisponível por um período de 9 horas a quatro dias. Alta disponibilidade: São mecanismos especializados que contém mecanismos de detecção, recuperação e mascaramento de falhas elevando a disponibilidade do sistema. Nesse modelo, as máquinas têm uma disponibilidade de 99,99% a 99,999%, podendo ficar indisponível por um período de 5 horas até uma hora em um ano de operação. Disponibilidade contínua: teoricamente ideal chegando muito próximo de 100%, neste modelo o tempo de inoperância do sistema é insignificante, todas as paradas planejadas ou não são mascaradas, e o sistema está sempre disponível, mas sempre existe a possibilidade do sistema parar. A figura 2.1 demostrada a seguir apresenta um modelo de alta disponibilidade, na qual os Servidores são precisamente réplicas, tanto de hardware como de software. O Servidor da direita, através do esquema de monitoramento, detecta a indisponibilidade do Servidor da esquerda, e logo assume o posto para manter o serviço disponível. Figura 2. 1 - Esquema de Alta Disponibilidade Fonte: Pitanga, 2003, Adaptado pelos Autores 2.3 BALACEAMENTO DE CARGA Esta solução tem como finalidade manter o equilíbrio de carga entre vários servidores, assegurando assim a disponibilidade do serviço em momentos de 41 elevados acessos. A necessidade desta implementação é devido a elevada quantidade de tráfego nos servidores que prestam serviço em uma rede, pois, um dos maiores problemas enfrentados na Internet são os excessivos acessos quando se tem apenas um servidor. De acordo com Pitanga (2003) O sistema de cluster baseado em balanceamento de carga consiste em integrar seus computadores para que todas as requisições provenientes dos clientes sejam distribuídas de forma equilibrada entre os servidores. A tarefa principal é redirecionar essas requisições de entrada por meio de um elemento que fará o balanceamento entre os servidores e os usuários. Consequentemente, nessa estrutura teriam-se múltiplos servidores, mas que parecem ser apenas um para o cliente. A figura 2.2 mostra um tipo de cluster que é especialmente empregado em serviços de comércio eletrônico e provedores de Internet, que precisam resolver diferenças de carga provenientes de múltiplas requisições de entrada em tempo real. Figura 2. 2 - Exemplo de cluster de balanceamento de carga Fonte: Pitanga, 2003, Adaptado pelos Autores 2.4 LINUX VIRTUAL SERVER (LVS) O LVS é um projeto Open Source que tem como principal objetivo a construção de sistemas com alta disponibilidade e profundamente escaláveis, a 42 partir do uso conjunto de vários servidores. A arquitetura é totalmente imperceptível para o usuário final e os serviços são providos por um conjunto de máquinas e acessados por meio de um único servidor. O LVS pode oferecer serviços de maior capacidade, desempenho e serviços redundantes em relação aos serviços disponíveis em servidores únicos. (GOVERNO ELETRÔNICO, 2006) Dentre suas características, é importante citar seu desempenho e escalabilidade flexível. O LVS é um sistema de cluster totalmente transparente para seu usuário final, pois mesmo que tenha 20 nós em seu cluster, seu usuário interagirá com apenas um endereço de entrada. Para o funcionamento do LVS são necessários dois tipos de máquinas: Load Balancer: este é o host responsável por receber as requisições vindas dos clientes e transmiti-las aos servidores reais do cluster, lógico que este é o ponto vulnerável do cluster. Mas se o ponto de entrada é apenas uma máquina, isto é uma falha, pois se esta máquina falhar, consecutivamente o cluster também falhará, porém pode-se usar ferramentas como o HeartBeat para monitorar e criar um "espelho" deste Servidor de Load Balancer para se caso ele falhar, a máquina espelhada assumir seu lugar automaticamente. Servidores reais: são os servidores do cluster que detêm os serviços oferecidos pelo cluster aos clientes. Para um cluster é necessário que exista no mínimo dois servidores reais. (GOVERNO ELETRÔNICO, 2006) O LVS é como um roteador da camada quatro do modelo OSI. A estrutura do cliente-servidor continua preservada, onde cada cliente pensa que está diretamente conectado a um servidor real e este pensa que está conectado diretamente a um cliente. Tanto o cliente como o servidor não percebem que as conexões sofrem a intervenção do direcionador. Um servidor real do LVS não coopera e não sabe da existência de outros servidores reais no LVS, um LVS não é um beowulf (Projeto de cluster que utiliza computadores pessoais) e também não é um cluster, mas se comporta como um agregador de serviços que possibilita o atendimento de uma demanda grande em um serviço. O código IPVS é responsável por possibilitar a criação do sistema LVS, é uma coleção de modificações para kernel Linux, que combinadas com as capacidades de roteamento e filtragem de pacotes de uma máquina Linux, transformam-na em um roteador com características especiais, capaz de balancear sessões TCP e UDP entre várias máquinas. Este roteador especial chamado Linux Director distribui a 43 carga de requisições de serviços entre os computadores que os proveem. Com isso, o sistema constituído pela máquina Linux com o código IPVS e as outras máquinas que hospedam os serviços é chamado Linux Virtual Server. (GOVERNO ELETRÔNICO, 2006) O sistema LVS não precisa de nenhuma modificação nos servidores reais ou nos clientes. Estes por sua vez, enviam suas requisições apenas para uma máquina não importando quantos servidores reais estejam provendo os serviços, que podem ser os comuns HTTP e HTTPS, servidores de e-mail, bancos de dados, Concurrent Version System (CVS), Secure Shell (SSH), ou seja, em geral todas as aplicações TCP/IP. (GOVERNO ELETRÔNICO, 2006) O LVS fornece, de maneira imperceptível e simples, um ambiente altamente escalável de alta disponibilidade. Seu ponto único de falha é o Director, mas mesmo assim, em conjunção com outras ferramentas como HeartBeat e Ldirectord, pode-se construir um sistema de alta disponibilidade para o Director, aumentando ainda mais sua confiabilidade e eliminando seu ponto único de falha. A figura 2.3 demostra como funciona um servidor Linux Virtual Server. Figura 2. 3 - Esquema geral de um Linux Virtual Server Fonte: Elaborado pelos autores, 2014 O LVS pode ser implantado de três formas diferentes, como Virtual Server via Network Address Translation (NAT), via IP Tunneling e via Direct Routing. 44 No LVS via NAT tem como vantagem a utilização de qualquer sistema operacional nos servidores reais, mas tem como desvantagem a baixa capacidade implantação de servidores reais, além de sua alta latência e seu menor desempenho comparado aos métodos IP Tunneling e Direct Routing. (MACK, 2004) O método IP Tunneling tem como vantagem seu alto desempenho, sua capacidade de suportar um número maior de servidores reais (mais de 100), e a possibilidade de implantar os servidores reais em uma rede diferente dos servidores LVS. A desvantagem desse método é em relação aos sistemas operacionais dos servidores reais, que devem suportar túneis. (MACK, 2004) O método Direct Routing oferece alto desempenho, os servidores reais podem utilizar a maioria dos sistemas operacionais, desde que a interface de loopback não responda arp. Todos os servidores da estrutura devem estar no mesmo segmento de rede. (MACK, 2004) O quadro 2.1 demonstra as principais características dos métodos NAT, IP Tunneling e Direct Routing. Quadro 2. 1 - Métodos de implementação do LVS Fonte: Elaborado pelos autores, 2014 2.5 LVS VIA NAT Segundo Cota (2005), a superioridade do Linux Virtual Server via NAT está em que os servidores reais podem executar qualquer sistema operacional que 45 suporta TCP/IP com endereços IP privados e apenas um endereço IP é necessário para o Load Balancer. A desvantagem deste tipo de cluster do LVS é a limitação da escalabilidade, caso o número de servidores reais em seu cluster passe de 20 servidores. Caso este número seja ultrapassado, o load balancer pode ser um gargalo em seu sistema LVS, pois todos os pacotes que passam pelo load balancer têm que ser reescritos para fazer o NAT. Isto é lógico, pois supondo que a média do tamanho dos pacotes TCP que irão trafegar por seu load balancer seja de 563 bytes, o tempo médio para reescrever este pacote é de 60us, em um processador Intel Pentium. O throughput (capacidade total de um canal em processar e transmitir dados durante um determinado período de tempo) do load balancer será de 8.93 Megabit por Segundo (Mbps). Ao assumir que o throughput dos servidores reais seja de 400 Kilobit por Segundo (kbps), o load balancer pode gerenciar até no máximo 22 servidores reais. Lógico que isso é baseado em suposições e projetado para ambientes realmente enormes, com mais de 20 nós de cluster. A figura 2.4 demostra LVS via NAT. Figura 2. 4 - LVS via NAT Fonte: Elaborado pelos autores, 2014 2.6 LVS VIA IP TUNNELING De acordo com Cota (2005), neste tipo de cluster o load balancer ao invés de fazer a comunicação de entrada e saída, ele faz apenas um agendamento das 46 requisições, pois a resposta do servidor real é enviada diretamente ao usuário, sem passar pelo load balancer. Desta maneira, o load balancer pode administrar até 100 servidores reais, sem gerar gargalos no sistema. Este tipo de LVS é recomendado para implementação de sistemas de Proxy (define os intermediários entre o usuário e seu servidor, tendo como função a conexão do computador local com a rede externa) para a Internet altamente disponível. Pois o load balancer encaminha as requisições dos clientes para os servidores Proxy e estes respondem diretamente para os usuários. Para que esta estrutura funcione, todos os servidores do cluster precisam ter o IP Tunneling habilitado. E é aqui que teremos um problema, pois habilitar este IP Tunneling pode ser simples para o Linux, mas talvez não seja se tiver servidores reais com Solaris, por exemplo. Isto dificulta a utilização de servidores reais com sistemas operacionais diferentes. A figura 2.5 demostra um exemplo de LVS via IP Tunneling Figura 2. 5 - LVS via IP Tunneling Fonte: Elaborado pelos autores, 2014 2.7 LVS VIA DIRECT ROUTING Como descrito por Cota (2005), no tipo de cluster via Direct Routing, o servidor LVS só processa requisições de entrada, deixando os servidores reais 47 responder diretamente para os usuários, utilizando roteamento direto. A única limitação para este tipo de LVS é que tanto o load balancer quanto os servidores reais precisam ter uma interface de rede que esteja no mesmo segmento ou Sub-Rede. A figura 2.6 exemplifica o LVS via Direct Routing. Figura 2. 6 - LVS via Direct Routing Fonte: Elaborado pelos autores, 2014 Estas três formas dependem de um algoritmo de escalonamento para realizar o balanceamento de carga do LVS. 2.8 ALGORITMOS DE ESCALONAMENTO Como descrito no Governo Eletrônico (2006), existem diversos algoritmos utilizados para a implementação do LVS e seus métodos de escalonamento para o balanceamento de carga. Os métodos de escalonamento controlam a maneira como a carga é distribuída entre os nós que compõem o sistema. Quando o Director recebe uma requisição de um cliente, é através dos algoritmos de escalonamento que ele decide qual nó deverá tratá-la. Existem métodos de escalonamento dinâmico que dão maior controle sobre a carga de chegada, com pouco ou nenhum custo adicional em processamento. O 48 Director mantém uma lista do número de conexões ativas e inativas para cada nó do cluster e usa esta informação para determinar qual nó irá receber a nova conexão. 2.8.1 Round-Robin (RR) Através da leitura do Governo Eletrônico (2006), é possível afirmar que o Director armazena uma lista com os endereços de cada servidor real, assim que recebe uma conexão, ele a redireciona para um servidor dessa lista, onde uma próxima conexão será enviada para o servidor seguinte e assim continua percorrendo essa lista de forma circular atendendo todas as requisições. Todos os servidores da lista são tratados de maneira igual, não importando quantas conexões estão sendo manipuladas por um servidor específico, nem seu tempo de resposta e/ou capacidades de processamento. 2.8.2 Weighted Round-Robin (WRR) De acordo com a leitura do Governo Eletrônico (2006), cada nó do sistema LVS possui um peso, baseado na quantidade de carga que ele pode processar. O peso é então usado, em conjunto com o método Round-Robin, para selecionar o próximo nó que será usado quando uma nova conexão chegar, sem levar em consideração o número de conexões que ainda estão ativas, servidores reais com pesos maiores terão prioridade no recebimento e quantidade de requisições, se comparados com servidores reais com pesos menores. 2.8.3 Destination Hash (DH) De acordo com o Governo Eletrônico (2006), neste método, o Director, envia requisições de um mesmo endereço IP de origem para o mesmo servidor real no sistema LVS, usando uma lista estática de endereços de destino. O método é útil quando o servidor real é um servidor Proxy ou cache. 2.8.4 Least-Connection (LC) Neste método conforme citado no Governo Eletrônico (2006), quando uma 49 nova conexão chega, o Director verifica o número de conexões ativas e inativas para decidir para qual nó irá enviar a requisição. Para realizar esta escolha, o Director multiplica o número de conexões ativas do nó por 256 e adiciona ao resultado o número de conexões inativas resultando em um overhead (processamento em excesso) para cada nó. O nó com menor overhead receberá a conexão. Caso haja nós com mesmo overhead, o primeiro nó encontrado na tabela do IPVS será selecionado. 2.8.5 Weighted Least-Connection (WLC) De acordo com as conclusões do Governo Eletrônico (2006), este método mescla o Least-Connection com um peso para cada nó, útil para ser usado com nós de diferentes capacidades de processamento. O Director define para qual nó uma requisição será enviada, calculando o overhead, como no método anterior, dividindo este número pelo peso associado ao nó. O nó com menor valor associado após esta operação receberá a conexão. Caso haja nós com mesmo valor associado, o primeiro da tabela do IPVS será selecionado. 2.8.6 Shortest Expected Delay (SED) De acordo com o Governo Eletrônico (2006), pode-se considerar que este método pode prover uma pequena melhoria em relação ao método WLC em serviços que usam TCP e mantêm a conexão ativa enquanto o nó processa a requisição. O cálculo do valor do overhead para o SED é feito adicionando-se 1 ao número de conexões ativas, dividido pelo peso associado a cada nó. O nó com menor overhead recebe a requisição. Deve-se notar neste algoritmo: • Ele não usa o número de conexões inativas enquanto determina o overhead para cada nó; • Ele adiciona 1 ao número de conexões ativas para antecipar como o overhead irá parecer quando uma nova conexão for realizada; • O algoritmo SED tenta minimizar o tempo de espera para cada trabalho até sua finalização. O tempo de espera é (Ci+1) /Ui, sendo Ci o número de conexões do 50 servidor e Ui o peso fixado para este servidor; • A diferença entre SED e WLC é que SED inclui a conexão que chega à função de custo, incrementando 1. Ele apresenta melhor qualidade em grandes sistemas heterogêneos, cujos pesos variam muito. 2.8.7 Never Queue (NQ) De acordo com que é descrito no Governo Eletrônico (2006), este método proporciona uma melhoria em relação ao SED, pois caso um nó não possua conexões ativas ele ganhará uma nova requisição de serviço. Apesar do resultado exposto no cálculo do SED podem ocorrer situações em que uma máquina que não possua nenhuma conexão ativa apresente um overhead maior que outra que possua. 2.8.8 Locality-Based Least-Connection (LBLC) Segundo o Governo Eletrônico (2006), os Directors também podem direcionar o tráfego de saída para um agregado de servidores Proxy transparentes (utilizado em redes amplas sem interação com o usuário). Nesta configuração, os nós do cluster são Proxy transparentes ou servidores de web cache (responsável por procurar pela página web requisitada em seu cache e caso a possua, avalia sua idade e a confronta com a sua data de validade estipulada pelo criador da página ou segundo um conjunto de regras estipuladas pelo próprio servidor de web cache) que estão entre os clientes e a Internet. Quando o LBCL é usado, o Director tenta enviar todas as conexões de um endereço IP particular para o mesmo servidor Proxy invisível. Ou seja, a primeira vez que uma requisição chegar, o Director definirá um servidor real para atendê-la usando uma versão um pouco modificada do método WLC e todas as requisições subsequentes deste cliente continuarão a ser enviadas para o servidor escolhido. 2.8.9 Locality-Based Least-Connection With Replication Scheduling (LBLCR) É semelhante ao LBLC, mas com uma melhoria, o Director contém um mapeamento de um cliente para um agregado de servidores que podem atendê-lo, 51 se todos os nós do conjunto estiverem sobrecarregados, o Director seleciona um servidor com menos conexões e o adiciona ao conjunto. Caso este conjunto não se modifique em um intervalo de tempo específico, o servidor com maior carga será excluído. Além de algoritmos de escalonamento, existem ferramentas que podem ser utilizadas em conjunto com o LVS para realizar o balanceamento de carga e alta disponibilidade de um serviço. 2.9 FERRAMENTAS EXISTENTES Para implementar uma estrutura de alta disponibilidade e balanceamento de carga é necessário o uso de ferramentas que possibilitam a implantação, segurança e funcionalidade do ambiente. 2.9.1 HeartBeat De acordo com Governo Eletrônico (2006), o HeartBeat tem como função criar um backup de um servidor, que pode utilizar como base o Load Balancer que é o ponto frágil do cluster. Com um backup do load balancer, o heartbeat pode monitorar via cabo Ethernet ou serial o servidor original e quando for verificado que o serviço LVS falhou no load balancer, ele automaticamente ativa o backup, que assume o lugar do load balancer até que um administrador possa corrigir o problema no servidor original. 2.9.2 Piranha Segundo Ludolf (2011), o Piranha é uma das ferramentas de clustering da Red Hat Inc., que inclui o módulo IPVS do kernel (Gerencia os recursos do sistema operacional e permite que os programas façam uso deles), uma tecnologia de monitoração do cluster e uma interface web para configuração do cluster. A tecnologia de monitoração do Piranha tem como propósito averiguar o status dos servidores de balanceamento ativo e backup, e também verificar a disponibilidade dos serviços nos servidores componentes: reais. O Piranha é constituído dos seguintes 52 • Código de kernel do IPVS; • Daemon do LVS que gerencia a tabela de roteamento utilizando a ferramenta “ipvsadm”; • Daemon nanny, responsável por monitorar os servidores e serviços nos servidores reais do cluster; • Daemon pulse responsável por controlar os outros daemons e chavear o LVS entre os Directors ativos e backup em caso de falha; • Ferramenta Piranha GUI para gerenciar e administrar o ambiente do cluster. 2.9.3 KeepAlived De acordo com KeepAlived (2012), KeepAlived é uma ferramenta que garante uma segurança para a estrutura, e ele possui algumas funcionalidades nativas interessantes como: • Redundância de Directors, ou seja, se o mestre falhar, o slave vai assumir; • Segurança dos servidores reais, ou seja, se um servidor real deixar de responder por um serviço, ele será automaticamente removido do ambiente; • Aviso constante, caso aconteça alguma falha no ambiente, o usuário poderá ser notificado por e-mail. 2.9.4 Ultra Monkey É um projeto criado para fornecer serviços de alta disponibilidade e de balanceamento de carga, utilizando o sistema operacional Linux para prover uma solução flexível que pode ser usada para diversas tarefas. Embora funcione sobre Linux, o software Ultra Monkey fornece clustering para qualquer serviço, de uma forma virtual, desde que executado num sistema operacional que possa comunicar usando TCP ou UDP. (ULTRA MONKEY, 2005) 53 3 BALANCEAMENTO DE CARGA DE SERVIDORES COM LVS Este capítulo mostra uma implementação de balanceamento de carga de servidores com LVS (Linux Virtual Server) de alta disponibilidade. O método LVS escolhido foi o Direct Routing, conforme descrito no capítulo anterior. Para tanto, foi criada uma infraestrutura de testes com máquinas virtuais conforme mostrado na figura 3.1, e é utilizado o software de virtualização Virtual Box. Foram criadas ao todo seis máquinas virtuais, sendo três Servidores Web (servidores que detêm os serviços oferecidos pelo cluster aos clientes), e dois Servidores LVS (responsáveis por receber as requisições vindas dos usuários finais e transmiti-las aos servidores do cluster, realizando o balanceamento), e uma para efetuar requisições. Em todas as máquinas virtuais da estrutura, foi utilizado o sistema operacional PUIAS/Springdale Linux 6.4. Tal distribuição foi escolhida por sua compatibilidade com os softwares necessários para implementação do LVS, o que não ocorreu com outras distribuições como Debian, Ubuntu Server e OpenSuse, também testadas. Figura 3. 1 - Arquitetura LVS Fonte: Elaborado pelos autores, 2014 54 O funcionamento da arquitetura implementada da estrutura será da seguinte maneira: a) A máquina cliente, através de um script php, fará requisições de páginas web; b) Tais requisições serão recebidas pelo servidor LVS primário, o qual direciona o pedido para um dos três servidores web; c) O servidor web escolhido recebe o pedido de página e responde ao cliente. A escolha do servidor web para o qual o pedido será direcionado é orientada pelo algoritmo de escalonamento utilizado. Neste sentido, foram testados oito algoritmos disponibilizados na ferramenta Piranha, utilizada neste trabalho para gerenciar o LVS, e cujos resultados estão descritos no próximo capítulo. Cabe salientar que a arquitetura montada, implementa alta disponibilidade do servidor LVS por meio de um segundo servidor, o qual assume o balanceamento em casos de falha do servidor LVS primário, sem que haja uma grande interrupção no sistema. 3.1 CONFIGURAÇÕES DOS SERVIDORES WEB Os servidores web disponibilizam os serviços que serão oferecidos para os clientes. Nestes servidores, além da instalação do Apache (software que implementa o serviço web), também foi instalado a ferramenta Monitorix, utilizada para obter relatórios referentes ao estado de vários componentes do servidor, tais como utilização de CPU, memória, disco, rede; comportamento do servidor Apache quanto ao número de requisições recebidas, consumo de memória e CPU. Além da instalação destes softwares, também foi feita a instalação e configuração do arptables, necessário para o perfeito funcionamento da estrutura do LVS quando implementado via Direct Routing (conforme descrito na seção 2.7). 3.1.1 Configurações de Rede Antes de iniciar as configurações, deve-se desabilitar o iptables e o SELinux nos três servidores web, uma vez que na distribuição PUIAS/Springdale, utilizada nos servidores web, o iptables e o SELinux vêm habilitados por padrão. O script 3.1 mostra os comandos necessários para desabilitar o iptables. 55 # service iptables save # service iptables stop # chkconfig iptables off Script 3.1 - Comandos para desabilitar o iptables Fonte: Elaborado pelos autores, 2014 O SELinux é desabilitado editando-se o arquivo “/etc/sysconfig/selinux” mudando a diretiva SELinux de permissive para disabled (script 3.2). # vi /etc/sysconfig/selinux # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead enforcing. # disabled - No SELinux policy is loaded. SELINUX=disabled of # SELINUXTYPE= can take one of these two values: # targeted - Targeted processes are protected, # mls - Multi Level Security protection. SELINUXTYPE=targeted Script 3.2 - Desabilitando o SELinux Fonte: Elaborado pelos Autores, 2014 Depois é necessário configurar as interfaces de rede dos três servidores web editando os arquivos /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-lo:0 (Scripts 3.3, 3.4, 3.5) . Servidor Web 1 # vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static IPADDR=192.168.0.101 NETMASK=255.255.255.0 # vi /etc/sysconfig/network-scripts/ifcfg-lo:0 DEVICE=lo:0 IPADDR=192.168.0.100 NETMASK=255.255.255.255 NETWORK=192.168.0.0 Script 3.3 - Configuração IP nas interfaces do servidor web 1 Fonte: Elaborado pelos autores, 2014 e 56 Servidor Web 2 # vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static IPADDR=192.168.0.102 NETMASK=255.255.255.0 # vi /etc/sysconfig/network-scripts/ifcfg-lo:0 DEVICE=lo:0 IPADDR=192.168.0.100 NETMASK=255.255.255.255 NETWORK=192.168.0.0 Script 3.4 - Configuração IP nas interfaces do servidor web 2 Fonte: Elaborado pelos autores, 2014 Servidor Web 3 # vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static IPADDR=192.168.0.103 NETMASK=255.255.255.0 # vi /etc/sysconfig/network-scripts/ifcfg-lo:0 DEVICE=lo:0 IPADDR=192.168.0.100 NETMASK=255.255.255.255 NETWORK=192.168.0.0 Script 3.5 Configuração IP nas interfaces do servidor web 3 Fonte: Elaborado pelos autores, 2014 É importante notar que a configuração da interface virtual lo:0, como mostrado, é a mesma para os três servidores web. O IP aqui utilizado deve ser o mesmo IP da interface virtual dos servidores LVS. Depois de editado os arquivos, para efetivar as configurações são necessários executar os comandos mostrados no script 3.6 nos três servidores. # ifdown eth0 # ifup eth0 # ifup lo:0 && echo "ifup lo:0" >> /etc/rc.local Script 3.6 - Ativação das configurações IP nas interfaces Fonte: Elaborado pelos autores, 2014 57 3.1.2 Instalação e Configuração do Apache O serviço web foi implementado através do software Apache. Aqui são mostrados os procedimentos para sua instalação e configuração, os quais devem ser feitos da mesma forma nos três servidores web (web1, web2 e web3). O script 3.7 mostra os comandos para os procedimentos para: a) Atualizar a base de informações do sistema de gerenciamento de pacotes do Linux; b) Instalar o pacote do Apache; c) Configurar o serviço para inicializar automaticamente junto com a inicialização do sistema; d) Inicialização manual do Apache. # yum upgrade –y --------------------# yum install httpd # chkconfig httpd on # service httpd start Script 3.7 - Procedimentos de instalação e configuração inicial do Apache Fonte: Elaborado pelos autores, 2014 Já é possível testar o funcionamento do serviço web apontando um navegador para os endereços IPs dos servidores web. O resultado é a página de bem vindo padrão do Apache. Porém, como o Apache foi instalado nos três servidores, deve ser criada uma página específica para identificar cada servidor. Para tanto, é necessário criar um arquivo com o nome index.html dentro do diretório /var/www/html/, cujo conteúdo será WEB 1 para identificar o servidor web1, WEB 2 para identificar o servidor web2 e WEB 3 para o servidor web3. O próximo procedimento é configurar o Apache para gerar informações mais detalhadas que são coletadas e analisadas pela ferramenta Monitorix. Para tanto, edite o arquivo httpd.conf, habilite a diretiva “ExtendedStatus On” e adicione as configurações mostradas no script 3.8. 58 # vi /etc/httpd/conf/httpd.conf ExtendedStatus On <Location /server-status> SetHandler server-status Order allow,deny Allow from all </Location> Script 3.8 - Configuração do Apache para gerar informações mais detalhadas Fonte: Elaborado pelos autores, 2014 Após efetuar as modificações na configuração do Apache é necessário reiniciá-lo. 3.1.3 Instalação e Configuração do Monitorix Monitorix é uma ferramenta livre projetada para monitorar tanto a utilização dos recursos de hardware (CPU, Memória, Rede e Disco.) da máquina, quanto a utilização dos serviços (web e smtp.) ao executar em um sistema operacional Linux. Tais informações são exibidas em gráficos com a sua própria interface web. Foi escrito em linguagem Perl e licenciado sob os termos da General Public License (GNU) conforme publicado pela Free Software Foundation (FSP). Antes da instalação do Monitorix é preciso instalar alguns softwares necessários para sua execução, denominados dependências, conforme mostrado no script 3.9. # yum install MailTools rrdtool perl-MIME-Lite rrdtool-perl perl-CGI perl-libwww-perl perl-DBI perl- perl-XML-Simple perl-Config-General wget #wget http://springdale.math.ias.edu/data/puias/unsupported/6/i386/ perl-HTTP-Server-Simple-0.42-1.puias6.noarch.rpm # rpm -ivh perl-HTTP-Server-Simple-0.42-1.puias6.noarch.rpm Script 3.9 - Instalação das dependências do Monitorix Fonte: Elaborado pelos autores, 2014 59 Depois de instaladas as dependências, o Monitorix pode ser baixado e instalado por meio dos comandos mostrados no script 3.10. # wget http://www.monitorix.org/monitorix-3.3.0-1.noarch.rpm # rpm -ivh monitorix-3.3.0-1.noarch.rpm Script 3.10 - Comandos para download e instalação do Monitorix Fonte: Elaborado pelos autores, 2014 O próximo passo é configurar o Monitorix para iniciar automaticamente durante a inicialização do sistema. Isso é feito através do comando “chkconfig -level 35 monitorix on”, o qual deve ser executado com privilégio de root. Para que o Monitorix processe as informações do funcionamento do Apache, é preciso editar seu arquivo de configuração com o comando “vi /etc/monitorix.conf” e modificar a linha “apache = n”, para “apache = y”. Inicialize o Monitorix por meio do comando “service monitorix start”. 3.1.4 Instalação e Configuração do Arptables O arptables se faz necessário devido ao método de implementação LVS Direct Routing utilizado neste trabalho, uma vez que neste método o servidor LVS precisa estar na mesma rede IP dos servidores web e os servidores web devem responder diretamente aos clientes. O problema que surge é que tanto o servidor LVS quanto os servidores web possuem o IP Virtual que é usado pelo cliente para requisitar os serviços. Entretanto, somente o servidor LVS deve responder aos pedidos ARP vindos do cliente (ou roteador da rede no caso do cliente estar fora da rede), pois caso os servidores web também respondam, os pedidos não passam pelo servidor LVS e, portanto, não acontece o balanceamento de carga. Os comandos para instalação e configuração do arptables nos três servidores web são mostrados no script 3.11. Como pode ser notado, após a instalação do pacote pelo comando “yum”, aplicou-se uma regra para evitar que os servidores web respondam a pedidos ARP para o IP Virtual, bem como uma regra para trocar o IP de qualquer reposta ou pedido ARP que esteja saindo com o IP Virtual. 60 Servidor Web 1 # yum install arptables_jf -y # arptables -A IN -d 192.168.0.100 -j DROP # arptables -A OUT -d 192.168.0.100 -j mangle --mangle-ip-s 192.168.0.101 # /etc/init.d/arptables_jf save Servidor Web 2 # yum install arptables_jf -y # arptables -A IN -d 192.168.0.100 -j DROP #arptables -A OUT -d 192.168.0.100 -j mangle --mangle-ip-s 192.168.0.102 # /etc/init.d/arptables_jf save Servidor Web 3 # yum install arptables_jf -y # arptables -A IN -d 192.168.0.100 -j DROP # arptables -A OUT -d 192.168.0.100 -j mangle --mangle-ip-s 192.168.0.103 # /etc/init.d/arptables_jf save Script 3.11 - Comandos instalação e configuração do arptables Fonte: Elaborado pelos autores, 2014 3.2 CONFIGURAÇÕES DOS SERVIDORES LVS Antes de iniciar as configurações, deve-se desabilitar o iptables e o SELinux nos dois servidores LVS, uma vez que na distribuição PUIAS/Springdale, utilizada nestes servidores, o iptables e o SELinux vêm habilitados por padrão. Estes comandos são os mesmos executados para os servidores web (seção 3.1.1), conforme mostrado na figura 3.2. O SELinux é desabilitado editando-se o arquivo “/etc/sysconfig/selinux” mudando SELinux de permissive para disabled (script 3.2, seção 3.1.1). 61 Depois é necessário configurar a interface de rede real (eth0) e a interface de rede virtual (eth0:1) dos dois servidores LVS editando os arquivos /etc/sysconfig/network-scripts/ifcfg-eth0 e /etc/sysconfig/network-scripts/ifcfg-eth0:1 (scripts 3.12 e 3.13). Servidor LVS 1 # vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static IPADDR=192.168.0.8 NETMASK=255.255.255.0 # vi /etc/sysconfig/network-scripts/ifcfg-eth0:1 DEVICE=eth0:1 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static IPADDR=192.168.0.100 NETMASK=255.255.255.0 Script 3.12 - Configuração IP nas interfaces do servidor LVS 1 Fonte: Elaborado pelos autores, 2014 Servidor LVS 2 # vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static IPADDR=192.168.0.9 NETMASK=255.255.255.0 # vi /etc/sysconfig/network-scripts/ifcfg-eth0:1 DEVICE=eth0:1 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static IPADDR=192.168.0.100 NETMASK=255.255.255.0 Script 3.13 - Configuração IP nas interfaces do servidor LVS 2 Fonte: Elaborado pelos autores, 2014 Depois de editado os arquivos, para efetivar as configurações são necessários executar os comandos mostrados no script 3.14 nos dois servidores. 62 # # # # ifdown eth0 ifup eth0 ifdown eth0:1 ifup eth0:1 Script 3.14 - Ativação das configurações IP nas interfaces dos servidores LVS Fonte: Elaborado pelos autores, 2014 Agora em ambos servidores (lvs1 e lvs2) deve-se atualizar a base de dados do gerenciador de pacotes do sistema através do comando “yum upgrade -y”. Finalizada a atualização é preciso instalar o pacote ipvsadm que gerencia a distribuição das conexões aos servidores; e também instalar o pacote piranha que é a interface de administração, através da qual se configura os servidores que fazem parte do cluster de balanceamento. O script 3.15 resume estes procedimentos. # yum upgrade -y # yum install –y ipvsadm piranha Script 3.15 - Instalação dos pacotes ipvsadm e piranha nos servidores LVS Fonte: Elaborado pelos autores, 2014 Após instalar os pacotes, é necessário editar o arquivo sysctl.conf em ambos os servidores LVS alterando ou acrescentando (caso não existam) as diretivas do script 3.16, as quais são responsáveis por ativar o roteamento (forwarding) de pacotes e ajustar as configurações do protocolo ARP, devido ao problema descrito no início da seção 3.1.4. # vi /etc/sysctl.conf ... net.ipv4.ip_forward = 1 net.ipv4.conf.eth0.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.eth0.arp_announce = 2 ... Script 3.16 - Configurações sysctl nos servidores LVS Fonte: Elaborado pelos autores, 2014 O próximo passo é definir uma senha de acesso para a interface de administração do software de gerenciamento LVS Piranha, bem como iniciar este serviço (script 3.17). 63 # piranha-passwd # service piranha-gui start # chkconfig piranha on Script 3.17 - Configuração e inicialização do software piranha Fonte: Elaborado pelos autores, 2014 Iniciado o serviço, o acesso à interface do Piranha é feito por meio de um navegador, digitando-se o endereço http://192.168.0.8:3636 para o servidor LVS1, ou http://192.168.0.9:3636 para o servidor LVS2. A figura 3.2 mostra a interface de login do Piranha. Figura 3. 2 - Interface de Login do software Piranha Fonte: Elaborado pelos autores, 2014 3.2.1 Configuração do Cluster de Balanceamento Via Software Piranha Nesta etapa faz-se a construção do cluster de balanceamento, cujos procedimentos são: a) Definir o endereço IP do servidor LVS Primário e do servidor LVS Secundário; b) Adicionar um Servidor Virtual ao cluster LVS; c) Definir a política de balanceamento; 64 d) Adicionar e ativar os servidores reais. As próximas seções detalham tais procedimentos 3.2.1.1 Definindo IP para os Servidores LVS Primário e Secundário Este procedimento é realizado através da opção GLOBAL SETTINGS da interface do software piranha (figura 3.3). Como pode ser visto, foi definido o IP 192.168.0.8 para o servidor LVS Primário e também foi definido o tipo de LVS como sendo Direct Routing, clicando-se no botão rotulado como Direct Routing. É importante notar que a mesma configuração deve ser feita no servidor LVS2. Figura 3. 3 - Definição do IP primário e tipo de LVS no servidor LVS1 e LVS2 Fonte: Elaborado pelos autores, 2014 A definição do servidor LVS Secundário (backup) é feita através da opção REDUNDANCY da interface do software Piranha (figura 3.4), bem como as configurações de como o servidor secundário vai monitorar o status de funcionamento do servidor LVS Primário, o que é feito via a ferramenta Heartbeat. Esta ferramenta dispara pings para o servidor LVS primário em intervalos 65 determinados para monitorar seu status. A seguir uma breve descrição dos itens que devem ser configurados: Redundant server public IP: endereço IP LVS de backup (lvs2); Heartbeat Interval (seconds): determina os segundos entre heartbeats, o intervalo em que o servidor LVS secundário irá checar o status funcional do servidor LVS primário (lvs1); Assume dead after (seconds): Caso o LVS primário não responda após este número de segundos, o LVS de backup irá assumir o serviço; Heartbeat runs on port: porta na qual o heartbeat se comunica com o LVS primário. Aporta padrão é a 539. Figura 3. 4 - Definição do IP Secundário e configurações de monitoramento Fonte: Elaborado pelos autores, 2014 3.2.1.2 Adicionar um Servidor Virtual ao Cluster LVS Por meio do botão rotulado ADD da opção VIRTUAL SERVERS adiciona-se um servidor Virtual ao cluster LVS, definindo-se o IP Virtual dos servidores LVS, através do qual os clientes do cluster solicitarão acesso aos serviços dos servidores 66 reais, a interface virtual e o algoritmo (política) de escalonamento. A figura 3.5 mostra as configurações disponíveis, as quais são descritas a seguir: Name: Nome do servidor virtual; Application port: Porta da aplicação; Virtual IP Address: Ip virtual; Device: interface virtual; Re-entry Time: Segundos no qual o servidor LVS ativo irá reintegrar um servidor real ao cluster após alguma falha; Service Timeout: intervalo de tempo em que o servidor não responde e será retirado do cluster; Quiesce Server: Habilita a limpeza espontânea das tabelas de roteamento caso um host anteriormente retirado retorna ao status de ativo; Load monitoring tool: Utilizado para monitorar os status dos hosts; Scheduling: É o algoritmo que será empregado para determinar como será executado o balanceamento das conexões entre os servidores reais. Figura 3. 5 - Adicionando um servidor virtual ao cluster LVS Fonte: Elaborado pelos autores, 2014 Para salvar estas configurações deve-se clicar no botão rotulado ACCEPT. 67 3.2.1.3 Adicionar e Ativar os Servidores Reais Na mesma interface de adição do servidor virtual, clicando-se em REAL SERVER, adicionam-se os servidores reais que responderão ao serviço. Neste trabalho serão três servidores web com IPs: 192.168.0.101, 192.168.0.102 e 192.168.0.103. Após clicar no botão rotulado ADD da interface REAL SERVER, configura-se o IP do Servidor web, a porta e o peso que será utilizado pelo algoritmo de balanceamento de carga (figura 3.6). Para salvar a configuração deve clicar no botão ACCEPT. Este mesmo procedimento deve ser feito para cada um dos servidores reais do cluster. Figura 3. 6 - Adicionando um servidor real ao cluster LVS Fonte: Elaborado pelos autores, 2014 A figura 3.7 ilustra os três servidores reais adicionados e ativados neste trabalho. Figura 3. 7 – Servidores reais adicionados ao cluster LVS Fonte: Elaborado pelos autores, 2014 68 3.2.2 Configuração dos Servidores LVS Via Arquivo Nas seções anteriores foi mostrado como se configurar o cluster de servidores LVS via a interface web da ferramenta de gerenciamento Piranha, a qual facilita este procedimento. Todas estas configurações são armazenadas em um arquivo texto localizado em /etc/sysconfig/ha/lvs.cf. É possível sua edição direta sem utilizar a interface web. O script 3.18 mostra estas configurações. serial_no = 164 primary = 192.168.0.8 service = lvs rsh_command = ssh backup_active = 1 backup = 192.168.0.9 heartbeat = 1 heartbeat_port = 539 keepalive = 2 deadtime = 10 network = direct debug_level = NONE monitor_links = 1 virtual server1 { active = 1 address = 192.168.0.100 eth0:1 port = 80 send = "GET / HTTP/1.1\r\n\r\n" expect = "HTTP" load_monitor = uptime scheduler = rr protocol = tcp timeout = 10 reentry = 180 quiesce_server = 0 server websrv1 { address = 192.168.0.101 active = 1 weight = 1 } server websrv2 { address = 192.168.0.102 active = 1 weight = 1 } server websrv3 { address = 192.168.0.103 active = 1 weight = 1 } } Script 3.18 - Arquivo com as configurações do cluster LVS criado pelo Piranha Fonte: Elaborado pelos autores, 2014 69 É possível, após a configuração do servidor LVS Primário, copiar este arquivo para o servidor LVS Secundário, pois se evita erros de configuração, onde estas devem ser idênticas em ambos os servidores. 3.3 TESTE DE FUNCIONAMENTO DA ESTRUTURA Realizadas as configurações nos servidores LVS e servidores web reais, para testar o funcionamento do balanceamento basta abrir um navegador e inserir o IP virtual 192.168.0.100. A figura 3.8 mostra a resposta a um pedido, o qual foi atendido pelo servidor web 3. Figura 3. 8 - Teste de funcionamento da estrutura Fonte: Elaborado pelos autores, 2014 Com a estrutura do LVS configurada e em funcionamento; o próximo capitulo apresenta alguns testes que abordam e comparam os algoritmos de escalonamento oferecidos por essa estrutura. 70 4 ANÁLISE DO FUNCIONAMENTO E DESEMPENHO DO LVS Com o objetivo de demonstrar o funcionamento e desempenho da estrutura LVS proposta, foram realizados testes com os diversos algoritmos de escalonamento disponíveis no LVS. O uso destes algoritmos foi configurado via o software Piranha e informações de comportamento dos servidores web foram coletadas por meio do software Monitorix. Este capítulo mostra a metodologia de testes dos servidores web na estrutura LVS, bem como uma análise das informações coletadas. 4.1 METODOLOGIA DE TESTES O teste consiste em obter resultados em relação ao comportamento da estrutura LVS aplicando-se cada um dos oito algoritmos de escalonamento disponíveis pela ferramenta Piranha, que são: Round-Robin, Weighted RoundRobin, Least-Connection, Weighted Least-Connections, Locality-Based LeastConnection, Locality-Based Least-Connection Scheduling with Replication, Destination Hash e Source Hash. Cada teste com cada algoritmo teve uma duração de 24 horas, onde se pode ter uma ideia do real funcionamento da estrutura com cada algoritmo de escalonamento selecionado. Para automatizar as requisições de páginas para os servidores web, foi utilizado um script escrito em linguagem PHP (script 4.1) onde se executa em uma máquina com a distribuição Linux Puias Linux. <?php $WEB1=0; $WEB2=0; $WEB3=0; for($i=0;$i<35192000;$i++){ $f=fopen('http://192.168.0.100/index.html','rb'); $data=''; while(!feof($f)) $data.=fread($f,5); fclose($f); $data = str_replace("\r\n",'',trim($data)); print "|$data|\n"; if (strpos($data,'WEB 1')!==false) $WEB1++; else if (strpos($data,'WEB 2')!==false) $WEB2++; else if (strpos($data,'WEB 3')!==false) $WEB3++; else print("\n Conteudo nao encontrado"); } print "\nWEB 1: $WEB1 \nWEB 2: $WEB2 \nWEB 3: $WEB3\n"; ?> Script 4.1 - Script de requisição de página Fonte: Elaborado pelos autores, 2014 71 Além da confecção do script, alguns preparativos são necessários para executar o script nesta distribuição, tais como: desabilitar o iptables e o selinux; configurar a interface de rede; instalar o pacote da linguagem PHP. O script 4.2 mostra os comandos relacionados com estes procedimentos. # # # # service iptables save service iptables stop chkconfig iptables off vi /etc/sysconfig/selinux ... SELINUX=disabled ... # vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet ONBOOT=yes BOOTPROTO=static IPADDR=192.168.0.56 NETMASK=255.255.255.0 # # # # ifdown eth0 ifup eth0 yum upgrade -y yum install php Script 4.2 - Configurações na máquina de requisição de páginas Fonte: Elaborado pelos autores, 2014 Devido à forma de coleta de dados da ferramenta Monitorix, a qual fornece gráficos dos dados coletados durante o tempo de 24 horas, mensal e anual, foi disparado um total de 35.192.000 requisições de página para atingir um tempo 24 horas de teste. 4.2 TESTES COM O ALGORITMO ROUND-ROBIN (RR) Este algoritmo distribui as requisições igualmente entre os servidores reais. Sua configuração no LVS é através da interface gráfica do Piranha, que é mostrada na figura 4.1. 72 Figura 4. 1 - Configurações do algoritmo Round-Robin no LVS Fonte: Elaborado pelos autores, 2014 Após o termino das requisições o servidor WEB1 respondeu por 11.730.667 vezes, o servidor WEB2 respondeu por 11.730.667 vezes e o servidor WEB3 respondeu por 11.730.666 vezes (figura 4.2), mostra-se assim que o algoritmo cumpriu o proposto no balanceamento igualitário de carga entre os servidores web e sendo recomendado seu uso quando os servidores web possuem os mesmos recursos de hardware. Figura 4. 2 - Totalização das requisições recebidas - Algoritmo RR Fonte: Elaborado pelos autores, 2014 73 Para comprovar a real distribuição de carga entre os servidores web, foram coletadas informações de uso de recursos de CPU, memória e rede destes servidores, via ferramenta Monitorix. O gráfico da figura 4.3 mostra a média de requisições por segundo recebidas pelo Apache no servidor WEB1 durante o teste com o algoritmo round-robin, o qual foi de 115 acessos por segundo. Valor idêntico foi obtido nos demais servidores WEB2 e WEB3. Figura 4. 3 - Média de requisições recebidas pelo Apache no servidor WEB1 Fonte: Elaborado pelos Autores, 2014 Ainda ao considerar as requisições, a figura 4.4 ilustra o gráfico de tráfego de entrada e saída na interface eth0 do servidor WEB1, com média de entrada de 52 kbytes por segundo e de saída de 80 kbytes por segundo. O mesmo tráfego foi medido na interface de rede dos outros dois servidores WEB2 e WEB3. Figura 4. 4 - Média de tráfego de entrada/saída de rede no servidor WEB1 Fonte: Elaborado pelos autores, 2014 74 Para atender todas as requisições recebidas durante o teste, o Apache utilizou em média cerca de 2.5% de CPU da máquina, conforme mostrado na figura 4.5. O mesmo consumo ocorreu também nos outros dois servidores WEB2 e WEB3. Figura 4. 5 - Média de consumo de CPU no servidor WEB1 Fonte: Elaborado pelos autores, 2014 Ainda ao considerar o uso de recursos da máquina durante os testes, o servidor WEB1 registrou uma média de uso de 478 Megabytes de memória física, 400 Megabytes de cache (memória de acesso rápido), e oscilou entre 50 e 30 Megabytes em buffers (memória temporária), conforme figura 4.6. Consumo similar de memória foi registrado nos demais servidores. Figura 4. 6 - Média de consumo de memória no servidor WEB1 Fonte: Elaborado pelos autores, 2014 4.3 TESTES COM O ALGORITMO WEIGHTED ROUND ROBIN (WRR) Este algoritmo atribui requisições aos servidores reais equivalentes ao peso. Servidores com um valor maior de peso recebem novas requisições primeiramente e respondem a mais requisições do que os servidores com um valor menor de peso. A figura 4.7 mostra a configuração do LVS para utilizar o algoritmo Weighted Round 75 Robin, onde foi adicionado peso 5 ao servidor WEB1 e peso 1 aos outros dois servidores. Figura 4. 7 - Configurações do algoritmo Weighted Round Robin no LVS Fonte: Elaborado pelos autores, 2014 Após o termino das requisições o servidor WEB1 respondeu por 24.940.830 vezes, o servidor WEB2 respondeu por 5.125.585 vezes e o servidor WEB3 respondeu por 5.125.585 vezes (figura 4.8), mostrando que o algoritmo distribuiu uma carga de requisições maior para o servidor WEB1 de maior peso, em detrimento dos demais servidores que ficaram ambos com uma carga menor, é recomendado seu uso quando os servidores web possuem recursos de hardware diferentes. Figura 4. 8 - Totalização das requisições recebidas - Algoritmo WRR Fonte: Elaborado pelos autores, 2014 76 Para comprovar a real distribuição de carga entre os servidores web, foram coletadas informações de uso de recursos de CPU, memória e rede destes servidores, via ferramenta Monitorix. O gráfico da figura 4.9 mostra a média de requisições por segundo recebidas pelo Apache no servidor WEB1 durante o teste com o algoritmo Weighted Round Robin, o qual foi de 250 acessos por segundo, o qual foi 5 vezes maior que o valor obtido nos demais servidores WEB2 e WEB3. Figura 4. 9 - Requisições - Apache no WEB1 - algoritmo WRR Fonte: Elaborado pelos autores, 2014 Ainda ao considerar as requisições, a figura 4.10 ilustra o gráfico de tráfego de entrada (110 kbytes por segundo) e saída (170 Kbytes por segundo) na interface eth0 do servidor WEB1, tráfego este que foi cerca de 5 vezes maior que o medido na interface de rede dos outros dois servidores WEB2 e WEB3. Figura 4. 10 - Tráfego de entrada/saída de rede no WEB1 - algoritmo WRR Fonte: Elaborado pelos autores, 2014. 77 Para atender todas as requisições recebidas durante o teste, o Apache apresentou picos de 20% de utilização de CPU da máquina, conforme mostrado na figura 4.11. Nos outros servidores, o consumo foi de 4% no servidor WEB2 e 6% no servidor WEB3. Figura 4. 11 - Média de consumo de CPU no - WEB1 - algoritmo WRR Fonte: Elaborado pelos autores, 2014 Ainda ao considerar o uso de recursos da máquina durante os testes, o servidor WEB1 registrou uma média de uso de 480 Megabytes de memória física, 410 Megabytes de cache (memória de acesso rápido), e oscilou entre 30 e 10 Megabytes em buffers (memória temporária), conforme figura 4.12. Consumo similar de memória foi registrado nos demais servidores. Figura 4. 12 - Média de consumo de memória no WEB1 - algoritmo WRR Fonte: Elaborado pelos autores, 2014 78 4.4 RESULTADOS DOS TESTES COM DEMAIS ALGORITMOS Os mesmos procedimentos dos testes anteriores foram realizados com os demais algoritmos disponíveis no LVS via interface do software Piranha. Os resultados obtidos são mostrados no Quadro 4.1. Quadro 4. 1 - Resultados de testes com algoritmos de escalonamento Fonte: Elaborado pelos autores, 2014 Embora os resultados obtidos nos testes com os algoritmos LBLC, LBLCR, DH e SH possam parecer estranhos, principalmente no que tange as informações na coluna Requisições Respondidas, estes retratam a realidade do funcionamento de cada algoritmo, conforme descrito a seguir: 79 LBLC: O servidor LVS busca transmitir todas as conexões de um endereço IP particular para o mesmo servidor, ou seja, a primeira vez que uma requisição surgir, o servidor LVS escolherá um servidor web para atendê-la, e todas as requisições que surgirem na sequência deste cliente permanecerão a serem transmitidas para o mesmo servidor escolhido. Se o servidor escolhido estiver sobrecarregado ou indisponível, as requisições serão enviadas ao servidor com menos conexões. No caso desse trabalho o servidor WEB 1 conseguiu atender a todas as requisições sem se sobrecarregar; LBLCR: É similar ao algoritmo LBLC, mas com um avanço, o servidor LVS mantém um mapeamento de um cliente para um conjunto de servidores que podem atendê-lo. Se todos os servidores do conjunto estiverem sobrecarregados, o servidor LVS separa um servidor com menos conexões e o acrescenta ao conjunto. Caso este conjunto não se modifique em um intervalo de tempo específico (seis minutos, intervalo padrão como definido no código do IPVS), o servidor com maior carga será excluído. Nos testes apresentados anteriormente, o servidor WEB 1 conseguiu atender a todas as requisições sem se sobrecarregar; DH: O servidor LVS sempre envia requisições de um mesmo endereço IP de origem para o mesmo servidor web na estrutura do LVS, usando uma lista estática de endereços de destino. O algoritmo é útil quando o Servidor Real é um servidor Proxy, cache ou alguma outra aplicação autenticada, pois irá sempre transmitir a requisição do cliente para o mesmo servido do cluster, não perdendo a autenticação, caso contrário o servidor vai ficar eliminando a autenticação, pois a cada requisição, a solicitação do cliente pode ir para um servidor diferente. Nesse trabalho não foi criado uma tabela hash para esse algoritmo, pois se tratam de servidores web; mas com os resultados dos testes pode-se observar que as requisições foram enviadas para o mesmo servidor do cluster (WEB 1), onde foram atendidas sem que houvesse alguma paralisação no serviço; SH: Este algoritmo pode ser usado quando o servidor LVS precisa garantirse que os pacotes de resposta são enviados de volta pelo mesmo roteador ou firewall no qual a requisição teve origem. Este algoritmo de escalonamento é apenas necessário quando o servidor LVS possui mais de uma interface física de rede e necessita saber para qual firewall ou roteador enviar os pacotes de resposta, e também para aplicações autenticadas. Como no algoritmo DH, não foi criado uma tabela hash para esse algoritmo; mas com os resultados dos testes pode-se 80 observar que as requisições foram enviadas para o mesmo servidor do cluster (WEB 2), onde foram atendidas sem que houvesse alguma paralisação no serviço. O servidor WEB 1, não respondeu primeiro por ter uma conexão ativa, então consequentemente o servidor WEB 2 respondeu as requisições. Após análise dos resultados, pode-se concluir que os mesmos comprovam o funcionamento correto de cada algoritmo de balanceamento de carga do LVS. 81 CONCLUSÃO O objetivo deste trabalho foi desenvolver um serviço web confiável onde foi utilizada a tecnologia do LVS, com a estrutura Direct Routing e foi utilizada a ferramenta Piranha para sua configuração e monitoramento. A estrutura pode ser reaproveitada para que possa ser usada em outros tipos de serviços como e-mail, impressão, banco de dados, além de explorar os outros métodos do LVS como NAT e IP Tunneling, e também a sua função de alta disponibilidade. O objetivo foi atingido com sucesso, onde a estrutura se mostrou confiável nos vários testes executados. Toda estrutura foi construída onde se fez o uso de Software Livre, o que permite a redução de custos numa possível implantação deste trabalho. A pesquisa para a elaboração do trabalho foi intensa, há pouco material sobre a tecnologia LVS, a maioria artigos, o que torna a sua implementação um pouco mais difícil. Do início ao fim do trabalho houve várias dificuldades como a escolha da distribuição Linux dos servidores virtuais, software de gerenciamento do LVS, escolhas dos sistemas operacionais onde seria instalado o software de servidor web e como obter os resultados do desempenho de cada servidor web de forma gráfica. Para escolher a distribuição Linux que seria o servidor LVS, foram testadas as distribuições Debian, Ubuntu, OpenSuse e Springdale /Puias Linux. Ubuntu, Debian e OpenSuse apresentaram problemas em relação ao funcionamento do LVS, principalmente com a sua ferramenta para gerenciamento o Ultra Monkey, onde a mesma se encontra defasada. Já a distribuição Linux Puias se mostrou extremamente confiável, com o software de gerenciamento Piranha, funcionou sem erros e foi definido para fazer parte da estrutura. Para os sistemas operacionais dos servidores web foram testados o Puias Linux, Mac OS X Snow Leopard e Windows Server 2008 Server Core. Tanto o Windows quanto o Mac não se mostraram estáveis. O Windows em relação ao software servidor web, onde o apache não funcionava corretamente, somente o IIS funcionava. O Mac se mostrava instável, travava e consumia muita memória, além da incompatibilidade com o software de virtualização, o VirtualBox. Já o Puias com o apache tinha total estabilidade e compatibilidade com os servidores LVS (com a 82 mesma distribuição), por isso foi escolhido como distribuição para os três servidores web. O software de servidor web foi mais fácil de ser escolhido, pois levou em conta a compatibilidade com os sistemas operacionais, o apache foi à escolha mais coerente. Para gerar resultados da implementação em gráficos foi feito uma pesquisa com três softwares diferentes: Zabbix, Cacti e Monitorix; onde Zabbix e cacti além de apresentar erros não apresentavam relatórios do apache por padrão, já o Monitorix ofereceu uma instalação e configuração amigável e uma interface intuitiva. Por conta desses resultados foi definido que o Monitorix seria a ferramenta para a geração de gráficos. A junção de todas essas pesquisas, problemas e dificuldades, fizeram com que enriquecesse o conhecimento dos integrantes que realizaram o trabalho, e por consequência fez com que o trabalho fosse concluído com sucesso. 83 REFERÊNCIAS BIBLIOGRÁFICAS AFRICANIDADE. Jornal on-Line Africanidade.com, 2008. Disponivel em: <http://www.africanidade.com/articles/835/1/Indisponibilidade-do-siteAfricanidadecom/Paacutegina1.html>. Acesso em: 22 mar. 2014. AZEREDO, P. Revista TI. Timaster, 2006. Disponivel <http://www.timaster.com.br/revista/materias/main_materia.asp?codigo=1098>. Acesso em: 22 abr. 2014. em: COTA, ALAN. Alta Disponibilidade com LVS. Viva o Linux, 2005. Disponivel em: <http://www.vivaolinux.com.br/artigo/Alta-Disponibilidade-com-LVS/>. Acesso em: 20 setembro 2013. DANTAS, M. Tecnologia de Redes de Comunicação e Computadores. São Paulo: Axcel Books do Brasil, 2002. E-COMMERCE News. tráfego deixa Groupon inoperante, 2010. Disponivel em: <http://ecommercenews.com.br/noticias/balancos/trafego-deixa-groupon-inoperante26-horas-em-30-dias>. Acesso em: 01 maio 2014. FARIAS, P. C. B. Curso Básico de Redes Parte 1. Julio Battisti, 2006. Disponivel em: <http://www.juliobattisti.com.br/tutoriais/paulocfarias/redesbasico001.asp>. Acesso em: 05 set. 2013. FOROUZAN, B. A. Comunicação de Dados e Redes de Computadores. 4ª. ed. São Paulo: Mcgraw Hill- Artmed, 2008. GOVERNO ELETRÔNICO. guiacluster.pdf. Programa de Governo Eletrônico Brasileiro, 2006. Disponivel em: <http://www.governoeletronico.gov.br/anexos/guiade-cluster>. Acesso em: 24 setembro 2013. KEEPALIVED. keepalived para Linux. keepalived, 2012. <http://www.keepalived.org/>. Acesso em: 22 outubro 2013. Disponivel em: LUDOLF, D. Piranha de Red Hat. Seja Livre, 2011. Disponivel <http://sejalivre.org/piranha-de-red-hat/>. Acesso em: 26 setembro 2013. em: MACK, JOSEPH. LVS-Mini-Howto. Austintek.com, 2004. Disponivel em: <http://www.austintek.com/LVS/LVS-HOWTO/mini-HOWTO/LVS-mini-HOWTOpt.html>. Acesso em: 20 Maio 2014. MENDES, D. R. Redes de Computadores Teoria e Prática, 2007. Disponivel em: <http://novatec.com.br/livros/redescom/capitulo9788575221273.pdf>. Acesso em: 15 out. 2013. ODOM, W. Cisco CCNA TM. 3ª. ed. Rio de Janeiro: Alta Books, 2003. PITANGA, M. Computação em Cluster: O Estado da Arte da Computação. 1ª. ed. 84 São Paulo: Brasport, 2003. SOARES, L. F. G. Redes de Computadores das Lans,Mans e Wans ás Redes ATM. 2 edição. ed. Rio de Janeiro: campus, 1995. STALLINGS, W. Redes e Sistemas de Comunicação de Dados. 5ª. ed. Rio de Janeiro: campus, 2005. TANENBAUM, A. S. Redes de Computadores. 3ª. ed. Rio de Janeiro: Campus, 1997. TANENBAUM, A. S. Redes de Computadores. 4ª. ed. Rio de Janeiro: Campus, 2003. TORRES, G. Redes de Computadores Curso Completo. Rio de Janeiro: Axcel Books, 2001. TORRES, G. Redes de computadores. Versão Revisada. ed. Rio de Janeiro: Novaterra, 2009. ULTRA MONKEY. Ultra Monkey: About. Ultra Monkey, 2005. Disponivel em: <http://www.ultramonkey.org/about.shtml>. Acesso em: 26 outubro 2013.