Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save tkt028/f810fa4efe459894c7bb4d38eadb05c8 to your computer and use it in GitHub Desktop.

Select an option

Save tkt028/f810fa4efe459894c7bb4d38eadb05c8 to your computer and use it in GitHub Desktop.

Revisions

  1. @fernandoaleman fernandoaleman revised this gist Sep 16, 2020. 1 changed file with 28 additions and 5 deletions.
    33 changes: 28 additions & 5 deletions install-rabbitmq-centos-7.md
    Original file line number Diff line number Diff line change
    @@ -55,6 +55,29 @@ Automatically start RabbitMQ at boot time
    sudo systemctl enable rabbitmq-server
    ```

    ## RabbitMQ Config (Optional)

    Create rabbitmq conf file at `/etc/rabbitmq/rabbitmq.conf`

    ```
    listeners.ssl.default = 5671
    ssl_options.cacertfile = /path/to/cacertfile.pem
    ssl_options.certfile = /path/to/certfile.pem
    ssl_options.keyfile = /path/to/keyfile.pem
    ssl_options.verify = verify_peer
    ssl_options.versions.1 = tlsv1.2
    ssl_options.versions.2 = tlsv1.1
    ssl_options.fail_if_no_peer_cert = false
    tcp_listen_options.backlog = 128
    tcp_listen_options.nodelay = true
    tcp_listen_options.exit_on_close = false
    tcp_listen_options.keepalive = false
    heartbeat = 580
    ```

    ## Firewall

    If you have a firewall installed and running
    @@ -121,17 +144,17 @@ To access the RabbitMQ admin
    http://Your_Server_IP:15672
    ```

    ## RabbitMQ SSL
    ## RabbitMQ Web Management SSL (Recommended)

    Create rabbitmq conf file at `/etc/rabbitmq/rabbitmq.conf`
    Create or update rabbitmq conf file at `/etc/rabbitmq/rabbitmq.conf`

    ```
    management.listener.port = 15672
    management.listener.ssl = true
    management.listener.ssl_opts.cacertfile = /path/to/your/ca_certificate.pem
    management.listener.ssl_opts.certfile = /path/to/your/certificate.pem
    management.listener.ssl_opts.keyfile = /path/to/your/key.pem
    management.listener.ssl_opts.cacertfile = /path/to/cacertfile.pem
    management.listener.ssl_opts.certfile = /path/to/certfile.pem
    management.listener.ssl_opts.keyfile = /path/to/keyfile.pem
    ```

    ## RabbitMQ Cluster
  2. @fernandoaleman fernandoaleman revised this gist Sep 16, 2020. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions install-rabbitmq-centos-7.md
    Original file line number Diff line number Diff line change
    @@ -28,7 +28,7 @@ sudo yum -y install erlang socat logrotate
    Download RabbitMQ package

    ```
    wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.9/rabbitmq-server-3.7.9-1.el7.noarch.rpm
    wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.8/rabbitmq-server-3.8.8-1.el6.noarch.rpm
    ```

    Add signing key
    @@ -40,7 +40,7 @@ sudo rpm --import https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
    Install rabbitmq-server

    ```
    sudo rpm -Uvh rabbitmq-server-3.7.9-1.el7.noarch.rpm
    sudo rpm -Uvh rabbitmq-server-3.8.8-1.el6.noarch.rpm
    ```

    Start RabbitMQ
  3. @fernandoaleman fernandoaleman revised this gist Dec 14, 2018. 1 changed file with 41 additions and 35 deletions.
    76 changes: 41 additions & 35 deletions install-rabbitmq-centos-7.md
    Original file line number Diff line number Diff line change
    @@ -1,112 +1,118 @@
    # Install RabbitMQ on CentOS 7

    ```
    yum -y install epel-release
    yum -y update
    sudo yum -y install epel-release
    sudo yum -y update
    ```
    ## Install Erlang

    Create erlang yum repo file at `/etc/yum.repos.d/rabbitmq-erlang.repo`
    Download repository

    ```
    [rabbitmq-erlang]
    name=rabbitmq-erlang
    baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7
    gpgcheck=1
    gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
    repo_gpgcheck=0
    enabled=1
    wget http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
    ```

    Add repository

    ```
    sudo rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
    ```

    Install erlang and dependencies
    ```
    yum -y install erlang socat logrotate
    sudo yum -y install erlang socat logrotate
    ```

    ## Install RabbitMQ

    Create rabbitmq yum repo file at `/etc/yum.repos.d/rabbitmq.repo`
    Download RabbitMQ package

    ```
    wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.9/rabbitmq-server-3.7.9-1.el7.noarch.rpm
    ```

    Add signing key

    ```
    [bintray-rabbitmq-server]
    name=bintray-rabbitmq-rpm
    baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.7.x/el/7/
    gpgcheck=1
    gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
    repo_gpgcheck=0
    enabled=1
    sudo rpm --import https://www.rabbitmq.com/rabbitmq-signing-key-public.asc
    ```

    Install rabbitmq-server

    ```
    yum -y install rabbitmq-server
    sudo rpm -Uvh rabbitmq-server-3.7.9-1.el7.noarch.rpm
    ```

    Start RabbitMQ

    ```
    systemctl start rabbitmq-server
    sudo systemctl start rabbitmq-server
    ```

    Automatically start RabbitMQ at boot time

    ```
    systemctl enable rabbitmq-server
    sudo systemctl enable rabbitmq-server
    ```

    ## Firewall

    If you have a firewall installed and running

    ```
    firewall-cmd --zone=public --permanent --add-port=4369/tcp
    firewall-cmd --zone=public --permanent --add-port=25672/tcp
    firewall-cmd --zone=public --permanent --add-port=5671-5672/tcp
    firewall-cmd --zone=public --permanent --add-port=15672/tcp
    firewall-cmd --zone=public --permanent --add-port=61613-61614/tcp
    firewall-cmd --zone=public --permanent --add-port=1883/tcp
    firewall-cmd --zone=public --permanent --add-port=8883/tcp
    sudo firewall-cmd --zone=public --permanent --add-port=4369/tcp
    sudo firewall-cmd --zone=public --permanent --add-port=25672/tcp
    sudo firewall-cmd --zone=public --permanent --add-port=5671-5672/tcp
    sudo firewall-cmd --zone=public --permanent --add-port=15672/tcp
    sudo firewall-cmd --zone=public --permanent --add-port=61613-61614/tcp
    sudo firewall-cmd --zone=public --permanent --add-port=1883/tcp
    sudo firewall-cmd --zone=public --permanent --add-port=8883/tcp
    ```

    Reload the firewall

    ```
    firewall-cmd --reload
    sudo firewall-cmd --reload
    ```

    ## SELinux

    If you have SELinux enabled

    ```
    setsebool -P nis_enabled 1
    sudo setsebool -P nis_enabled 1
    ```

    ## RabbitMQ Web Management Console

    Enable RabbitMQ web management console

    ```
    rabbitmq-plugins enable rabbitmq_management
    sudo rabbitmq-plugins enable rabbitmq_management
    ```

    Modify file permissions

    ```
    sudo chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/
    ```

    Create an admin user (Change `password` to a strong password)

    ```
    rabbitmqctl add_user admin password
    sudo rabbitmqctl add_user admin password
    ```

    Make admin user and administrator

    ```
    rabbitmqctl set_user_tags admin administrator
    sudo rabbitmqctl set_user_tags admin administrator
    ```

    Set admin user permissions

    ```
    rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
    sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
    ```

    To access the RabbitMQ admin
  4. @fernandoaleman fernandoaleman revised this gist Nov 14, 2018. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion rabbitmq-cluster.sh
    Original file line number Diff line number Diff line change
    @@ -27,7 +27,7 @@ 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;
    ssh -t $MASTER_HOSTNAME "bash -c '$SETUP_MASTER_SCRIPT cat /var/lib/rabbitmq/.erlang.cookie;'" | tee $OUT;
    COOKIE=$(cat $OUT | tail -n1)
    rm $OUT;
    echo "Master's Erlang Cookie : '$COOKIE'"
  5. @fernandoaleman fernandoaleman created this gist Nov 14, 2018.
    133 changes: 133 additions & 0 deletions install-rabbitmq-centos-7.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,133 @@
    # Install RabbitMQ on CentOS 7

    ```
    yum -y install epel-release
    yum -y update
    ```
    ## Install Erlang

    Create erlang yum repo file at `/etc/yum.repos.d/rabbitmq-erlang.repo`

    ```
    [rabbitmq-erlang]
    name=rabbitmq-erlang
    baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7
    gpgcheck=1
    gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
    repo_gpgcheck=0
    enabled=1
    ```

    Install erlang and dependencies
    ```
    yum -y install erlang socat logrotate
    ```

    ## Install RabbitMQ

    Create rabbitmq yum repo file at `/etc/yum.repos.d/rabbitmq.repo`

    ```
    [bintray-rabbitmq-server]
    name=bintray-rabbitmq-rpm
    baseurl=https://dl.bintray.com/rabbitmq/rpm/rabbitmq-server/v3.7.x/el/7/
    gpgcheck=1
    gpgkey=https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
    repo_gpgcheck=0
    enabled=1
    ```

    Install rabbitmq-server

    ```
    yum -y install rabbitmq-server
    ```

    Start RabbitMQ

    ```
    systemctl start rabbitmq-server
    ```

    Automatically start RabbitMQ at boot time

    ```
    systemctl enable rabbitmq-server
    ```

    ## Firewall

    If you have a firewall installed and running

    ```
    firewall-cmd --zone=public --permanent --add-port=4369/tcp
    firewall-cmd --zone=public --permanent --add-port=25672/tcp
    firewall-cmd --zone=public --permanent --add-port=5671-5672/tcp
    firewall-cmd --zone=public --permanent --add-port=15672/tcp
    firewall-cmd --zone=public --permanent --add-port=61613-61614/tcp
    firewall-cmd --zone=public --permanent --add-port=1883/tcp
    firewall-cmd --zone=public --permanent --add-port=8883/tcp
    ```

    Reload the firewall

    ```
    firewall-cmd --reload
    ```

    ## SELinux

    If you have SELinux enabled

    ```
    setsebool -P nis_enabled 1
    ```

    ## RabbitMQ Web Management Console

    Enable RabbitMQ web management console

    ```
    rabbitmq-plugins enable rabbitmq_management
    ```

    Create an admin user (Change `password` to a strong password)

    ```
    rabbitmqctl add_user admin password
    ```

    Make admin user and administrator

    ```
    rabbitmqctl set_user_tags admin administrator
    ```

    Set admin user permissions

    ```
    rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
    ```

    To access the RabbitMQ admin

    ```
    http://Your_Server_IP:15672
    ```

    ## RabbitMQ SSL

    Create rabbitmq conf file at `/etc/rabbitmq/rabbitmq.conf`

    ```
    management.listener.port = 15672
    management.listener.ssl = true
    management.listener.ssl_opts.cacertfile = /path/to/your/ca_certificate.pem
    management.listener.ssl_opts.certfile = /path/to/your/certificate.pem
    management.listener.ssl_opts.keyfile = /path/to/your/key.pem
    ```

    ## RabbitMQ Cluster

    Setup multiple RabbitMQ servers, copy script below to `/usr/local/sbin/rabbitmq-cluster.sh` and run the script
    76 changes: 76 additions & 0 deletions rabbitmq-cluster.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,76 @@
    #!/bin/bash
    set -e

    function getHostname()
    {
    local HOST=''

    while test -z "$HOST"
    do
    read -p "$1 : " HOST
    done

    echo $HOST;
    }

    SETUP_MASTER_SCRIPT='
    rabbitmqctl stop_app;
    rabbitmqctl reset;
    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="
    sed -i \"s/^$/$MASTER_IP $MASTER_HOSTNAME\n/\" /etc/hosts
    bash -c \"echo -n '$COOKIE' > /var/lib/rabbitmq/.erlang.cookie\";
    rabbitmqctl stop_app;
    rabbitmqctl reset;
    rabbitmqctl join_cluster --ram rabbit@$MASTER_HOSTNAME;
    rabbitmqctl start_app;
    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 'rabbitmqctl add_user admin password'";
    ssh -t $MASTER_HOSTNAME "bash -c 'rabbitmqctl set_user_tags admin administrator'";
    ssh -t $MASTER_HOSTNAME "bash -c 'rabbitmqctl set_permissions -p / admin \".*\" \".*\" \".*\"'";

    # Step 3 : Delete guest user
    echo "[$MASTER_HOSTNAME] Removing user";
    ssh -t $MASTER_HOSTNAME "bash -c 'rabbitmqctl delete_user guest'";

    # Step 5 : Create sync policy
    echo "[$MASTER_HOSTNAME] Synchronizing cluster";
    ssh -t $MASTER_HOSTNAME $"bash -c 'rabbitmqctl set_policy -p / ha-all \"\" '\''{\"ha-mode\":\"all\",\"ha-sync-mode\":\"automatic\"}'\'''";

    echo "Done";