UNIVERSIDADE FEDERAL FLUMINENSE
INSTITUTO DE COMPUTAÇÃO
DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO
ALUNOS: Larissa de Medeiros Torres Santos
Thiago Ferreira Bello
MATRICULA. 306.31.104-7
MATRICULA. 203.31.110-5
DISCIPLINA. Arquitetura de Computadores III (OPTATIVA)
Relatório Final
1
Sumário
1. Resumo da Disciplina.......................................................................................................................3
2. Experiência em computação nas nuvens desenvolvida....................................................................4
2.1 Introdução..................................................................................................................................4
2.1.1 Sistema base de gerência do cloud Eucalyptus: ................................................................4
2.1.2 Arquitetura do Eucalyptus .................................................................................................5
2.1.3 Estrutura física utilizada para instação:.............................................................................5
2.1.4 Configuração Sistema (distribuição dos componentes).....................................................5
2.1.5 Processo de instalação........................................................................................................6
3. Referências ....................................................................................................................................13
2
1. Resumo da Disciplina
A proposta da disciplina foi estudar os conceitos que envolve computação em grades (ou nas
nuvens), estudar as arquiteturas de computação distribuída, tentar montar e operar uma nuvem, e
executar aplicações paralelas em uma grade real. A fim de atingir tais objetivos, alguns materiais
foram analisados:
− Notas de Aula do Jack Dongarra:
http://www.cs.utk.edu/~dongarra/WEB-PAGES/cs594-2009.htm
− Artigo Ian Foster, Carl Kesselman e Steven Tnecke:
"Above the clouds"
− Tutorial BOINC:
boinc.berkeley.edu
− Outros Cloud Testbeds:
https://opencirrus.org/
http://www.eucalyptus.com/
http://workspace.globus.org/
http://www.opennebula.org/
Foram analisadas também as formas de virtualização (Full e Para), e quais as vantagens e
desvantagens de cada uma para o projeto da disciplina. Discutiu-se também sobre a importância de
paralelizar programas (Lei de Amdahl, 1967), as diferenças entre “Distributed Supercomputing”,
“Utility/Service/Cloud/Internet Computing”, “Colaborative Computing”, “Grid Computing” e
“Opportunistic Computing”. Para chegar a uma conclusão sobre o que realmente a turma deveria
fazer como projeto, foram levantadas as necessidades de cada usuário em uma nuvem:
→ bom desempenho,
→ facilidade de uso,
→ baixo custo,
→ lucro gerado,
→ confiabilidade.
Associando tudo isso ao projeto da disciplina, as seguintes ideias foram fixadas:
→ Nossa Nuvem: conjunto de máquinas virtuais (um ambiente virtualizado) formando uma
espécie de cluster.
→ Nosso Objetivo: formar um cluster de máquinas virtuais usando máquinas físicas com poder
computacional disponível.
→ Desenvolver uma estrutura de cloud em que qualquer usuário pudesse ingressar
Definido o projeto, algumas necessidades que surgiram:
→ como autenticar novo usuário na nuvem,
→ como fornecer IP,
→ como gerenciar/monitorar máquinas físicas e virtuais da nuvem,
→ como garantir a comunicação entre processos em execução na nuvem,
→ como permitir que aplicações executassem na nuvem (primeiro seria necessário definir os
tipos permitidos, paralelas ou distribuídas?),
3
→ quais serviços fornecer.
Com o objetivo de estudar a possibilidade de construção de uma espécie IaaS cloud que
tivesse um perfil menos comercial, tínhamos o desafio de produzir uma solução que pudesse ser
implantada no meio acadêmico, e fornecesse, de forma democrática, a possibilidade de participação
da comunidade acadêmica. Com estas preocupações em mente, foram levantadas e discutidas
algumas possibilidades para construção da infra-estruturara que tem como peças-chave o S.O,
hypervisor e o sistema gerenciador de cloud. Vale ressaltar que alguns pontos como o
escalonamento das máquinas virtuais entre os diversos nodes, decisão de qual node deve receber
trabalho a ser executado, como gerenciar que nó tem mais recursos disponíveis para subir uma nova
máquina virtual, entre outros questionamentos, ainda ficaram em aberto devido ao tempo limitado
dos testes. Foram selecionadas duas infra-estruturas de software código aberto para serem testadas
pela turma como base para a construção da nuvem: OpenNebula e Eucalyptus.
Conclusão: como não houve tempo suficiente, os testes não foram 100% concluídos. Porém,
os testes no laboratório permitiram mostrar que é possível criar a “nuvem de máquinas virtuais” e
que alguns pontos ainda precisam ser bastante trabalhados, como, por exemplo, melhorar o suporte
à gerência do cloud, através do desenvolvimento de uma interface web (isso facilitaria a gerência
tanto local como remota), e melhorar também o suporte ao escalonamento e políticas para
gerenciamento das máquinas virtuais.
2. Experiência em computação nas nuvens desenvolvida
2.1 Introdução
A seguir, é apresentado um pequeno tutorial de como instalar e manipular o cloud o software
de gerência Eucalyptus. Os testes foram então realizados usando o Eucalyptus como gerenciador.
2.1.1 Sistema base de gerência do cloud Eucalyptus:
O Eucalyptus é uma infraestrutura de software open-source que fornece as ferramentas
necessárias para implementar “computação nas nuvens” em clusters ou em um conjunto de estações
de trabalho. Ele possui interface compatível com as interfaces da Amazon EC2, S3 e EBS, e tem
uma infraestrutura concebida de tal maneira que permite ser extendida e modificada de forma a ser
compatível com outras interfaces. Ele tem por principal objetivo formentar as pesquisas e o
desenvolvimento de tecnologias relacionadas a implementação de serviços de computação nas
nuvens.
4
2.1.2 Arquitetura do Eucalyptus
Uma configuração do Eucalyptus é composta basicamente pelos seguintes componentes:
Controlador da nuvem (CLC - Cloud Controller) e "Walrus" - são componentes que ficam
no nível mais alto, com um de cada em cada instalação do Eucalyptus. O controlador da nuvem é
um programa feito em java que oferece uma interface web para controle. Além de gerenciar
requisições, o controlador de nuvem também faz o escalonamento de recursos e gerência de contas.
Walrus, também feito em java, implementa um sistema de armazenamento que fica disponível
interna e externamente ao cloud através de uma interface compatível com S3.
Controlador do cluster (CC - Cluster Controller) - escrito em "C" e implantado como um
serviço dentro do Apache cada cluster necessita de um controlador de cluster, ele é responsável pelo
escalonamento a nível de cluster, pelo controle da rede e pelo controlador de armazenamento (SC Storage Controler).
Controlador de nó (NC - Node Controller) - também escrito em "C" ele é responsável por
controlar o hypervisor, sendo assim necessário a sua instalação em cada nó que possua um
hypervisor.
2.1.3 Estrutura física utilizada para instação:
2 máquinas com 2G de memória ram utilizando o sistema operacional GNU/Linux Ubuntu
9.04 32 bits, uma máquina como Front-end e uma máquina como Node
2.1.4 Configuração Sistema (distribuição dos componentes)
Front-end:
Eucalyptus cloud (CLC)
Eucalyptus cluster (CC)
Node:
Eucalyptus (NC)
5
2.1.5 Processo de instalação
Versão Utilizada: Eucalyptus 1.5~bzr266
• Instalação do Node
•
Instalando o hypervisor – Xen
Instale o pacote ubuntu-xen-server, ele é um meta-pacote que instalará as ferramentas para
manipulação do Xen server, assim como o cerne do xen o hypervisor propriamente dito responsável
por controlar a cpu é a memória e que será carregado pelo carregador de boot, ficando faltando só o
kernel configurado para funcionar como o primeiro guest S.O do xen o Dom0 (domínio 0) que é
carregado automaticamente durante o processo de boot quando o hypervisor inicia e recebe
privilégios especiais de acesso ao hardware..
$ sudo apt-get install ubuntu-xen-server
Como kernel Dom0 nós podemos utilizar este linux-image-2.6.26-2-xen-686_2.6.2615_i386.deb
→ Instalando o Kernel
$ wget http://security.debian.org/debian-security/pool/updates/main/l/linux-2.6/linux-image2.6.26-2-xen-686_2.6.26-19lenny2_i386.deb
$ dpkg -i linux-image-2.6.26-2-xen-686_2.6.26-19lenny2_i386.deb
→ Instalando os Módulos
$ http://security.debian.org/debian-security/pool/updates/main/l/linux-2.6/linux-modules2.6.26-2-xen-686_2.6.26-19lenny2_i386.deb
6
$ dpkg -i linux-modules-2.6.26-2-xen-686_2.6.26-19lenny2_i386.deb
→ Configurando o carregador de boot (GRUB apenas)
Após a instalação dos pacotes acima normalmente já será adicionada uma nova entrada no
seu carregador de boot, mas caso isto não aconteça adicione as seguintes linhas no arquivo
/boot/grub/menu.lst
title
Xen 3.3 / Ubuntu 9.04, kernel 2.6.26-2-xen-686
uuid
bd2c08f6-e705-4c85-8fdb-aa884ca8a0b7
kernel
/xen-3.3.gz
module /vmlinuz-2.6.26-2-xen-686 root=UUID=c397979f-01e0-4180-83ebffff8c9324fced1e ro console=tty0
module
/initrd.img-2.6.26-2-xen-686
quiet
OBS: Substitua o uuid acima pelo uuid da sua partição raiz
Por fim reinicie o sistema e escolha a nova opção de boot.
→ Configurando a rede do Dom0
A configuração padrão do Xen utiliza bridge, e assim que o controlador do Xen inicia
(Xend) ele executará um script para configurar as interfaces que criará um bridge com o nome de
sua interface normalmente ethX e renomeará a sua interface para pethX. Então precisaremos alterar
o arquivo /etc/network/interfaces para ficar de acordo:
Ex: considerando que a interface de rede seja eth0
/etc/network/interfaces ficará
auto lo
iface lo inet loopback
auto peth0
iface peth0 inet manual
auto eth0
iface eth0 inet static
address xxx.xxx.xxx.xxx
gateway xxx.xxx.xxx.xxx
netmask xxx.xxx.xxx.xxx
Não se preocupe em adicionar a interface a bridge, isto normalmente já é feito pelo script de
rede do Xen
remova o pacote network-manager
7
$ sudo apt-get remove --purge network-manager
•
Instalando o controlador de nó do Eucalyptus
Instale o pacote eucalyptus-nc
$ sudo apt-get install eucalyptus-nc
O Eucalyptus necessita que habilitemos o controle do hypervisor do Xen via HTTP para isto
altere o arquivo /etc/xen/xend-config.sxp
(xend-http-server yes)
Por fim precisamos alterar o hypervisor e as configurações de rede no arquivo de
configuração do Eucalyptus
Altere o arquivo /etc/eucalyptus/eucalyptus.conf
HYPERVISOR="xen"
VNET_INTERFACE="eth0"
VNET_BRIDGE="eth0"
* assumindo que eth0 foi a bridge criado pelo Xen
Reinicie o controlador de nó para que alterações surtam efeito
$ /etc/init.d/eucalyptus-nc restart
• Instação do Front-end
•
Instalando o controlador de nó do Eucalyptus
Instale os pacotes eucalyptus-cloud e eucalyptus-cc
$ sudo apt-get install eucalyptus-cloud eucalyptus-cc
•
Registrando os componentes do Eucalyptus
→ Registrando o cluster:
$ sudo euca_conf -addcluster <nome_do_cluster> ip_do_cluster
nome_do_cluster → um nome qualquer a sua escolha
ip_do_cluster → IP onde o controlador do cluster está instalado no caso da nossa
configuração o IP do front-end
→ Registrando o node:
8
Para fazermos isto nós precisamos primeiramente instalar a chave pública do usuário
eucalyptus no controlador de nó de forma que ele possa realizar o login sem a necessidade da senha,
para tal:
No controlador de nó temporariamente configure uma senha para o usuário eucalyptus
$ sudo passwd eucalyptus
No controlador de nuvem
$ sudo -u eucalyptus ssh-copy-id -i ~eucalyptus/.ssh/id_rsa.pub eucalyptus@<ip_do_node>
Agora já podemos remover a senha do usuário eucalyptus no node
$ sudo passwd -d eucalyptus
•
Processo inicial de login e obtenção das credenciais
Abra um browser e acesse o seguinte endereço:
https://front_end_ip:8443
* se por acaso acusar falha na conexão, certifique-se que o controlador de nuvem foi
iniciado, você pode verificar se a porta 8443 está aberta através do comando:
$ netstat -tan | grep 8443
Caso não retorne nada, reinicie o controlador de nuvem através do comando
$ sudo /etc/init.d/eucalyptus-cloud restart
espere alguns segundo e volte a tentar acessar o endereço acima
Se tudo ocorre bem deve aparecer uma tela inicial de login, onde o login e a senha inicial
são admin, você será guiado então através de alguns passos de configuração do ambiente do cloud,
siga as instruções para atualizar a senha e o e-mail do administrador. Assim que terminar você será
direcionado para a aba “Configuration” verifique se precisa de algum ajuste e então clique na aba
“Credentials” no canto superior direito e por fim faça o download das credenciais clicando em
“download certificate”.
Agora que temos o certificados precisamos configurar as ferramentas EC2 AMI e API.
•
Instalando e configurando as ferramentas EC2 AMI e API
Essas são as ferramentas que permitirão a manipulação da nuvem, podendo assim ser
instaladas em qualquer computador em que se deseja fazer uso da nuvem, e não apenas no nosso
front-end.
9
Faremos uma instalação manual destas ferramentas devido a versão das ferramentas EC2ami fornecidas no repositório não funcionarem corretamente com esta versão do Eucalyptus, mas
antes precisamos instalar alguns pacotes para que elas funcionem corretamente.
$ sudo apt-get install ruby libopenssl-ruby curl
Agora vamos fazer o download das ferramentas e instalá-las, para isto execute os seguintes
comandos, ou crie um script com eles:
$ mkdir ~/.euca
$ cd ~/.euca
# A próxima linha considera que o certificado obtido na interface Web do cloud está
# localizado no desktop, caso não esteja altere para ficar de acordo
$ mv ~/Desktop/euca2-admin-x509.zip ~/.euca
$ unzip euca2-admin-x509.zip
$ wget http://s3.amazonaws.com/ec2-downloads/ec2-api-tools-1.3-30349.zip
$ unzip ec2-api-tools-1.3-30349.zip
$ mv ec2-api-tools-1.3-30349 ec2
$ wget http://s3.amazonaws.com/ec2-downloads/ec2-ami-tools-1.3-26357.zip
$ unzip ec2-ami-tools-1.3-26357.zip
$ mv ec2-ami-tools-1.3-26357 ec2ami
$ echo 'export JAVA_HOME=/usr' >> eucarc
$ echo 'export EC2_HOME=~/.euca/ec2' >> eucarc
$ echo 'export EC2_AMITOOL_HOME=~/.euca/ec2ami' >> eucarc
$ echo 'export PATH=$PATH:$EC2_HOME/bin:$EC2_AMITOOL_HOME/bin' >> eucarc
Edite o arquivo ~/.euca/ec2ami/lib/ec2/amitools/instance-data.rb e altere a linha abaixo com
o IP do controlador do cluster:
META_DATA_URL="http://<ip_controlador_cluster>:8773/latest/meta-data”
•
Utilizando as ferramentas EC2 AMI e API
Sempre que você for usar as ferramentas para controlar o cloud, será necessário fazer source
do arquivo eucarc, este arquivo configurará o ambiente para que torne mais fácil o uso das
ferramentas. Para isto execute o comando a baixo ou opcionalmente adicione ele ao seu ~/.bashrc
de forma que ele sempre será executado quando você fizer o login.
$ . ~/.euca/eucarc
Para avaliarmos se tudo ocorreu bem até o momento, podemos executar o comando:
$ euca-describe-availability-zones verbose
AVAILABILITYZONE
AVAILABILITYZONE
maincluster
|- vm types
UP 200.20.1.12
free / max cpu ram disk
10
AVAILABILITYZONE
AVAILABILITYZONE
AVAILABILITYZONE
AVAILABILITYZONE
AVAILABILITYZONE
AVAILABILITYZONE
BRST 2009
|- m1.small
|- c1.medium
|- m1.large
|- m1.xlarge
|- c1.xlarge
|- 200.20.1.13
0000 / 0000 1 128 1
0000 / 0000 1 256 2
0000 / 0000 2 512 10
0000 / 0000 2 1024 20
0000 / 0000 4 2048 20
certs[cc=false,nc=false] @ Sat Dec 19 16:27:24
Deverá aparecer um resultado semelhante ao acima, onde são listados detalhes do cluster
local com os tipos de máquinas virtuais disponíveis, o cluster e o nó registrado.
•
Testando a nuvem
Para isto nós utilizaremos uma máquina virtual pré-empacotada já pronta para funcionar no
Eucalyptus fornecida no site (http://open.eucalyptus.com). Neste pacote estão contidas uma imagem
de uma máquina virtual e um par de imagens kernel/ramdisk tanto para o Xen quanto para o KVM,
sendo a do Xen a que nos interessa.
Download e extração da imagem
$ wget http://www.eucalyptussoftware.com/downloads/eucalyptus-images/euca-ubuntu9.04-i386.tar.gz
$ tar -zxvf euca-ubuntu-9.04-i386.tar.gz
Agora precisamos criar a AMI para as imagens do kernel do ramdisk e da vm, fazer upload e
registrar.
$ cd euca-ubuntu-9.04-i386/xen-kernel
$ mkdir kernel ramdisk image
Usando as ferramentas EC2 execute os comandos abaixo:
→ Kernel
$ ec2-bundle-image -i vmlinuz-2.6.24-19-xen -d ./kernel --kernel true
$ ec2-upload-bundle -b kernel -m ./kernel/vmlinuz-2.6.24-19-xen.manifest.xml
$ EKI=`ec2-register kernel/vmlinuz-2.6.24-19-xen.manifest.xml | awk '{print $2}'`; echo
$EKI
→ Ramdisk
$ ec2-bundle-image -i initrd.img-2.6.24-19-xen -d ./ramdisk --ramdisk true
$ ec2-upload-bundle -b ramdisk -m ramdisk/initrd.img-2.6.24-19-xen.manifest.xml
$ ERI=`ec2-register ramdisk/initrd.img-2.6.24-19-xen.manifest.xml | awk '{print $2}'`; echo
$ERI
→ Imagem
11
$ ec2-bundle-image -i ../ubuntu.9-04.x86.img -d ./image --kernel $EKI --ramdisk $ERI
$ ec2-upload-bundle -b image -m image/ubuntu.9-04.x86.img.manifest.xml
$ EMI=`ec2-register image/ubuntu.9-04.x86.img.manifest.xml | awk '{print $2}'`; echo
$EMI
Para ver se todas as imagens foram adicionadas corretamente você pode executar o comando
abaixo, ele deverá mostrar as três imagens EKI, EMI e ERI regitradas.
$ ec2-describe-images
Se tudo ocorreu bem até aqui nos podemos tentar criar uma instancia da imagem recém
registrada, mas para isto antes precisamos criar um par de chaves SSH que nos permitirão fazer
login na VM após ela ter iniciado.
$ ec2-add-keypair mykey > ~/.euca/mykey.priv
$ chmod 0600 ~/.euca/mykey.priv
Agora nos podemos criar a instância da imagem através do comando
$ ec2-run-instances $EMI -k mykey -t c1.medium
onde EMI → é o identificador da imagem, listado no comando ec2-describe-images
mykey → é a chave criada através do comando ec2-add-keypair
c1.medium → é o tipo de instância que será iniciado, c1.medium é o bastante par que
nossa imagem que temos disponível caiba.
A primeira vez que você inicia uma instância, o sistema configurará os caches da imagem
que será criada por isto pode levar algum tempo para que a instância fique pronta dado que as
imagens costumam ser grandes, você pode ficar monitorando o estado da instância através do
comando.
$ ec2-describe-instances
Na saída deste comando deverão aparecer informações sobre o estado da instância. Assim
que ela for iniciada deverá aparecer o estado “running” e assim que adquirir um IP do DHCP, você
verá os campos de IP privado e público mudarem de “0.0.0.0” para o IP adquirido pela instância.
Quando isto acontecer, você poderá logar na sua nova instância usando a chave que foi criada
anteriormente através do comando:
$ ssh -i ~/.euca/mykey.priv root@<ip_da_instância>
O seu Eucalyptus deve se parecer com o seguinte diagrama:
12
Para terminar a instância, você pode utilizar o comando abaixo passando o ID da instância
obtido através do comando ec2-describe-instances.
$ euca-terminate-instances id_da_instância.
3. Referências
13
https://help.ubuntu.com/community/Eucalyptus-Jaunty
https://help.ubuntu.com/community/UEC/PackageInstall
http://open.eucalyptus.com/
http://wiki.xensource.com/xenwiki/
14
Download

do Artigo - Viva Livre, viva Software Livre.