Configure a Cassandra 2.x Cluster on EC2

Cassandra is a kick ass NoSQL Database that guarantees strong consistency.  Inspired by Amazon Dynamo paper Cassandra can deliver high availability and strong consistency.  Battle tested by companies like Apple, eBay, Netflix, Github, Nasa and several others. For this blog post, I will show how to setup a simple Cassandra cluster. This setup is for development purpose and it's not ready for production.


Cassandra 2.x Cluster on AWS EC2

Install java 8

Download and install Java JDK 8
# Remove java 7
sudo yum remove -y java

# Install basic packages
sudo yum install -y git

# Download and install java 8
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u161-b12/2f38c3b165be4555a1fa6e98c45e0808/jdk-8u161-linux-x64.tar.gz"
tar -xzvf jdk-8u161-linux-x64.tar.gz
rm -rf jdk-8u161-linux-x64.tar.gz

# Configure JAVA_HOME
sudo vim ~/.bashrc
ENV Vars $ sudo vim ~/.bashrc
alias cls='clear'

export JAVA_HOME=~/jdk1.8.0_161
export JRE_HOME=~/jdk1.8.0_161/jre
export PATH=$PATH:~/jdk1.8.0_161/bin:/~/jdk1.8.0_161/jre/bin

Cassandra 2.x

wget https://archive.apache.org/dist/cassandra/2.1.19/apache-cassandra-2.1.19-bin.tar.gz
tar -xzvf apache-cassandra-2.1.19-bin.tar.gz
rm -rf apache-cassandra-2.1.19-bin.tar.gz

Configure the Clsuter

# your_server_ip - copy the IP
hostname -i
vim ~/apache-cassandra-2.1.19/conf/cassandra.yaml
cluster_name: 'Test Cluster'
listen_address: your_server_ip
rpc_address: your_server_ip
seed_provider:
  - class_name: org.apache.cassandra.locator.SimpleSeedProvider
    parameters:
         - seeds: "ip1,ip2,...ipN"
endpoint_snitch: GossipingPropertyFileSnitch

Start up the cluster

# on each cass node... 
cd ~/apache-cassandra-2.1.19
bin/cassandra start

Open EC2 Security Group ports

7000
9160
9042

Test data replication with CQLSH

# Connect to any node - you can run: hostname -i to get the IP
apache-cassandra-2.1.19/bin/cqlsh $(hostname -i)
CREATE KEYSPACE CLUSTER_TEST WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 3 }; 
USE CLUSTER_TEST;
CREATE TABLE TEST ( key text PRIMARY KEY, value text);
INSERT INTO TEST (key,value) VALUES ('1', 'works');
SELECT * from TEST;
# Connect to any other node - you can run: hostname -i to get the IP - check for data replication
apache-cassandra-2.1.19/bin/cqlsh IP
USE CLUSTER_TEST;
SELECT * from TEST;
Cheers,
Diego Pacheco

Popular posts from this blog

Having fun with Zig Language

C Unit Testing with Check

Cool Retro Terminal