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