Was this page helpful?

Instalação e Configuração

    1) Introdução

    Editar seçã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) : é 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

    Editar seção
    • 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

    Editar seção

    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

    Editar seçã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/interfacesEditar seção

     

    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ó:

     

    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

    Editar seção

     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
    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

    Editar seção

    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.4) DRBD

    Editar seção
    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 ImageEditar seção

    Editar seção
    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
    
     
    Editar seção

    5) Configuração do cluster

    Editar seção

    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

    Editar seção

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

     

    mkdir /root/.ssh

     

    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

    Editar seção

     

    gnt-node add -s 10.1.1.2 node2
    

     

    6) Ganeti Web Manager

    Editar seção

    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.1) Instalação

    Editar seçã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(' ', '\ ')
        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'

     

    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)

    Editar seção

    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

    Editar seçã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 seção

    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

    Editar seção

    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):

     

    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
    

     

    Was this page helpful?
    Marcadores (Editar marcadores)
    • No tags
    Estatísticas da página
    3375 view(s), 4 edit(s) and 29846 character(s)

    Comentários

    Faça o login para escrever um comentário.

    Anexar arquivo

    Anexos