Ubuntu Linux에서 RabbitMQ를 설치해보자!
1. RabbitMQ 소개
RabbitMQ는 AMQP를 중심으로 동작하는 오픈 소스 메시지 브로커다. Erlang으로 작성되어 있으며, 애플리케이션 사이에서 메시지를 안전하게 전달하기 위한 큐 기반 구조를 제공한다.
Queue의 성격이 강하기 때문에 Kafka처럼 메시지를 장기간 로그로 보관하고 재처리하는 용도보다는, 생산자와 소비자 사이에서 메시지를 라우팅하고 전달하는 데 초점이 맞춰져 있다. 이 점이 메시지를 로그 형태로 저장하고 스트리밍 처리에 많이 사용하는 Kafka와의 큰 차이점이라고 할 수 있다.
RabbitMQ는 기본적으로 AMQP를 지원하며, 플러그인을 통해 MQTT, STOMP, WebSocket 기반 통신이나 HTTP 기반 관리 기능도 사용할 수 있다. 반면 Kafka는 자체 프로토콜을 사용하는 분산 이벤트 스트리밍 플랫폼에 가깝기 때문에, 단순 큐잉이 필요한지 이벤트 로그 기반 처리가 필요한지에 따라 선택 기준이 달라진다.
2. 사전 확인
먼저 현재 시스템에 rabbitmq-server 패키지가 설치되어 있는지 확인한다.
$ apt list --installed rabbitmq-server Listing... Done
위처럼 패키지명이 출력되지 않으면 아직 설치되지 않은 상태로 볼 수 있다. 설치 전에 패키지 목록을 최신화하려면 다음 명령을 먼저 실행해도 된다.
$ sudo apt update
3. apt를 통한 설치
Ubuntu 기본 패키지 저장소를 사용해 RabbitMQ를 설치한다. RabbitMQ는 Erlang 위에서 동작하므로 설치 과정에서 Erlang 관련 패키지가 함께 설치된다.
$ sudo apt install rabbitmq-server Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: erlang-asn1 erlang-base erlang-corba erlang-crypto erlang-diameter erlang-edoc erlang-eldap erlang-erl-docgen erlang-eunit erlang-ic erlang-inets erlang-mnesia erlang-nox erlang-odbc erlang-os-mon erlang-parsetools erlang-public-key erlang-runtime-tools erlang-snmp erlang-ssh erlang-ssl erlang-syntax-tools erlang-tools erlang-xmerl libltdl7 libodbc1 libpython-stdlib libpython2.7-minimal libpython2.7-stdlib libsctp1 python python-minimal python2.7 python2.7-minimal Suggested packages: erlang erlang-manpages erlang-doc xsltproc fop erlang-ic-java libmyodbc odbc-postgresql tdsodbc unixodbc-bin lksctp-tools python-doc python-tk python2.7-doc binutils binfmt-support The following NEW packages will be installed: erlang-asn1 erlang-base erlang-corba erlang-crypto erlang-diameter erlang-edoc erlang-eldap erlang-erl-docgen erlang-eunit erlang-ic erlang-inets erlang-mnesia erlang-nox erlang-odbc erlang-os-mon erlang-parsetools erlang-public-key erlang-runtime-tools erlang-snmp erlang-ssh erlang-ssl erlang-syntax-tools erlang-tools erlang-xmerl libltdl7 libodbc1 libpython-stdlib libpython2.7-minimal libpython2.7-stdlib libsctp1 python python-minimal python2.7 python2.7-minimal rabbitmq-server 0 upgraded, 35 newly installed, 0 to remove and 14 not upgraded. Need to get 28.5 MB of archives. After this operation, 57.7 MB of additional disk space will be used. Do you want to continue? [Y/n] y Get:1 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libpython2.7-minimal amd64 2.7.15-4ubuntu4~18.04 [335 kB] Get:2 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 python2.7-minimal amd64 2.7.15-4ubuntu4~18.04 [1,295 kB] Get:3 http://archive.ubuntu.com/ubuntu bionic/main amd64 python-minimal amd64 2.7.15~rc1-1 [28.1 kB] Get:4 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 libpython2.7-stdlib amd64 2.7.15-4ubuntu4~18.04 [1,915 kB] Get:5 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 python2.7 amd64 2.7.15-4ubuntu4~18.04 [239 kB] Get:6 http://archive.ubuntu.com/ubuntu bionic/main amd64 libpython-stdlib amd64 2.7.15~rc1-1 [7,620 B] Get:7 http://archive.ubuntu.com/ubuntu bionic/main amd64 python amd64 2.7.15~rc1-1 [140 kB] Get:8 http://archive.ubuntu.com/ubuntu bionic/main amd64 erlang-base amd64 1:20.2.2+dfsg-1ubuntu2 [7,323 kB] Get:9 http://archive.ubuntu.com/ubuntu bionic/main amd64 erlang-asn1 amd64 1:20.2.2+dfsg-1ubuntu2 [724 kB] Get:10 http://archive.ubuntu.com/ubuntu bionic/main amd64 erlang-mnesia amd64 1:20.2.2+dfsg-1ubuntu2 [724 kB] Get:11 http://archive.ubuntu.com/ubuntu bionic/main amd64 erlang-runtime-tools amd64 1:20.2.2+dfsg-1ubuntu2 [178 kB] Get:12 http://archive.ubuntu.com/ubuntu bionic/main amd64 erlang-crypto amd64 1:20.2.2+dfsg-1ubuntu2 [104 kB] Get:13 http://archive.ubuntu.com/ubuntu bionic/main amd64 erlang-public-key amd64 1:20.2.2+dfsg-1ubuntu2 [561 kB]
Adding group `rabbitmq' (GID 114) ... Done. Adding system user `rabbitmq' (UID 112) ... Adding new user `rabbitmq' (UID 112) with group `rabbitmq' ... Not creating home directory `/var/lib/rabbitmq'. Created symlink /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service → /lib/systemd/system/rabbitmq-server.service. Processing triggers for libc-bin (2.27-3ubuntu1) ... Processing triggers for ureadahead (0.100.0-21) ... Processing triggers for systemd (237-3ubuntu10.24) ...
4. 설치 확인
설치가 끝나면 RabbitMQ 서비스가 실행 중인지 확인한다. Ubuntu에서는 service 명령을 사용해도 되고, systemd 환경에서는 systemctl status rabbitmq-server로 확인해도 된다.
$ service rabbitmq-server status
● rabbitmq-server.service - RabbitMQ Messaging Server
Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2019-08-27 23:49:07 UTC; 6min ago
Main PID: 3459 (rabbitmq-server)
Tasks: 86 (limit: 4661)
CGroup: /system.slice/rabbitmq-server.service
├─3459 /bin/sh /usr/sbin/rabbitmq-server
├─3472 /bin/sh /usr/lib/rabbitmq/bin/rabbitmq-server
├─3634 /usr/lib/erlang/erts-9.2/bin/epmd -daemon
├─3734 /usr/lib/erlang/erts-9.2/bin/beam.smp -W w -A 64 -P 1048576 -t 5000000 -stbt db -zdbbl 32000 -K true -B i -- -root /usr/lib/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa /usr/lib/r
├─3855 erl_child_setup 65536
├─3915 inet_gethost 4
└─3916 inet_gethost 4
Aug 27 23:49:00 buntu103 systemd[1]: Starting RabbitMQ Messaging Server...
Aug 27 23:49:03 buntu103 rabbitmq[3460]: Waiting for rabbit@buntu103
Aug 27 23:49:03 buntu103 rabbitmq[3460]: pid is 3472
Aug 27 23:49:07 buntu103 systemd[1]: Started RabbitMQ Messaging Server.
Active: active (running)으로 표시되면 정상적으로 실행 중인 상태다.
5. 관리 기능 활성화
웹 기반 관리 화면을 사용하려면 rabbitmq_management 플러그인을 활성화한다.
$ sudo rabbitmq-plugins enable rabbitmq_management The following plugins have been enabled: amqp_client cowlib cowboy rabbitmq_web_dispatch rabbitmq_management_agent rabbitmq_management Applying plugin configuration to rabbit@jinsbuntu... started 6 plugins.
관리 기능을 추가하면 기본적으로 15672 포트가 열린다. 브라우저에서는 http://서버IP:15672 형태로 접속할 수 있다.
$ netstat -an | grep 15672 tcp 0 0 0.0.0.0:15672 0.0.0.0:* LISTEN
기본 guest 계정은 보안 정책상 일반적으로 로컬호스트 접속에만 사용할 수 있다. 원격에서 관리 화면에 접속해야 한다면 별도의 사용자를 생성하고 권한을 부여한 뒤 사용하는 것이 좋다.
$ sudo rabbitmqctl add_user 사용자명 비밀번호 $ sudo rabbitmqctl set_user_tags 사용자명 administrator $ sudo rabbitmqctl set_permissions -p / 사용자명 ".*" ".*" ".*"