• Nenhum resultado encontrado

Este é um guia rápido de instalação e configuração de um cluster. Para mais informações, consulte as referências citadas no final deste documento.

N/A
N/A
Protected

Academic year: 2021

Share "Este é um guia rápido de instalação e configuração de um cluster. Para mais informações, consulte as referências citadas no final deste documento."

Copied!
11
0
0

Texto

(1)

1) Introdução

Ganeti é uma ferramenta de clusterização de servidores que permite o gerenciamento de múltiplos servidores (nós) a partir de um único servidor (nó master). A partir deste, é possível instalar máquinas virtuais em outros nós e gerencia-las.

Este é um guia rápido de instalação e configuração de um cluster. Para mais informações, consulte as referências citadas no final deste documento.

É conveniente saber o significado de alguns termos usados em clusterização, tais como: a) nó: é um servidor físico.

b) instância: uma máquina virtual hospedada em algum nó. c) cluster: o conjunto formado por dois ou mais nós.

O tutorial vai abordar um exemplo simples de cluster, composto por dois servidores (nós). O software de virtualização abordado será o KVM. O Ganeti também oferece suporte ao Xen.

2) Pré-requisitos

• Dois computadores ou servidores. Cada um deve conter duas placas de rede. • Versão estável do Debian mais recente instalada em cada nó.

• As interfaces de rede secundárias de cada nó (eth1) devem ser interconectadas por meio de um patch cord. Caso o cluster tenha mais de dois nós ou os nós estejam distantes fisicamente, é preciso interligar as interfaces por meio de um switch.

3) Instalação

3.1) Instalação do SO

Instalar a última versão estável do Debian, de preferência com o CD Netinst.

Ao particionar o disco rígido, crie uma LVM no mesmo e dê um nome para o VG (Volume Group). O nome do VG deve ser o mesmo para todos os nós!

Reserve um espaço mínimo para as partições do sistema e deixe o restante do epaço do VG livre. O Ganeti usará o espaço livre para criação das instâncias.

Instale o sistema mínimo, apenas com suporte a SSH.

3.2) Configuração do sistema

(2)

Todos passos a seguir devem ser executados em todos nós do cluster.

apt-get install lvm2 ssh bridge-utils iproute iputils-arping ndisc6 \ python python-pyopenssl openssl python-pyparsing python-simplejson \ python-pyinotify python-pycurl socat make kvm drbd8-utils dump kpartx \ ghc6 libghc6-json-dev libghc6-network-dev libghc6-parallel-dev

libghc6-curl-dev \

python-paramiko qemu-utils

Baixar e instalar a versão mais recente do Ganeti:

wget http://ganeti.googlecode.com/files/ganeti-2.5.1.tar.gz tar xfvz ganeti-2.5.1.tar.gz

cd ganeti-2.5.1

./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc --with-os-dir=/srv/ganeti/os \

--enable-htools make

make install

mkdir /srv/ganeti/ /srv/ganeti/os /srv/ganeti/export cp doc/examples/ganeti.initd /etc/init.d/ganeti

chmod +x /etc/init.d/ganeti

update-rc.d ganeti defaults 20 80

ln -s /boot/initrd.img-`uname -r` /boot/initrd.img-2.6-domU ln -s /boot/vmlinuz-`uname -r` /boot/vmlinuz-2.6-domU

4) Configuração dos nós

4.1 /etc/network/interfaces

Neste exemplo, foram atribuídos endereços IP reais da rede da Divisão de Suporte Técnico para as interfaces de rede primárias.

Interfaces do primeiro nó:

(3)

auto br0

iface br0 inet static

address 200.137.222.164 netmask 255.255.255.224 network 200.137.222.160 gateway 200.137.222.161 bridge_ports eth0 bridge_stp off bridge_fd 0 auto eth1

iface eth1 inet static address 10.1.1.1

netmask 255.255.255.0

Interfaces do segundo nó:

auto br0

iface br0 inet static

address 200.137.222.166 netmask 255.255.255.224 network 200.137.222.160 gateway 200.137.222.161 bridge_ports eth0 bridge_stp off bridge_fd 0 auto eth1

iface eth1 inet static address 10.1.1.2

netmask 255.255.255.0

4.2) /etc/hosts

Exemplo de configuração do arquivo /etc/hosts:

127.0.0.1 localhost

200.137.222.164 ead1.cercomp.ufg.br node1 200.137.222.166 ead2.cercomp.ufg.br node2

200.137.222.175 cluster01.cercomp.ufg.br cluster01

(4)

200.137.222.176 vm1.cercomp.ufg.br vm1 200.137.222.177 vm2.cercomp.ufg.br vm2

Neste exemplo, o nó master (node1) está registrado no DNS como ead1.cercomp.ufg.br e o segundo nó (node2) como ead2.cercomp.ufg.br. O cluster deve ter um nome próprio registrado no DNS e um endereço IP exclusivo (não pode ser o endereço IP do nó master, que será usado para iniciar e gerenciar o cluster). Assim como o cluster e os nós, as máquinas virtuais a serem instaladas tambem devem ser registradas no /etc/ hosts de cada nó. De forma similar, cada VM deve ter um registro próprio no DNS, bem como um endereço IP exclusivo, como consta acima no exemplo.

4.3) /etc/crontab

Para iniciar automaticamente instâncias que falharam ao iniciar, é preciso adicionar uma rotina no cron para executar a cada 5 minutos o processo ganeti-watcher. Acidione a seguinte linha no arquivo /etc/ crontab:

*/5 * * * * root [ -x /usr/local/sbin/ganeti-watcher ] && /usr/local/sbin/ ganeti-watcher

Alternativamente, uma rotina pode ser incluída no /etc/crontab para zerar o contador de trabalhos (rotinas executadas no ganeti).

45 1 * * * root [ -x /usr/local/sbin/ganeti-cleaner ] && /usr/local/sbin/ ganeti-cleaner

No exemplo acima, o comando ganeti-cleaner será executado sempre a 01:45 AM. O horário para execução fica a critério do administrador.

Reiniciar o cron

/etc/init.d/cron restart

(5)

4.4) DRBD

O DRBD é uma espécie de RAID via rede, usado pelo Ganeti quando uma máquina virtual é configurada para funcionar no modo de alta disponibilidade. Seguem abaixo as linhas de comando necessárias para configurar o DRBD:

echo drbd minor_count=128 usermode_helper=/bin/true >> /etc/modules depmod -a

modprobe drbd minor_count=128 usermode_helper=/bin/true

4.5) Ganeti Instance Image

Esta é a ferramenta necessária para criar máquinas virtuais. A criação e instalação de VMs será discutida mais adiante. Para instalar o Ganeti Instance Image, siga estes passos:

wget https://code.osuosl.org/attachments/download/2163/ ganeti-instance-image-0.5.1.tar.gz

tar xfvz ganeti-instance-image-0.5.1.tar.gz cd ganeti-instance-image-0.5.1

./configure --prefix=/usr --localstatedir=/var \ --sysconfdir=/etc --with-os-dir=/srv/ganeti/os \ make

make install

5) Configuração do cluster

Nesta estapa da configuração do cluster, é preciso eleger um dos nós para ser o nó master. A partir dele que os comandos de gerenciamento do Ganeti poderão ser executados.

5.1) Inicialização do cluster

Caso não tenha a pasta .ssh no diretório home do usuário root, é preciso cria-la

mkdir /root/.ssh

(6)

Uma vez escolhido o nó, executar o seguinte comando:

gnt-cluster init --master-netdev=br0 --vg-name cluster -s 10.1.1.1 --maintain-node-health=yes \

-B vcpus=1,memory=512M \

-H kvm:initrd_path=/boot/initrd.img-2.6-domU,kernel_path=/boot/ vmlinuz-2.6-domU,cdrom_image_path=/root/

debian-6.0.5-amd64-netinst.iso,boot_order=cdrom,vnc_bind_address=0.0.0.0 \ --enabled-hypervisors=kvm -N link=br0 cluster01

O comando acima inicia o cluster a partir do nó master escolhido (neste caso, o node1 foi eleito como nó master), informando que a interface de comunicação entre os nós é a br0, que o volume group da lvm de cada nó de chama "cluster". Informa também o endereço IP da interface de rede secundária. Os parâmentros "vcpus" e "memory" informam o número de cpus virtuais e a quantidade de memória padrão que será alocada a cada instância com o comando "gnt-instance add". A seguir, os parâmetros necessários para a execução do kvm. Note que existe o parâmetro cdrom_image_path, qual informa o diretório onde se encontra alguma imagem iso para instalação de instâncias. Neste caso, o comando informa que existe uma imagem iso debian-6.0.5-amd64-netinst.iso armazenada no diretório /root. Todos os nós devem possuir a mesma imagem armazenada no mesmo diretório informado no comando!

5.2) Inclusão de nós no cluster

gnt-node add -s 10.1.1.2 node2

6) Ganeti Web Manager

O Ganeti Web Manager (GWM), como o próprio diz, é uma interface web de gerenciamento do Ganeti. Ela é útil para instalação/remoção/modificação de instâncias, acesso a instâncias via VNC e para um overview geral do cluster. Porém, a interface é limitada, não permitindo, por exemplo, o failover de instâncias, backup, adição de nós, dentre outras funcionalidades. Entretanto, mesmo com poucas funcionalidades, a ferramenta é um bom auxílio para o administrador do cluster.

(7)

6.1) Instalação

O GWM deve ser instalado no nó master. A instalação exige um servidor de banco de dados. Neste exemplo será usado o mysql. Para instalar os pré-requisitos, digite o comando

apt-get install python-pip python-dev python-virtualenv python-django python-django-registration \

python-django-south fabric curl git-core mysql-server python-mysqldb cd /srv/ganeti

git clone git://git.osuosl.org/gitolite/ganeti/ganeti_webmgr cd ganeti_webmgr/

Adicionar as seguintes linhas no arquivo /usr/share/pyshared/fabric/context_managers.py def lcd(path):

"""

Context manager for updating local current working directory.

This context manager is identical to `~fabric.context_managers.cd`, except

that it changes a different env var (`lcwd`, instead of `cwd`) and thus

only affects the invocation of `~fabric.operations.local` and the local

arguments to `~fabric.operations.get`/`~fabric.operations.put`. Relative path arguments are relative to the local user's current working

directory, which will vary depending on where Fabric (or Fabric-using code)

was invoked. You can check what this is with `os.getcwd

<http://docs.python.org/release/2.6/library/os.html#os.getcwd>`_. It may be

useful to pin things relative to the location of the fabfile in use, which

may be found in :ref:`env.real_fabfile <real-fabfile>` .. versionadded:: 1.0

"""

return _change_cwd('lcwd', path) def _change_cwd(which, path):

path = path.replace(' ', '\ ')

(8)

if state.env.get(which) and not path.startswith('/'): new_cwd = state.env.get(which) + '/' + path

else:

new_cwd = path

return _setenv(**{which: new_cwd})

Estas linhas adicionais são do arquivo context_managers.py da versão 1.4 do fabric, baixada do git. A versão atual do fabric do repositório do Debian é a 0.9, a qual não possui os métodos abaixo, cruciais para os próximos comandos de configuração do GWM (Por que, então, não instalar a versão 1.4? Porque a versão do git instala apenas a base do fabric, sem o comando fab, disponível na versão do repositório do Debian.) Reiniciar o servidor

reboot

A seguir, digitar o comando fab dev deploy

cp settings.py.dist settings.py

Editar o arquivo settings.py e alterar as seguintes linhas.

ENGINE = 'django.db.backends.servidor_sql' # <-- Substituir a string "servidor_sql" por uma das seguintes opções: 'mysql', 'postgresql', 'postgresql_psycopg2' or 'sqlite3'

NAME = '' # criar banco de dados caso não exista

USER = '' # criar usuário caso não exista

PASSWORD = '' # definir senha de usuário

HOST = '' # endereço IP do servidor, mesmo que o banco de dados seja local

PORT = '' # também não é preciso se o banco de dados for local

No mesmo arquivo, edite as seguintes linhas:

SITE_DOMAIN = 'ip_do_servidor:8000' VNC_PROXY='ip_do_servidor:8888'

(9)

Editar o arquivo /etc/mysql/my.cnf e informar o endereço IP real do servidor no parâmetro bind-address. Reiniciar o mysql.

Ainda dentro do diretório do GWM, iniciar o ambiente virtual por meio do comando

source bin/activate

Inicializar o banco de dados local por meio do comando

./manage.py syncdb --migrate

Criar a indexação de pesquisa por meio do comando

./manage.py rebuild_index

6.2) Criação de usuário do Ganeti Remote API (RAPI)

Crie um usuário de acordo com exemplo abaixo:

echo -n 'ganeti:Ganeti Remote API:123456' | openssl md5 #Cria o usuário "ganeti" com senha "123456"

echo ganeti {HA1}41ec1b84b27f257984aaab87c2a81dba write > /var/lib/ganeti/ rapi/users

Na segunda linha de comando, a string 41ec1b84b27f257984aaab87c2a81dba é a saída do primeiro comando.

6.4) Testando a interface

(10)

Dentro do diretório do GWM e com o ambiente virtual ativado, conforme explicado no tópico 6.1, execute os seguintes comandos

twistd -n vncap -c tcp:8888:interface=ip_do_servidor ./manage.py runserver ip_do_servidor:8000

O primeiro comando ativa o suporte a VNC para acesso às instâncias por meio do GWM. O segundo comando inicia o servidor. Substitua o endereço IP dos comandos acima pelo endereço do servidor.

Em seguida, acesse pelo browser o endereçohttp://ip_do_servidor:8000

6.5) Configurando o sistema para iniciar o GWM automaticamente

Editar o arquivo /etc/rc.local e adicionar as seguintes linhas antes da linha exit0:

/srv/ganeti/ganeti_webmgr/bin/python /srv/ganeti/ganeti_webmgr/manage.py runserver ip_do_servidor:8000 2> /dev/null &

/srv/ganeti/ganeti_webmgr/bin/python /srv/ganeti/ganeti_webmgr/bin/twistd -n vncap -c tcp:8888:interface=ip_do_servidor 2> /dev/null &

Substituir a string ip_do_servidor das linhas de comando pelo IP do servidor. 6.6) Configuração do Nginx

Em vez de acessar o GWM por meio do IP do servidor e pela porta 8000, é melhor intalar o servidor web Nginx e tratar as requisições da porta 8000.

Para instalar o nginx, digite o comando

apt-get install nginx

Em seguida, crie um arquivo chamado ganeti.conf, no diretório /etc/nginx/sites-available, com o seguinte conteúdo (onde houver a string ip_do_servidor, substitua pelo endereço IP):

(11)

server {

root /var/www;

index index.html index.htm; listen 80; ## listen for ipv4

listen [::]:80 default ipv6only=on; ## listen for ipv6 server_name ganeti; access_log /var/log/nginx/localhost.access.log; location / { proxy_pass http://ip_do_servidor:8000; } }

Crie um link simbólico no diretório /etc/nginx/sites-enabled

ln -s /etc/nginx/sites-available/ganeti.conf /etc/nginx/sites-enabled/ ganeti.conf Reinicie o nginx /etc/init.d/nginx restart

Referências

[0]http://docs.ganeti.org/ganeti/2.5/html/ [1]http://notes.ceondo.com/ganeti/ganeti.pdf [2]https://code.osuosl.org/projects/ganeti-webmgr Referências 11

Referências

Documentos relacionados

Como já destacado anteriormente, o campus Viamão (campus da última fase de expansão da instituição), possui o mesmo número de grupos de pesquisa que alguns dos campi

que utilizaram, ou não, irrigação de pastagens (P&gt;0,05), no entanto, observou-se maior valor para as propriedades que não utilizam irrigação, pois naquelas que

Este trabalho buscou, através de pesquisa de campo, estudar o efeito de diferentes alternativas de adubações de cobertura, quanto ao tipo de adubo e época de

No entanto, maiores lucros com publicidade e um crescimento no uso da plataforma em smartphones e tablets não serão suficientes para o mercado se a maior rede social do mundo

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

O enfermeiro, como integrante da equipe multidisciplinar em saúde, possui respaldo ético legal e técnico cientifico para atuar junto ao paciente portador de feridas, da avaliação

Os resultados deste estudo mostram que entre os grupos pesquisados de diferentes faixas etárias não há diferenças nos envoltórios lineares normalizados das três porções do

Podem treinar tropas (fornecidas pelo cliente) ou levá-las para combate. Geralmente, organizam-se de forma ad-hoc, que respondem a solicitações de Estados; 2)