PLATAFORMA DE COMPUTAÇÃO EM NUVEM COM...

71
PLATAFORMA DE COMPUTAÇÃO EM NUVEM COM SERVIÇOS ORQUESTRADOS: UM EXPERIMENTO EM UMA IES Nelson de Melo Guimarães Júnior Ricardo Luiz de Oliveira Heinzelmann Projeto de Graduação apresentado ao Curso de Engenharia de Computação e Informação da Escola Politécnica, Universidade Federal do Rio de Janeiro, como parte dos requisitos necessários à obtenção do título de Engenheiro. Orientadora: Mônica Ferreira da Silva, D.Sc. Rio de Janeiro Dezembro de 2016

Transcript of PLATAFORMA DE COMPUTAÇÃO EM NUVEM COM...

PLATAFORMA DE COMPUTAÇÃO EM NUVEM COM SERVIÇOS

ORQUESTRADOS: UM EXPERIMENTO EM UMA IES

Nelson de Melo Guimarães Júnior

Ricardo Luiz de Oliveira Heinzelmann

Projeto de Graduação apresentado ao Curso de

Engenharia de Computação e Informação da Escola

Politécnica, Universidade Federal do Rio de

Janeiro, como parte dos requisitos necessários à

obtenção do título de Engenheiro.

Orientadora: Mônica Ferreira da Silva, D.Sc.

Rio de Janeiro

Dezembro de 2016

ii

PLATAFORMA DE COMPUTAÇÃO EM NUVEM COM SERVIÇOS

ORQUESTRADOS: UM EXPERIMENTO EM UMA IES

Nelson de Melo Guimarães Júnior

Ricardo Luiz de Oliveira Heinzelmann

PROJETO DE GRADUAÇÃO SUBMETIDO AO CORPO DOCENTE DO CURSO DE

ENGENHARIA DE COMPUTAÇÃO E INFORMAÇÃO DA ESCOLA POLITÉCNICA

DA UNIVERSIDADE FEDERAL DO RIO DE JANEIRO COMO PARTE DOS

REQUISITOS NECESSÁRIOS PARA A OBTENÇÃO DO GRAU DE ENGENHEIRO

DE COMPUTAÇÃO E INFORMAÇÃO.

Examinado por:

______________________________________________

Profa. Mônica Ferreira da Silva, D.Sc.

______________________________________________

Prof. Aloysio de Castro Pinto Pedroza, D.Sc.

______________________________________________

Prof. Jorge Lopes de Souza Leão, D.Sc.

______________________________________________

Profa. Márcia Cardoso de Oliveira, D.Sc.

RIO DE JANEIRO, RJ – BRASIL

DEZEMBRO de 2016

iii

de Melo, Nelson

Heinzelmann, Ricardo

Plataforma de computação em nuvem com serviços

orquestrados: Um experimento em uma IES / Nelson de Melo

Guimarães Júnior, Ricardo Luiz de Oliveira Heinzelmann. –

Rio de Janeiro: UFRJ/ Escola Politécnica, 2016.

X, 61 p.: il.; 29,7 cm.

Orientadora: Mônica Ferreira da Silva

Projeto de Graduação – UFRJ/ Escola Politécnica/ Curso

de Engenharia de Computação e Informação, 2016.

Referências Bibliográficas: p. 60-61.

1. Computação em Nuvem. 2. Virtualização. 3. IAAS.

4. Hipervisor. 5. Máquina Virtual. I. da Silva, Mônica Ferreira.

II. Universidade Federal do Rio de Janeiro, Escola Politécnica,

Curso de Engenharia de Computação e Informação. III. Título.

iv

DEDICATÓRIA

A nossos pais, irmãos e amigos,

Por tudo que representam em nossas vidas.

v

AGRADECIMENTOS

NELSON DE MELO GUIMARÃES JÚNIOR

Em 2004 estive no Centro de Tecnologia da UFRJ, para participar de um concurso militar. Ao

admirar a sala onde estava, pensei falando com Deus - "Como seria bom se um dia eu pudesse

ganhar uma vaga para estudar aqui", e anos mais tarde eu ganhei essa vaga. Hoje lembrando daquele

dia, vejo-me escrevendo o agradecimento do Projeto de Graduação. Só posso acrescentar que tenha

fé em Deus, Ele fará maravilhas na sua vida. Deus foi meu refúgio durante todos os momentos

difíceis, dos quais nunca fiquei desamparado, onde muitos problemas foram resolvidos de maneira

inacreditavelmente fantásticas.

Aos meus pais, Nelson e Socorro, por todo amor, incentivo e por não medirem esforços para

que eu pudesse levar meus estudos e sonhos adiante. A lembrança do rosto de vocês quando

estávamos comemorando minha aprovação no vestibular, sempre foi meu maior combustível para

fazer essa caminhada, terminar da mesma forma que começou. Não por mim, mas pelos excelentes

seres humanos que tenho o maior orgulho de chamar de pais.

Aos meus irmãos, Clara, Marcus e Roberto sem seus cuidados e bons exemplos, não seguiria

o caminho do estudo. Amo vocês e suas famílias.

Ao Ricardo, irmão que a vida me deu. Parceiro deste trabalho e de várias outras batalhas. Só

nós sabemos como foi difícil. Sua amizade foi fundamental para que tudo isso fosse possível.

Vencemos!

À Profª. Mônica Ferreira pelo paciente e brilhante trabalho dе orientação.

À Profª. Márcia Cardoso por acreditar e apoiar o projeto, além de disponibilizar todos os

recursos para realizá-lo.

Aos professores Aloysio Pedroza e Jorge Leão, membros da banca, pela disponibilidade e

contribuições pessoais, acerca da monografia.

À equipe do NCE, em especial as pessoas que de alguma maneira foram importantes durante

a realização do projeto: Adilson Filgueiras, Carlos Mendes, Claudia Naumann, Cláudia Simone,

Fábio David, Frank Ricetta, Leonardo Nascimento, Luiz Ribeiro, Márcio Thadeu, Ricardo Caiado

e Thiago Ferreira.

Aos profissionais com os quais tive o privilégio de trabalhar na Acotel, e com eles aprender

muito do que utilizei neste projeto.

E a tantos amigos que fiz na universidade, dos quais guardo carinho e a nostalgia de bons

momentos vividos. Em especial ao Alejandro Padron, Joimilte Bonfim, Miguel Kapingala e Wilmar

Alcântara.

Meu muito obrigado a todos!

vi

AGRADECIMENTOS

RICARDO LUIZ DE OLIVEIRA HEINZELMANN

Primeiramente, gostaria de agradecer a toda minha família pelo apoio incondicional

durante todos esses anos. Durante todo o momento, apesar das dificuldades encontradas

durante esse processo, estiveram sempre do meu lado, provendo estrutura, amor e carinho,

para que pudesse alcançar esse sonho.

Aos familiares distantes, que apesar da distância, sempre estiveram presentes, torcendo

e vibrando por cada conquista. Desculpem pela ausência durante esse período, mas foi

necessária, meus pensamentos estavam com vocês esse tempo todo.

Agradecer aos meus amigos de infância, que aguentaram todo o estresse que levava

junto quando ia visitá-los. Sem vocês, seria difícil chegar ao final desse curso. Cada

conversa, pessoalmente ou Skype, brigas e reconciliações, foram muito importantes para

que eu pudesse crescer e ter orgulho da pessoa e do profissional que sou hoje.

Aos meus professores e colegas de faculdade, cada um teve sua parcela nesta

conquista.

Ao pessoal do NCE, que me acolheram como bolsista e por lá fiquei até o final do

curso. Fiz muitos amigos, dentre eles, um agradecimento especial ao Wilmar Alcântara,

que foi sempre um mentor, amigo e muitas vezes um pai. Obrigado velhinho!

Às professoras Mônica Ferreira e Márcia Cardoso, que nos guiaram durante a

realização desse projeto, nos incentivando e acreditando sempre em nós mesmo quando

desanimávamos.

Um agradecimento especial à minha mãe, meu porto seguro e centro de minhas

orações, tenho certeza que você é a grande responsável por essa conquista e por todas as

coisas boas que acontecem em minha vida. Um dia estaremos juntos para te agradecer

pessoalmente.

À melhor coisa que essa faculdade me trouxe, meus grandes amigos, Alejandro,

Miguel, Joimilte e Nelson. Cada semestre, cada aula, cada dia foi importante, caminhamos

juntos sempre, e essa conquista é de todos vocês! Jamais poderei retribuir tudo o que

fizeram por mim nesse tempo!

E por fim, em especial ao Nelson, parceiro neste projeto e amigo de estudos, trabalhos,

festas e tudo que essa vida nos proporciona, de bom e ruim. Pessoa que pude sempre contar,

e assim continuaremos caminhando juntos em todos os momentos da vida. Obrigado irmão!

Conseguimos!

vii

Resumo do Projeto de Graduação apresentação à Escola Politécnica/UFRJ como parte dos

requisitos necessários para a obtenção do grau de Engenheiro de Computação e

Informação.

Plataforma de Computação em Nuvem com Serviços Orquestrados:

Um Experimento em uma IES

Nelson de Melo Guimarães Júnior

Ricardo Luiz de Oliveira Heinzelmann

Dezembro/2016

Orientadora: Mônica Ferreira da Silva

Curso: Engenharia de Computação e Informação

A computação em nuvem é hoje o centro das atenções de todos que trabalham com

tecnologia, trazendo ganhos em diversos setores e oferecendo uma grande quantidade de

recursos e serviços. Cada vez mais, empresas, instituições e pessoas físicas estão migrando

suas aplicações para a nuvem, onde existem diversas opções para realizar essa migração,

desde um conjunto completo de soluções, serviços disponíveis gratuitamente com menores

recursos e até plataformas open source que podem ser implementadas internamente como

a que foi desenvolvida neste projeto. A escolha da melhor opção, depende de diversos

fatores, dos quais, a quantidade de recursos e serviços necessários, custos financeiros e

operacionais possuem um maior destaque. A falta de recurso em instituições públicas,

dificultam a implantação de novas tecnologias e manutenção dos recursos existentes,

aumentando assim, os gastos e a quantidade de trabalho pela equipe responsável por manter

o sistema. O projeto teve como objetivo, realizar um experimento, a partir da implantação

de uma plataforma de computação em nuvem com serviços orquestrados, através do uso

do CloudStack e serviços de monitoramento, para analisar e propor uma alternativa à atual

infraestrutura computacional desta Instituição.

Palavras-chave: Computação em Nuvem, Virtualização, IaaS, Hipervisor, Máquina

Virtual

viii

Abstract of Undergraduate Project presented to POLI/UFRJ as a partial fulfillment of the

requirements for the degree of Engineer.

Cloud Computing Platform with Orchestrated services:

An Experiment in a Higher Education Institution

Nelson de Melo Guimarães Júnior

Ricardo Luiz de Oliveira Heinzelmann

December/2016

Advisor: Mônica Ferreira da Silva

Course: Engenharia de Computação e Informação

Cloud computing today is the center of attention for everyone who works with

technology, bringing gains across industries and offering a wealth of features and services.

Increasingly, companies, institutions and individuals are migrating their applications to the

cloud, where there are several options to perform this migration, from a complete set of

solutions, services available for free with fewer resources and even open source platforms

that can be implemented internally, such as the one developed in this project. The choice

of the best option depends on several factors, of which the amount of resources and services

required, financial and operational costs are more prominent. The lack of resources in

public institutions hinders the implementation of new technologies and maintenance of

existing resources, thus increasing the expenses and the amount of work by the team

responsible for maintaining the system. The project had the objective of conducting an

experiment, from the implementation of a cloud computing platform with orchestrated

services, through the use of CloudStack and monitoring services, to analyze and propose

an alternative to the current computational infrastructure of this Institution.

Keywords: Cloud Computing, Virtualization, IaaS, Hypervisor, Virtual Machine

ix

Sumário Capítulo 1. Introdução ......................................................................................................... 1

Capítulo 2. Referencial Teórico .......................................................................................... 5

2.1 Virtualização ................................................................................................................. 5

2.1.1 Requisitos para virtualização .................................................................................. 6

2.2 Computação em Nuvem ................................................................................................ 9

2.2.1 Características Desejadas........................................................................................ 9

2.2.2 Modelos de Serviço .............................................................................................. 10

2.2.2.1 Infraestrutura como um Serviço (IaaS).............................................................. 11

2.2.2.2 Plataforma como um Serviço (PaaS) ................................................................. 11

2.2.2.3 Software como um Serviço (SaaS) .................................................................... 12

2.2.3 Modelos de Implantação ....................................................................................... 12

2.2.3.1 Nuvem Privada .................................................................................................. 12

2.2.3.2 Nuvem Pública................................................................................................... 13

2.2.3.3 Nuvem Híbrida .................................................................................................. 13

2.2.4 Desafios ................................................................................................................ 13

Capítulo 3. Ferramentas Open Source para Computação em Nuvem ............................... 15

3.1 Apache CloudStack ..................................................................................................... 15

3.1.1 Infraestrutura......................................................................................................... 18

3.1.2 Infraestrutura de rede ............................................................................................ 21

3.2 XenServer. ................................................................................................................... 22

3.3 Ferramentas de Apoio ................................................................................................. 24

3.3.1 Puppet ................................................................................................................... 24

3.3.2 Zabbix ................................................................................................................... 27

3.3.3 pfSense .................................................................................................................. 28

3.3.3.1 Pacotes ............................................................................................................... 29

Capítulo 4. Descrição do Ambiente de Experimentação ................................................... 31

Capítulo 5. Descrição do Experimento.............................................................................. 34

Capítulo 6. Análise do Experimento ................................................................................. 53

Capítulo 7. Conclusão ....................................................................................................... 57

Referências Bibliográficas ................................................................................................ 60

x

Índice de figuras

Figura 1. Hipervisor tipo 1. Adaptado de (Tanenbaum, 2009) .............................................7

Figura 2. Hipervisor tipo 2. Adaptado de (Tanenbaum, 2009) .............................................7

Figura 3. Técnica de virtualização total. Adaptado de (Tanenbaum, 2009) .........................8

Figura 4. Técnica de paravirtualização. Adaptado de (Tanenbaum, 2009) ...........................9

Figura 5. Modelos de serviço (Lauro, 2012) ......................................................................10

Figura 6. Instalação mínima (Apache CloudStack, 2016) ..................................................17

Figura 7. Infraestrutura da nuvem (Apache CloudStack, 2016) .........................................18

Figura 8. Componentes do hipervisor (Carissimi, 2008) ....................................................23

Figura 9. Posição geográfica dos usuários (Zabbix, 2016) .................................................27

Figura 10. Interface gráfica do pfSense ..............................................................................29

Figura 11. Gerenciador de pacotes .....................................................................................30

Figura 12. Modelo estrutural de uma zona avançada (Apache CloudStack, 2016) .............37

Figura 13. Componentes da nuvem ....................................................................................39

Figura 14. Interface do CloudStack ....................................................................................43

Figura 15. Nenhum componente disponível ......................................................................43

Figura 16. Campo para definir números das VLANs ........................................................45

Figura 17. Campo para definir nome do Cluster ................................................................46

Figura 18. Definição de atributos do storage primário .......................................................47

Figura 19. Parte final da definição dos parâmetros da zona ...............................................48

Figura 20. Zona construída com sucesso ............................................................................48

Figura 21. Componentes da primeira zona .........................................................................49

Figura 22. Nenhuma instância criada .................................................................................49

Figura 23. Início do processo de criação de uma instância .................................................50

Figura 24. Escolha do processador, memória e espaço em disco .......................................50

Figura 25. Visão geral da instância antes dela ser efetivamente criada ...............................51

Figura 26. Instâncias disponíveis .......................................................................................51

Figura 27. Painel com as opções disponíveis para a instância ............................................52

1

Capítulo 1

Introdução

A evolução da computação em nuvem é um dos maiores avanços na história da

computação, tornando-se um novo paradigma nesses últimos anos. Dentre as diversas

definições existentes, computação em nuvem pode ser definida como uma coleção de

computadores virtualizados e interconectados que fornecem recursos e serviços

computacionais e são dinamicamente provisionados e apresentados com base num acordo

estabelecido entre o provedor de serviço e o consumidor (Buyya et al., 2011).

De maneira mais simples, pode ser considerado como uma virtualização de um data

center, onde servidores são virtualizados buscando o melhor aproveitamento de seus

recursos que são disponibilizados através de máquinas virtuais. Uma nuvem pode ser

implantada de forma pública, com um provedor de serviço fornecendo os recursos e

serviços que a organização necessita, ou de forma privada, sendo gerenciada internamente

pela organização. Pode também, existir uma estrutura híbrida, onde uma organização

mantém uma infraestrutura interna e disponibiliza alguns serviços publicamente.

Uma nuvem pública é caracterizada por estar disponível através de um provedor de

serviço terceiro via Internet. É uma maneira eficiente com relação ao custo para implantar

uma solução em TI (Tecnologia da Informação), especialmente para pequenas e médias

empresas, e entidades governamentais que precisam disponibilizar diversos serviços à

população. As principais empresas que fornecem serviços de computação em nuvem são

Amazon AWS, Microsoft Azure e Google Cloud. Além destas, existem diversas empresas

que fornecem apenas determinados serviços, como armazenamento.

2

Uma nuvem privada oferece muitos dos benefícios de uma nuvem pública, mas é

gerenciada dentro da própria organização. Ela permite um controle maior sobre a

infraestrutura e é geralmente adequada para grandes instalações (Ogura, 2011). Existem

algumas ferramentas que possibilitam a criação de uma nuvem, as quais são conhecidas

como orquestradores. Algumas delas são de software livre, podendo ser utilizadas

livremente por qualquer pessoa e instituição. As mais utilizadas, estáveis e com

comunidades bastante ativas são: CloudStack, OpenStack, OpenNebula e Eucalyptus

Systems.

O ponto principal da computação em nuvem é entregar todas as funcionalidades de

serviços de TI existentes e, ao mesmo tempo, reduzir os custos que uma organização teria

para implantação de seus serviços. De acordo com Bandyopadhyay et al. (2010), a

computação em nuvem é uma convergência de duas principais tendências: maior eficiência

em TI e agilidade dos negócios. O poder computacional dos equipamentos mais modernos

é utilizado de forma mais eficiente através de um hardware altamente escalável e recursos

de software, e podem ser utilizados como uma ferramenta competitiva por ter uma

implantação rápida, redução de custos com infraestrutura e utilização de recursos e serviços

sob demanda, permitindo às empresas uma maior flexibilidade ao gerenciar seus serviços,

principalmente na fase inicial de sua implantação.

Algumas das vantagens das organizações em investir numa infraestrutura de

computação em nuvem são (Kim, 2009):

O investimento inicial em recursos computacionais é pequeno. A empresa terceira

que fornece o serviço detém e gerencia todos os recursos de computação

(servidores, software, armazenamento e redes).

Os usuários podem de forma simples e rápida aumentar ou diminuir a quantidade

de recursos que estão utilizando de acordo com sua necessidade.

3

A cobrança pela terceira ao usuário é geralmente feita de acordo com o uso dos

recursos e serviços solicitados, como por exemplo, quantidade de acessos a uma

determinada página web, quantidade de disco e memória requisitados. O custo por

esse tipo de serviço é a princípio menor do que criar e manter uma infraestrutura

completa funcionando.

O acesso aos serviços pode ser feito de qualquer lugar e a qualquer momento.

De acordo com Veras (2016), o investimento em infraestrutura de TI de grandes

empresas americanas chega a ser de 60% do total de recursos investidos em TI. O restante

é utilizado na manutenção de aplicações e desenvolvimento de novos projetos. Desta

porcentagem, 25% são dedicados para o data center, que é o elemento mais importante da

infraestrutura, onde grande parte dos dados são armazenados e processados. Uma redução

no gasto em data center permite que a organização aloque seus recursos de maneira mais

eficiente, sem se preocupar tanto com infraestrutura e poder melhorar os níveis de serviços

fornecidos e se dedicar mais no desenvolvimento de seus produtos e novos projetos.

Esse projeto tem como objetivo desenvolver um experimento combinando tecnologias

a fim de diminuir custos financeiros e operacionais da infraestrutura de computação, em

busca de maiores níveis de integridade, confiabilidade, escalabilidade e disponibilidade,

fazendo-se uso de uma plataforma de computação em nuvem. Sendo assim, oferecer uma

alternativa ao atual cenário de perda de poder econômico das Instituições de Ensino

Superior (IES) públicas no Brasil.

O projeto está dividido em sete capítulos, sendo essa introdução o primeiro deles. O

Capítulo 2 apresenta os conceitos importantes para o entendimento do tema. O Capítulo 3

trata das ferramentas que foram utilizadas para o desenvolvimento da parte experimental.

Já no Capítulo 4, inicia a descrição do ambiente de experimentação, detalhando a estrutura

existente e os recursos que foram utilizados para construir o experimento. O Capítulo 5

descreve o experimento, explicando como cada ferramenta foi utilizada em conjunto com

4

as demais. No Capítulo 6, é feito uma análise entre os dados existentes da estrutura legado

com os novos dados obtidos do experimento. Por fim, o Capítulo 7 conclui o trabalho e

explora as principais contribuições e pesquisas futuras.

5

Capítulo 2

Referencial Teórico

2.1 Virtualização

Um sistema operacional está fortemente ligado ao hardware do computador onde ele

está sendo executado. O sistema operacional de alguma maneira consegue fazer controlar

o hardware de maneira que as tarefas solicitadas pelos programas dos usuários sejam

executadas pelo hardware. Sistema operacional é um termo difícil de conceituar devido a

suas diversas funcionalidades, segundo Tanenbaum (2009), é uma coleção de programas

responsáveis pela inicialização do hardware de um computador. Fornece funcionalidades

básicas para controle de dispositivos além de gerenciar, escalonar e fazer a interação de

tarefas.

Com o hardware dos computadores em constante e rápida evolução, os projetistas de

sistemas operacionais, foram obrigados a sugerir uma maneira de utilizar todo o poder

computacional agora disponível, buscando sempre os melhores índices de eficiência e

disponibilidade, considerando que a maior parte das falhas em computadores é causada

pelo conjunto de programas e não do hardware, a tecnologia de máquinas virtuais, que tem

mais de 40 anos e frequentemente é chamada também de virtualização, foi o que surgiu

como proposta de solução.

Um dos conceitos centrais de um sistema operacional é o de processo. Um processo é

uma abstração correspondente a um programa em execução. Os computadores são capazes

de fazer diversas tarefas por segundo, e essa velocidade, cria a ilusão que essas tarefas são

executadas ao mesmo tempo, passando a ideia de paralelismo. O compartilhamento do

6

processador físico do computador, ocorre através do chaveamento rápido entre os diversos

processadores virtuais criados pelo sistema operacional.

Essencialmente, a virtualização visa entregar algum recurso de modo a imitar todas as

características dele. Sendo possível a criação de versões virtuais dos mais diversos

elementos de computação como, sistemas operacionais, servidores, dispositivos de

armazenamento e até mesmo recursos de redes.

2.1.1 Requisitos para virtualização

Em relação à arquitetura

Duas técnicas são utilizadas para a virtualização. O motivo pelo qual foi desenvolvido

mais de uma maneira de virtualizar está relacionada à arquitetura do Intel 386 que nos

primeiros modelos ainda não estavam preparados para serem virtualizados e isso forçou o

desenvolvimento de mais de uma técnica. As quais são chamadas de hipervisor tipo 1 (ou

monitor de máquina virtual - MMV) e a outra de hipervisor tipo 2.

Hipervisor tipo 1: O hipervisor dessa técnica (ver Figura 1) é utilizado como sistema

operacional do servidor. Tem como principal tarefa controlar múltiplas cópias do hardware

real, chamadas de máquinas virtuais, como os processos que um sistema operacional

normal gerencia. A máquina virtual é executada como um processo de usuário no modo

usuário de um sistema operacional e, como tal, o modo usuário não tem privilégios para

executar instruções sensíveis. Popek e Goldberg (1974) definiram instruções sensíveis

como sendo instruções que só podem ser executadas como modo núcleo, por exemplo

instruções de entrada e saída e também alterações nos estados dos registradores. O

hipervisor cria um ambiente virtual chamado de modo núcleo virtual, no qual a máquina

virtual acredita estar executando instruções no modo núcleo, quando na realidade está

7

executando no modo usuário. Apenas os processos do usuário da máquina virtual são

executados realmente no modo usuário.

Figura 1. Hipervisor tipo 1. Adaptado de (Tanenbaum, 2009)

Hipervisor tipo 2: Essa técnica, exemplificada na Figura 2, surgiu como solução para

resolver o problema da época que alguns processadores não suportavam virtualização, pois

algumas instruções sensíveis da máquina virtual seriam simplesmente ignoradas pelo

processador. Visto que para executar uma instrução sensível, faz-se necessário o modo

núcleo, sendo que os hipervisores do tipo 2 são executadas em modo usuário simples sobre

um sistema operacional hospedeiro (sistema operacional que controla o hardware do

servidor) como Linux, Windows ou Unix. Os sistemas operacionais das máquinas virtuais

são chamados de hóspedes, e quando eles querem executar alguma instrução que é

necessário algum privilégio de modo núcleo essa instrução é simulada pelo hipervisor.

Figura 2. Hipervisor tipo 2. Adaptado de (Tanenbaum, 2009)

8

Em relação à técnica

Virtualização total: As máquinas virtuais que utilizam essa técnica têm como

característica determinante, a ausência de modificações em seus sistemas operacionais que

é executado por um conjunto de combinações de traduções binárias e técnicas de execução

direta. A máquina virtual acredita estar rodando diretamente sobre o hardware do servidor,

pois não há alterações no código-fonte no sistema operacional da máquina virtual. Sendo

assim, para que seja possível a execução de instruções sensíveis, o MMV executa aquelas

instruções para o sistema operacional hospedado. Comparando com a paravirtualização, há

uma perda de desempenho devido a atuação do MMV na execução das instruções sensíveis.

Os anéis presentes na Figura 3 abaixo, representam os níveis de privilégio de acesso ao

hardware, sendo o nível 0 (zero) com o maior privilégio.

Figura 3. Técnica de virtualização total. Adaptado de (Tanenbaum, 2009)

Paravirtualização: Nessa abordagem é introduzido o conceito de chamadas de hipervisor,

que são modificações introduzidas no código-fonte dos sistemas operacionais hospedados.

Essas modificações visam retirar do código-fonte instruções sensíveis e substituí-las por

chamadas de hipervisor. A camada de virtualização representada na Figura 4, é responsável

9

pela execução das chamadas de hipervisor que conseguem se comunicar diretamente com

o hardware, tornando a virtualização mais eficiente.

Figura 4. Técnica de paravirtualização. Adaptado de (Tanenbaum, 2009)

2.2 Computação em Nuvem

2.2.1 Características Desejadas

Certas características de uma nuvem são essenciais para habilitar serviços que

verdadeiramente representam o modelo de nuvem de computação e satisfaça as

expectativas dos clientes (Buyya et al., 2011):

Customização: Como na grande maioria dos casos há uma grande disparidade

entre as necessidades dos usuários, se faz necessário que a nuvem seja altamente

personalizável. No caso de serviços de infraestrutura, personalização significa

permitir que os usuários tenham partes de suas tarefas automatizadas.

Confiabilidade: Melhora através da implementação de diversos locais

redundantes, o que torna adequado para a continuidade de negócios e recuperação

de desastres.

Elasticidade: Esse recurso é importante pois cria a ilusão de recursos ilimitados.

Clientes esperam que nuvens sejam capazes de disponibilizar recursos

computacionais em qualquer quantidade e momento. A elasticidade de uma nuvem

10

é importante no caso em que uma aplicação necessite de mais recursos e ele seja

disponibilizado quase que instantaneamente e até mesmo no diminuir a quantidade

de recursos alocados quando ele não for mais necessário.

Autoatendimento sob demanda: Clientes de serviços de uma nuvem de

computação esperam acessar quase que instantaneamente recursos computacionais

sob demanda. Para disponibilizar essas expectativas, a nuvem autoriza o acesso aos

recursos via autoatendimento sem intervenção humana.

2.2.2 Modelos de Serviço

Os serviços de computação na nuvem são divididos em três modelos, que levam em

consideração o modelo de serviço fornecido pelo provedor e o nível de abstração do recurso

provido. O nível de abstração pode ser visto como a camada de arquitetura onde os serviços

das camadas superiores podem ser compostos pelos serviços das camadas inferiores. Os

três modelos de serviço são classificados da seguinte forma: Infraestrutura como Serviço

(IaaS), camada inferior; Plataforma como Serviço (PaaS), camada intermediária; Software

como Serviço (SaaS), camada inferior.

Figura 5. Modelos de serviço (Lauro, 2012)

11

2.2.2.1 Infraestrutura como um Serviço (IaaS)

Ao falarmos no termo IaaS, estamos nos referindo a uma infraestrutura computacional

que utiliza técnicas de virtualização para entregar recursos computacionais. Uma

infraestrutura no modelo IaaS tem como objetivo tornar fácil e acessível o gerenciamento

e fornecimento de recursos computacionais, ou seja, ele é responsável por fornecer

recursos, tais como servidores, rede, armazenamento e até mesmo, sistemas operacionais e

aplicativos necessários para construção de um ambiente sob demanda. Além de

disponibilizar na maioria dos casos, serviços online para administração da infraestrutura,

como por exemplo uma interface web. Por se tratar da camada inferior, esta também é

responsável por prover a infraestrutura utilizada pela camada intermediária e superior.

Os serviços Amazon EC2 (Servidores virtuais na nuvem) e Amazon S3

(Armazenamento escalável na nuvem) são exemplos de IaaS. Provedores de nuvem

geralmente cobram pelo serviço de IaaS pelo total de recursos alocados ou consumidos

(Amazon AWS, 2016).

2.2.2.2 Plataforma como um Serviço (PaaS)

Provedores de PaaS fornecem ambientes de desenvolvimento para que

desenvolvedores não precisem se preocupar com a infraestrutura que será utilizada, nem

mesmo com as instalações dos ambientes utilizados por suas aplicações, trabalhos custosos

e complexos na grande maioria dos casos.

No PaaS, os usuários não possuem a gerência da infraestrutura da nuvem, mas tem o

controle sobre as aplicações implementadas e a possibilidade de configurar o ambiente das

aplicações hospedadas.

12

2.2.2.3 Software como um Serviço (SaaS)

O modelo de SaaS disponibiliza sistemas de software com propósitos específicos, os

quais são acessados via Internet por um navegador web por exemplo. No SaaS, o usuário

não administra ou controla a infraestrutura das camadas inferiores, exceto configurações

específicas do sistema. Com isso, os desenvolvedores se concentram em inovação e não na

infraestrutura, levando ao desenvolvimento rápido de sistemas de software (Souza et al.,

2010).

2.2.3 Modelos de Implantação

As nuvens podem ser classificadas em três tipos básicos: públicas, privadas e híbridas.

A escolha entre elas depende das necessidades das aplicações que serão implementadas.

Abaixo, esses tipos de nuvem são mais bem descritos (Dikaiakos et al., 2009).

2.2.3.1 Nuvem Privada

Nuvens privadas são utilizadas para atender exclusivamente um cliente ou instituição.

Neste modelo a infraestrutura utilizada pertence ao cliente, sendo esta local ou remota e

administrada pela própria empresa ou por terceiros (Souza et al., 2010). O gerenciamento

dos serviços disponibilizados por esta nuvem é feito utilizando-se técnicas de

gerenciamento de redes, configurações de provedores de serviços ou métodos de

autenticação e autorização.

Havendo a necessidade de expansão da capacidade da nuvem, esse trabalho deverá ser

feito pelo próprio cliente. Trabalho que envolve desde o desenvolvimento do projeto até

sua implementação.

13

2.2.3.2 Nuvem Pública

As nuvens públicas têm como característica serem utilizadas por terceiros. Neste

modelo a infraestrutura é partilhada entre diversas instituições, deslocando os riscos de

infraestrutura para o provedor da nuvem. Essas nuvens geralmente são extremamente

escaláveis, e para prover esse serviço são construídas em grandes data centers.

2.2.3.3 Nuvem Híbrida

Neste modelo há uma combinação entre características das nuvens privadas e públicas.

Com este modelo é possível que uma nuvem privada possa ter seus recursos ampliados a

partir de uma reserva de recursos em uma nuvem pública. Esse tipo de modelo costuma ser

mais resiliente a desastres ou falhas na própria infraestrutura tanto privada quanto pública.

É válido destacar que aplicações que rodam neste tipo de ambiente devem ser bem

projetadas para minimizar nenhum desperdício de recursos computacionais nem mesmo

financeiro.

2.2.4 Desafios

Segurança e privacidade da informação

Uma questão essencial em qualquer sistema de computação em nuvem é a segurança

e privacidade. É necessário que os fornecedores de soluções em nuvem, adotem

ferramentas e metodologias de segurança mais sofisticadas e atualizadas do mercado,

usando na sua operação elevados níveis de rigor e transparência, de modo a garantir a

máxima segurança possível.

Não havendo garantia de segurança, não há motivos e nem condições para que uma

organização faça a transição para a nuvem.

14

Recuperação de dados

Em caso de desastre com os dados o provedor do serviço de nuvem deve ser capaz de

recuperar essas informações sem que a privacidade dos clientes seja ameaçada.

Alta Disponibilidade

Uma preocupação constante é com a disponibilidade de um serviço de nuvem. Para

que seja possível altos níveis de disponibilidade, provedores investem milhares de dólares

na replicação de seus sites.

Escalabilidade

Como a nuvem oferece alta escalabilidade, tornou-se uma solução viável para atender

de forma inteligente a demanda por automação requerida pelos negócios, associada a uma

utilização efetiva e otimizada dos recursos computacionais.

Licenciamento de Software

Licenciamento de software é outra questão bem delicada na nuvem, pois as empresas

detentoras de softwares viram-se obrigadas a mudar seus planos de licenciamento, visando

também clientes de nuvem. Alguns provedores fazem alguns contratos com os donos de

software para que paguem por algumas licenças apenas quando elas forem utilizadas por

clientes dos servidores.

15

Capítulo 3

Ferramentas Open Source para

Computação em Nuvem

3.1 Apache CloudStack

O CloudStack é um software livre desenvolvido para implantar e gerenciar projetos de

nuvens privadas, públicas ou híbridas, entregando uma Infraestrutura como Serviço (IaaS)

confiável e escalável em uma plataforma de computação em nuvem. É um orquestrador

completo de recursos para computação em nuvem, onde através de linha de comando ou

de uma interface web, torna o gerenciamento da plataforma um processo prático e integrado

(Apache CloudStack, 2016).

O projeto CloudStack teve início em 2008 através de uma startup chamada VMops.

Suas primeiras versões eram focadas apenas no hipervisor XenServer, após um período,

suporte aos demais hipervisores foram adicionados. A empresa mudou seu nome para

Cloud.com e em 2011 foi comprada pela Citrix onde a maioria dos códigos fontes eram

livres sobre a licença GPLv3 (GNU General Public License version 3).

Em abril de 2012, a Citrix deixou de lado o projeto e passou a ser gerenciado pela

Apache Software Foundation em sua incubadora, agora sob a licença ASLv2 (Apache

Software License 2.0). Versões menores foram criadas (4.0.1-incubating) e em março de

2013 ganhou maturidade e deixou a incubadora, sendo considerado um projeto de nível

superior da Apache.

16

De acordo com a Apache CloudStack (2016), é um projeto baseado em Java que

fornece um servidor de gerenciamento e agentes (se necessário) para diferentes

hipervisores para executar uma nuvem IaaS. Alguns dos principais recursos fornecidos são:

Trabalha com os principais hipervisores: BareMetal, Hyper-V, KVM, LXC,

vSphere e XenServer;

Fornece uma interface web amigável para gerenciar a nuvem;

Fornece uma API nativa;

Fornece como opção uma API nativa compatível com Amazon S3/EC2;

Gerencia o armazenamento das instâncias em execução nos hipervisores

(armazenamento primário), bem como templates, snapshots e imagens ISO

(armazenamento secundário);

Orquestra serviços de rede da camada de enlace para alguns serviços da camada

de aplicação como DHCP, NAT, firewall, VPN e outros;

Contabiliza os recursos de rede, computação e armazenamento;

Gerencia contas e diferentes tipos de usuários.

O CloudStack pode gerenciar uma quantidade imensa de servidores físicos que podem

estar distribuídos em data centers ao redor do mundo. Manutenções e qualquer tipo de

interrupção nos servidores de gerenciamento não afetam as máquinas virtuais que estão

rodando na nuvem. Possui um gerenciamento automático de configuração da nuvem onde,

para cada implantação de máquina virtual, as definições de rede e configurações dos

storages são feitas automaticamente. As operações de configuração da nuvem são

apoiadas internamente por um conjunto de dispositivos virtuais que oferecem serviços

como roteamento, DHCP, VPN, firewall, console proxy, acesso aos armazenamentos

primário e secundário e replicação de storage.

A interface web pode ser utilizada tanto por administradores como por usuários finais.

Para administradores, permite o provisionamento e gerenciamento da nuvem, já os usuários

podem gerenciar templates das máquinas virtuais, criar, executar e excluir instâncias de

17

acordo com as permissões que foram atribuídas a ele. A interface gráfica do usuário pode

ser customizada para melhor se adequar ao design e gosto do mesmo.

Uma instalação mínima consiste em uma máquina rodando o CloudStack Management

Server (Servidor de Gerenciamento do CloudStack) e uma máquina atuando como host

(hipervisor). Durante a implantação, recursos a serem gerenciados como endereços de rede,

dispositivos de armazenamento, hipervisores e redes locais virtuais (VLAN – Virtual Local

Area Network) devem ser informados ao servidor de gerenciamento. Uma implementação

com maior disponibilidade de recursos, pode ser formada por instalações em diferentes nós

do servidor de gerenciamento e até dezenas de milhares de hosts, garantindo alta

disponibilidade de recursos.

Figura 6. Instalação mínima (Apache CloudStack, 2016)

O servidor de gerenciamento tem a função de orquestrar e alocar recursos na

implementação da nuvem. Pode rodar tanto em um ambiente físico como virtual. Como o

servidor não precisa de muitos recursos computacionais para seu funcionamento, sua

instalação pode ser virtualizada, tornando-se uma opção interessante pois ganha toda a

flexibilidade de uma máquina virtual.

18

3.1.1 Infraestrutura

O CloudStack possui uma infraestrutura hierárquica, a fim de permitir a gestão de

vários nós físicos por uma única interface. Essa infraestrutura, pode ser dividida em 4

partes principais (regiões, zonas, pods e clusters) e 3 componentes (host, storage primário

e storage secundário), como pode ser observado na figura abaixo e melhor detalhado a

seguir:

Figura 7. Infraestrutura da nuvem (Apache CloudStack, 2016)

Storage primário: Unidade de armazenamento utilizada para armazenar os discos virtuais

das instâncias. Geralmente é localizado próximo ao host para aumentar sua performance.

O CloudStack trabalha com todos os padrões compatíveis com servidores iSCSI e NFS que

são suportados pelo hipervisor utilizado.

Storage secundário: Unidade de armazenamento que é compartilhada entre as zonas de

disponibilidade da nuvem. Ela armazena:

19

Templates: É o estado de uma instalação de um Sistema Operacional utilizado

como modelo para a criação de uma máquina virtual, podendo conter, entre outras

coisas, informações adicionais de configuração do sistema e aplicações.

Imagens ISO: Formato de arquivo que reúne todas as informações a serem

gravadas em um disco (CD/DVD). No caso, é utilizado como discos inicializáveis

de sistemas operacionais.

Snapshots de volume de disco: Cópias dos discos virtuais das instâncias. Serve

para recuperação de dados ou para ser utilizado como template.

Os dados armazenados de uma determinada zona também podem ser acessados pelas

demais zonas adicionando recursos adicionais de storage. Já a nível de regiões, todas as

zonas devem conter um mesmo tipo de storage, por exemplo, todas as zonas se

comunicarem com o storage através de servidores NFS.

Host: Um host pode ser considerado como uma máquina ou computador que possui um

endereço de rede, onde disponibiliza recursos a outros usuários ou nós da rede. Na

arquitetura do CloudStack, os hosts são utilizados para prover recursos computacionais

necessários para que as máquinas virtuais sejam executadas. Para isso, fazem uso de

softwares de hipervisores instalados na máquina.

Regiões: A região é a maior unidade dentro de uma implementação do CloudStack sendo

composta por uma ou várias zonas de disponibilidade geograficamente distribuídas. Para

aumentar a escalabilidade e disponibilidade da nuvem, pode-se alocar seus recursos em

regiões diferentes, assim, caso alguma região torne-se indisponível, os serviços ainda

estarão em funcionamento nas demais.

20

Zona: É a segunda maior unidade dentro do Cloudstack, formada por um ou mais pods.

Nela se encontra a parte física da nuvem podendo ser considerada equivalente a um data

center. Cada zona possui um storage secundário que é compartilhado entre os pods.

Ao criar uma zona é necessário configurar a rede física da zona, adicionar um primeiro

pod, cluster, host, storage primário e storage secundário.

Pod: São formados por clusters, que por sua vez, são formados por um ou mais hosts e

storages primário. Cada zona pode conter um ou mais pods.

Cluster: É considerado como um conjunto de hosts e storages primário. Os hosts devem

ser homogêneos, estar numa mesma sub-rede e acessar os mesmos storages primário.

Dentro de um mesmo cluster, as máquinas virtuais podem migrar de um host para outro

sem que haja interrupção de serviço.

Pode existir mais de um host em uma implementação do CloudStack e cada um pode

conter diferentes capacidades de processamento e memória. Dentro de um mesmo cluster,

todos os hosts devem ser homogêneos, ou seja, possuir um mesmo hipervisor instalado.

O Servidor de Gerenciamento do CloudStack monitora a quantidade de processamento

e memória que estão sendo utilizados pelas instâncias em relação ao total de recursos

fornecidos por todos os hosts. Novos hosts podem ser adicionados a qualquer momento

para aumentar a disponibilidade de recursos para as máquinas virtuais.

Todos esses recursos e componentes são interligados através da rede, tanto física

como virtual, e pode ser configurada de uma maneira simples ou avançada.

21

3.1.2 Infraestrutura de rede

Quando se está criando uma zona, a partir do Servidor de Gerenciamento, a estrutura

da rede deve ser definida logo no início. O cabeamento físico que faz as conexões entre os

recursos da nuvem é ligado a partir de interfaces de rede instaladas no host. Uma ou mais

destas redes físicas podem ser associadas às zonas daquela região e servem para trafegar

os dados de quatro redes, que são definidas pelo CloudStack como Management, Guest,

Public e Storage. O tráfego destas redes pode ser alocado em uma única interface ou em

redes físicas separadas. Caso, mais de uma rede esteja alocada a uma interface, deve-se

utilizar VLANs diferentes para isolar o tráfego.

Pode-se escolher entre dois modos de implementação por zona, um básico ou

avançado, e após a zona ser criada não há como modificá-la. O modo básico utiliza apenas

uma interface para alocar as redes e sua configuração é mais direta, já o modo avançado

tem uma maior flexibilidade para gerenciar as redes entre as interfaces. Estas redes são

utilizadas para dimensionar melhor a nuvem:

Management: Toda a comunicação entre hosts, máquinas virtuais do sistema e

qualquer outro componente que se comunique diretamente com o Servidor de

Gerenciamento é alocado nessa rede. Nela devem ser alocados endereços de IP

privados.

Guest: Tráfego gerado entre as máquinas virtuais dos usuários.

Public: É o tráfego gerado, utilizando endereços de IP públicos, quando as

máquinas virtuais dos usuários acessam a Internet. Pode ser utilizado um NAT

(Network Address Translation) para traduzir um endereço público entre a rede

Public e a rede Guest das instâncias de um determinado usuário.

Storage: Uma rede específica para separar o tráfego do storage secundário. O

CloudStack utiliza uma interface física dedicada apenas para esse tipo de tráfego.

22

Em uma zona básica, cada pod é considerado como um domínio de broadcast,

portanto, a rede Guest da cada pod possui um endereço de rede diferente. As máquinas

virtuais de todos os usuários utilizam a mesma rede. Já, numa zona avançada, a rede Guest

pode ser compartilhada entre os usuários como no modo básico, ou então, pode-se utilizar

VLANs para isolar a rede de um determinado usuário. O modo avançado, também permite,

alocar cada uma das redes do CloudStack em interfaces físicas separadas e criar redes

adicionais (Guest e Public) para toda a zona ou apenas para determinados usuários.

Toda essa configuração pode ser feita passo a passo através da interface web, em cada

etapa é verificado se há algum erro de configuração ou algum conflito em relação aos

endereços de rede. Somente após verificar todas as informações e testar as conexões, a

zona é criada.

3.2 XenServer

XenServer é uma plataforma de virtualização completa da Citrix Systems, empresa

americana de software sediada em Fort Lauderdale, Flórida. O XenServer nas suas versões

iniciais, apenas virtualizava utilizando a técnica de paravirtualização. A partir da sua versão

3.0 ele é capaz de virtualizar também através da técnica virtualização total e em versões

mais recentes usando técnicas híbridas ou derivadas das duas técnicas anteriores

(XenServer, 2016). Não será apresentado as técnicas derivadas neste trabalho, pois está

fora do escopo do mesmo.

O XenServer implementa a paravirtualização utilizando conceito de domínio.

Domínios na arquitetura do XenServer, são máquina virtuais que o próprio XenServer cria.

Há dois tipos de domínio, privilegiadas (domínio 0) e não-privilegiadas (domínio U).

Na criação de uma máquina virtual (domínio U) pelo usuário, o XenServer inicia outra

máquina virtual do domínio 0 (privilegiada). Como só a máquina do domínio 0 pode

23

acessar os recursos da máquina física, por ela possuir maiores privilégios, ela é responsável

por gerenciar as máquinas virtuais do domínio U, além de prover a comunicação entre as

máquinas do domínio U. Quando o usuário solicita ações nas suas máquinas virtuais do

domínio U, do tipo, criação, inicialização e desligamento, elas são executadas através da

máquina virtual domínio 0.

Outra particularidade das máquinas virtuais do domínio 0, podem ser observadas nos

drivers utilizados no sistema operacional para se comunicar com o hardware, pois ela usa

os drivers reais da máquina física. Em contrapartida, as máquinas virtuais do domínio U

utilizam drivers virtuais, pois elas não têm privilégios para acessar o hardware.

Figura 8. Componentes do hipervisor XenServer (Carissimi, 2008)

O sistema operacional da máquina virtual do domínio 0 é modificado para que ela

consiga se comunicar com o hardware da máquina física através dos drivers reais do

hardware. Além disso, outros drivers devem ser instalados no Linux modificado do

domínio 0, para que seja possível a comunicação entre as máquinas virtuais dos dois

domínios. Os drivers adicionais, chamados de drivers virtuais, possibilitam que requisições

24

de acesso à rede e disco, oriundas das máquinas virtuais do domínio U, sejam executadas

pelas máquinas virtuais do domínio 0 (Carissimi, 2008).

Vale ressaltar que a partir da versão 3.0 do XenServer também foi disponibilizado a

técnica de virtualização total. Porém, como foi explicado no capítulo 2 deste trabalho, o

hardware onde será executado a virtualização total, deve possuir suporte a virtualização.

3.3 Ferramentas de Apoio

3.3.1 Puppet

Puppet é um software para gerenciamento e automatização de configuração. É um

produto da Puppet Labs que foi fundada por Luke Kanies em 2005. A companhia recebeu

inicialmente $2 milhões de fundos e no último fomento mais de $40 milhões de seus

parceiros como Cisco, Google, Ventures Kleiner Pekins Caufield & Byers, Triangle Peak

Ventures, True Ventures e VMware. A VMware investiu $30 milhões para fechar parceria

com a Puppet para comercializar e vender produtos produzidos para os seus clientes em

comum (Puppet, 2016).

Em fevereiro de 2011 a empresa Puppet lançou seu primeiro produto comercial,

chamado de Puppet Empresarial, construído baseado em código aberto e com mais

funcionalidades disponíveis que nas versões gratuitas chamada apenas de Puppet. Em

setembro de 2011, a companhia lançou Puppet Enterprise 2.0, que introduziu a integração

com MCollective, adquirida pela Puppet em 2010, assim como provisionamento de

máquinas virtuais diretamente na Amazon EC2 e VMware. Em junho de 2013, Puppet

lançou Puppet Enterprise 3.0, que dispõe de um mecanismo de orquestração reescrito que

visa facilitar a implantação automatizada de alterações em vários sites e nuvens.

25

Os principais orquestradores de infraestrutura, como CloudStack e OpenStack,

possuem tecnologias de integração com o Puppet e o Puppet Enterprise. Além de ser

construído como um software multiplataforma, que pode ser executado nas principais

distribuições Linux, sistemas Unix e também Windows da Microsoft.

Estrutura do Puppet

Puppet é uma ferramenta e plataforma para automação e gerenciamento de

configuração de servidores e infraestrutura (Puppet, 2016). Foi concebido tendo como foco

ajudar a comunidade de administradores de sistemas na construção e compartilhamento de

ferramentas mais utilizadas e assim evitando que no caso de problemas evite a duplicação

de esforços na solução.

O funcionamento do Puppet é baseado na arquitetura cliente/servidor no que tange a

distribuição de configuração para os clientes. Além disso, possui uma vasta biblioteca com

funcionalidades prontas para uso, as quais facilitam bastante as tarefas a serem executadas

por administradores de sistemas.

Diferentemente da maioria dos softwares de gerenciamento de configurações que

utilizam linguagens mais complexas e comandos sequenciais, ou seja, executam comandos

via SSH em um loop, o Puppet utiliza catálogos de resources (recursos) e com ele faz uma

comparação com o estado atual do sistema cliente e faz as alterações necessárias para

deixar o estado do sistema em conformidade com o catálogo.

O Puppet pode ser empregado com outras funções além de verificar divergência de

configurações de servidores. Vem sendo muito utilizado para simular mudanças de

configuração, evitando assim que atualizações em uma plataforma causem algum

transtorno que não tenha sido previsto por seu administrador.

26

Camadas do Puppet

Linguagem de configuração: Através da linguagem de configuração do Puppet, usuários

podem desenvolver seus códigos para descrever o estado desejado de um servidor. Os

agentes que são configurados nos servidores clientes (node), acessam o servidor

principal (master), onde foi instalado o Puppet, para acessar os códigos de estados e assim

aplicar as diferenças localmente.

Camada de transação: A camada de transação é responsável pela configuração dos node.

Segundo Puppet-BR (2016), algumas etapas devem ser respeitadas nesse procedimento.

Primeiramente ocorre a interpretação e compilação da configuração. Em seguida a

configuração compilada é enviada ao agente. Nesse momento a configuração pode então

ser aplicada ao node. Após o servidor ser atualizado, ele envia ao master um relatório

contendo informações das alterações.

Camada de abstração de recursos: É a camada responsável por criar, como o próprio

nome diz, uma camada de abstração entre Puppet e o usuário, nos diversos sistemas

operacionais suportados por ele. Ela é responsável pela simplificação do trabalho de um

administrador de sistemas, visto que ele não tem que se preocupar com peculiaridades de

cada sistema operacional, coisas como nomes, argumentos, comandos, formatos de

arquivos e controle de serviços, pois tudo isso é abstraído pela linguagem de configuração

do Puppet.

27

3.3.2 Zabbix

O Zabbix foi criado em 1998 por Alexei Vlasishev, para ser utilizado apenas

localmente em seu escritório. Em 2001 foi feita a primeira publicação da ferramenta já com

o código aberto ao público. A companhia Zabbix foi criada em 2005 para a fim de fornecer

serviços de suporte técnico especializados (Zabbix, 2016).

É reconhecido mundialmente como uma excelente ferramenta de monitoração. No

Brasil possui grandes clientes como:

Petrobras;

Lojas Renner SA;

Globo.com;

Serpro.

Figura 9. Posição geográfica dos usuários (Zabbix, 2016)

O Zabbix pode ser dividido em 4 módulos principais para o seu funcionamento mais

básico:

Zabbix Server: Funciona como um repositório central de uma estrutura com

Zabbix, responsável pelo monitoramento, interage com proxies e os agentes Zabbix

instalados nos equipamentos que serão monitorados, além de enviar notificações

28

para informações por exemplo de erros em um equipamento para um administrador

de sistema.

Database Storage: Responsável pelo armazenamento de todos os dados

provenientes da plataforma através do monitoramento, além das configurações do

Zabbix.

Interface Web: Página web utilizada pelos usuários para o gerenciamento das

configurações e análise dos dados coletados.

Zabbix Proxy: É utilizado quando se precisa fazer o monitoramento remoto de uma

plataforma. O Zabbix Proxy encaminha todos os dados coletados localmente para

o Zabbix Server.

3.3.3 pfSense

O pfSense (pfSense, 2016) é um software livre adaptado para uso como firewall e

roteador. Ele é customizado para rodar sobre o sistema operacional FreeBSD e pode ser

totalmente gerenciado por uma interface web ou por linha de comando. A interface web é

bem completa e intuitiva, possui até mesmo a opção de realizar atualizações do pfSense,

sem que o administrador precise fazer grandes intervenções no software para isso. Manter

um software de segurança atualizado é um ponto fundamental para manter um nível alto

de segurança, e fazer atualizações nem sempre são tarefas fáceis em ferramentas de

segurança.

As funcionalidades do pfSense vão muito além das de um simples firewall e roteador,

podendo trabalhar com VPN`s, Servidor Proxy, autenticação de usuários, Servidor DNS

Servidor DHCP, Sistema de Detecção de Intrusão (IDS), e muito mais. Segundo

Dantas (2013), o pfSense é conhecido pela sua flexibilidade, estabilidade e segurança, além

de incluir uma grande lista de recursos e um sistema de gerenciamento de pacotes que

permite expandir sua funcionalidade e atender as mais diversas necessidades.

29

O projeto pfSense foi iniciado em meados de 2004 por Chris Buechler e Scott Ullrich.

Chris foi um dos maiores colaboradores de funcionalidades do projeto m0n0wall que tem

muitas similaridades técnicas do pfSense.

A imagem mostra a interface web com os serviços, interfaces de rede, configurações

de rede e hardware do pfSense.

Figura 10. Interface gráfica do pfSense

3.3.3.1 Pacotes

As funcionalidades do pfSense podem ser ampliadas através de extensões chamadas

de pacotes. Os pacotes nada mais são que softwares livres consolidados no mercado,

especialmente adaptados para trabalharem no ambiente pfSense. Podem ser citados alguns

exemplos como o Snort, Quagga, OpenBGP, Squid e muito mais.

30

A figura mostra o gerenciador de pacotes do pfSense, utilizado para controlar ações

que envolvam os pacotes:

Figura 11. Gerenciador de pacotes

31

Capítulo 4

Descrição do Ambiente de

Experimentação

O experimento foi desenvolvido como alternativa a um sistema já existente da

Instituição. Nele, foram observados alguns problemas, desde físicos até a maneira como os

equipamentos são utilizados, por exemplo, espaço físico maior que o necessário,

subutilização dos recursos computacionais, máquinas obsoletas e fragilidade no sistema de

monitoramento e segurança.

O ambiente computacional da IES é composto por um diversificado e complexo

conjunto de computadores, serviços e tecnologias, o que faz dele um ambiente

extremamente heterogêneo e pouco interligado. Foi realizado um levantamento desse

ambiente computacional, considerando um dos institutos da IES, que será apresentado nos

próximos parágrafos. Vale ressaltar que só foram considerados equipamentos e serviços

que estavam em produção durante a realização do experimento.

Foram encontrados 17 servidores de virtualização, das quais, 16 deles são do

fabricante Dell e o outro é do fabricante HP. Sendo que dos 16 modelos dos servidores

Dell, 7 deles são de modelos distintos. Os modelos dos servidores Dell e HP são:

Dell

PowerEdge R200

PowerEdge R410

PowerEdge R515

PowerEdge R710

PowerEdge R720

32

PowerEdge 1950

PowerEdge 2950

HP

DL160G6

Nos servidores de virtualização, são utilizados como hipervisores, o XenServer na

versão 6.2 e o VMware ESXi nas versões 4.1, 5.5 e 6.0. A infraestrutura de computação

ainda é composta por 11 desktops, que são utilizados para prover alguns serviços legados.

Há uma rede elétrica estabilizada através de nobreak e gerador como fonte de contingência

no caso de uma eventual falta de energia.

O ambiente de experimentação, que chamaremos de plataforma de computação em

nuvem, simula uma eventual renovação da atual infraestrutura da IES, sendo composto

pelos seguintes equipamentos:

Servidor de Rack

Dell PowerEdge R720

Processador

CPU 2x Intel Xeon CPU E5-2650 v2 / 2.6 GHz

Número de núcleos Dual-core

Memória 120 GB

Hard Drive

Capacidade 1 TB

Velocidade de rotação 7200 rpm

Interface de Rede

Protocolo do link de dados GigabitEthernet

33

Desktop

Dell Optiplex GX620

Processador

CPU Intel Core 2 Duo E7500 / 2.93 GHz

Número de núcleos Dual-core

Memória 3 GB

Hard Drive

Capacidade 320 GB

Velocidade de rotação 7200 rpm

Interface de Rede

Protocolo do link de dados FastEthernet e GigabitEthernet

Dell Vostro 200 x2

Processador:

CPU Intel Pentium E2160 / 1.8 GHz

Número de núcleos Dual-core

Memória 4 GB

Hard Drive:

Capacidade 160 GB

Velocidade de rotação 7200 rpm

Interface de Rede:

Protocolo do link de dados GigabitEthernet

Switch

Cisco Catalyst 2950

Quantidade de portas 24

Protocolo do link de dados FastEthernet

O experimento tem como ponto principal verificar a viabilidade da utilização de uma

infraestrutura de nuvem como solução para alguns dos problemas encontrados e tornar o

trabalho da equipe responsável pela manutenção mais ágil e automatizado. Serão coletadas

e medidas informações sobre tempo de resposta a incidentes (segurança ou da plataforma),

tempo de restabelecimento de serviços, custos de infraestrutura, e tempo de configuração

do ambiente considerando a plataforma atual e o estado anterior.

34

Capítulo 5

Descrição do Experimento

Primeiramente, devido a diferentes maneiras de se implementar a nuvem e

considerando os equipamentos que foram disponibilizados para o desenvolvimento do

experimento, foi feito uma análise para identificar a maneira que trouxesse maiores

benefícios. As ferramentas e recursos utilizados no experimento, seguindo a estrutura em

camadas definida pelo CloudStack anteriormente, foram alocados nos equipamentos da

seguinte maneira:

CloudStack - Dell Vostro 200

XenServer - Dell PowerEdge R720

Storage Primário e Secundário - Dell Optiplex GX620

pfSense - Dell Vostro 200

O pfSense foi alocado na borda da rede, atuando como um firewall para prover a

segurança e outros serviços da nuvem. Assim, todo o tráfego que entra e sai da nuvem

passa primeiro por ele. Ele possui duas interfaces de rede, uma de acesso à Internet, através

de um endereço de IP dedicado fornecido pela IES e a outra interface é dedicada para as

demais redes locais da nuvem (LAN – Local Area Network). O pfSense foi configurado

para ser o gateway de todas as redes da plataforma para facilitar as configurações de

roteamento, utilizando NAT, para que fosse possível a comunicação da plataforma com à

Internet. A interface da rede local foi subdividida em 2 outras interfaces virtuais (Public e

Management), através de um serviço chamado IP virtual, que isola o tráfego utilizando

VLANs diferentes para cada rede configurada nessas interfaces.

35

Ainda sobre segurança, o pfSense foi configurado para atuar como Sistema de

Detecção de Intrusão (IDS), papel que foi atribuído a ele, pois é o ponto central de todas as

redes da plataforma, ficaria mais fácil de detectar qualquer comportamento suspeito na

plataforma. Foi usado o pacote de software livre Snort, um dos mais conceituados Sistemas

de Detecção de Intrusão do mercado. O Snort foi configurado para fazer a varredura de

todos os pacotes que tinham como destino o IP (172.16.0.1) da interface de acesso à rede

externa (WAN – Wide Area Network) do pfSense, único endereço público da nuvem (foi

utilizado como exemplo um endereço de rede privado para não expor o real endereço da

IES), utilizado para entrada de saída de tráfego de rede.

O pfSense foi configurado para prover o serviço de NTP (Network Time Protocol) para

a nuvem. Este serviço é um pré-requisito da instalação do CloudStack, pois com ele todos

os componentes da rede ficam com seus relógios sincronizados. Foi utilizado o pacote

OpenNTPD para realizar a instalação do NTP no pfSense. Houve a necessidade de

configurar um DNS (Domain Name System) local para realizar a resolução de nomes. Foi

utilizado o serviço DNS Forwarder do pfSense para esse fim.

O serviço de monitoramento Zabbix e o Puppet foram instalados utilizando máquinas

virtuais configuradas na própria nuvem. Todos os dispositivos foram conectados através

do Switch Cisco Catalyst 2950, sendo configurado com as VLANs das redes da zona para

segregar o tráfego entre elas. Na máquina virtual do Puppet foi instalado a versão servidor

do programa, para que ele possa gerenciar as configurações das máquinas virtuais (clientes)

criadas pela nuvem. Os templates utilizados para criar as máquinas virtuais clientes, já

possuem o Puppet cliente instalado.

36

A zona foi configurada no modo avançado, um exemplo de rede avançada pode ser

visto na Figura 12, permitindo maior flexibilidade e desempenho para a nuvem. A rede

fornecida pela Instituição e demais redes do CloudStack foram configuradas da seguinte

maneira:

IES 172.16.0.0/24 VLAN 250

Management 192.168.0.0/24 VLAN 500

Public 10.2.0.0/24 VLAN 600

Guest 10.1.1.0/24 VLAN 673

O servidor escolhido para o host foi o Dell PowerEdge R720 por ter bastante poder de

processamento e uma quantidade alta de memória. Foram utilizadas 3 interfaces físicas

para conectar as redes Management, Public e Guest. A versão do hipervisor XenServer

instalado foi a 6.5, que durante a realização do experimento era a versão mais estável e de

melhor compatibilidade com a versão utilizada do CloudStack, versão 4.6.

Será explicado, com a ajuda da Figura 12, como ficou a combinação lógica e física por

dentro do host. O Cloudstack é o responsável pela criação de duas máquinas virtuais

fundamentais para o funcionamento da plataforma. A máquina virtual chamada de SSVM

é responsável por fazer a comunicação do host com o storage secundário, onde ficam

templates, utilizados para criar as instâncias; e snapshot de volume, que são backups do

disco virtual das instâncias e armazenamento das ISOs dos sistemas operacionais. A SSVM

possui uma interface na rede Management pois ela pode ser acessada via SSH para efetuar

alguma configuração ou até mesmo para comunicação com o storage secundário.

37

Figura 12. Modelo estrutural de uma zona avançada (Apache CloudStack, 2016)

Na nuvem que foi configurada (Figura 13), a interface do storage não foi segmentada

e funciona na rede Management. A outra máquina virtual é o roteador virtual (VR),

responsável por diversas tarefas como, servidor DHCP das instâncias, gateway de algumas

redes Guest, gerenciador da senha do usuário root das instâncias e servidor NAT. Na nuvem

só foram criadas redes avançadas, que têm como característica marcante a presença de um

roteador virtual como gateway da rede, exemplo da rede Guest 673 (barramento verde) da

Figura 13. Quando uma instância da rede Guest 673 quer acessar a Internet, ela envia a

solicitação para o seu gateway (roteador virtual - VR) que faz um NAT para um outro IP

da rede Public 600 (barramento amarelo). Ou seja, quando uma instância quer ter acesso à

Internet, isso é realizado através do NAT (realizado pelo VR) da rede Guest da instância

para um IP da rede Public 600 (barramento amarelo). A linha pontilhada na Figura 12 quer

dizer que a SSVM e o VR foram criados no hipervisor.

38

Na combinação física foram utilizadas 3 interfaces físicas do host, que foram

chamadas de NIC0, NIC1 e NIC2. Para cada uma delas, foi atribuído um label (rótulo) que

será usado pelo CloudStack na hora de associar cada NIC (Network Interface Controller),

ao tráfego que deverá passar por ela. A NIC0 foi configurada para servir ao tráfego da rede

Management e Storage. Foi setado para a NIC0 o label mgnt. Na interface NIC1 foi

configurado para servir ao tráfego da rede Public. Foi setado para a NIC1 o label public.

E por último, a NIC2 foi configurado para servir ao tráfego da rede Guest. Onde foi setado

a label guest. Todas as interfaces do switch utilizadas para conectar com as interfaces NICs

do host, foram configurados no modo trunk autorizando qualquer VLAN.

Em relação ao storage primário, foi inicialmente configurado de forma remota através

da rede, para verificar como seria o desempenho das instâncias com essa configuração.

Logo após, foi adicionado um segundo storage primário de forma local utilizando o

armazenamento do host. O storage secundário foi implementado de forma remota

utilizando a mesma máquina (Dell Optiplex GX620) que o storage primário, onde foi

instalado o CentOS 7 utilizando NFS (Network File System) como sistema de arquivos.

Um mesmo disco foi compartilhado entre o storage primário e secundário através de

dois diretórios:

/var/exports/primary

/var/exports/secondary

A configuração dos diretórios é feita pelo XenServer durante sua instalação. Um

resumo geral da estrutura montada pode ser visto a seguir:

39

Figura 13. Componentes da nuvem

Para a instalação do CloudStack, baseada em documentos e fóruns de usuários do

software (Apache CloudStack, 2016), não há necessidade de uma máquina com muitos

recursos, a máquina utilizada (Dell Vostro 200) atendeu bem as necessidades do software.

Nela, foi instalado o CentOS 6.5 e foram feitas algumas configurações para que o

CloudStack pudesse ser instalado. Foi configurado inicialmente a interface de rede com

seu endereço IP (192.168.0.4) e gateway (192.168.0.1), o hostname (CloudStack) e

endereço do servidor de DNS (192.168.0.1). A configuração da interface foi feita

modificando o arquivo “/etc/sysconfig/network-scripts/ifcfg-eth0” e o hostname, o arquivo

“/etc/hosts”, também foram adicionados o hostname e endereço IP dos demais dispositivos.

Os sistemas de segurança do CentOS, SELinux e iptables, foram desabilitados. Não é

uma prática recomendada, mas para o experimento foi necessário, para que não houvesse

40

nenhuma interferência durante a instalação do CloudStack, como bloqueio de alguma porta

de comunicação ou serviço.

Após isso, houve a configuração do NTP e foi adicionado o repositório remoto de

onde o CloudStack é baixado para sua instalação. A instalação do NTP foi feita através

dos comandos:

# yum -y install ntp

# service ntpd start

# chkconfig ntpd on

Os dois últimos são respectivamente para iniciar o serviço e fazer com que o serviço

seja sempre iniciado durante a inicialização do sistema. O repositório foi adicionado

criando um arquivo (“/etc/yum.repos.d/cloudstack.repo”) com as informações da versão

que será utilizada:

[cloudstack]

name=cloudstack

baseurl=http://cloudstack.apt-get.eu/centos/6/4.6/

enabled=1

gpgcheck=0

Os dois próximos serviços a serem configurados requerem maior cuidado, pois são

fontes da maior parte dos problemas encontrados durante a instalação do CloudStack. São

o sistema de arquivos NFS e o banco de dados MySQL utilizado pelo CloudStack. O NFS

faz a comunicação com o storage primário e secundário. É instalado com o comando “#

yum -y install nfs-utils” e configurado no arquivo “/etc/exports”, garantindo as permissões

necessárias para que o CloudStack possa fazer alterações no storage:

/var/exports/primary *(rw,async,no_root_squash,no_subtree_check)

/var/exports/secondary *(rw,async,no_root_squash,no_subtree_check)

41

Para fazer a comunicação é preciso montar uma referência utilizando o diretório

remoto do storage e o diretório local:

# mount -t nfs 192.168.0.6:/var/exports/primary /mnt/

# mount -t nfs 192.168.0.6:/var/exports/secondary /mnt/

O serviço de NFS é iniciado pelos seguintes comandos:

# service rpcbind start

# service nfs start

# chkconfig rpcbind on

# chkconfig nfs on

A instalação do MySQL feita através do comando “# yum -y install mysql mysql-

server” requer que algumas opções sejam adicionadas ao arquivo “/etc/my.cnf”:

[mysqld]

innodb_rollback_on_timeout=1

innodb_lock_wait_timeout=600

max_connections=350

log-bin=mysql-bin

binlog-format = 'ROW'

Da mesma forma que os outros serviços instalados ele é iniciado pelos comandos:

# service mysqld start

# chkconfig mysqld on

Após a configuração do MySQL, é feito a instalação do CloudStack e a configuração

da sua base de dados:

# yum install -y cloudstack-management

# cloudstack-setup-databases cloud:[email protected] --deploy-as=root:password -e

file -m password -k password -i 192.168.0.4

42

Com isso, o Servidor de Gerenciamento já pode ser configurado:

# cloudstack-setup-management

# chkconfig cloudstack-management on

Alguns comandos são bem úteis para verificar erros durante a instalação:

# tail -f /var/log/cloudstack/management/management-server.log

# tail -f /var/log/cloudstack/management/management-server.log | grep -i -E

'exception|unable|fail|invalid|leak|warn|error'

# vim /etc/cloudstack/management/db.properties

# tail -f /var/log/cloudstack/management/setupManagement.log

# /etc/init.d/cloudstack-usage status

# /etc/init.d/cloudstack-management status

Falta apenas copiar o system template, da mesma versão que o CloudStack, para que o

XenServer consiga criar as máquinas virtuais do sistema:

# /usr/share/cloudstack-common/scripts/storage/secondary/cloud-install-sys-tmplt -m

/mnt -u http://packages.shapeblue.com/systemvmtemplate/4.6/systemvm64template-

master-4.6.0-xen.vhd.bz2 -h xenserver -F

Enfim, após reiniciar o sistema, o CloudStack está pronto para iniciar a configuração

da nuvem. Ele pode ser acessado via browser, pelo endereço “192.168.0.4:8080/client”,

para qualquer dispositivo que esteja conectado na mesma rede.

Ao acessarmos o endereço “192.168.0.4:8080/cliente” deverá ser retornado a interface

web do CloudStack, representada na Figura 14. O usuário e senha padrão da interface web

são respectivamente, admin e password.

43

Figura 14. Interface web do CloudStack

Considerando que o login foi realizado com sucesso, teremos duas opções, uma para

configuração básica e outra com a mensagem "I have used CloudStack before, skip this

guide". Utilizamos a segunda opção, pois será feito uma configuração avançada. Ao acessar

pela primeira vez a interface web, será possível notar que não existe nada configurado.

Figura 15. Nenhum componente disponível

Nos próximos parágrafos, será explicado o processo de criação de uma zona pela

interface web do CloudStack. A criação da zona é composta por 4 etapas, que serão

detalhadas abaixo:

44

Etapa 1 - Tipo de zona

Primeiramente deve-se configurar a zona, clicando no botão "View all" em zonas e

depois "Add Zone". Na tela que surgirá, deve ser feito a escolha do tipo de zona a ser criada.

Há dois tipos de zona, a básica que não iremos utilizar neste trabalho pois não atende aos

requisitos de serviços necessários, e a zona avançada que consegue prover serviços como

firewall, VPN e integração com alguns balanceadores de carga.

Etapa 2 - Configuração da zona

Nesta etapa, será configurado o nome da zona, servidores DNS externos e internos,

hipervisores e a rede Guest:

Nome: zona-nce

DNS externo: 146.164.248.2 (DNS da UFRJ)

DNS interno: 192.168.0.1 (DNS-pfSense)

Hipervisor: XenServer

Guest CIDR: 10.1.1.0/2

Etapa 3 - Configuração da rede

Com as interfaces devidamente configuradas no passo anterior, agora deve ser definido

os IPs que serão atribuídos a rede Public:

Gateway: 10.2.0.1 (Gateway da rede Public, configurado no pfSense)

Máscara: 255.255.255.0 (Máscara padrão da rede)

IP inicial: 10.2.0.5

IP final: 10.2.0.100

Neste passo, devemos configurar as informações do Pod. Esse range de IP será

utilizado pelo CloudStack.

Pod Name: pod01

Gateway: 10.2.0.1 (Gateway padrão da rede Public)

45

Máscara: 255.255.255.0 (Máscara da rede Public)

IP inicial: 10.2.0.101 (Utilizado para atribuição do CloudStack)

IP final: 10.2.0.200 (Utilizado para atribuição do CloudStack)

Nesse momento da configuração, é definido quais VLANs serão atribuídas para as

redes Guest. Foi definido VLANs do número 600 até 700. O CloudStack se encarregará de

atribuir automaticamente um desses número sempre que uma rede Guest for criada.

Figura 16. Campo para definir número das VLANs

Etapa 4 - Adicionar Recursos

No primeiro passo da etapa 4 só temos que definir o nome do Cluster, visto que o

hipervisor já foi definido na etapa 1. Outro ponto importante a ser lembrado é, que só

podemos ter um tipo de hipervisor por Cluster, por isso a impossibilidade de fazer a

alteração nesse momento da configuração da zona.

46

Figura 17. Campo para definir nome do Cluster

Agora será adicionado o host, com os campos preenchidos da seguinte forma:

Hostname: 192.168.0.5

Usuário: root

Senha: cloudnce

Hora de ser adicionado o storage primário. O IP do servidor NFS é o 192.168.0.6,

onde o diretório “/var/exports/primary”, foi exportado para servir como diretório do

storage primário.

47

Figura 18. Definição de atributos do storage primário

Enfim, para finalizar o processo de configuração, falta apenas configurar o storage

secundário, um processo bem parecido com o que foi feito no passo anterior com o storage

primário. Os dados utilizados foram:

Provedor: NFS

Nome: storage (Hostname do servidor NFS)

Servidor: 192.168.0.6 (IP do servidor NFS)

Caminho: /var/exports/secondary

48

Etapa 5 - Aplicar configurações

A etapa 5 será onde ocorrerá a construção da zona.

Figura 19. Parte final da definição de parâmetros da zona

Segue um comando importante, que deve ser emitido no servidor CloudStack, para

acompanhar a execução de construção da zona:

# tail -f /var/log/cloudstack/management/catalina.out

Considerando que o processo ocorreu com sucesso, retornará a seguinte tela:

Figura 20. Zona construída com sucesso

49

Agora, comparando com a figura da etapa 1, pode-se verificar que a infraestrutura da

zona foi montada, terminando assim todas as etapas:

Figura 21. Componentes da primeira zona

Após a zona ter sido montada, tem o processo de criar e executar uma instância na

zona. O processo para criar uma instância é bem simples, muito parecido com o de grandes

empresas que fornecem esse tipo de serviço, como a Amazon AWS. Após todas as

configurações de zona, templates e etc., terem sido aplicadas, é só clicar em “Add

Instance”, dentro da seção Instances.

Figura 22. Nenhuma instância criada

50

Será aberto uma janela com um processo de configuração em etapas. A primeira dela

é escolher entre criar uma instância a partir de um template existente ou de uma ISO que

tenha sido registrada anteriormente.

Figura 23. Início do processo de criação de uma instância

Nos próximos passos, serão solicitadas opções para configurar a instância, como

quantidade de processamento, memória, capacidade de disco e rede. A quantidade de cada

recurso disponível é pré-definida, podendo escolher entre pequena, média ou grande. O

administrador possui a opção de alterar esses valores.

Figura 24. Escolha de processador, memória e espaço em disco

51

Após todas a opções serem selecionadas, a última etapa mostra um resumo da

configuração da instância, ao confirmar a instância começa a ser criada e em poucos

minutos já está disponível para uso.

Figura 25. Visão geral da instância antes dela ser efetivamente criada

Figura 26. Instâncias disponíveis

52

Figura 27. Painel com as opções disponíveis para a instância

Selecionando a instância, é possível, dentre outras ações, pausar, reiniciar, criar

backup, destruir e acessar via console. Com isso feito, pode-se considerar que a nuvem já

está em um estado operacional.

53

Capítulo 6

Análise do Experimento

A análise do experimento foi baseada em dados fornecidos pela equipe responsável

por manter a infraestrutura local em funcionamento, os dados foram analisados da maneira

mais objetiva possível, devido à dificuldade de obter métricas bem definidas, sendo

verificado apenas a complexidade de alguns serviços que são executados na plataforma

existente.

Os principais pontos analisados, em relação a tempo e complexidade, buscando

maiores níveis de integridade, confiabilidade, escalabilidade e disponibilidade, foram

direcionados da seguinte maneira:

Criação e configuração de servidores

Detecção de incidentes e restabelecimento de serviços

Realização e manutenção de backups

Custos de infraestrutura

A infraestrutura da Instituição possui serviços virtualizados e máquinas físicas. O

tempo levado no processo de configurar um novo servidor ou de realizar algum tipo de

manutenção em máquinas físicas é difícil de ser obtido, podendo variar dependendo do

ambiente que está sendo utilizado. Sem considerar eventuais problemas durante seu

preparo e havendo recurso disponível, foi tomado uma estimativa de tempo de 30 minutos

para uma instalação e configuração básica de um sistema operacional em um servidor.

Da mesma forma, considerando que há recursos disponíveis na plataforma de

computação em nuvem, foram obtidos alguns valores referentes ao tempo médio de

criação de uma máquina virtual, conforme a seguinte tabela:

54

Tabela 1. Tempo médio de criação de uma máquina virtual

Utilização do template Storage primário (NFS)

(minutos)

Storage primário (Local)

(minutos)

1 4,55 5,53

2 0,58 0,55

3 0,39 0,43

4 0,46 0,44

5 0,41 0,46

O tempo foi coletado através da criação de máquinas virtuais utilizando templates

diferentes para cada teste. As máquinas foram criadas utilizando o storage primário

localizado no storage principal, conectado via protocolo NFS, e via storage primário local,

localizado no host. Foram utilizados 3 templates e para cada um deles, foram realizados 5

testes (utilização do template) para cada storage. A tabela mostra o tempo médio das

utilizações dos templates.

Os dados mostram que o processo de criação de um servidor é 81.6% mais rápido no

storage local e 84.9% mais rápido no storage primário, quando comparados com os valores

para a criação de um servidor pela Instituição, em relação ao tempo médio gasto por cada

template na sua primeira utilização.

Foi considerado a utilização de templates já disponíveis na plataforma, que podem ser

baixados da Internet ou criados a partir de uma instância. A primeira utilização de um

template é sempre mais lenta, pois é transferido do storage secundário (local onde ficam

guardados os templates) para o storage primário a ser utilizado. Após esse processo, as

demais utilizações dos templates se tornam mais rápidas. Pode-se notar também que,

55

independentemente da localização do storage primário, o tempo foi bem próximo um do

outro.

O processo de identificação de incidentes da IES, funciona através de sistemas básicos

para identificação de falhas de hardware, serviços de monitoramento e notificações dos

donos dos serviços que são hospedados em seus servidores. A Instituição abriga, desde um

grande número de páginas web até projetos de diferentes institutos, e sofre frequentes

ataques em seus servidores, portanto, a utilização do pacote Snort, aplicado no pfSense, e

do Zabbix, ajuda a melhorar a segurança da rede, através da verificação dos pacotes que

entram e saem da rede, gerando notificações quando algum incidente for encontrado. Como

a plataforma experimental não foi colocada em produção, não houve como realizar testes

em maior escala para gerar uma análise mais concreta.

O processo de backup que vêm sendo realizado, só abrange os dados das aplicações

que estão sendo utilizadas, por exemplo um servidor web que mantém um site disponível

na Internet, apenas os dados do site são mantidos em backup, o sistema que está sendo

utilizado nesse servidor não possui backup. Caso haja algum problema com o servidor,

primeiro deve ser feito a instalação e configuração de todo o sistema, para após isso realizar

a recuperação dos dados do site guardados em backup. Esse processo leva bastante tempo,

em torno de uma semana, conforme verificado com a equipe responsável. Mesmo serviços

virtualizados estão configurados da mesma maneira.

Na plataforma, foram realizados testes para verificar o tempo necessário de criar um

backup e restaurar uma máquina virtual que teve problema. O tempo de backup obtido foi

de 4,40 minutos, considerando uma máquina virtual com apenas o sistema instalado e

20 GB de disco alocado. Para recuperar a instância, o CloudStack cria um template a partir

do backup, e criar uma nova instância, igual a anterior, utilizando esse template. O tempo

de criação do template foi de 5,49 minutos e 6,23 minutos para criar a instância. Portanto,

56

o tempo total para recuperar uma instância, desconsiderando o tempo levado para realizar

o backup, foi de 12,12 minutos. Apesar de ter sido utilizado uma instância com apenas o

sistema instalado, já é possível perceber, mesmo com o armazenamento da instância todo

ocupado, que o tempo para recuperar é inferior ao que existe hoje, utilizando um processo

simples e mais seguro para recuperar os dados.

Outro ponto analisado, foi a questão de custos de infraestrutura, não só financeiros,

mas também com relação ao trabalho executado pela equipe responsável. A sala de

sistemas, onde encontra-se montada a infraestrutura analisada, possui dois racks com 16

servidores, e ao lado, cerca de 30 desktops, dos quais 12 são do sistema legado que são

utilizados como servidores e storages. Por conta desses desktops, o espaço utilizado é

maior que o necessário, gerando maiores gastos principalmente em relação a refrigeração

e consumo de energia. Foi coletado a quantidade de memória e processamento destes

desktops e verificado a possibilidade de migrar todos eles para a plataforma criada.

Os desktops possuem 43 GB de memória e o equivalente a 180 vCPUS de

processamento, valor do qual é possível migrar utilizando apenas um host, já existente, que

não geraria novo custo para a IES. No caso, o próprio host utilizado no experimento

consegue alocar essa quantidade de recurso, lembrando que ele possui 120 GB de memória

e 260 vCPUs de 1 GHz de frequência. Havendo essa migração, ele seria alocado num dos

racks existentes e seria possível organizar os equipamentos em uma sala menor e mais

apropriada.

Além da redução de custos provenientes desse melhor remanejamento de

equipamentos, o trabalho gasto pela equipe responsável se torna mais eficiente, tornando a

infraestrutura mais segura e reduzindo o tempo gasto para a resolução de incidentes, pelo

melhor uso dos equipamentos e por estarem melhor alocados.

57

Capítulo 7

Conclusão

O objetivo deste projeto foi criar um experimento, a partir do desenvolvimento de uma

plataforma de computação em nuvem, a fim de verificar a viabilidade da migração de

aplicações e serviços mantidos pela IES, analisando alguns pontos importantes e realizando

testes e comparações com os procedimentos utilizados na manutenção de uma

infraestrutura de computação. As experiências e relatos de como a infraestrutura é formada,

a maneira como as aplicações e serviços são disponibilizados, e os problemas e dificuldades

encontrados, foram utilizados como motivação para a criação deste projeto.

Apesar da plataforma não ter sido colocada em produção, o que possibilitaria obter

dados mais precisos, ainda assim, foi possível analisar de forma experimental os pontos

mais críticos. Os dados encontrados foram analisados e comparados, quando possível, com

os dados que foram coletados pela plataforma legado, usuários e equipe responsável. Foram

analisados, tempos e complexidade de criação e configuração de servidores, a partir da

criação de máquinas virtuais; detecção de incidentes e restabelecimento de serviços,

utilizando os serviços de monitoramento configurados pelo pfSense e Zabbix; realização e

manutenção de backups, através da criação e restauração de backups pelo CloudStack; e

custos de infraestrutura, analisados de forma mais geral, tendo como exemplo melhorias

na infraestrutura física e melhor uso de recursos.

Os tempos encontrados na criação e configuração de máquinas virtuais, assim como

no processo de criação e restauração de backups, foi abaixo do tempo que é gasto hoje,

devido ao processo atual ser feito de forma individual e sem mecanismos para automatizar

a execução de processos. A facilidade com que a plataforma pode ser gerenciada e escalada,

58

mostrou-se uma boa opção para reduzir o tempo e custos operacionais da equipe

responsável. A integração através do CloudStack, de todo o sistema que está sendo mantido

através de virtualizadoras, também se tornou uma opção viável.

A plataforma de computação em nuvem desenvolvida nesse projeto, mostrou ser uma

boa alternativa para se obter melhor desempenho, gerenciamento de recursos de forma

escalável e com maior disponibilidade, um maior nível de resiliência e confiabilidade, e

uma redução nos custos, mesmo que de forma indireta, para a Instituição. O local onde a

infraestrutura é mantida também tem papel importante para a manutenção dos

equipamentos, a otimização e alocação dos equipamentos para um local menor, tornou-se

interessante, possibilitando uma melhor utilização da infraestrutura.

Como uma evolução da plataforma, pode ser considerada a utilização de equipamentos

mais específicos, melhorias na comunicação de rede e um uso mais extenso dos serviços

utilizados. Como storage, por exemplo, foi utilizado um computador com uma

configuração básica e discos rígidos sem grande desempenho. Um equipamento dedicado

para esse uso, com recursos de segurança e ganho de performance seria o ideal.

Da mesma forma, a comunicação de rede foi feita toda através de rede Ethernet,

utilizando um switch com velocidade de transmissão de no máximo 100 MB/s, causando

uma maior lentidão na transferência dos dados. A utilização de um switch Giga ou o uso

de fibra, assim como uma respectiva melhora em todas as interfaces físicas, traria ganhos

consideráveis para a plataforma.

Dos serviços utilizados para monitoramento e segurança, como Zabbix e pfSense,

apenas uma configuração básica foi utilizada, um uso maior dos recursos disponíveis

resultaria num maior número de informações referente ao tráfego de rede da plataforma,

tornando o ambiente mais seguro e facilitando a identificação de incidentes por parte dos

responsáveis pela manutenção da infraestrutura.

59

Como trabalhos futuros, pode ser proposto uma análise mais aprofundada na parte de

comunicação da nuvem, utilizando uma estrutura de rede física mais específica,

verificando como os recursos da nuvem se comportam. Da mesma forma, em relação ao

armazenamento, existem diferentes tecnologias que podem trazer benefícios para a

infraestrutura, uma análise comparativa dessas tecnologias pode fornecer dados

importantes para alcançar níveis mais altos de desempenho da nuvem.

Um estudo e utilização mais aprofundada de ferramentas de automatização de serviços

e monitoramento, podem tornar a infraestrutura da nuvem mais dinâmica e segura. Outra

pesquisa importante, é uma análise envolvendo diferentes tipos de orquestradores e

hipervisores. Apesar de serem desenvolvidos com o mesmo fim, cada uma possui

vantagens e desvantagens entre si, que podem se adequar melhor dependendo da

infraestrutura a ser criada.

60

Referências Bibliográficas

Amazon AWS, (2016), “Serviços de Computação em Nuvem”. Disponível em:

<https://aws.amazon.com>. Acesso em: jul. 2016.

Apache CloudStack, (2016), “CloudStack Installation Documentation”. Disponível em:

<http://docs.cloudstack.apache.org/projects/cloudstack-installation/en/4.6/index.html>.

Acesso em: jun. 2016.

Bandyopadhyay, S., Marston, S., Li, Z., et al., (2010), “Cloud Computing – The business

perspective”, Decision Support Systems, Elsevier B. V., v. 51, n. 1, p. 176-189, Abril 2011.

Buyya, R., Broberg, J., Goscinski, A., (2011), Cloud Computing: Principals and

Paradigms, John Wiley & Sons, Inc.

Carissimi, A., (2008), “Virtualização: da Teoria a Soluções”, In: Minicursos do Simpósio

Brasileiro de Redes de Computadores, SBRC, p. 173-207, Rio de Janeiro, 2008.

Dantas, L., (2013), O IPv6 e o pfSense: Uma Abordagem Prática, Brasília, DF, dez. 2013.

Disponível em: < http://blog.luzemario.net.br/>. Acesso em: 21 nov. 2016.

Dikaiakos, M., Pallis, G., Katsaros, D., et al., (2009), “Cloud Computing – Distributed

Internet Computing for IT and Scientific Research”, IEEE Internet Computing, v. 13, n. 5,

p. 10-13, Oct. 2009.

Kim, W., (2009), “Cloud Computing: Today and Tomorrow”, Journal of Object

Technology, v. 8, n. 1, p. 65-72, Jan. 2009.

Lauro, L., (2012), “Cloud Computing e SaaS – A Importância dessas Ferramentas no seu

Negócio”, In: e-Talk Endeavor, Rev. 1.0, nov. 2012.

Mohr, R., (2012), Análise de Ferramentas de Monitoração de Código Aberto, Monografia

de Conclusão de Curso, Bacharelado em Ciência da Computação, UFRGS, Porto Alegre,

dez. 2012.

61

Ogura, D., (2011), Uma Metodologia para Caracterização de Aplicações em Ambientes

de Computações nas Nuvens, Tese (mestrado), Programa de Pós-Graduação em

Engenharia Elétrica, Poli-USP, São Paulo, Brasil.

pfSense, (2016) “pfSense Documentation Site”. Disponível em: <https://doc.pfsense.org>.

Acesso em: ago. 2016.

Popek, G., Goldberg, R., (1974), “Formal requirements for virtualizable third generation

architectures”, Communications of the ACM, v. 17, n. 1, pg. 412-421, July 1974, New

York, USA.

Puppet, (2016), “Open-Source Configuration Management”. Disponível em:

<https://puppet.com>. Acesso em: set. 2016.

Puppet-BR, (2016), “Material de estudo do Puppet em Português”, Apostila Mantida pela

Comunidade Puppet-BR. Disponível em: <https://github.com/puppet-br/apostila-puppet>.

Acesso em: out. 2016.

Souza, F., Moreira, L., Javam, M., (2010), “Computação em Nuvem: Conceitos,

Tecnologias, Aplicações e Desafios”, ERCEMAPI, 2009. Disponível em:

<https://www.researchgate.net/publication/237644729_Computacao_em_Nuvem_Conce

itos_Tecnologias_Aplicacoes_e_Desafios>. Acesso em: 5 out. 2016.

Tanenbaum, A., (2009), Sistemas Operacionais Modernos, 3 ed., Pearson.

Veras, M., (2016), Virtualização: Tecnologia Central do Datacenter, 2 ed., Brasport.

XenServer (2016), “Open Source Server Virtualization”. Disponível em: <xenserver.org>.

Acesso em: fev. 2016.

Zabbix, (2016), “The Ultimate Enterprise-class Monitoring Platform”. Disponível em:

<http://www.zabbix.com/>. Acesso em: set. 2016.