RabbitMQ installation on Ubuntu 12.04 LTS
From MyWiki
Contents |
Debian
$ wget http://www.rabbitmq.com/rabbitmq-signing-key-public.asc $ sudo apt-key add rabbitmq-signing-key-public.asc # apt-key add rabbitmq-signing-key-public.asc
Add the line to /etc/apt/sources.list
deb http://www.rabbitmq.com/debian/ testing main
# apt-get update # apt-cache showpkg rabbitmq-server # apt-get install rabbitmq-server
Ubuntu 12.04 LTS
Ref: [1] RabbitMQ and Erlang and Ubuntu (12.04) Oh My!
[2] Installing on Debian / Ubuntu
[3] Clustering Guide
[4] Configuration
[5] LDAP Plugin
Clone VM from Ubuntu template
Rename the server
Edit /etc/iptables.active.rules
*filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [0:0] # # allow loopback -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo+ -j ACCEPT # # allow DNS queries -A INPUT -p tcp -m tcp --sport 53 -j ACCEPT -A INPUT -p udp -m udp --sport 53 -j ACCEPT # # allow RabbitMQ # For a cluster of nodes, they must be open to each other on 35197, 4369 and 5672. # For any servers that want to use the message queue, only 5672 is required. -A INPUT -p tcp -m tcp --dport 5672 --tcp-flags SYN,RST,ACK,ACK SYN -j ACCEPT -A INPUT -p tcp -m tcp -s 10.8.116.42 --dport 25672 --tcp-flags SYN,RST,ACK,ACK SYN -j ACCEPT -A INPUT -p tcp -m tcp -s 10.8.116.43 --dport 25672 --tcp-flags SYN,RST,ACK,ACK SYN -j ACCEPT -A INPUT -p tcp -m tcp -s 10.8.116.42 --dport 4369 --tcp-flags SYN,RST,ACK,ACK SYN -j ACCEPT -A INPUT -p tcp -m tcp -s 10.8.116.43 --dport 4369 --tcp-flags SYN,RST,ACK,ACK SYN -j ACCEPT -A INPUT -p tcp -m tcp --dport 15672 --tcp-flags SYN,RST,ACK,ACK SYN -j ACCEPT # # allow NTP -A INPUT -p udp -m udp --dport 123 -j ACCEPT # # allow SSH in -A INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,RST,ACK,ACK SYN -j ACCEPT # # allow monitoring.production.smartbox.com in -A INPUT -p tcp -m tcp -s 10.10.0.29 --dport 10050 --tcp-flags SYN,RST,ACK,ACK SYN -j ACCEPT -A INPUT -p tcp -m tcp -s 10.10.0.38 --dport 10050 --tcp-flags SYN,RST,ACK,ACK SYN -j ACCEPT -A INPUT -p tcp -m tcp -s 10.10.0.39 --dport 10050 --tcp-flags SYN,RST,ACK,ACK SYN -j ACCEPT # # allow already established coonections -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT # # allow ICMP -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT # # Log everything that's blocked # -A INPUT -j LOG --log-prefix "rejected: " COMMIT
/etc/hosts:
127.0.0.1 localhost # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters
/etc/hostname
mqnode-01
Setup TCP/IP
Add the below line to /etc/apt/sources.list
deb http://packages.erlang-solutions.com/debian precise contrib
Now get the PGP key and do ‘apt-get update’:
wget http://binaries.erlang-solutions.com/debian/erlang_solutions.asc apt-key add erlang_solutions.asc apt-get update
Install Erlang:
apt-get install erlang apt-get install erlang-nox
Get the latest RabbitMQ:
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.3.0/rabbitmq-server_3.3.0-1_all.deb dpkg -i /tmp/rabbitmq-server_3.3.0-1_all.deb service rabbitmq-server stop
Rename the node:
vi /etc/rabbitmq/rabbitmq-env.conf
add:
NODENAME=mq@mqnode-01
Restart RabbitMQ
service rabbitmq-server start root@mqnode-01:~# rabbitmqctl status Status of node 'mq@mqnode-01' ... [{pid,1994}, {running_applications,[{rabbit,"RabbitMQ","3.3.0"}, {mnesia,"MNESIA CXC 138 12","4.11"}, {os_mon,"CPO CXC 138 46","2.2.14"}, {xmerl,"XML parser","1.3.6"}, {sasl,"SASL CXC 138 11","2.3.4"}, {stdlib,"ERTS CXC 138 10","1.19.4"}, {kernel,"ERTS CXC 138 10","2.16.4"}]}, {os,{unix,linux}}, {erlang_version,"Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [async-threads:30] [kernel-poll:true]\n"}, {memory,[{total,34581144}, {connection_procs,2632}, {queue_procs,5264}, {plugins,0}, {other_proc,13301880}, {mnesia,58688}, {mgmt_db,0}, {msg_index,33584}, {other_ets,769384}, {binary,13680}, {code,16367375}, {atom,594537}, {other_system,3434120}]}, {alarms,[]}, {listeners,[{clustering,25672,"::"},{amqp,5672,"::"}]}, {vm_memory_high_watermark,0.4}, {vm_memory_limit,416132300}, {disk_free_limit,50000000}, {disk_free,1316016128}, {file_descriptors,[{total_limit,924}, {total_used,3}, {sockets_limit,829}, {sockets_used,1}]}, {processes,[{limit,1048576},{used,124}]}, {run_queue,0}, {uptime,465}] ...done.
Clustering
Do all the above on the second node (of course, keeping the hostname different).
The end result should produce the below status:
root@mqnode-02:~# rabbitmqctl status Status of node 'mq@mqnode-02' ... [{pid,9709}, {running_applications,[{rabbit,"RabbitMQ","3.3.0"}, {mnesia,"MNESIA CXC 138 12","4.11"}, {os_mon,"CPO CXC 138 46","2.2.14"}, {xmerl,"XML parser","1.3.6"}, {sasl,"SASL CXC 138 11","2.3.4"}, {stdlib,"ERTS CXC 138 10","1.19.4"}, {kernel,"ERTS CXC 138 10","2.16.4"}]}, {os,{unix,linux}}, {erlang_version,"Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [async-threads:30] [kernel-poll:true]\n"}, {memory,[{total,34835080}, {connection_procs,2632}, {queue_procs,5264}, {plugins,0}, {other_proc,13567696}, {mnesia,58688}, {mgmt_db,0}, {msg_index,21576}, {other_ets,766920}, {binary,14928}, {code,16367375}, {atom,594537}, {other_system,3435464}]}, {alarms,[]}, {listeners,[{clustering,25672,"::"},{amqp,5672,"::"}]}, {vm_memory_high_watermark,0.4}, {vm_memory_limit,416132300}, {disk_free_limit,50000000}, {disk_free,1194078208}, {file_descriptors,[{total_limit,924}, {total_used,3}, {sockets_limit,829}, {sockets_used,1}]}, {processes,[{limit,1048576},{used,124}]}, {run_queue,0}, {uptime,11}] ...done.
Make sure that Erlang cookie is the same on both nodes. Copy content of /var/lib/rabbitmq/.erlang.cookie from node #1 to node #2 and test that it works.
root@mqnode-02:~# service rabbitmq-server stop root@mqnode-02:~# vi /var/lib/rabbitmq/.erlang.cookie root@mqnode-02:~# service rabbitmq-server start root@mqnode-01:~# rabbitmqctl -n rabbit@mqnode-02 status Status of node 'rabbit@mqnode-02' ... [{pid,9358}, {running_applications,[{rabbit,"RabbitMQ","3.3.0"}, {os_mon,"CPO CXC 138 46","2.2.14"}, {xmerl,"XML parser","1.3.6"}, {mnesia,"MNESIA CXC 138 12","4.11"}, {sasl,"SASL CXC 138 11","2.3.4"}, {stdlib,"ERTS CXC 138 10","1.19.4"}, {kernel,"ERTS CXC 138 10","2.16.4"}]}, {os,{unix,linux}}, {erlang_version,"Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [async-threads:30] [kernel-poll:true]\n"}, {memory,[{total,34560416}, {connection_procs,2632}, {queue_procs,5264}, {plugins,0}, {other_proc,13303992}, {mnesia,58248}, {mgmt_db,0}, {msg_index,23808}, {other_ets,762920}, {binary,13648}, {code,16361039}, {atom,594537}, {other_system,3434328}]}, {alarms,[]}, {listeners,[{clustering,25672,"::"},{amqp,5672,"::"}]}, {vm_memory_high_watermark,0.4}, {vm_memory_limit,416132300}, {disk_free_limit,50000000}, {disk_free,1194278912}, {file_descriptors,[{total_limit,924}, {total_used,3}, {sockets_limit,829}, {sockets_used,1}]}, {processes,[{limit,1048576},{used,124}]}, {run_queue,0}, {uptime,83}] ...done.
On the second node stop RabbitMQ application:
root@mqnode-02:~# rabbitmqctl stop_app Stopping node 'mq@mqnode-02' ... ...done.
Join cluster with node #1:
root@mqnode-02:~# rabbitmqctl join_cluster mq@mqnode-01 Clustering node 'mq@mqnode-02' with 'mq@mqnode-01' ... ...done. root@mqnode-02:~# rabbitmqctl cluster_status Cluster status of node 'mq@mqnode-02' ... [{nodes,[{disc,['mq@mqnode-01','mq@mqnode-02']}]}] ...done.
Check cluster status from node #1:
root@mqnode-01:~# rabbitmqctl cluster_status Cluster status of node 'mq@mqnode-01' ... [{nodes,[{disc,['mq@mqnode-01','mq@mqnode-02']}]}, {running_nodes,['mq@mqnode-01']}, {cluster_name,<<"mq@mqnode-01.sandbox.local">>}, {partitions,[]}] ...done.
Start RabbitMQ application on node #2 again and check:
root@mqnode-02:~# rabbitmqctl start_app Starting node 'mq@mqnode-02' ... ...done. root@mqnode-02:~# rabbitmqctl cluster_status Cluster status of node 'mq@mqnode-02' ... [{nodes,[{disc,['mq@mqnode-01','mq@mqnode-02']}]}, {running_nodes,['mq@mqnode-01','mq@mqnode-02']}, {cluster_name,<<"mq@mqnode-01.sandbox.local">>}, {partitions,[]}] ...done.
And from node #1 again:
root@mqnode-01:~# rabbitmqctl cluster_status Cluster status of node 'mq@mqnode-01' ... [{nodes,[{disc,['mq@mqnode-01','mq@mqnode-02']}]}, {running_nodes,['mq@mqnode-02','mq@mqnode-01']}, {cluster_name,<<"mq@mqnode-01.sandbox.local">>}, {partitions,[]}] ...done.
Now we have both nodes in the cluster running.
Management
Enable rabbitmq_management plugin:
root@mqnode-01:~# rabbitmq-plugins enable rabbitmq_management The following plugins have been enabled: mochiweb webmachine rabbitmq_web_dispatch amqp_client rabbitmq_management_agent rabbitmq_management Plugin configuration has changed. Restart RabbitMQ for changes to take effect. root@mqnode-01:~# service rabbitmq-server restart root@mqnode-01:~# netstat -anp | grep 15672 tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN 3222/beam
Add the below to /etc/iptables.active.rules (if it hasn’t been added yet)
-A INPUT -p tcp -m tcp --dport 15672 --tcp-flags SYN,RST,ACK,ACK SYN -j ACCEPT
Reload
root@mqnode-01:~# iptables-restore < /etc/iptables.active.rules
Enable the same plugin on node #2 and add the iptables rule. Otherwise, you won’t see node #2 statistics in the WebUI.
Login with default user guest is not working, so we need to create new administrator user:
root@mqnode-01:~# rabbitmqctl list_users Listing users ... guest [administrator] ...done. root@mqnode-01:~# rabbitmqctl add_user alex changepwd Creating user "alex" ... ...done. root@mqnode-01:~# rabbitmqctl set_user_tags alex administrator Setting tags for user "alex" to [administrator] ... ...done.
Checking that it’s the same now on node #2:
root@mqnode-02:~# rabbitmqctl list_users Listing users ... alex [administrator] guest [administrator] ...done.
Now login in to the management WebUI and enjoy the view -> http://mqnode-01.sandbox.local:15672/
Add more space to /var, because that’s where the queues are going to live:
root@mqnode-01:~# lvextend -L+2G /dev/sysvg/varlv root@mqnode-01:~# resize2fs /dev/sysvg/varlv
Do the same on node #2.
To be on the safe side - delete guest user
ADD LOG ROTATION DETAILS AND SET IT UP PROPERLY.
LDAP (Active Directory) authentication
By default, there is no configuration file. You can check it in /var/log/rabbitmq/mq@mqnode-01.log:
=INFO REPORT==== 5-Apr-2014::23:56:26 === Starting RabbitMQ 3.3.0 on Erlang R16B03-1 Copyright (C) 2007-2013 GoPivotal, Inc. Licensed under the MPL. See http://www.rabbitmq.com/ =INFO REPORT==== 5-Apr-2014::23:56:26 === node : mq@mqnode-01 home dir : /var/lib/rabbitmq config file(s) : (none) cookie hash : IPcFWy3U5jdINhKoM34KhA== log : /var/log/rabbitmq/mq@mqnode-01.log sasl log : /var/log/rabbitmq/mq@mqnode-01-sasl.log database dir : /var/lib/rabbitmq/mnesia/mq@mqnode-01