Apache Cassandra Multi-Node NoSQL Cluster no Ubuntu 18.04 e Lubuntu 18.04
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:
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”
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 os seguintes campos:
seeds:"192.168.56.120,192.168.56.121"
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
rpc_address: 192.168.56.XX
Acedemos ao ficheiro hosts, executando o seguinte comando:
sudo nano /etc/hosts
E acrescentamos os IPs e os nomes das nossas máquinas:
192.168.56.120 pc1
192.168.56.121 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"
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
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
Se executarmos o mesmo comando no Cassandra PC1, já aparecem as três máquinas.
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.