Personal tools
You are here: Home Tutoriais Instalando um Cassandra (com Debian e OpenVZ)



 

Instalando um Cassandra (com Debian e OpenVZ)

by Ricardo Bánffy last modified Mar 28, 2010 09:04 PM

Sobre a instalação de um servidor Cassandra sob Debian e OpenVZ

Por que Debian e por que OpenVZ?

São duas escolhas fáceis. A do Debian foi por causa do APT - é muito simples cuidar de um servidor com ele. O OpenVZ foi escolhido por ser a solução mais simples para quem quer virtualizar servidores debaixo do mesmo kernel Linux. Ele é parecido com as partições do Solaris ou com os jails do BSD. Na máquina em que eu fiz a instalação do Cassandra rodam vários servidores, alguns com Debian, outros com CentOS.

O outro motivo para usar um ambiente virtual é que você pode sempre recomeçar do zero quando fez alguma coisa muito errada. Eu já fiz isso mais de uma vez.

Servidor pronto (instalação básica)

Vamos partir do princípio de que temos um servidor virtual Debian 5.0 com as versões mais recentes do básico. O meu básico inclui coisas como munin-node para monitoramento e tuning (outra mão na roda).

Adicionando o repositório ao sources-list

Essa primeira parte é totalmente tirada do wiki do Cassandra. Lá eles tem a página que eu usei para fazer a minha instalação.

A primeira coisa que você precisa fazer é contar para o APT onde ele deve buscar os pacotes que fazem parte da instalação do Cassandra. Para isso, você edita o arquivo /etc/apt/sources.list e acrescenta as duas linhas abaixo:

deb http://www.apache.org/dist/cassandra/debian unstable main
deb-src http://www.apache.org/dist/cassandra/debian unstable main

Você ainda vai ter uma surpresa quando der o apt-get update (que faz o APT contactar os repositórios cadastrados e atualizar a lista do que está disponível e em que versão):

W: GPG error: http://www.apache.org unstable Release: The following signatures couldn't 
be verified because the public key is not available: NO_PUBKEY F758CE318D77295D
W: You may want to run apt-get update to correct these problems

Adicionando a chave pública dos pacotes

O APT funciona com assinaturas digitais. Ele não confia, a princípio, em quem assina os pacotes do Cassandra (que não é a galera do Debian) e, por isso, você vai precisar importar a assinatura:

sh-3.2# gpg --keyserver wwwkeys.eu.pgp.net --recv-keys F758CE318D77295D
gpg: directory `/root/.gnupg' created
gpg: new configuration file `/root/.gnupg/gpg.conf' created
gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/root/.gnupg/secring.gpg' created
gpg: keyring `/root/.gnupg/pubring.gpg' created
gpg: requesting key 8D77295D from hkp server wwwkeys.eu.pgp.net
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 8D77295D: public key "Eric Evans <[email protected]>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
sh-3.2# gpg --export --armor F758CE318D77295D | apt-key add -
OK

Agora você pode fazer o update e o APT vai confiar nos pacotes do Cassandra.

Instalando o Cassandra

As dependências do Cassandra pedem um JRE (um runtime Java). O Debian prefere o OpenJDK. Na minha instalação, não funcionou com ele. Isso não é um grande problema. Tudo o que você precisa é instalar um outro JRE junto com o Cassandra.

Em vez de:

sh-3.2# apt-get install cassandra

Você deve dizer:

sh-3.2# apt-get install sun-java6-jre cassandra

De novo, isso é o que aconteceu comigo (em março de 2010). Pode ser que esse problema tenha sido arrumado quando você seguir essas instruções, pode ser que do meu jeito não funcione e pode ser que o pacote se chame oracle-java7-jre. Resolver isso é com você. Se funcionar para você com o OpenJDK, avise.

O que deu errado

Quando a instalação quase termina, eu sou brindado com:

Setting up cassandra (0.5.0-1) ...
Cannot locate Java Home
Setting up sun-java6-bin (6-12-1) ...
Could not create the Java virtual machine.
Error occurred during initialization of VM
Could not reserve enough space for object heap
Ignoring error generating classes.jsa

A primeira reclamação é do Cassandra. O script de startup dele, em /etc/init.d/cassandra, espera o JRE onde o OpenJDK coloca. Como estamos usando o JRE da Sun, você tem que trocar:

JAVA_HOME="/usr/lib/jvm/java-6-openjdk/jre"

por:

JAVA_HOME="/usr/lib/jvm/java-6-sun/jre"

O segundo problema é mais interessante. Disse o sun-java6-bin que não conseguiu alocar memória para o object heap.

Vamos sair do ambiente virtual e olhar o /proc/user_beancounters do OpenVZ:

Version: 2.5
       uid  resource           held    maxheld    barrier      limit    failcnt
     2006:  kmemsize        1085358    2094306   11055923   11377049          0
            lockedpages           0          8        256        256          0
            privvmpages        8901      55742      65536      69632          7

O número 7 na linha privvmpages nos dá uma idéia de porque a instalação falhou. Vale lembrar que isso não aconteceria em uma máquina real. Para resolver o problema, você deve aumentar o limite (páginas de memória que o ambiente virtual pode alocar)

root@blackops:/root# vzctl set 2006 --privvmpages 512000 --save

Isso feito, você volta ao servidor virtual e manda que o dpkg reinstale o pacote que reclamou - o sun-java6-bin:

sh-3.2# dpkg-reconfigure sun-java6-bin

Agora podemos levantar o Cassandra:

sh-3.2# /etc/init.d/cassandra start

e ver se ele está mesmo funcionando:

sh-3.2# nodeprobe -host localhost ring
Address       Status     Load          Range                                      Ring
127.0.0.1     Up         0 bytes       149143024384283430356665902534805795647    |<--|

O Bônus - fazendo um cluster

Uma das graças de se usar um Cassandra está no clustering. Para fazê-lo eu vou me basear em outra página.

Antes que alguém pergunte, faz muito pouco sentido levantar um cluster em uma única máquina física. O Cassandra é plenamente capaz de usar toda a memória e todos os núcleos que você der pra ele. A única desculpa que eu tenho é querer testar o próprio clustering.

No nosso caso, vamos criar um novo ambiente no OpenVZ igual ao primeiro. Faça todos os passos como fizemos até agora em uma outra máquina (você pode, claro, pular os erros e só fazerr as coisas certas - como, por exemplo, aumentar o privvmpages antes de instalar o sun-java6-jre).

Nos dois servidores, você vai precisar alterar 3 linhas no arquivo /etc/cassandra/storage-conf.xml. Supondo que o IP do seu primeiro servidor seja 192.168.16.105, troque:

<Seed>127.0.0.1</Seed>

por:

<Seed>192.168.16.105</Seed>

Um pouco mais para baixo, troque:

<ListenAddress>localhost</ListenAddress>

por:

<ListenAddress>192.168.16.105</ListenAddress>

e, finalmente,

<ThriftAddress>localhost</ThriftAddress>

por

<ThriftAddress>0.0.0.0</ThriftAddress>

No segundo servidor, faça a mesma coisa trocando o ListenAddress pelo IP do segundo servidor (192.168.16.106), mantendo apenas a tag "<Seed>" com o IP do primeiro.

O que foi que eu fiz?

É simples. O tag Seed lista (pode ter mais de um nó ali) os nós do seu cluster para quem você quer que nós novos perguntem onde estão os outros nós. Não precisa -ou deve - listar todos os nós do cluster, mas, se o cluster tiver muitos nós, é uma idéia listar mais de um. É bom também listar preferencialmente nós locais (dentro do mesmo rack/switch ou datacenter) para que o nó recém chegado possa se orientar mais depressa. Um cluster Cassandra pode estar em mais de um datacenter. No nosso setup, o seed do segundo nó será o 192.168.16.105. Nós subsequentes podem usar qualquer um dos nós anteriores como seeds.

O ListenAddress diz por qual IP cada nó vai mandar e receber dados de sincronização. Lembre-se que no cluster os dados estão espalhados e replicados e os nós precisam, portanto, se comunicar. Você pode usar aí um IP de uma rede dedicada.

E, finalmente, o ThriftAddress é o endereço pelo qual clientes acessam os dados no cluster. 0.0.0.0 diz que ele ouve em todos os seus IPs.

Rufem os tambores...

Restarte os dois Cassandras, entre no primeiro servidor e digite:

sh-3.2# nodeprobe -host 192.168.16.105 ring
Address       Status     Load          Range                                      Ring
                                       149143024384283430356665902534805795647
192.168.16.105Up         1.27 KB       139114487419103335543377020015272155670    |<--|
192.168.16.106Up         652 bytes     149143024384283430356665902534805795647    |-->|

Pronto. Seu próprio cluster Cassandra está no ar. Divirta-se.