Created
September 2, 2016 06:01
-
-
Save ixaxaar/c7120ecbd0e9d801465895ac5887575e to your computer and use it in GitHub Desktop.
Multi-DC cassandra installer
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 |
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
Hi ixaxaar,
can u please explain the "containsElement ()" role in above script??