Skip to content

Instantly share code, notes, and snippets.

@ixaxaar
Created September 2, 2016 06:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ixaxaar/c7120ecbd0e9d801465895ac5887575e to your computer and use it in GitHub Desktop.
Save ixaxaar/c7120ecbd0e9d801465895ac5887575e to your computer and use it in GitHub Desktop.
Multi-DC cassandra installer
#!/usr/bin/env bash
# A script to install cassandra
# Deploy a few instances as seed nodes first, this script can run on those seed nodes as well
# Number of seed nodes equal number of data centers
# Add the seed nodes here
SEEDS[0]='172.31.40.98'
SEEDS[1]='172.31.40.99'
SEEDS[2]='172.31.40.100'
containsElement () {
local e
for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done
return 1
}
function join { local IFS="$1"; shift; echo "$*"; }
# Install oracle java first
sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get update
sudo sh -c 'echo oracle-java7-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections'
sudo apt-get install -y oracle-java7-installer oracle-java7-set-default
sudo sh -c "echo 'deb http://www.apache.org/dist/cassandra/debian 21x main
deb-src http://www.apache.org/dist/cassandra/debian 21x main' >> /etc/apt/sources.list"
gpg --keyserver pgp.mit.edu --recv-keys F758CE318D77295D
gpg --export --armor F758CE318D77295D | sudo apt-key add -
gpg --keyserver pgp.mit.edu --recv-keys 2B5C1B00
gpg --export --armor 2B5C1B00 | sudo apt-key add -
gpg --keyserver pgp.mit.edu --recv-keys 0353B12C
gpg --export --armor 0353B12C | sudo apt-key add -
sudo apt-get update
sudo apt-get install -y cassandra
sudo service cassandra stop
sudo rm -rf /var/lib/cassandra/data/system/*
# Extract ip address of eth0
IP_ADDR=`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'`
# common settings
sudo sed -i "s/cluster_name: 'Test Cluster'/cluster_name: 'XaarCluster'/g" /etc/cassandra/cassandra.yaml
sudo sed -i 's/endpoint_snitch: SimpleSnitch/endpoint_snitch: Ec2MultiRegionSnitch/g' /etc/cassandra/cassandra.yaml
ALL_SEEDS=`join , ${SEEDS[@]}`
sudo sed -i 's/- seeds: "127.0.0.1"/- seeds: "'${ALL_SEEDS[@]}'"/g' /etc/cassandra/cassandra.yaml
sudo sed -i 's/- seeds: "127.0.0.1"/- seeds: "'${ALL_SEEDS[@]}'"/g' /etc/cassandra/cassandra.yaml
if [[ ${SEEDS[*]} =~ $IP_ADDR ]]; then
# settings for seed node
sudo sed -i 's/listen_address: localhost/listen_address: '${IP_ADDR}'/g' /etc/cassandra/cassandra.yaml
sudo sed -i 's/rpc_address: localhost/rpc_address: '${IP_ADDR}'/g' /etc/cassandra/cassandra.yaml
sudo sh -c "echo 'auto_bootstrap: false' >> /etc/cassandra/cassandra.yaml "
else
# settings for other nodes
sudo sed -i 's/listen_address: localhost/listen_address: '${IP_ADDR}'/g' /etc/cassandra/cassandra.yaml
sudo sed -i 's/rpc_address: localhost/rpc_address: '${IP_ADDR}'/g' /etc/cassandra/cassandra.yaml
fi
# set row cache size to 2 GB
sudo sed -i 's/row_cache_size_in_mb: 0/row_cache_size_in_mb: 2048/g' /etc/cassandra/cassandra.yaml
sudo sed -i "s/dc=DC1/dc=DC2/g" /etc/cassandra/cassandra-rackdc.properties
sudo sed -i "s/rack=RAC1/rack=RAC2/g" /etc/cassandra/cassandra-rackdc.properties
sudo service cassandra stop
sudo rm -rf /var/lib/cassandra/data/counters_test_*
sudo rm -rf /var/lib/cassandra/data/system/*
sudo rm -rf /var/lib/cassandra/saved_caches/*
sudo rm -rf /var/lib/cassandra/commitlog/Commi*
# sudo rm -rf /var/lib/cassandra/
# sudo apt-get remove --purge -y cassandra
# sudo apt-get install -y cassandra
# sudo mkdir /var/lib/cassandra
# sudo chown cassandra:cassandra /var/lib/cassandra
sudo service cassandra start
@Parul-chourasia
Copy link

Hi ixaxaar,
can u please explain the "containsElement ()" role in above script??

@Parul-chourasia
Copy link

HI @ixaxaar,

Please explain beow line of code:
containsElement () {
local e
for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done
return 1
}

function join { local IFS="$1"; shift; echo "$*"; }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment