Dari Wikipedia, penjelasan mengenai cassandra

Apache Cassandra is a free and open-source, distributed, wide-column store, NoSQL database management system designed to handle large amounts of data across many commodity servers, providing high availability with no single point of failure.

Kebutuhan system (minimal requirement):
2 Core
8 GB RAM
20 GB
Ubuntu 20.04

Server yang saya gunakan memiliki private IP sebagai berikut

node1 : 10.4.10.230
node2 : 10.4.10.111
node3 : 10.4.10.98

kita bisa saja menggunakan public IP, bila anda menggunakan public IP pastikan hanya mengijinkan koneksi antar ketiga cluster ini, diluar akses untuk client.

Kalo digunakan di server production, cluster Cassandra sebaiknya minimal 3 server agar service Cassandra tersedia dalam mode High Availability, bila ada satu server yang down bisa digantikan oleh server lainnya. Tapi hal ini perlu ditelurusi lebih jauh sesuai dengan kebutuhan masing-masing.

Update dan Upgrade System

Setelah menginstall Ubuntu, sangat disarankan untuk menginstall versi terbaru dari system.

sudo apt update && sudo apt upgrade -y

bila ada update kernel baru, sebaiknya system direstart sebelum memulai instalasi.

Install Dependency

Setiap sistem di istall dengan cara yang berbeda, untuk itu kita akan menginstall dependency, agar tutorial ini tetap bisa dijalankan dengan lancar

sudo apt install curl gnupg -y

Install Java

Cassandra dibuat dengan Java, untuk itu kita perlu menginstall Java di server. Jalankan perintah ini di ketiga server cassandra
Java 8 tersedia di repository Ubuntu, jadi bisa langsung di install dengan apt

sudo apt install openjdk-8-jdk -y

Install Cassandra 4.x

Saat ini Cassandra versi stabil adalah 4.0.1, versi ini yang akan di install di cluster kita. Di ketiga server jalankan

echo "deb https://downloads.apache.org/cassandra/debian 40x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
curl https://downloads.apache.org/cassandra/KEYS | sudo apt-key add -
sudo apt update
sudo apt install cassandra -y

tambah repository cassandra ubuntu 20.04

Konfigurasi Cassandra

Pertama stop service cassandra yang lagi berjalan, lalu hapus semua data yang sudah diload, karena cassandra service otomatis dijalankan setelah di install dan kita akan merubah nama cluster maka perlu proses ini

sudo systemctl stop cassandra
sudo rm -rf /var/lib/cassandra/*

ubah config cassandra di file /etc/cassandra/cassandra.yaml, pada masing-masing server.
Bagian cluster_name dan broadcast_rpc_address sesuaikan dengan masing-masing IP Server, sedangkan seeds adalah IP dari ketiga server yang dijadikan cluster cassandra.
Server Cassandra 1

cluster_name: "cassandra-dev-01"
listen_address: 10.4.10.230
seeds: "10.4.10.230:7000,10.4.10.111:7000,10.4.10.98:7000"
rpc_address: 0.0.0.0
broadcast_rpc_address: 10.4.10.230
authenticator: PasswordAuthenticator

Server Cassandra 2

cluster_name: "cassandra-dev-01"
listen_address: 10.4.10.111
seeds: "10.4.10.230:7000,10.4.10.111:7000,10.4.10.98:7000"
rpc_address: 0.0.0.0
broadcast_rpc_address: 10.4.10.111
authenticator: PasswordAuthenticator

Server Cassandra 3

cluster_name: "cassandra-dev-01"
listen_address: 10.4.10.98
seeds: "10.4.10.230:7000,10.4.10.111:7000,10.4.10.98:7000"
rpc_address: 0.0.0.0
broadcast_rpc_address: 10.4.10.98
authenticator: PasswordAuthenticator

setelah merubah konfigurasi tersebut, restart cassandra

sudo systemctl start cassandra

dari salah satu server/node, jalankan nodetool untuk melihat status cluster cassandra

nodetool status
# contoh output
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address      Load        Tokens  Owns (effective)  Host ID                               Rack 
UN  10.4.10.98   69.05 KiB   16      76.0%             cfb5c6bd-1a79-4deb-8e4a-d581300bbe9c  rack1
UN  10.4.10.111  69.05 KiB   16      59.3%             d40c20fc-c263-4375-9140-5cc0c871d050  rack1
UN  10.4.10.230  128.05 KiB  16      64.7%             f8eb0e9e-a4f6-46dc-88d5-170a8ef057ed  rack1

cluster cassandra terhubung

dari informasi diatas, dapat kita pastikan ketiga node berjalan dengan normal, yang ditandai pada bagian UN yang berarti (UP and Normal).

Setting Password

Untuk mengamankan cassandra, kita akan mendisable default user cassandra dan membuat superuser baru. Default credential cassandra

username : cassandra
password : cassandra

Dari server 1/node 1. Pastikan hanya menjalankan perintah ini dari salah satu server, karena proses ini akan otomatis disinkronisasi ke server lain dalam cluster. Login sebagai superuser cassandra

cqlsh -u cassandra -p cassandra localhost

setelah login, buat superuser baru

CREATE ROLE jaranguda WITH PASSWORD = '7odMyFC9TVFswwJ9gYMe' AND SUPERUSER = true AND LOGIN = true;
quit

pada contoh diatas user jaranguda password 7odMyFC9TVFswwJ9gYMe. Setelah membuat user jaranguda, login dengan user tersebut

cqlsh -u jaranguda -p 7odMyFC9TVFswwJ9gYMe localhost

sekarang ubah password default cassandra, dan hapus aksesnya

ALTER ROLE cassandra WITH PASSWORD = 'Ev7aYmR4igwKj9hNUvqc' AND SUPERUSER = false AND LOGIN = false;

Konek ke Cluster Cassandra

Install cqlsh dengan bantuan Python PIP

pip install cqlsh

Connect ke cassandra cluster dengan

cqlsh IP-SERVER -u user -p password

sesuaikan user dan password yang sudah dibuat sebelumnya.
cassandra connect with protection

Setelah konek ke cluster, kita akan mencoba menambahkan data, dan melakukan query sederhana

Buat keyspace baru, dengan nama ecommerce

CREATE KEYSPACE ecommerce WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 3};

Pindah ke keyspace yang baru dibuat

USE ecommerce;

Buat table untuk menyimpan informasi user

CREATE TABLE users (
  user_id text PRIMARY KEY,
  first_name text,
  last_name text,
  last_login text,
  ip_address text,
  email_address text
);

Insert data contoh

INSERT INTO users (user_id, first_name, last_name, last_login, ip_address, email_address)
    VALUES('user_dev', 'Jaranguda', 'Com', '1636859603', '127.0.0.1', 'notspam@jaranguda.com');

Query data yang baru dimasukkan

SELECT * from users

test buat table cassandra

Leave a comment

Your email address will not be published. Required fields are marked *