Salvar como PDF - Deki Wiki Cercomp

Transcrição

Salvar como PDF - Deki Wiki Cercomp
Instalação e Configuração
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
1) Introdução
1
Instalação e Configuração
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ó:
4) Configuração dos nós
2
Instalação e Configuração
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
3
Instalação e Configuração
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
4
Instalação e Configuração
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
5) Configuração do cluster
5
Instalação e Configuração
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.
6) Ganeti Web Manager
6
Instalação e Configuração
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(' ', '\ ')
6) Ganeti Web Manager
7
Instalação e Configuração
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'
6) Ganeti Web Manager
8
Instalação e Configuração
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
6) Ganeti Web Manager
9
Instalação e Configuração
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ço http://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):
6) Ganeti Web Manager
10
Instalação e Configuração
server {
root
index
/var/www;
index.html index.htm;
listen
listen
80; ## listen for ipv4
[::]:80 default ipv6only=on; ## listen for ipv6
server_name
access_log
ganeti;
/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