Skip to content

Instantly share code, notes, and snippets.

@iotaweb
Last active February 14, 2016 00:59
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save iotaweb/6137662 to your computer and use it in GitHub Desktop.
Save iotaweb/6137662 to your computer and use it in GitHub Desktop.
Script to create a local Riak cluster on Mac OS X.
#!/bin/sh
CWD=$(cd $(dirname $0); pwd)
echo "This script will create a local riak cluster for development purposes only."
echo "Prerequisites: install riak using homebrew (tested with v1.3.1)."
echo "The cluster will be created in the current directory."
echo "Riak admin is enabled with no security.\n"
read -p "Enter a name for your cluster [cluster]: " name
CLUSTER_DIR=${name:-cluster}
read -p "Enter a prefix for each node [node]: " name
NODE_NAME=${name:-node}
read -p "Enter how many nodes you want [3]: " size
CLUSTER_SIZE=${size:-3}
BASE_DIR="${CWD}/${CLUSTER_DIR}"
echo "Creating cluster directory ${BASE_DIR}"
mkdir "${BASE_DIR}"
for node in $(seq 1 $CLUSTER_SIZE)
do
NODE_DIR="$BASE_DIR/${NODE_NAME}${node}"
echo "Creating node ${NODE_NAME}${node}"
cp -r $(brew --prefix riak) $NODE_DIR
echo " Removing data dir"
rm -rf "$NODE_DIR/libexec/data/"
HTTP="809${node}"
echo " Setting 'http' to '${HTTP}'"
perl -p -i.bak -e 's/({http, \[ {"\d+\.\d+\.\d+\.\d+", )(\d+)( } ]})/${1}'${HTTP}'${3}/g' "$NODE_DIR/libexec/etc/app.config"
HANDOFF_PORT="810${node}"
echo " Setting 'handoff_port' to '${HANDOFF_PORT}'"
perl -p -i.bak -e 's/({handoff_port, )(\d+)( })/${1}'${HANDOFF_PORT}'${3}/g' "$NODE_DIR/libexec/etc/app.config"
PB_PORT="808${node}"
echo " Setting 'pb_port' to '${PB_PORT}'"
perl -p -i.bak -e 's/({pb_port, )(\d+)( })/${1}'${PB_PORT}'${3}/g' "$NODE_DIR/libexec/etc/app.config"
if [ ${node} -eq 1 ]
then
echo " Setting 'riak control' admin settings"
echo " Enabling 'riak control' admin"
perl -p -i.bak -e 's/{enabled, false}/{enabled, true}/g' "$NODE_DIR/libexec/etc/app.config"
echo " Disabling authentication for 'riak control' admin"
perl -p -i.bak -e 's/{auth, userlist}/{auth, none}/g' "$NODE_DIR/libexec/etc/app.config"
fi
NAME="${NODE_NAME}${node}"
echo " Setting 'name' to '${NAME}'"
perl -p -i.bak -e 's/(-name )(\S+)(@.*)$/${1}'${NAME}'${3}/g' "$NODE_DIR/libexec/etc/vm.args"
NODE_BIN_DIR="$NODE_DIR/libexec/bin"
echo " Setting 'RUNNER_SCRIPT_DIR' to '${NODE_BIN_DIR}'"
perl -p -i.bak -e "s|RUNNER_SCRIPT_DIR=.*$|RUNNER_SCRIPT_DIR=${NODE_BIN_DIR}|g" "$NODE_DIR/bin/riak" \
"$NODE_DIR/bin/riak-admin" \
"$NODE_DIR/bin/search-cmd" \
"$NODE_DIR/libexec/bin/riak" \
"$NODE_DIR/libexec/bin/riak-admin" \
"$NODE_DIR/libexec/bin/search-cmd"
done
for node in $(seq 1 $CLUSTER_SIZE)
do
echo "Starting node ${NODE_NAME}${node}"
${CLUSTER_DIR}/${NODE_NAME}${node}/bin/riak start
echo " Node ${NODE_NAME}${node} started"
echo " Pinging node ${NODE_NAME}${node}..."
${CLUSTER_DIR}/${NODE_NAME}${node}/bin/riak ping
done
#echo "Building the cluster"
# AUTOMATED JOINING NOT WORKING
# The following commented section will join nodes to cluster,
# but the partitions won't resize for some reason
#for node in $(seq 2 $CLUSTER_SIZE)
# do
# echo " Joining node ${NODE_NAME}${node}"
# ${CLUSTER_DIR}/${NODE_NAME}${node}/bin/riak-admin cluster join ${NODE_NAME}1@127.0.0.1
# done
#echo "Reviewing the staged plan..."
#${CLUSTER_DIR}/${NODE_NAME}1/bin/riak-admin cluster plan
#echo "Committing the staged plan..."
#${CLUSTER_DIR}/${NODE_NAME}1/bin/riak-admin cluster commit
echo "\nYou can further customise '${NODE_NAME}1/libexec/etc/app.config' \n"
echo "Example commands:\n"
echo " ${CLUSTER_DIR}/${NODE_NAME}1/bin/riak start"
echo " ${CLUSTER_DIR}/${NODE_NAME}1/bin/riak ping"
echo " ${CLUSTER_DIR}/${NODE_NAME}1/bin/riak stop \n"
echo "Riak admin control available here: http://127.0.0.1:8091/admin \n"
echo "Manually add the other nodes to your cluster, e.g.: \n"
for node in $(seq 2 $CLUSTER_SIZE)
do
echo " ${NODE_NAME}${node}@127.0.0.1"
done
echo "\nRiak cluster available here: http://127.0.0.1:8091/riak \n"
@iotaweb
Copy link
Author

iotaweb commented Aug 2, 2013

This script is a slight modification of Otto Pöllath's script here to create a local Riak cluster on Mac OS X:

http://ottopoellath.github.io/blog/2012/04/08/running-a-three-node-riak-cluster-using-a-homebrew-installation/

Prerequisites include installing riak using homebrew. I have tested this with v1.3.1 (v1.4.0 is not yet available in homebrew). You may also want to increase your open files limits- instructions here:

http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/#Mac-OS-X

I've added options to name the cluster and node prefixes, as well as the number of nodes. Config is also updated to enable the riak control admin.

When complete the cluster can be managed and found here:

http://127.0.0.1:8091/admin
http://127.0.0.1:8091/riak

Note: you need to manually join the remaining nodes (easily done within riak control).

Enjoy and many thanks to Otto!

@leostera
Copy link

leostera commented Oct 5, 2014

Riak 2.x requires app.config and vm.args to be changed to riak.conf for this script to work.

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