RabbitMQ Cluster Installation

~4 min

For Debian 11 hosts
Define hosts in a file called: hosts

Make an installation sctipt named install.sh with the following content:

#!/bin/shsudo apt update
sudo apt upgrade -y
sudo apt-get install curl gnupg apt-transport-https -y
## Team RabbitMQ\\'s main signing key
curl -1sLf \\"https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA\\" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
## Community mirror of Cloudsmith: modern Erlang repository
curl -1sLf https://ppa1.novemberain.com/gpg.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null
## Community mirror of Cloudsmith: RabbitMQ repository
curl -1sLf https://ppa1.novemberain.com/gpg.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.9F4587F226208342.gpg > /dev/null
## Add apt repositories maintained by Team RabbitMQ
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Provides modern Erlang/OTP releases from a Cloudsmith mirror
##
deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/debian bullseye main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/debian bullseye main
## Provides RabbitMQ from a Cloudsmith mirror
##
deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/debian bullseye main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/debian bullseye main
EOF
## Update package indices
sudo apt-get update -y
## Install Erlang packages
sudo apt-get install -y erlang-base \\\\
erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets \\\\
erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key \\\\
erlang-runtime-tools erlang-snmp erlang-ssl \\\\
erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
Install rabbitmq-server and its dependencies
sudo apt-get install rabbitmq-server -y --fix-missing


Create a deployment script, eg. deploy.sh with the following:


#!/bin/bash
# Script to install rabbitMQ based on the debian 11 distro and done by install.sh script
# which will be copied and run on each host
# hosts file has the list of servers, the first to be the cluster server
# ruser is the ssh user for connecting to the servers
ruser=admin
readarray -t allhosts < hosts
all=${#allhosts[@]}
echo \\"127.0.0.1 localhost\\" > hostsfile
for (( a=0; a<$all; a++ )); do
host=${allhosts[$a]}
echo $host mq-node$a >> hostsfile
done
# Copy the install script on all the servers and run it.
for (( a=0; a<$all; a++ )); do
host=${allhosts[$a]}
echo Installing on host $host
scp hostsfile $ruser@$host:/tmp
scp install.sh $ruser@$host:/tmp
ssh $ruser@$host \\"sudo hostnamectl set-hostname mq-node$a\\"
ssh $ruser@$host \\"cat /tmp/hostsfile|sudo tee /etc/hosts;chmod 755 /tmp/install.sh;/tmp/install.sh\\"
done
# Get the erlang cookie and copy it to all the rest of the servers.
rm -f .erlang.cookie
server=${allhosts[0]}
ssh $ruser@$server \\"sudo cp /var/lib/rabbitmq/.erlang.cookie /tmp/.erlang.cookie; sudo chmod 666 /tmp/.erlang.cookie\\"
scp $ruser@$server:/tmp/.erlang.cookie .
# Get the cluster name to use for joining the rest of the nodes
cluster=$(ssh ${ruser}@${server} \\"sudo rabbitmqctl cluster_status | grep Cluster\\\\ name|awk \\'{print \\\\$3}\\'\\")
# Copy the erlang cookie to the rest of the nodes
# Join the rest of the nodes to the RabbitMQ Cluster
for (( a=1; a<$all; a++ )); do
host=${allhosts[$a]}
echo Doing $a : $host
scp .erlang.cookie $ruser@$host:/tmp
ssh $ruser@$host \\"sudo systemctl stop rabbitmq-server\\"
ssh $ruser@$host \\"sudo cp /tmp/.erlang.cookie /var/lib/rabbitmq/.erlang.cookie\\"
ssh $ruser@$host \\"sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie\\"
ssh $ruser@$host \\"sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie\\"
ssh $ruser@$host \\"sudo systemctl start rabbitmq-server\\"
ssh $ruser@$host \\"sudo rabbitmqctl stop_app\\"
ssh $ruser@$host \\"sudo rabbitmqctl reset\\"
ssh $ruser@$host \\"sudo rabbitmqctl join_cluster $cluster\\"
ssh $ruser@$host \\"sudo rabbitmqctl start_app\\"
done


Edit the ssh user (e.g. admin), make sure you have ssh access to the hosts and run the deploy.sh

Βαθμολογήστε αυτή τη καταχώρηση:

0 (0 Ψήφοι)