Skip to content

Instantly share code, notes, and snippets.

@fernandoaleman
Created February 27, 2018 16:30
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fernandoaleman/05cbf15e0e58f8de7a29a21b24f9debb to your computer and use it in GitHub Desktop.
Save fernandoaleman/05cbf15e0e58f8de7a29a21b24f9debb to your computer and use it in GitHub Desktop.
Create RabbitMQ cluster
#!/bin/bash
set -e
function getHostname()
{
local HOST=''
while test -z "$HOST"
do
read -p "$1 : " HOST
done
echo $HOST;
}
SETUP_MASTER_SCRIPT='
sudo rabbitmqctl stop_app;
sudo rabbitmqctl reset;
sudo rabbitmqctl start_app;
';
# Step 1 : Setup the Master. Get the erlang cookie
echo "Setup RabbitMQ Master";
echo "=====================";
OUT=/tmp/master.out
MASTER_HOSTNAME=$(getHostname "Enter the master server's hostname");
echo "[$MASTER_HOSTNAME] Setting up master";
ssh -t $MASTER_HOSTNAME "bash -c '$SETUP_MASTER_SCRIPT sudo cat /var/lib/rabbitmq/.erlang.cookie;'" | tee $OUT;
COOKIE=$(cat $OUT | tail -n1)
rm $OUT;
echo "Master's Erlang Cookie : '$COOKIE'"
MASTER_IP=$(getHostname "Enter the master server's IP as seen from the slaves (Use a local IP if available)");
# Step 2 : Setup the slaves
SETUP_SLAVE_SCRIPT="
sudo sed -i \"s/^$/$MASTER_IP $MASTER_HOSTNAME\n/\" /etc/hosts
sudo bash -c \"echo -n '$COOKIE' > /var/lib/rabbitmq/.erlang.cookie\";
sudo rabbitmqctl stop_app;
sudo rabbitmqctl reset;
sudo rabbitmqctl join_cluster --ram rabbit@$MASTER_HOSTNAME;
sudo rabbitmqctl start_app;
sudo rabbitmqctl cluster_status;
";
echo "Setup RabbitMQ Slaves";
echo "=====================";
SERVER=$(getHostname "Enter slave's hostname or 'q' to quit");
while test "$SERVER" != "q"
do
echo "Setting up slave";
echo "ssh '$SERVER'";
ssh -t $SERVER "bash -c '$SETUP_SLAVE_SCRIPT'";
SERVER=$(getHostname "Enter another slave's hostname or 'q' to quit");
done
# Step 3 : Create admin user
echo "[$MASTER_HOSTNAME] Setting up admin user";
ssh -t $MASTER_HOSTNAME "bash -c 'sudo rabbitmqctl add_user admin password'";
ssh -t $MASTER_HOSTNAME "bash -c 'sudo rabbitmqctl set_user_tags admin administrator'";
ssh -t $MASTER_HOSTNAME "bash -c 'sudo rabbitmqctl set_permissions -p / admin \".*\" \".*\" \".*\"'";
# Step 3 : Delete guest user
echo "[$MASTER_HOSTNAME] Removing user";
ssh -t $MASTER_HOSTNAME "bash -c 'sudo rabbitmqctl delete_user guest'";
# Step 5 : Create sync policy
echo "[$MASTER_HOSTNAME] Synchronizing cluster";
ssh -t $MASTER_HOSTNAME $"bash -c 'sudo rabbitmqctl set_policy -p / ha-all \"\" '\''{\"ha-mode\":\"all\",\"ha-sync-mode\":\"automatic\"}'\'''";
echo "Done";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment