Apache Cassandra Multi-Node NoSQL Cluster no Ubuntu 18.04 e Lubuntu 18.04

Leandro Gomes
15 min readJun 14, 2021

Este trabalho é a criação de um Sistema Distribuído no âmbito da UTC de Sistemas Distribuídos lecionada pelo professor Pedro Pinto, elaborado por: Frederico Cabral e Leandro Gomes.

O Apache Cassandra é um sistema de gestão de Base de Dados NoSQL, concebido para garantir uma rápida escalabilidade e disponibilidade dos dados. Vamos ver como instalar e configurar o Apache Cassandra em 3 máquinas.

Foi criado pelo Facebook, como open source, em 2008, atualmente este projeto é baseado em tecnologia NoSQL e pertence a Apache Fundation.

3 Características Principais do Apache Cassandra:

→ É descentralizado - Não existe um ponto de falha central, todos os nós tem as mesmas funcionalidades, o que permite garantir o serviço desde que não aja falhas em todas as máquinas do cluster.

→ Tolerância a falhas - Os dados estão replicados em vários nós, logo se falhar um nó, o serviço não fica indisponível.

→ Escalabilidade - É rápido acrescentar nós ao cluster e não coloca em causa a performance do sistema e suporta uma dimensão na ordem dos milhares de nós.

Nota:

Para este tutorial, basta usar uma das distribuições do Linux ou o Ubuntu 18.04 ou o Lubuntu 18.04, vamos usar duas distribuições diferentes para demostrar que podemos ter um cluster com máquinas com sistemas operativos diferentes e com características diferentes, sem comprometer o bom funcionamento do cluster.

Pré requisitos:

VirtualBox.

Ubuntu 18.04.

Criação da VM (Virtual Machine) e instalação do Ubuntu 18.04:

Criamos uma nova VM.

Damos-lhe o nome de Cassandra PC1, por exemplo.

Definimos a memória RAM para a nossa máquina.

IMPORTANTE: Neste tutorial vamos usar 2 VM o que significa que vão ser usados 8GB RAM, não podendo ultrapassar a memoria da maquina host.

Definimos a memória ROM para a nossa máquina.

Escolhemos o tipo de ficheiro que vamos usar para a nossa VM.

Escolher o tipo de alocação de memória no disco físico.

Escolher o diretório (pasta) onde guardar a nossa VM.

E temos a nossa VM criada.

Agora vamos configurar a nossa VM antes de proceder à instalação do Ubuntu, selecionando o ficheiro iso que transferimos, como mostra a imagem seguinte.

Na janela que abre clicamos em add, procuramos o ficheiro iso do Ubuntu e clicamos em choose e depois em ok.

Onde antes estava empty agora esta o nome do ficheiro iso que selecionamos.

Vamos agora ligar a máquina para fazer a instalação do Ubuntu.

Selecionamos o idioma e clicamos em Install Ubuntu.

Depois selecionamos o layout do teclado, para termos a certeza de que selecionamos o correto podemos escrever alguns caracteres especiais, onde diz “type here to test your keyboard”, depois de selecionado o layout correto, podemos clicar em Continue.

Depois deixamos a seleção por default e clicamos em Continue.

Agora também deixamos a seleção por default e clicamos em Install Now.

Depois clicamos em Continue para prosseguir com a instalação.

Agora selecionamos a nossa região e clicamos Continue.

De seguida preenchemos os seguintes campos com o nosso nome, uma password, selecionamos para fazer login automaticamente e por fim clicamos em Continue, como na imagem seguinte.

Agora basta esperar que a instalação termine.

Depois vamos clicar em Restart Now, para reiniciar a nossa maquina.

Em seguida clicamos ENTER.

Clicamos em Dont’Upgrade e depois ok na janela seguinte, para mantermos a versão 18.04.

Antes de começar verifique se a versão do ubuntu em que está a trabalhar é a 18.04, executando o seguinte comando:

lsb_release -a

A implementação é igual para todos os nós, sendo diferente apenas nos ficheiros de configuração do Cassandra de cada um.

Instalação do java 8

1º Passo - Verificar se o java está instalado e se sim, qual a sua versão, executando o seguinte comando:

java -version

2º Passo - Vamos atualizar a lista dos packages.

sudo apt-get update

3º Passo - Instalar o java 8, executando o seguinte comando:

sudo apt install openjdk-8-jdk

Voltamos a executar o comando java -version para verificarmos se a versão do java está correta.

Instalação do Apache Cassandra

Para instalarmos o Apache Cassandra temos que executar os seguintes passos:

1º Passo - Vamos preparar a instalação do Apache Cassandra (27/05/2021), executando os seguintes comandos:

sudo sh -c 'echo "deb http://www.apache.org/dist/cassandra/debian 311x main" > /etc/apt/sources.list.d/cassandra.sources.list'
wget -q -O - https:/www.apache.org/dist/cassandra/KEYS | sudo apt-key add -

2ºPasso - Para o package que foi adicionado ser incluído, executamos o seguinte comando:

sudo apt-get update

Instalação do Apache Cassandra

vamos instalar o Apache Cassandra, executando o seguinte comando:

sudo apt-get install cassandra

Depois de instalar o Apache Cassandra vamos desligar a VM para criarmos o Cassandra PC2.

Clonar a VM

Vamos fazer o clone da VM

Mudamos o nome do clone para Cassandra PC2.

Caso não esteja selecionado, selecionamos o Full clone e clicamos Clone.

Agora aguardamos que o clone seja criado.

As configurações seguintes tem de ser executadas nas duas máquinas, Cassandra PC1 e Cassandra PC2.

Settings>Network>Adapter2, mudar o Attached to para “Host-only Adapter

Cassandra PC1 e Cassandra PC2

Para vermos o IP da nossa VM, executando o seguinte comando:

ip addr | grep 192
Cassandra PC1
Cassandra PC2

Acedemos ao ficheiro cassandra.yaml, executando o seguinte comando:

sudo nano /etc/cassandra/cassandra.yaml
Cassandra PC1 e Cassandra PC2

E vamos alterar os seguintes campos:

seeds:"192.168.56.120,192.168.56.121"
Cassandra PC1 e Cassandra PC2

Agora nas próximas configurações em cada um dos Cassandra PC o IP que vai ser inserido vai ser substituído as letras XX pelo ultimo campo do seu próprio IP

listen_address: 192.168.56.XX
Cassandra PC1
Cassandra PC2
rpc_address: 192.168.56.XX
Cassandra PC1
Cassandra PC2

Acedemos ao ficheiro hosts, executando o seguinte comando:

sudo nano /etc/hosts
Cassandra PC1 e Cassandra PC2

E acrescentamos os IPs e os nomes das nossas máquinas:

192.168.56.120  pc1
192.168.56.121 pc2
Cassandra PC1 e Cassandra PC2

Como o Cassandra PC2 é um clone, os nós vão aparecer idênticos o que vai provocar um erro no processo de união. Para tal não acontecer, vamos executar os seguintes comandos na segunda VM.

sudo rm -rf /var/lib/cassandra/data/*
sudo rm -rf /var/lib/cassandra/commitlog/*

Iniciar a Cassandra

Vamos Iniciar a Cassandra, executando os seguintes comandos:

sudo systemctl restart cassandra
sudo tail -f /var/log/cassandra/system.log

Quando aparecer a seguinte mensagem “INFO [main] …. Startup complete” quer dizer que a cassandra já está pronta a ser usada.

De qualquer forma vamos fazer um teste rápido, para isso abrimos uma nova tab no terminal.

E executamos o seguinte comando:

grep JOINING /var/log/cassandra/system.log

Para ver os nós estão a comunicar, os seus IPs devem aparecer ao executarmos o seguinte comando:

nodetool status

Extra:

Vamos adicionar mais uma maquina ao nosso cluster de modo a mostrarmos a escalabilidade do Apache Cassandra, mas desta vez, vamos usar outra distribuição do Linux (Lubunto 18.04), caso não pretenda fazer este passo e ficar apenas com as duas maquinas salte até ao final do Extra.

Vamos criar a 3ª VM e instalar o Lubuntu 18.04:

Criamos uma nova VM.

Damos-lhe o nome de Cassandra PC3, por exemplo.

Definimos a memória RAM para a nossa máquina.

IMPORTANTE: Vamos ficar com 3 VMs, o que significa que vão ser usados 9GB RAM, não podendo ultrapassar a memoria da maquina host, caso precise de diminuir a RAM usada pelas maquinas já criadas basta (com elas desligadas) Settings > System > Base Memory.

Definimos a memória ROM para a nossa máquina.

Escolhemos o tipo de ficheiro que vamos usar para a nossa VM.

Escolher o tipo de alocação de memória no disco físico.

Escolher o diretório (pasta) onde guardar a nossa VM.

E temos a nossa VM criada.

Agora vamos configurar a nossa VM antes de proceder à instalação do Ubuntu, selecionando o ficheiro iso que transferimos, como mostra a imagem seguinte.

Na janela que abre clicamos em add, procuramos o ficheiro iso do Ubuntu e clicamos em choose e depois em ok.

Onde antes estava empty agora esta o nome do ficheiro iso que selecionamos.

Vamos agora ligar a máquina para fazer a instalação do Ubuntu.

Selecionamos o idioma do instalador e clicamos ENTER.

Clicamos em Install Lubuntu.

Depois selecionamos o idioma, e clicamos em Continue.

Depois selecionamos o layout do teclado, para termos a certeza de que selecionamos o correto podemos escrever alguns caracteres especiais, onde diz “type here to test your keyboard”, depois de selecionado o layout correto, podemos clicar em Continue.

Depois deixamos a seleção por default e clicamos em Continue.

Agora também deixamos a seleção por default e clicamos em Install Now.

Depois clicamos em Continue para prosseguir com a instalação.

Agora selecionamos a nossa região e clicamos Continue.

De seguida preenchemos os seguintes campos com o nosso nome, uma password, selecionamos para fazer login automaticamente e por fim clicamos em Continue, como na imagem seguinte.

Agora basta esperar que a instalação termine.

Depois vamos clicar em Restart Row, para reiniciar a nossa maquina.

Em seguida clicamos ENTER.

Clicamos em Dont’Upgrade e depois ok na janela seguinte, para mantermos a versão 18.04.

Antes de começar verifique se a versão do ubuntu em que está a trabalhar é a 18.04, executando o seguinte comando:

lsb_release -a

A implementação é igual para todos os nós, sendo diferente apenas nos ficheiros de configuração do Cassandra de cada um.

Instalação do java 8

1º Passo - Verificar se o java está instalado e se sim, qual a sua versão, executando o seguinte comando:

java -version

2º Passo - Vamos atualizar a lista dos packages.

sudo apt-get update

3º Passo - Instalar o java 8, executando o seguinte comando:

sudo apt install openjdk-8-jdk

Voltamos a executar o comando java -version para verificarmos se a versão do java está correta.

Instalação do Apache Cassandra

Para instalarmos o Apache Cassandra temos que executar os seguintes passos:

1º Passo - Vamos preparar a instalação do Apache Cassandra (27/05/2021), executando os seguintes comandos:

sudo sh -c 'echo "deb http://www.apache.org/dist/cassandra/debian 311x main" > /etc/apt/sources.list.d/cassandra.sources.list'
wget -q -O - https:/www.apache.org/dist/cassandra/KEYS | sudo apt-key add -

2ºPasso - Para o package que foi adicionado ser incluído, executamos o seguinte comando:

sudo apt-get update

Instalação do Apache Cassandra

vamos instalar o Apache Cassandra, executando o seguinte comando:

sudo apt-get install cassandra

Temos que alterar a configuração da Network na máquina Cassandra PC3

Settings>network>Adapter2, mudar o Attached to para “Host-only Adapter

Para vermos o IP da nossa VM, executando o seguinte comando:

ip addr | grep 192

Acedemos ao ficheiro cassandra.yaml, executando o seguinte comando:

sudo nano /etc/cassandra/cassandra.yaml

E vamos alterar o seguinte campo nas três máquinas:

seeds:"192.168.56.120,192.168.56.121,192.168.56.122"
Cassandra PC3
Cassandra PC1 e Cassandra PC2

Agora nas próximas configurações são apenas no Cassandra PC3.

listen_address: 192.168.56.122
rpc_address: 192.168.56.122

Acedemos ao ficheiro hosts nas três máquinas, executando o seguinte comando:

sudo nano /etc/hosts

E acrescentamos os IPs e os nomes das máquinas que faltarem:

192.168.56.120  pc1
192.168.56.121 pc2
192.168.56.122 pc3
Cassandra PC3
Cassandra PC1 e Cassandra PC2

Iniciar a Cassandra

Vamos Iniciar a Cassandra nas três VMs, por ordem, primeiro o Cassandra PC1, depois Cassandra PC2 e por fim Cassandra PC3, executando os seguintes comandos:

sudo systemctl restart cassandra
sudo tail -f /var/log/cassandra/system.log

Quando aparecer a seguinte mensagem “INFO [main] …. Startup complete” quer dizer que a cassandra já está pronta a ser usada.

De qualquer forma vamos fazer um teste rápido, para isso abrimos uma nova tab no terminal.

E executamos o seguinte comando:

grep -a JOINING /var/log/cassandra/system.log

Para ver os nós estão a comunicar, os seus IPs devem aparecer ao executarmos o seguinte comando:

nodetool status
Cassandra PC3

Se executarmos o mesmo comando no Cassandra PC1, já aparecem as três máquinas.

Cassandra PC1

Fim do Extra

Usar o Cassandra

Agora com o nosso cluster com as três máquinas, vamos entrar na Shell do Apache Cassandra (Cassandra PC2), executando o seguinte comando:

cqlsh <IP de um dos nós>

Vamos usar o IP do Cassandra PC2, no entanto, como no hosts lhe demos o nome de pc2, vamos usar o nome.

Uma vez dentro da Shell, vamos criar uma nova Keyspace, executando o seguinte comando;

CREATE KEYSPACE IF NOT EXISTS <Key_space_name> with replication ={'class':'NetworkTopologyStrategy', 'dc1':2};

Para usarmos o keyspace, basta usar o comando use <Key_space_name> , para sair da Shell basta executar o comando exit .

Agora vamos desligar o Cassandra PC2 onde criamos a Keyspace, para demostrar, que mesmo que esta máquina falhe, continuamos a poder usar esta Keyspace.

Nas outras máquinas, se executarmos o comandocqlsh pc2, conseguimos ver que a conecção com o Cassandra PC2 falha por este estar desligado.

Vamos executar o comando cqlsh pc1 , através do terminal do Cassandra PC3, de modo a mostrarmos que consegue estabelecer a conceção com o nó que está ligado.

Vamos tentar usar uma Keyspace que não existe e logo depois usar a que criamos previamente no Cassandra PC2, para mostrarmos que conseguimos aceder ao Keyspace criado numa máquina do cluster através de outra, mesmo que essa tenha falhado.

Para demonstrar-mos que há Tolerância a falhas vamos desligar o Cassandra PC1 e Cassandra PC2, e vamos mostrar que o Cassandra PC3 continua com acesso ao Keyspace criada na primeira VM.

Para fazer o display da informação da Keyspace que adicionamos no Cassandra PC1, executamos o seguinte comando:

describe <Key_space_name>

Para manipular a base de dados NoSQL, são usados comandos semelhantes aos comandos usados no MySQL, para mais informações sobre estes comandos podemos encontra-la aqui.

--

--

Leandro Gomes

Estudante de Engenharia Informática do Instituto Politécnico da Guarda.