Você está na página 1de 48

UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA CURSO DE CINCIA DA COMPUTAO

BALANCEAMENTO DE CARGA DE SERVIDORES VIRTUALIZADOS

TRABALHO DE GRADUAO

Gustavo Foletto Mora

Santa Maria, RS, Brasil 2008

BALANCEAMENTO DE CARGA DE SERVIDORES VIRTUALIZADOS

por

Gustavo Foletto Mora

Trabalho de Graduao apresentado ao Curso de Cincia da Computao da Universidade Federal de Santa Maria (UFSM, RS), como requisito parcial para a obteno do grau de Bacharel em Cincia da Computao

Orientador: Prof. Benhur de Oliveira Stein

Trabalho de Graduao N. 268 Santa Maria, RS, Brasil 2008

Universidade Federal de Santa Maria Centro de Tecnologia Curso de Cincia da Computao

A Comisso Examinadora, abaixo assinada, aprova o Trabalho de Graduao

BALANCEAMENTO DE CARGA DE SERVIDORES VIRTUALIZADOS elaborado por Gustavo Foletto Mora como requisito parcial para obteno do grau de Bacharel em Cincia da Computao

COMISSO EXAMINADORA:

Prof. Benhur de Oliveira Stein (Presidente/Orientador) Profa Andrea Schwertner Charo (UFSM)

Prof. Antonio Marcos de Oliveira Candia (UFSM)

Santa Maria, 16 de Dezembro de 2008.

AGRADECIMENTOS

Agradeo: minha famlia que me apoiou durante o tempo que eu estive fazendo este trabalho e este curso. Aos colegas e amigos que z durante estes quatro anos de faculdade. Ao professor Benhur de Oliveira Stein, que me orientou neste trabalho e em tantos outros, e, sempre quando eu tinha dvidas, ele as respondeu. professora Andrea Schwertner Charo e o professor Antonio Marcos de Oliveira Candia que humildemente aceitaram fazer parte da banca deste trabalho. Aos demais professores, que ajudaram a formar meu conhecimento. Muito obrigado a todos.

RESUMO

Trabalho de Graduao Curso de Cincia da Computao Universidade Federal de Santa Maria BALANCEAMENTO DE CARGA DE SERVIDORES VIRTUALIZADOS Autor: Gustavo Foletto Mora Orientador: Prof. Benhur de Oliveira Stein Local e data da defesa: Santa Maria, 16 de Dezembro de 2008. O poder computacional presente nos servidores atuais no costuma ser totalmente utilizado pelos servios que neles so executados. A preocupao com a segurana levou os administradores a designar poucos servios por servidor, e com isso os servidores acabam tornando-se subutilizados. Para resolver este problema utiliza-se a virtualizao, capaz de disponibilizar uma boa forma de obter o isolamento de servios juntamente com a possibilidade de ocupar melhor os dispositivos de hardware. Em ambientes que utilizam mquinas virtuais para execuo de servios, a distribuio de mquinas virtuais por servidor real geralmente feita pelo administrador do sistema de forma manual, cando geralmente esttica, mesmo que, por algum motivo, um servidor real esteja mais sobrecarregado que os outros. Isso acaba tornando-se um problema para os administradores, que devem dividir as mquinas virtuais observando vrios aspectos como: memria utilizada, tempo de CPU utilizado, utilizao do disco e tambm da rede. Este trabalho desenvolve um sistema de equilbrio de carga automatizado, que capaz de monitorar os recursos dos servidores reais, e melhorar o uso destes recursos. Tambm apresenta um relato da funcionalidade do sistema, ferramentas usadas, e alguns testes que foram realizados.

Palavras-chave: Balanceamento de carga; monitor de mquinas virtuais; mquinas virtuais; monitoramento.

ABSTRACT

Trabalho de Graduao Curso de Cincia da Computao Universidade Federal de Santa Maria LOAD BALANCING OF VIRTUALIZED SERVERS Author: Gustavo Foletto Mora Advisor: Prof. Benhur de Oliveira Stein The computational power present in servers today typically is not fully used by its services. Concerns about security have led administrators to designate fewer services for each server, ending up with under-used servers. Virtualization is a way to solve this problem, providing a good way to get the isolation of services and the opportunity to better use the hardware devices. In environments that use virtual machines to run services, the distribution of the virtual machines on real servers is usually manually made by the system administrator, generally in a static way, even if for some reason a real server becomes more loaded than the others. This has become a problem for administrators, who must initialize the virtual machines observing various aspects such as memory consumption, the CPU time used, disk and network usage. This work proposes the development of a system that automatically balances the load of real servers, monitoring the resources of actual servers, and improving their usage.

Keywords: load balance, virtual machines, virtual machine monitor, management.

LISTA DE FIGURAS

Figura 3.1 Diagrama da disposio dos componentes bsicos da ferramenta. . . . . . 20 Figura 3.2 Diagrama dos componentes da coleta de dados . . . . . . . . . . . . . . . . . . . . . . 21 Figura 3.3 Diagrama de estados do clculo do estado do sistema . . . . . . . . . . . . . . . . 22 Figura 4.1 Diagrama de classes da parte de coleta de dados . . . . . . . . . . . . . . . . . . . . . 25 Figura 4.2 Diagrama de classes da parte de anlise de dados . . . . . . . . . . . . . . . . . . . . 27 Figura 5.1 Figura 5.2 Figura 5.3 Figura 5.4 Figura 5.5 Figura 5.6 Figura 5.7 Figura 5.8 Figura 5.9 Carga de 1 servidor com 8 mquinas virtuais . . . . . . . . . . . . . . . . . . . . . . . . Carga de 3 servidores com 8 mquinas virtuais . . . . . . . . . . . . . . . . . . . . . . Carga de 1 servidor com 10 mquinas virtuais . . . . . . . . . . . . . . . . . . . . . . . Carga de 3 servidores com 10 mquinas virtuais . . . . . . . . . . . . . . . . . . . . . Carga das mquinas virtuais vm01, vm02 e vm03 . . . . . . . . . . . . . . . . . . . . Carga das mquinas virtuais vm04, vm05 e vm06 . . . . . . . . . . . . . . . . . . . . Carga das mquinas virtuais vm09, vm08 e vm07 . . . . . . . . . . . . . . . . . . . . Carga da mquina virtual vm10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Carga das mquinas virtuais Domain0-sgi1, Domain0-sgi2 e Domain0sgi3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.10 Carga de 3 servidores com 10 mquinas virtuais, e balanceador com buffer de 10 posies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.11 Carga das mquinas virtuais vm01, vm02 e vm03 . . . . . . . . . . . . . . . . . . . . Figura 5.12 Carga das mquinas virtuais vm04, vm05 e vm06 . . . . . . . . . . . . . . . . . . . . Figura 5.13 Carga das mquinas virtuais vm09, vm08 e vm07 . . . . . . . . . . . . . . . . . . . . Figura 5.14 Carga da mquina virtual vm10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.15 Carga das mquinas virtuais Domain0-sgi1, Domain0-sgi2 e Domain0sgi3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Figura 5.16 Carga de 3 servidores com 10 mquinas virtuais, e balanceador com buffer de 100 posies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 30 31 32 33 33 34 34 34 35 36 36 36 36 36 37

LISTA DE TABELAS

Tabela 5.1 Tabela das migraes do primeiro teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Tabela 5.2 Tabela das migraes do segundo teste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35

LISTA DE ABREVIATURAS E SIGLAS

MMV Monitor de Mquinas virtuais MV CPU API TLS NFS LSC SSL SSH TCP IP Mquina Virtual Central Processing Unit Application Programming Interface Transport Layer Security Network File System Laboratrio de Sistemas de Computao Secure Sockets Layer Secure Shell Transmission Control Protocol Internet Protocol

SUMRIO

INTRODUO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 14 14 15 15 16 16 17 17 17 18 18 19 19 20 21 22 23 24 24 25 26 27 28 28 28 29 32 38

2 CONCEITOS E TECNOLOGIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 Mquina Virtual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Monitores de Mquinas Virtuais. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Balanceamento de Carga de Servidores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4 Libvirt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5 Acesso Remoto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6 Trabalhos Relacionados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6.1 VMware Vmotion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6.2 LBVM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6.3 Virtual Iron LiveCapacity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.6.4 ZENworks Virtual Machine Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 PROJETO DA FERRAMENTA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1 Coleta de dados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Anlise dos dados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Clculo do estado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2 Seleo de mquinas virtuais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3 Migrao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 IMPLEMENTAO DA FERRAMENTA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1 Congurao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Coleta de dados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3 Anlise de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.4 Migrao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 RESULTADOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1 Ambiente de Testes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2 Testes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1 Carga esttica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.2 Carga dinmica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3 Anlise dos testes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

CONCLUSO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

REFERNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

APNDICE A MANUAL DE INSTALAO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.1 Requisitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2 Instalao da Libvirt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.3 Congurao do libvirtd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.4 Criao dos certicados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.4.1 Certicado de autoridade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.4.2 Certicado para servidores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.4.3 Certicado para os clientes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.5 Congurao do xend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.6 Instalao do Vmbal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.7 Funcionamento do Vmbal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

43 43 43 44 44 44 45 46 46 47 47

INTRODUO

O poder computacional presente nos servidores atuais no costuma ser totalmente utilizado pelos servios que neles so executados. A preocupao com a segurana levou os administradores a designar poucos ou somente um nico servio por servidor, o que facilita a identicao de falhas de software e diminui os danos que tais falhas possam causar. No caso da presena de vrios servios, todos eles seriam comprometidos em caso de falha ou invaso no servidor. Com poucos servios executados, menor a carga no servidor, e, conseqentemente, o sistema torna-se subutilizado. Com o aumento do nmero de servios oferecidos, maior o nmero de servidores, e, conseqentemente, maior o trabalho de administrao em uma rede. Os gastos com infra-estrutura, refrigerao e energia tambm aumentam, exigindo medidas que minimizem os custos e reduzam o trabalho da equipe responsvel pelos servidores. Uma das solues para estes problemas envolve o uso de virtualizao de servidores, na qual vrias mquinas virtuais executam sobre um hardware em comum e compartilham os recursos computacionais da mquina real, de forma isolada, como se estivessem executando em mquinas reais e distintas (BARHAM et al., 2003). A virtualizao no nvel de sistemas operacionais utiliza uma camada de software responsvel pelo compartilhamento, gerenciamento e alocao de recursos, chamada de Monitor de Mquinas Virtuais (MMV). Um MMV prov a abstrao necessria para que as mquinas virtuais possam funcionar sobre ele, sem que percebam que h algo entre elas e o hardware. Alguns exemplos de MMV so: Xen (Xen, 2008), VMWare (VMware Inc., 2008a), QEMU (QEMU, 2008), OpenVZ (OpenVZ, 2008). Todos eles diferem conceitualmente em alguns pontos. Em ambientes que utilizam mquinas virtuais para execuo de servios, comum que haja um conjunto de servidores reais, e que cada um deles possua vrias mquinas virtuais

13

executando diversos servios. A distribuio de mquinas virtuais por servidores reais geralmente feita pelo administrador do sistema de forma manual, cando geralmente esttica, mesmo que, por algum motivo, um servidor real se torne mais sobrecarregado que os outros. Isso acaba tornando-se um problema para os administradores, que devem dividir as mquinas virtuais observando vrios aspectos como: memria utilizada, tempo de CPU utilizada, utilizao do disco e tambm da rede. Com o uso das mquinas virtuais torna-se evidente a necessidade de um balanceador de cargas que monitore a utilizao dos recursos de hardware e, com isso, melhore sua distribuio entre as diversas mquinas virtuais usurias desses recursos. O Ncleo de Cincia da Computao da UFSM possui diversos servidores virtualizados, e j foi observado que as mquinas virtuais, dependendo do uso dos servios que elas provm, acabam sobrecarregando parte do sistema. Nesse sentido, este trabalho props o desenvolvimento de um sistema de balanceamento de carga automatizado, que fosse capaz de monitorar os recursos dos servidores reais como um todo e melhorar o uso destes recursos, a m de evitar que algum servidor que sobrecarregado enquanto outros esto sub-utilizados. O equilbrio de carga realizado migrando-se mquinas virtuais de mquinas reais mais carregadas para as menos carregadas. No desenvolvimento deste projeto, foram utilizados como ambiente de testes trs servidores do Laboratrio de Sistemas de Computao (LSC) do Curso de Graduao em Cincia da Computao da UFSM. Foi utilizado o MMV Xen, que oferece suporte migrao de mquinas virtuais. O restante deste texto est organizado da seguinte forma: o captulo 2 faz uma reviso sobre as tecnologias teis para o entendimento do trabalho em geral; o captulo 3 apresenta o projeto da ferramenta; o captulo 4 apresenta uma descrio da implementao do trabalho; o captulo 5 apresenta os testes realizados para validar a ferramenta; e por m o captulo 6 apresenta uma breve concluso do trabalho.

CONCEITOS E TECNOLOGIAS

A virtualizao vem sendo amplamente utilizada em diversas reas, para diversos usos. uma tecnologia bem difundida, principalmente por fatores como: isolabilidade de servidores, independncia de hardware, facilidade de administrao e capacidade de personalizao (GUILHERME P. KOSLOVSKI, 2006). Este captulo aborda os conceitos e ferramentas relacionadas com a virtualizao.

2.1 Mquina Virtual


Mquina virtual o nome dado a uma implementao eciente e isolada de uma mquina real. Ao invs do sistema operacional executar diretamente sobre o hardware, ele executa sobre uma camada de software, chamada monitor de mquinas virtuais. Todos os dispositivos de uma mquina virtual, como memria, processador, disco e rede, so virtuais e mapeados nos dispositivos reais pelo monitor de mquinas virtuais. Uma mquina virtual comporta-se como uma mquina real. As principais vantagens da utilizao de mquinas virtuais so: mltiplos ambientes podem co-existir no mesmo hardware, com um forte isolamento entre eles; facilidade de criao e congurao de um sistema novo; facilidade de recuperao de um sistema, no caso de falhas. Em servidores, geralmente so executados mltiplos servios. Isso freqentemente causa algum tipo de interferncia entre estes servios. Um bom mtodo para evitar esse problema a utilizao de mquinas virtuais, onde cada servio que poderia causar alguma interferncia executa em uma mquina virtual diferente, provendo uma melhor tolerncia a falhas do sistema como um todo.

15

2.2 Monitores de Mquinas Virtuais


Monitores de mquinas virtuais so implementados por meio de uma camada de software que ca entre o hardware e a mquina virtual. Eles administram os recursos de hardware e permitem que diversos sistemas operacionais executem sobre eles, gerando uma transparncia para as mquinas virtuais hospedeiras. Entre os monitores de mquinas virtuais esto: Xen (Xen, 2008) uma plataforma de virtualizao livre para as arquiteturas x86, x86-64, IA-32, IA-64 e PowerPC. Foi originalmente um projeto de pesquisa na Universidade de Cambridge, liderado por Ian Pratt, fundador da XenSource, e posteriormente foi adquirida pela Citrix System Inc. Foi desenvolvido com o modelo de virtualizao clssica, em que o monitor executa diretamente sobre o hardware, e, por isso, possui um bom desempenho em relao a outros monitores de mquinas virtuais. Vmware (VMware Inc., 2008a) um software proprietrio desenvolvido pela empresa VMware Inc. Possui uma verso gratuita para testes a qual utiliza a tcnica de virtualizao hospedada, em que o MMV executa como um aplicativo sobre um sistema operacional. Porm possui tambm outras verses que utilizam a tcnica de virtualizao clssica, e conseqentemente possuem um melhor desempenho. QEMU (QEMU, 2008) utiliza a tcnica de virtualizao hospedada e um software livre desenvolvido por Fabrice Bellard. OpenVZ (OpenVZ, 2008) um software livre desenvolvido pela empresa Parallels Inc e implementa o esquema de virtualizao de sistema operacional, no qual o ncleo do sistema operacional permite mltiplas instncias isoladas do espao de usurio (user-space), em vez de somente uma.

2.3 Balanceamento de Carga de Servidores


Quando h diversos servidores reais, cada um deles executando diversas mquinas virtuais, ca evidente a necessidade de um balanceamento de mquinas virtuais, a m de equilibrar o desempenho entre todos os servidores. Um equilibrador de cargas deve monitorar a utilizao do processador, memria, rede

16

e disco de um conjunto de servidores, e ser capaz de analisar estes dados a m de no deixar um servidor mais carregado, enquanto h servidores sendo subutilizados. Para redistribuir a carga, utiliza-se a migrao de mquinas virtuais de um servidor real para outro. O processo de migrao consiste em transferir, entre computadores conectados, uma mquina virtual em execuo. Isso feito de maneira que no afeta demasiadamente a execuo desta mquina virtual. Existe uma biblioteca chamada Libvirt, que facilita a manipulao das mquinas virtuais e tem como objetivo prover uma interface nica para administrao de domnios em um ou mais ns. Essa biblioteca possui uma interface que se comunica com diversos tipos de monitores de mquinas virtuais. Ela possui chamadas que facilitam a interao com as mquinas virtuais, como por exemplo para migrao, captura de dados, inicializao e desligamento.

2.4 Libvirt
A Libvirt (Libvirt, 2008) uma API para C que facilita a manipulao de mquinas virtuais, e tem como objetivo prover uma interface nica para administrao de domnios em um n. Possui suporte para Xen, QEMU, KVM (KVM, 2008) e OpenVZ. Pode ser usada remotamente, juntamente com o protocolo TLS. Como a Libvirt suporta diferentes tipos de monitores de mquinas virtuais, necessrio uma forma de especicar o driver que a conexo deve utilizar. E no caso de uma conexo remota, precisa-se informar a localizao do servidor ao qual ser conectado. Para isso a Libvirt utiliza URIs como as que so utilizadas na Web. As URIs seguem o formato: driver://host/.

2.5 Acesso Remoto


A Libvirt permite o acesso aos monitores em mquinas remotas, atravs de conexes autenticadas e encriptadas. Para isso utiliza TLS, que signica Transport Layer Security (Wikipedia, 2008), e o protocolo sucessor do SSL (Webstart, 1994). Eles so protocolos de criptograa que garantem a segurana das comunicaes feitas com TCP/IP na Internet. So muito utilizados em aplicaes voltadas para a Internet como por exemplo navegadores Web,

17

correio eletrnico e mensagens instantneas. O TLS foi baseado no SSL. O protocolo garante a privacidade a integridade dos dados entre duas aplicaes que esto comunicando-se pela Internet. Para o acesso remoto, preciso que o servidor que ser conectado esteja rodando o daemon libvirtd. Para conectar o servidor remoto deve se usar uma URI apropriada com o hypervisor e o transportador. Os transportadores podem ser: TLS, unix, SSH e TCP. O transportador padro, se nenhum for especicado o TLS. Para o uso do TLS necessrio congurar um certicado de autoridade (CA), tanto para o servidor como para o cliente.

2.6 Trabalhos Relacionados


O problema de equilbrio de carga entre monitores de mquinas virtuais tratado por outros trabalhos. Todos eles possuem algum tipo de dependncia de tecnologia proprietria, e isso um grande empecilho para uma possvel utilizao em instituies com limitaes de recursos. Neste trabalho foram utilizadas ferramentas livres de custo, e com funcionalidades semelhantes s ferramentas proprietrias. Seguem abaixo alguns trabalhos semelhantes a este. 2.6.1 VMware Vmotion um software proprietrio produzido pela empresa VMware inc. (VMware Inc., 2008b), e suporta apenas o monitor VMware ESX. Este software capaz de fazer a migrao de mquinas virtuais automaticamente, de acordo com a carga da CPU e da rede. 2.6.2 LBVM LBVM um acrnimo para Load Balancing of Virtual Machines (LBVM, 2008) e signica Balanceamento de carga de Mquinas Virtuais. Consiste em vrios scripts que permitem o balanceamento de carga de mquinas virtuais. Suporta Xen e OpenVZ. Permite o compartilhamento de mquinas virtuais entre servidores fsicos. LBM, LB LOG e LB MONITOR so os scripts principais. O script LBM a interface de gerenciamento para o balanceador de carga. usado

18

tambm para ver os registros das migraes ocorridas. O script LB LOG executado regularmente em cada servidor atravs do cron, e utilizado para coletar dados. Os dados coletados so armazenados em um local compartilhado por todos os servidores, e so analisados pelo balanceador. O script LB MONITOR utiliza diversos algoritmos para decidir qual mquina virtual ser migrada. Apesar de ser um software livre, ele funciona apenas com o Red Hat Cluster Suite, que um produto da empresa Red Hat e, tambm, necessria a utilizao de locais compartilhados de armazenamento de dados para as mquinas virtuais, tais como iSCSI, SAN ou DRBD. 2.6.3 Virtual Iron LiveCapacity um outro tipo de software proprietrio para o gerenciamento e balanceamento de carga (Virtual Iron, 2007). Este software parte do Virtual Iron 3.1 Enterprise Edition, e suporta apenas essa tecnologia. 2.6.4 ZENworks Virtual Machine Management um software proprietrio produzido pela Novell (Novell, 2008), que gerencia e faz o balanceamento de mquinas virtuais. Suporta virtualizao do VMware, Windows e Xen.

PROJETO DA FERRAMENTA

Visando alcanar os objetivos apresentados, inicialmente foi realizada uma avaliao de como seria feito o balanceamento de carga dos servidores. A partir desta avaliao decidiu-se que seria monitorado o uso do processador, disco, memria e rede. Esta ferramenta monitora os servidores distncia, coletando dados das mquinas virtuais e analisando-os. Quando mostrar-se necessrio, reorganizar a distribuio das mquinas virtuais dos servidores. O monitoramento acontece em intervalos de tempos pr-denidos. So gerados logs dos dados coletados, e tambm de eventos acontecidos. Para distribuio das mquinas virtuais, existe uma tcnica chamada de migrao "ao vivo" (CLARK et al., 2005), com a qual possvel que uma mquina virtual, em tempo de execuo, mude de servidor. A migrao das mquinas virtuais acontece de forma transparente, e no prejudica o sistema como um todo. O monitor de mquinas virtuais Xen, utilizado pelo Ncleo de Cincia da Computao, possui este suporte. A ferramenta projetada consiste basicamente de 3 componentes bsicos: coleta de dados, anlise dos dados e migrao das mquinas virtuais. A coleta de dados, como o nome sugere, captura os dados do sistema, e os armazena. O mdulo de anlise processa as informaes armazenadas e, a partir disso, toma decises chamando o mdulo de migrao para efetuar possveis migraes de mquinas virtuais. A gura 3.1 apresenta um diagrama da disposio destes componentes, que so descritos nas sees seguintes.

3.1 Coleta de dados


Para a coleta de dados, foi utilizada a biblioteca Libvirt, que tem chamadas que se comunicam com o daemon dos servidores e retornam alguns dados das mquinas virtuais. Estes dados so: tempo de CPU, memria total, memria utilizada, utilizao da rede e utilizao de disco. Isso facilitou a fase de coleta de dados, pois no foi necessrio

20

Figura 3.1: Diagrama da disposio dos componentes bsicos da ferramenta preocupar-se com a comunicao com os servidores. O programa comunica-se com o daemon da Libvirt de cada servidor utilizando o protocolo TLS. Para o funcionamento do TLS necessria a congurao de certicados de segurana para cada servidor fsico. Os dados so coletados em intervalos de tempos arbitrrios, e as medies so armazenadas em disco. Esto sendo armazenados dados da utilizao do processador, memria, disco e rede. A gura 3.2 ilustra a os componentes da coleta de dados. O componente Sistema o que contm todos os outros componentes. O componente Host armazena informaes sobre um servidor real. O mdulo MaquinaVirtual encapsula uma MV, e os mdulos MemCPU, Rede e Disco armazenam os dados coletados. Para cada dado armazenado, calculada uma mdia, que armazenada em memria juntamente com as ltimas medies, que formam a mdia. O nmero de medies armazenadas em memria denido na inicializao do programa. Este nmero muito importante pois afeta diretamente o clculo da mdia, e conseqentemente a anlise dos dados.

3.2 Anlise dos dados


A anlise tambm realizada em intervalos de tempos denidos, porm o tempo entre as anlises pode ser maior que o de coleta. Apesar de estarem sendo armazenados

21

Figura 3.2: Diagrama dos componentes da coleta de dados dados do processador, disco, rede e memria, a anlise est sendo realizada apenas para a carga do processador. Isto deve-se ao fato de que uma anlise de mais tipos de dados, simultaneamente, torna-se mais complexa e ento, por isso, decidiu-se focar apenas no processador. A anlise dividida em duas partes: o clculo do estado e a procura de possveis mquinas virtuais a serem migradas. O clculo do estado realizado para saber se o sistema est equilibrado ou no. Se o sistema estiver desequilibrado, acontece a procura de mquinas virtuais que podem ser migradas. Segue abaixo uma descrio mais detalhada destes dois mdulos. 3.2.1 Clculo do estado Primeiramente acontece a anlise para vericar se o sistema est equilibrado ou no. Para calcular o estado do sistema, calculada a porcentagem de utilizao da CPU de cada servidor fsico, que varia de 0 ao nmero de processadores multiplicado por 100. Por exemplo, para um servidor com 8 processadores, a porcentagem de carga varia de 0 a 800. Este clculo utiliza a mdia mencionada anteriormente na fase de coleta de dados. Aps isso vericado o desequilbrio entre esses servidores. Se o maior desequilbrio entre os servidores estiver maior que um limite denido, e o tempo que verica-se este desequilbrio for maior que um tempo de desequilbrio denido, ento o sistema entra em estado de desequilbrio. O algoritmo de clculo de estado do sistema est representado no diagrama de estados da gura 3.3.

22

Figura 3.3: Diagrama de estados do clculo do estado do sistema 3.2.2 Seleo de mquinas virtuais Se o sistema est equilibrado, no acontece nada, porm se o sistema estiver desequilibrado, passado para o prximo tipo de anlise, que descobrir qual mquina virtual e para onde dever ser migrada. Como esta implementao est apenas focando o uso do processador, os outros dados de carga so desconsiderados. O clculo para resolver como ser efetuada a migrao simples: o servidor que ter sua mquina virtual migrada o que tiver maior carga; o servidor que receber a mquina virtual migrada o que possuir a menor carga; a mquina virtual escolhida a que possuir a carga mais prxima do desequilbrio entre o processador de maior carga e o de menor carga, semelhante ao algoritmo de alocao de memria em sistemas operacionais "best t" (TANENBAUM, 2001). A anlise limita-se em escolher apenas uma mquina virtual por vez. Este algoritmo funciona, porm ele pode apresentar um problema de "ping-pong" de mquinas virtuais. Isto acontece quando uma mquina virtual ca alternando de servidor. Para solucionar este problema, a mquina virtual somente ser escolhida se ela no passar o desequilbrio para o outro servidor. Isto limita um pouco as escolhas, porm consegue evitar efetivamente que mquinas sejam continuamente migradas entre os servidores.

23

3.3 Migrao
A partir da identicao da mquina virtual e do servidor de destino, dever ser nalmente realizada a migrao. O Xen possui suporte a migrao, e para ser possvel que ela ocorra, a imagem do disco da mquina virtual deve ser acessvel para todos os servidores. Isto possvel com a utilizao do Network File System protocol (NFS) (SHEPLER et al., 2003). A migrao, por mais que seja um processo transparente ao usurio, possui um certo overhead, ento a migrao de uma mquina virtual deve ser feita com muito cuidado, evitando migraes desnecessrias. Por este motivo, o algoritmo da anlise foi implementado de forma conservadora. A migrao no feita diretamente com chamadas do Xen. Ela feita com a ajuda a Libvirt, que possui suporte para tal. Ao m da migrao o processo todo recomea.

4 IMPLEMENTAO DA FERRAMENTA

Conforme apresentado anteriormente, foi utilizada a biblioteca Libvirt em conjunto com a linguagem de programao C++ (STROUSTRUP, 2000). Inicialmente este projeto estava sendo implementado com a linguagem de programao C, mas com o crescimento desordenado do cdigo, preferiu-se fazer a troca para a linguagem C++, a qual acaba forando a modularizao do cdigo. Esta troca, com o andamento do projeto, mostrou-se muito adequada, pois alm de obrigar uma modularizao, esta linguagem possui algumas estruturas que ajudam na implementao. A verso nal desta ferramenta composta de 17 classes e mais 2 mdulos auxiliares.

4.1 Congurao
Para uma maior simplicidade do programa, foram implementadas as classes BalanceCongs e CongParser que carregam os dados de congurao do programa a cada inicializao. Este arquivo de congurao segue este padro: congurao = opo. Uma por linha. Existem conguraes para: adicionar host, intervalo de medio, intervalo de anlise, modo somente coleta de dados, tamanho do buffer de dados, salvar log, porcentagem de desequilbrio e tempo de desequilbrio. Essas conguraes so utilizadas em diversas partes do programa. Tambm foi implementado um pequeno shell que serve para fazer mudanas de conguraes em tempo de execuo, e tambm para a invocao de comandos. Utilizou-se threads na implementao deste trabalho, as quais garantem uma execuo em paralelo do programa. Em locais que haviam necessidade de execuo seqencial, foram usados mutexes para garantir excluso mtua. Existe uma thread para coleta de dados, uma para anlise dos dados, e outra para o shell. Na coleta, existe uma thread para cada mquina virtual. Ento, o nmero total de

25

threads do programa ser: trs, mais o nmero de mquinas virtuais do sistema inteiro.

4.2 Coleta de dados


Para a parte de coleta de dados foram implementadas as seguintes as classes: Sistema, Host, MaquinaVirtual, Disco, Rede, MemCPU e Medida. Essas classes so responsveis pela conexo, comunicao e armazenamento das informaes coletadas. Todas as classes citadas acima possuem dados privados e sendo assim, so providos mtodos de acesso aos dados, e algumas possuem ainda mtodos para modicao dos mesmos. A gura 4.1 ilustra o diagrama de classes simplicado da parte de coleta de dados.

Figura 4.1: Diagrama de classes da parte de coleta de dados Segue abaixo uma descrio das classes implementadas: A classe Sistema a classe principal da coleta de dados. Ela contm um vetor de elementos do tipo Host. O construtor da classe inicializa todos os servidores que estiverem denidos no arquivo de congurao. O mtodo atualizaHosts encarrega-se de atualizar

26

de tempos em tempos os seus Hosts. A classe Host encapsula um servidor fsico e possui um vetor de elementos do tipo MaquinaVirtual. Na inicializao cada Host inicializa todas as suas mquinas virtuais. Possui tambm mtodos de acesso, insero, remoo e atualizao de mquinas virtuais. A classe MaquinaVirtual encapsula uma mquina virtual. Pode ter vrios discos e vrias interfaces de rede, por isso possui vetores de elementos do tipo Disco e Rede. Possui tambm um elemento do tipo MemCPU. Na inicializao esta classe procura por todas interfaces de rede e de disco da mquina virtual, e as inicializa. H tambm um mtodo para salvar os dados em disco. O mtodo atualiza quem vai fazer as chamadas para atualizar os dados armazenados. As classes Disco, Rede e MemCPU armazenam os dados respectivamente do disco, rede, memria e CPU. Possuem diversos objetos do tipo Medida. A classe Medida encapsula uma medida realizada. onde est armazenado o ltimo dado lido. Possui um objeto do tipo MediaMovel, onde so armazenadas as ltimas medidas, juntamente com a mdia delas. O uso do TLS para a comunicao com a Libvirt estava gerando alguns problemas quando efetuavam-se muitas chamadas concorrentes. Para resolver isto, foram encapsuladas todas as chamadas que eram utilizadas em momentos que o programa executava concorrentemente, e foi utilizado um mutex para garantir que no houvesse comunicao concorrente. Isto est implementado no mdulo Comunicacao.

4.3 Anlise de dados


Para a parte de anlise dos dados e migrao de mquinas virtuais, foram implementadas as seguintes as classes: Analisador, Estado, EstadoCpu, EstadoRede, EstadoGlobal e ProcuraMigracao. Essas classes so responsveis pela tomada de deciso do sistema. A gura 4.2 ilustra o diagrama de classes simplicado da parte de anlise dos dados. Segue abaixo uma descrio das classes implementadas: A classe Analisador a classe principal da parte de anlise de dados. Possui um ponteiro para o objeto da Sistema, pois precisa acessar os dados para tomar decises. Possui dois objetos do tipo Estado. O mtodo run executa a anlise de tempos em tempos. A classe Estado implementa o clculo do estado descrito na seo 3.2.1. As classes EstadoCpu e EstadoRede herdam da classe Estado, e calculam o estado para a CPU e

27

Figura 4.2: Diagrama de classes da parte de anlise de dados para a rede, respectivamente. A classe EstadoGlobal, a partir do clculo do estado realizado anteriormente, calcula se o sistema como um todo est desequilibrado ou no. Como este clculo est sendo realizado apenas para a CPU, ele apenas repassa o resultado calculado pela classe EstadoCpu. Futuramente esta classe pode ser expandida para suportar um clculo que considere os outros estados.

4.4 Migrao
Para a parte de migrao foi implementada a classe ProcuraMigracao, que aps vericado o desequilbrio, procura por uma migrao que melhore o desequilbrio do sistema. Baseia-se no algoritmo descrito na seo 3.2.2. Este clculo tambm realizado apenas para a CPU. Se for encontrado uma mquina virtual para ser migrada, ser chamado o mtodo migraVm contido na classe Sistema. Com o m da implementao resolveu-se dar um nome para a ferramenta, e nome escolhido foi Vmbal.

5 RESULTADOS

Todo projeto de software passa por uma fase de validao, na qual avalia-se se o que foi implementado est de acordo com os requisitos levantados. Este captulo apresenta os testes realizados com a ferramenta Vmbal.

5.1 Ambiente de Testes


Visando demonstrar o funcionamento prtico da ferramenta Vmbal, foi criado um exemplo de utilizao do software. Para a execuo deste exemplo, utilizou-se trs servidores do Laboratrio de Sistemas de Computao com as seguintes conguraes cada: Processador: Intel(R) Xeon(R) 2.00GHz x 8; Memria Principal: 8 GB; Sistema Operacional: GNU/Linux verso 2.6.20-xen-r6; Xen: 3.1.2. O processo de instalao, congurao e como utilizar o Vmbal est descrito no apndice A.

5.2 Testes
Tendo um ambiente de testes pronto, o passo seguinte foi a criao de um exemplo de utilizao prtico da ferramenta Vmbal. Foram realizados dois tipos de testes: com mquinas virtuais com cargas estticas, isto , mantendo a porcentagem de utilizao do processador constante, e com cargas dinmicas, que variam de acordo com certos parmetros. Para gerar a carga articial, foi

29

implementado um programa capaz de gerar cargas de acordo com 4 parmetros: carga do pico, carga do vale, tempo de carga do pico e tempo de carga do vale. O objetivo do teste com carga esttica realizar um teste simples e controlado do funcionamento do Vmbal, pois sabe-se que as cargas estaro constantes em praticamente todo o experimento. O segundo teste, com carga dinmica, tem por objetivo de adicionar uma variao nas cargas, e com isso dicultar um pouco a atuao do balanceador. Em todos os testes, o sistema considerado desequilibrado se a porcentagem de desequilbrio valer mais de 60% e esse desequilbrio for mantido por pelo menos 30 segundos. Esses valores foram escolhidos de modo que gerassem um grande nmero de migraes num tempo pequeno. 5.2.1 Carga esttica Foram realizados 2 tipos de testes com carga esttica. Um com 8 e outro com 10 mquinas virtuais cada uma executando a 100% de CPU. Estes testes tiveram durao de apenas 5 minutos, pois este tempo foi suciente para que o programa zesse todas as migraes necessrias para equilibrar a carga entre os servidores, e a partir desse tempo o programa no faria mais nenhuma migrao. O tamanho do buffer para as mdias foi denido como 10 posies para ambos os casos. Para os dois experimentos, foram realizados primeiramente testes de controle, com o programa Vmbal com modo de somente coleta de dados habilitado. O objetivo do primeiro experimento o de testar o programa da maneira mais simples possvel, na qual as mquinas virtuais permanecem com a carga do processador constante em 100%. A gura 5.1 apresenta o grco do teste de controle com 8 mquinas virtuais executando em apenas 1 servidor por 5 minutos. Observa-se que a carga, como o esperado, manteve-se constante. A gura 5.2 apresenta o grco de 8 mquinas virtuais executando em 3 servidores por 5 minutos, com o balanceamento ativado. O servidor sgi3 foi inicializado com as 8 mquinas virtuais, e os outros com nenhuma. Nota-se que h uma queda e um aumento repentino da porcentagem de utilizao da CPU aps uma migrao. Isto deve-se ao fato de que a carga de um servidor calculada a partir da soma das mdias das cargas das mquinas virtuais. E quando uma MV passa

30

Grafico da utilizacao da CPU - 1 servidor 8 MVs 900 sgi3 800 700 600 Uso da CPU (%) 500 400 300 200 100 0 0 50 100 150 Tempo (em segundos) 200 250 300

Figura 5.1: Carga de 1 servidor com 8 mquinas virtuais


Grafico da utilizacao da CPU - 3 servidores 8 MVs 900 800 700 600 Uso da CPU (%) 500 400 300 200 100 0 0 50 100 150 Tempo (em segundos) 200 250 300 sgi3 sgi2 sgi1 migracoes

Figura 5.2: Carga de 3 servidores com 8 mquinas virtuais

31

de um servidor para outro, ela deixa de estar no clculo do servidor de origem, e passa a fazer parte do servidor de destino. Pode-se observar tambm que o programa migrou as mquinas virtuais aos poucos, at atingir uma distribuio que fosse mais equilibrada. Neste caso foi uma distribuio ideal. Os dois testes seguintes foram realizados com 10 mquinas virtuais. A gura 5.3 apresenta o grco com apenas 1 servidor e o balanceamento desligado. Como esperado, obteve-se uma carga constante.
Grafico da utilizacao da CPU - 1 servidor 10 MVs 900 sgi3 800 700 600 Uso da CPU (%) 500 400 300 200 100 0 0 50 100 150 Tempo (em segundos) 200 250 300

Figura 5.3: Carga de 1 servidor com 10 mquinas virtuais A gura 5.4 apresenta o grco com 3 servidores e o balanceamento ligado. Logo percebe-se que tambm houve uma distribuio equilibrada no m do teste. O objetivo deste segundo experimento aumentar um pouco a complexidade do teste, pois as cargas das mquinas virtuais variam levemente aps uma migrao. Isto acontece porque inicialmente h 10 mquinas virtuais executando no servidor sgi3, e como ele possui apenas 8 processadores, s consegue processar a 800 %. Ento antes da primeira migrao, h uma diviso dessa capacidade de processamento entre todas as mquinas virtuais, e cada uma processa 80 %. Aps a primeira migrao a mquina virtual migrada comea a executar 100 % e as outras 9 cam processando

32

Grafico da utilizacao da CPU - 3 servidores 8 MVs 900 800 700 600 Uso da CPU (%) 500 400 300 200 100 0 0 50 100 150 Tempo (em segundos) 200 250 300 sgi3 sgi2 sgi1 migracoes

Figura 5.4: Carga de 3 servidores com 10 mquinas virtuais 88,88 %. Aps a segunda migrao restaro 8 mquinas virtuais no servidor sgi3 e a partir desse momento, todas as mquinas virtuais passaro a processar a 100 %. Com isso, percebe-se claramente que h um ganho de desempenho nesse experimento. Nota-se na gura 5.4 que h alguns "dentes" na linha do servidor sgi3 antes da terceira migrao, e isso deve-se ao fato que aps uma migrao h mudana na carga de cada mquina virtual desse servidor, e tambm por esse grco ser calculado com a soma das mdias das cargas de cada uma das mquinas virtuais executada naquele servidor. Vale lembrar que esse um comportamento esperado pois est sendo utilizando as mdias das cargas, e no os valores instantneos. 5.2.2 Carga dinmica Foram realizados testes com carga dinmica, para vericar o comportamento do sistema com uma congurao menos esttica. Realizou-se 2 testes com 10 mquinas virtuais. O primeiro teste foi executado com um buffer de 10 posies, e teve durao de 12 minutos. Este teste tem como o objetivo aumentar a complexidade em comparao com os testes anteriores.

33

Grafico da utilizacao da CPU das VMs vm01 vm02 vm03 100 100

Grafico da utilizacao da CPU das VMs vm04 vm05 vm06

80 Uso da CPU (%) Uso da CPU (%) 0 100 200 300 400 500 Tempo (em segundos) 600 700 800

80

60

60

40

40

20

20

0 0 100 200 300 400 500 Tempo (em segundos) 600 700 800

Figura 5.5: Carga das mquinas virtuais vm01, vm02 e vm03

Figura 5.6: Carga das mquinas virtuais vm04, vm05 e vm06

As guras 5.5, 5.6, 5.7, 5.8 e 5.9 representam o comportamento da carga da CPU das mquinas virtuais, e a gura 5.10 apresenta o grco da carga dos servidores. A ordem das migraes representada pela tabela 5.1. Tabela 5.1: Tabela das migraes do primeiro teste segundo VM Origem Destino 41 vm10 sgi3 sgi2 83 vm09 sgi3 sgi1 124 vm08 sgi3 sgi2 166 vm07 sgi3 sgi1 208 vm06 sgi3 sgi1 250 vm04 sgi3 sgi2 291 vm03 sgi3 sgi1 355 vm02 sgi3 sgi1 617 vm10 sgi2 sgi1

Percebe-se que as migraes aconteceram mais ou menos com o intervalo de 40 segundos, isto devido ao tempo de desequilbrio que foi xado em 30 segundos, e o tempo de intervalo da anlise de dados que foi xado em 10 segundos. Com isso chega-se a este tempo de 40 segundos que representa o tempo de reao do sistema para este teste. Nota-se que houve uma maior variao de cargas, e que em alguns momentos, o sistema cou desbalanceado por mais tempo do que o previsto. Isto deve-se ao fato de ter ocorrido erros na hora de efetuar a migrao. Estes erros no acontecem com frequncia, porm aps um certo tempo de execuo eles tm a tendncia de ocorrer. Eles ocorrem quando a Libvirt, por algum motivo desconhecido, no consegue migrar uma mquina virtual, aborta a migrao e a chamada retorna um erro. Percebe-se que as mquinas virtuais vm02 e vm03 apresentaram problemas a partir do tempo de 480 segundos.

34

Grafico da utilizacao da CPU das VMs vm07 vm08 vm09 100 100 80 Uso da CPU (%) 80 60 Uso da CPU (%) Grafico da utilizacao da CPU das VMs vm10

60

40

40 20 20 0 0 100 200 300 400 500 Tempo (em segundos) 600 700 800 0 0 100 200 300 400 500 Tempo (em segundos) 600 700 800

Figura 5.7: Carga das mquinas virtuais vm09, vm08 e vm07


200

Figura 5.8: Carga da mquina virtual vm10

Grafico da utilizacao da CPU das VMs Domain-0:sgi3 Domain-0:sgi2 Domain-0:sgi1

150

Uso da CPU (%)

100

50

0 0 100 200 300 400 500 600 700 800 Tempo (em segundos)

Figura 5.9: Carga das mquinas virtuais Domain0-sgi1, Domain0-sgi2 e Domain0-sgi3 O segundo teste foi executado com um buffer de 100 posies, e teve durao de 62 minutos. Este experimento tem como o objetivo aumentar ainda mais a complexidade em comparao com os testes anteriores e tambm testar o programa Vmbal com um buffer de mdias 10 vezes maior que o dos outros testes. As guras 5.11, 5.12, 5.13, 5.14 e 5.15 representam o comportamento da carga da CPU das mquinas virtuais, e a gura 5.16 apresenta o grco da carga dos servidores. A ordem das migraes representada pela tabela 5.2. Tambm observa-se que aps um certo tempo ocorreram erros na migrao. As mquinas virtuais vm06 e vm07 apresentaram problemas a partir do tempo de 1700 segundos. Observa-se nos grcos 5.9 e 5.15 o overhead apresentado nas migraes, representado pelos picos no grco. O overhead aconteceu tambm nos momentos que as migraes foram abortadas. O xen ao fazer uma migrao tem que copiar a memria de um servidor para outro. Isso gera um certo overhead de CPU e tambm de rede para cada tentativa de migrao.

35

Grafico da utilizacao da CPU das VMs 900 800 700 600 Uso da CPU (%) 500 400 300 200 100 0 0 100 200 300 400 500 Tempo (em segundos) 600 700 800 sgi3 sgi2 sgi1 migracoes

Figura 5.10: Carga de 3 servidores com 10 mquinas virtuais, e balanceador com buffer de 10 posies

Tabela 5.2: Tabela das migraes do segundo teste segundo VM Origem Destino 51 vm10 sgi3 sgi2 102 vm09 sgi3 sgi1 155 vm07 sgi3 sgi1 207 vm06 sgi3 sgi1 259 vm02 sgi3 sgi1 312 vm03 sgi3 sgi1 363 vm08 sgi3 sgi2 1585 vm01 sgi3 sgi1 1677 vm03 sgi1 sgi2 1729 vm06 sgi1 sgi2 1782 vm07 sgi1 sgi2

36

Grafico da utilizacao da CPU das VMs vm01 vm02 vm03 100 100

Grafico da utilizacao da CPU das VMs vm04 vm05 vm06

80 Uso da CPU (%) Uso da CPU (%) 0 500 1000 1500 2000 2500 Tempo (em segundos) 3000 3500 4000

80

60

60

40

40

20

20

0 0 500 1000 1500 2000 2500 Tempo (em segundos) 3000 3500 4000

Figura 5.11: Carga das mquinas virtuais vm01, vm02 e vm03

Figura 5.12: Carga das mquinas virtuais vm04, vm05 e vm06

Grafico da utilizacao da CPU das VMs vm07 vm08 vm09 100 100 80 Uso da CPU (%) 80 60 Uso da CPU (%) Grafico da utilizacao da CPU das VMs vm10

60

40

40 20 20 0 0 500 1000 1500 2000 2500 Tempo (em segundos) 3000 3500 4000 0 0 500 1000 1500 2000 2500 3000 3500 4000 Tempo (em segundos)

Figura 5.13: Carga das mquinas virtuais vm09, vm08 e vm07

Figura 5.14: Carga da mquina virtual vm10

Grafico da utilizacao da CPU das VMs 200 Domain-0:sgi3 Domain-0:sgi2 Domain-0:sgi1

150

Uso da CPU (%)

100

50

0 0 500 1000 1500 2000 2500 3000 3500 4000 Tempo (em segundos)

Figura 5.15: Carga das mquinas virtuais Domain0-sgi1, Domain0-sgi2 e Domain0-sgi3

37

Grafico da utilizacao da CPU das VMs 900 800 700 600 Uso da CPU (%) 500 400 300 200 100 0 0 500 1000 1500 2000 2500 Tempo (em segundos) 3000 3500 4000 sgi3 sgi2 sgi1 migracoes

Figura 5.16: Carga de 3 servidores com 10 mquinas virtuais, e balanceador com buffer de 100 posies

38

5.3 Anlise dos testes


Atravs do exemplo realizado pde-se vericar que a ferramenta desenvolvida cumpre os requisitos determinados na seo 3. Os resultados dos testes com cargas estticas foram bons, porm os de carga dinmica nem tanto. No incio o programa consegue equilibrar as cargas. Porm como mencionado na seo anterior, aps um tempo houve uma certa instabilidade nas chamadas para a migrao. A chamada da Libvirt para a migrao retornou erro em alguns momentos. Esses erros no so erros da Libvirt em si, mas sim do Xen, e no afetam o sistema. Quando eles ocorrem, a migrao no acontece, e a mquina virtual que seria migrada continua no servidor antigo. Porm em algumas tentativas de migraes ocorreram problemas menos sutis, os quais acabam gerando uma instabilidade na mquina virtual a qual estava-se tentando migrar. Aps uma pesquisa mais profunda, constatou-se que a mquina virtual continua normalmente, e que as anomalias geradas nos grcos so problemas na hora da coleta dos dados, no momento da instabilidade. A verso do Xen utilizada para esses testes um pouco antiga, e provvel que a verso mais atual no apresente estes problemas. No resto, a ferramenta Vmbal poderia ter algumas melhorias, como por exemplo, um maior nmero de comandos para o shell, mais opes de conguraes e a anlise de outros tipos de dados.

6 CONCLUSO

Neste trabalho, desenvolveu-se uma ferramenta para balanceamento automtico de carga de servidores virtualizados, utilizando a API Libvirt em conjunto com o MMV Xen. O software desenvolvido tem como principal objetivo prover uma forma de melhorar a distribuio das mquinas virtuais em um conjunto de servidores. A ferramenta Vmbal possui basicamente dois usos: atuar passivamente apenas coletando dados de um conjunto de servidores; ou atuar ativamente, coletando dados e tomando decises a respeito de como melhorar a distribuio de carga da CPU de um conjunto de servidores virtualizados. Para o desenvolvimento deste trabalho foram pesquisadas e testadas diversas ferramentas que tornassem possvel a implementao deste software, tais como, a API Libvirt, o MMV Xen, a linguagem de programao C++, bash script, alm de outras ferramentas presentes no ambiente Linux. Pde-se vericar na prtica o funcionamento da ferramenta desenvolvida, atravs de testes realizados em servidores do LSC, nos quais a ferramenta mostrou cumprir com os requisitos determinados na fase de projeto. Houveram alguns problemas relacionados com a migrao, que devem ser pesquisados mais profundamente. O balanceador de cargas gerado neste trabalho pode ser de grande importncia futuramente, pois, com a necessidade de corte de custos em TI gerados em parte pela recesso presente, a tendncia o aumento do uso de virtualizao nos servidores, e conseqentemente o aumento da necessidade de programas gerenciadores de conjuntos de mquinas virtuais. Este trabalho uma implementao bsica de um balanceador de cargas, porm possibilita futuras expanses das funcionalidades deste produto. Alguns itens propostos como trabalhos futuros so: Correo de eventuais bugs presente nesta implementao;

40

Implementar algoritmos para anlise de dados da memria, rede e disco; Adicionar diferentes algoritmos de anlise dos dados; Adicionar outros tipos de dados como por exemplo a temperatura; Implementar um modo de economia de energia, o qual buscasse uma menor utilizao de energia eltrica, em vez do equilbrio de cargas; Adicionar novos tipos de conguraes para o programa; Melhorar a interatividade com o usurio, provendo uma interface em linha de comando com mais opes, ou at mesmo uma interface grca; Aplicao da ferramenta Vmbal aos servidores do Curso de Cincia da Computao da UFSM.

41

REFERNCIAS

BARHAM, P.; DRAGOVIC, B.; FRASER, K.; HAND, S.; HARRIS, T.; HO, A.; NEUGEBAUER, R.; PRATT, I.; WARFIELD, A. Xen and the art of virtualization. In: SOSP 03: PROCEEDINGS OF THE NINETEENTH ACM SYMPOSIUM ON OPERATING SYSTEMS PRINCIPLES, 2003, New York, NY, USA. Anais. . . ACM, 2003. p.164177. CLARK, C.; FRASER, K.; H, S.; HANSEN, J. G.; JUL, E.; LIMPACH, C.; PRATT, I.; WARFIELD, A. Live Migration of Virtual Machines. In: IN PROCEEDINGS OF THE 2ND ACM/USENIX SYMPOSIUM ON NETWORKED SYSTEMS DESIGN AND IMPLEMENTATION (NSDI, 2005. Anais. . . [S.l.: s.n.], 2005. p.273286. Gnuplot. gnuplot homepage. Disponvel em: http://www.gnuplot.info/ . Acesso em: novembro de 2008. GUILHERME P. KOSLOVSKI, M. P. B. e. A. S. C. Uso de Virtualizao de Recursos Computacionais na Administrao de Redes. ERRC, [S.l.], 2006. KVM. Kernel Based Virtual Machine. Disponvel em:

http://kvm.qumranet.com/kvmwiki . Acesso em: dezembro de 2008. LBVM. Load Balancing of Virtual Machines. Disponvel em:

http://lbvm.sourceforge.net/ . Acesso em: outubro de 2008. Libvirt. Libvirt - The virtualization API. Disponvel em: http://libvirt.org/ . Acesso em: outubro de 2008. Novell. ZENworks Virtual Machine Management. Disponvel em:

http://www.novell.com/products/zenworks/virtualmachinemanagement/ . Acesso em: outubro de 2008.

42

OpenVZ. OpenVZ wiki. Disponvel em: http://wiki.openvz.org/Main_Page . Acesso em: outubro de 2008. QEMU. Open source processor emulator. Disponvel em: http://bellard.org/qemu/ . Acesso em: outubro de 2008. SHEPLER, S.; CALLAGHAN, B.; ROBINSON, D.; THURLOW, R.; BEAME, C.; EISLER, M.; NOVECK, D. Network File System (NFS) version 4 Protocol. United States: RFC Editor, 2003. STROUSTRUP, B. The C++ Programming Language. Boston, MA, USA: AddisonWesley Longman Publishing Co., Inc., 2000. TANENBAUM, A. S. Modern Operating Systems. Upper Saddle River, NJ, USA: Prentice Hall PTR, 2001. Virtual Iron. Live Capacity. Disponvel em: http://blog.virtualiron.com/2007/01/11/virtualirons-livecapacity-exp.html . Acesso em: outubro de 2008. VMware Inc. Virtualization via hypervisor, virtual machine & server consolidation VMWare. Disponvel em: http://www.vmware.com . Acesso em: outubro de 2008. VMware Inc. VMware VMotion Features. Disponvel em: outu-

http://www.vmware.com/products/vi/vc/vmotion_features.html . Acesso em: bro de 2008.

Webstart. The SSL Protocol. Disponvel em: http://www.webstart.com/jed/papers/ HRM/references/ssl.html . Acesso em: outubro de 2008. Wikipedia. Transport Layer Security. Disponvel em:

http://en.wikipedia.org/wiki/Trans port_Layer_Security . Acesso em: 2008.

outubro de

Xen. Xen 3.2 data sheet. Disponvel em: http://www.xen.org/les/Xen_3.2Datasheet.pdf . Acesso em: outubro de 2008.

APNDICE A MANUAL DE INSTALAO

Este documento visa descrever as atividades necessrias para a instalao e congurao da ferramenta vmbal verso 0.1. Inicialmente sero listados os softwares dos quais a ferramenta vmbal dependente; em seguida sero listados os passos necessrios para instalao dos softwares necessrios em ambiente Linux.

A.1 Requisitos
Para instalao e utilizao do vmbal, necessrio que os seguintes softwares estejam instalados e corretamente congurados: Sistema operacional GNU/Linux Xen NFS Libvirt As prximas sees especicaro a instalao dos softwares necessrios para o funcionamento do vmbal.

A.2 Instalao da Libvirt


necessrio instalar a Libvirt em cada servidor fsico que ir comunicar-se com o programa de balanceamento de carga. A sua instalao pode ser feita de 2 maneiras: automaticamente, a partir dos repositrios do sistema, ou manualmente, baixando e compilando a mo. A Libvirt por ser uma API que est em constante desenvolvimento, ela evolui rapidamente, ento por este motivo, a verso que geralmente est nos repositrios no a mais atual. Por isso, preferiu-se fazer a instalao manual.

44

Para a instalao manual, primeiramente deve-se fazer o download do arquivo empacotado contendo o cdigo fonte da biblioteca. Este pode ser encontrado nesta pgina da Web: http://libvirt.org/downloads.html Aps o download deve ser feito o desempacotamento e entrar na pasta criada. $ tar xzf libvirt-0.5.0.tar.gz $ cd libvirt Aps isto a Libvirt deve ser compilada. $ ./congure prex=local_instalacao $ make $ make install

A.3 Congurao do libvirtd


Aps a compilao e instalao da Libvirt, necessrio congurar seu daemon. O arquivo de congurao o libvirtd.conf, e sua localizao varia de acordo com o local de instalao. A congurao desse arquivo deve ser realizada com muita ateno, e dependendo da necessidade de cada sistema, pode variar um pouco. No entrarei em detalhes sobre cada opo, porm o arquivo de congurao est bem documentado. A congurao padro deste arquivo geralmente j est funcionando.

A.4 Criao dos certicados


O prximo passo aps a congurao do daemon a criao dos certicados. Esta parte composta de 3 etapas: criao do certicado de autoridade, certicado para cada servidor e certicado para cada cliente. Estes passos esto descritos nas prximas sees. A.4.1 Certicado de autoridade Para a criao do certicado de autoridade, primeiramente deve ser gerado uma chave privada nica. $ certtool generate-privkey > cakey.pem Aps isso, criar um arquivo com o nome ca.info com o seguinte contedo, observando que deve ser alterado o campo cn:

45

cn = nome da organizao ca cert_signing_key O seguinte comando gera dois arquivos: cakey.pem e cacert.pem. $ certtool generate-self-signed load-privkey cakey.pem template ca.info outle cacert.pem O arquivo cakey.pem a chave privada, e deve ser mantido em segredo. O arquivo cacert.pem o certicado, e este publico, e deve ser instalado em todos os servidores e clientes. A instalao normal para este arquivo o seguinte local: /etc/pki/CA/cacert.pem. A.4.2 Certicado para servidores Para cada servidor, necessrio a criao de um certicado. Primeiramente deve ser gerada uma chave privada para o servidor: $ certtool generate-privkey > serverkey.pem Aps isso deve ser criado um arquivo com o nome server.info, com o seguinte contedo: organization = nome da organizao cn = host tls_www_server encryption_key signing_key Observar que necessrio alterar o campo organization e o campo cn. O campo cn deve ser o nome que os clientes usaro para comunicar-se com o servidor. Por exemplo, se o cliente usar a URI xen://servidor1/ para comunicar-se com o servidor, o cn deve ser servidor1. Feito isso, usar o seguinte comando para criar os certicados: $ certtool generate-certicate load-privkey serverkey.pem load-ca-certicate cacert.pem load-ca-privkey cakey.pem template server.info outle servercert.pem Esse processo ir gerar 2 arquivos: serverkey.pem e servercert.pem. O arquivo serverkey.pem a chave privada do servidor e deve ser copiado para a pasta /etc/pki/libvirt/private/serverkey.pem do servidor. O arquivo servercert.pem o certicado e deve ser copiado para a pasta /etc/pki/libvirt/servercert.pem do servidor.

46

A.4.3 Certicado para os clientes O computador que ir executar o programa de balanceamento de carga precisa ter o certicado de cliente congurado. Para isso, primeiramente deve ser gerado uma chave nica com o seguinte comando: $ certtool generate-privkey > clientkey.pem Aps isso, necessrio a criao de um arquivo com o nome client.info, e editar os parmetros country, state, locality, organization e cn. country = BR state = Rio Grande do Sul locality = Santa Maria organization = organizao cn = client1 tls_www_client encryption_key signing_key Para gerar o certicado usar o comando: $ certtool generate-certicate load-privkey clientkey.pem load-ca-certicate cacert.pem load-ca-privkey cakey.pem template client.info outle clientcert.pem Instalar o arquivo clientkey.pem na pasta /etc/pki/libvirt/private/clientkey.pem e o arquivo clientcert.pem na pasta /etc/pki/libvirt/clientcert.pem, ambos no cliente.

A.5 Congurao do xend


Para o suporte a migrao necessrio algumas alteraes no arquivo /etc/xen/xendcong.sxp. As seguintes opes devem estar descomentadas: (xen-api-server ((unix))) (xend-unix-server yes) (xend-relocation-server yes) (xend-unix-path /var/lib/xend/xend-socket) (xend-relocation-port 8002) (xend-address ) (xend-relocation-address )

47

Vale lembrar que dependendo da congurao do sistema pode ser que haja necessidade de alterar alguns campos. Outra necessidade para a migrao que as imagens das mquinas virtuais estejam acessveis a todos os servidores. Isto pode ser feito com a ajuda do NFS, por exemplo.

A.6 Instalao do Vmbal


O cdigo fonte da ferramenta Vmbal est disponvel livremente no seguinte endereo eletrnico: http://vmbal.sourceforge.net/ . Aps fazer o download necessrio alguns passos para a compilao da ferramenta. Primeiramente deve-se extra-la do pacote compactado. Para isso digite o comando: tar -xzf vmbal-0.1.tar.gz Isso criar uma pasta chamada vmbal. Depois disso, entrar na pasta e compilar, utilizando os seguintes comandos: cd vmbal ./autogen.sh make Aps esses comandos, se tudo ocorrer sem erros, o programa estar compilado e o executvel car dentro da pasta src.

A.7 Funcionamento do Vmbal


De acordo com o que foi descrito no captulo 4, para o funcionamento da ferramenta Vmbal necessrio que o arquivo de congurao vmbal.conf esteja congurado adequadamente. Este arquivo deve estar na mesma pasta do programa compilado. As opes so denidas com um caractere = aps cada opo, e deve conter apenas uma por linha. Para adicionar um servidor, utiliza-se a opo host. Por exemplo: host=xen://servidor1/. Pode ter vrios hosts denidos. Os tempos de intervalo de medio e intervalo de anlise so denidos respectivamente com as opes intervalo-medicao e intervalo-analise. Os valores devem ser um nmero inteiro maior que zero. Por exemplo: intervalo-medicao=5. Foi implementado um modo para fazer somente a coleta de dados e no fazer a anlise. Utiliza-se a opo modo-somente-coleta para isso. Os valores aceitos so 0 ou 1, 0 para

48

falso e 1 para verdadeiro. Por exemplo: modo-somente-coleta=1. O tamanho do buffer de dados denido com a opo tamanho-buffer-dados. Os valores aceitos so inteiros maior que zero, e representam o tamanho do buffer em posies. Por exemplo: tamanho-buffer-dados=100. possvel salvar registro de todos os dados lidos com a opo salvar-log. Os valores aceitos so somente 0 ou 1. Por exemplo: salvar-log=1. Se a opo salvar-log estiver denida como verdadeira, possvel denir a pasta de sada destes registros com a opo caminho-logs. Por exemplo: caminho-logs=logs/. Para denir a porcentagem de desequilbrio, utiliza-se a opo porcentagem-desequilibrio. Os valores aceitos so inteiros maiores que 0. Por exemplo porcentagem-desequilibrio=60. O tempo que um desequilbrio deve ser mantido para que haja mudana de estado no programa denido com a opo tempo-desequilibrio. Os valores aceitos so inteiros maiores que 0. Por exemplo tempo-desequilibrio=30. Todas essas opes exceto a opo host possuem valores padres caso no estejam denidas. Aps a congurao, a ferramenta j pode ser executada. Como a interface deste programa em linha de comandos, recomendvel um terminal para a inicializao deste programa. Depois de inicializar, o programa ir inicialmente mostrar todos os servidores, mquinas virtuais, interfaces de rede e interfaces de disco que foram encontrados. Aps isso o programa executa silenciosamente, porm quando h algum erro, o programa imprime mensagens de erro no console. Se o erro no for fatal, o programa segue. Como mencionado no captulo 4, foi implementado tambm um pequeno shell, e com isso pode ser passado alguns comandos em tempo de execuo. Atualmente s possui 3 comandos teis: carga-cpu, lista e gera-gracos. O comando carga-cpu imprime na tela a porcentagem de ocupao de cada servidor. O comando lista imprime no console todas as mquinas virtuais e em que servidores elas esto. O comando gera-gracos, cria grcos da utilizao dos dispositivos baseados nos registros gerados. Estes grcos so gerados com a ajuda da ferramenta gnuplot (Gnuplot, 2008). Para sair do programa utilizar o comando exit.