Rabbitmq Docker install

2019. 11. 1. 10:51Open source tools

RabbitMQ는 오픈 소스 메시지 브로커 소프트웨어(메시지 지향 미들웨어)로서, AMQP를 구현하였으며 그 이후로 STOMP ,MQTT 등의 프로토콜을 지원하기 위해 플러그인 구조와 함께 확장되고 있다.

메시지를 생산하는 생산자(Producer)가 메시지를 큐에 저장해 두면, 메시지를 수신하는 소비자(Consumer)가 메시지를 가져와 처리하는 Publish/Subscribe 방식의 메시지 전달 브로커이다.

 

현재 Rabbitmq는 3.8.1 버전이 Release 된 상태이다.

 

Docker image download

docker pull rabbitmq:3.8..0

 

Running the daemon

docker run -d --hostname my-rabbit --name some-rabbit rabbitmq:3.8.0

* RabbitMQ에 대해주의해야 할 중요한 사항 중 하나는 "노드 이름"이라고하는 것을 기반으로 데이터를 저장한다는 것입니다. 기본값은 호스트 이름입니다. Docker 환경에서 이것이 의미하는 것은 임의의 호스트 이름을 얻지 않고 데이터를 추적 할 수 있도록 각 데몬에 대해 명시 적으로 -h /-hostname을 지정해야한다는 것입니다.

 

이렇게하면 RabbitMQ 컨테이너가 기본 포트 5672에서 수신 대기합니다. 1 분 후에 도커 로그를 래빗으로 실행하면 출력에 다음과 유사한 블록이 표시됩니다.

===  Starting broker...2019-11-01 01:40:19.272 [info] <0.260.0>
node             : rabbit@my-rabbit
home dir        : /var/lib/rabbitmq
config file(s)    : /etc/rabbitmq/rabbitmq.config
cookie hash    : UoNOcDhfxW9uoZ92wh6BjA== FZUwmRWVmeTt1q5IyJpzZQ==
log(s)             : <stdout>
database dir    : /var/lib/rabbitmq/mnesia/rabbit@my-rabbit

데이터베이스 디렉토리, 특히 파일 저장소 끝에 내 "Node Name"이 추가되어 있습니다. 이 이미지는 기본적으로 모든  /var/lib/rabbitmq를 볼륨으로 만듭니다.

 

로그가 위와 같이 표시되면 정상적으로 구동된 것입니다.

 


메모리 제한

RabbitMQ에는 메모리 사용을 명시 적으로 추적하고 관리하는 기능이 포함되어 있으므로 cgroup이 부과한 한계를 인식해야합니다.

 

이에 대한 업스트림 구성 설정은 vm_memory_high_watermark이며 설명서의 "메모리 경보"에 설명되어 있습니다.

 

이 이미지에서이 값은 RABBITMQ_VM_MEMORY_HIGH_WATERMARK를 통해 설정됩니다. 이 환경 변수의 값은 다음과 같이 해석됩니다.

  • 0.49는 업스트림과 마찬가지로 49 %로 처리됩니다 ({vm_memory_high_watermark, 0.49})
  • 56 %는 56 %로 처리됩니다 (0.56; {vm_memory_high_watermark, 0.56})
  • 1073741824는 절대 바이트 수로 취급됩니다 ({vm_memory_high_watermark, {absolute, 1073741824}})
  • 1024MiB는 단위 ({vm_memory_high_watermark, {absolute, "1024MiB"}})를 사용하여 절대 바이트 수로 처리됩니다.

주요 동작 차이는 백분율을 처리하는 방법에 있습니다. 현재 컨테이너에 메모리 제한 (--memory / -m)이 있으면 RabbitMQ에 그대로 전달되지 않고 백분율 값이 메모리 제한을 기반으로 절대 바이트 값으로 계산됩니다. 예를 들어 컨테이너가 --memory 2048m (및 암시 적 업스트림 기본 RABBITMQ_VM_MEMORY_HIGH_WATERMARK 40 %)과 함께 실행되는 경우 유효 메모리 제한은 819MB (2048MB의 40 %)로 설정합니다.

 


Erlang Cookie

쿠키 및 쿠키가 필요한 이유에 대한 자세한 내용은 RabbitMQ "Clustering Guide"를 참조하십시오.

 

일관된 쿠키를 설정하려면 (특히 clustermqctl을 통한 원격 / 컨테이너 관리에도 유용) RABBITMQ_ERLANG_COOKIE를 사용하십시오.

$ docker run -d --hostname some-rabbit --name some-rabbit --network some-network -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3.8.0

그런 다음 별도의 인스턴스에서 연결하여 사용할 수 있습니다.

 

$ docker run -it --rm --network some-network -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3 bash root@f2a2d3d27c75:/# rabbitmqctl -n rabbit@some-rabbit list_users
Listing users ...
guest [administrator]

또는 RABBITMQ_NODENAME을 사용하여 rabbitmqctl 반복 호출을 더 간단하게 만들 수도 있습니다.

 

$ docker run -it --rm --network some-network -e RABBITMQ_ERLANG_COOKIE='secret cookie here' -e RABBITMQ_NODENAME=rabbit@some-rabbit rabbitmq:3 bash root@f2a2d3d27c75:/# rabbitmqctl list_users Listing users ...
guest [administrator]

파일을 통해 쿠키를 제공하려면 (예 : Docker Secrets) /var/lib/rabbitmq/.erlang.cookie 를 마운트해야합니다.

 

docker service create ... --secret source=my-erlang-cookie,target=/var/lib/rabbitmq/.erlang.cookie ... rabbitmq

(컨테이너의 Erlang이 쿠키 파일을 제대로 읽을 수 있도록 uid = XXX, gid = XXX, mode = 0600을 지정해야 할 수도 있습니다. 자세한 내용은 Docker의 --secret 설명서를 참조하십시오.)

 


Management Plugin

가능한 환경 변수의 작은 선택은 Dockerfile에 정의되어 docker 엔진을 통과합니다 (아래에 나열 됨). RabbitMQ 자체에서 지원하는 환경 변수 목록은 https://www.rabbitmq.com/configure.html을 참조하십시오.

관리 플러그인이없는 SSL 구성의 경우 :

RABBITMQ_SSL_CACERTFILE
RABBITMQ_SSL_CERTFILE
RABBITMQ_SSL_DEPTH
RABBITMQ_SSL_FAIL_IF_NO_PEER_CERT
RABBITMQ_SSL_KEYFILE
RABBITMQ_SSL_VERIFY

관리 플러그인을 사용한 SSL 구성의 경우 :

RABBITMQ_MANAGEMENT_SSL_CACERTFILE
RABBITMQ_MANAGEMENT_SSL_CERTFILE
RABBITMQ_MANAGEMENT_SSL_DEPTH
RABBITMQ_MANAGEMENT_SSL_FAIL_IF_NO_PEER_CERT
RABBITMQ_MANAGEMENT_SSL_KEYFILE
RABBITMQ_MANAGEMENT_SSL_VERIFY

Setting default user and password

 

guest / guest의 기본 사용자 이름과 비밀번호를 변경하려면 RABBITMQ_DEFAULT_USER 및 RABBITMQ_DEFAULT_PASS 환경 변수를 사용하여 변경할 수 있습니다.

$ docker run -d --hostname my-rabbit --name some-rabbit -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password rabbitmq:3-management

그런 다음 브라우저에서 http : // localhost : 8080 또는 http : // host-ip : 8080으로 이동하여 사용자 / 암호를 사용하여 관리 콘솔에 액세스 할 수 있습니다.

환경 변수 대신 파일에서 사용자 이름과 비밀번호를 제공하려면 환경 변수 이름에 _FILE 접미 부를 추가하십시오 (예 : Docker Secrets를 사용하려면 RABBITMQ_DEFAULT_USER_FILE=/run/secrets/xxx).

 


Setting default vhost

기본 호스트를 변경하려면 RABBITMQ_DEFAULT_VHOST 환경 변수를 사용하여 변경할 수 있습니다.

$ docker run -d --hostname my-rabbit --name some-rabbit -e RABBITMQ_DEFAULT_VHOST = my_vhost rabbitmq : 3-management

Enabling HiPE (deprecated)

참고 : rabbimq 이미지 버전 3.7.15부터 HiPE를 사용할 수 없습니다 (https://github.com/docker-library/rabbitmq/pull/340)

다양한 구성 옵션에 대한 자세한 내용은 RabbitMQ "구성"을 참조하십시오.

시작할 때 HiPE 컴파일러를 사용하려면 RABBITMQ_HIPE_COMPILE을 1로 설정하십시오. 공식 문서를 준수하십시오.

Erlang의 Just-In-Time 컴파일러 인 HiPE로 RabbitMQ의 일부를 사전 컴파일하려면 true로 설정하십시오. 이렇게하면 시작 시간이 늘어나면서 서버 처리량이 증가합니다. 시작시 몇 분의 지연으로 20-50 % 향상된 성능을 경험할 수 있습니다.

따라서 상태 확인, 자동 클러스터링 등을 구성 할 때 시작 지연을 고려해야합니다.

 


Enabling Plugins

Dockerfile을 만들면 런타임에 활성화됩니다. 이미지 rabbitmq-plugins 목록에있는 전체 플러그인 목록을 보려면

FROM rabbitmq:3.7-management RUN rabbitmq-plugins enable --offline rabbitmq_mqtt rabbitmq_federation_management rabbitmq_stomp

/ etc / rabbitmq / enabled_plugins에 파일을 마침표로 끝나는 원자 목록으로 포함하여 마운트 할 수도 있습니다.

enabled_plugins 예

[rabbitmq_federation_management,rabbitmq_management,rabbitmq_mqtt,rabbitmq_stomp].

'Open source tools' 카테고리의 다른 글

Cuda Encoder 사용하는 방법  (0) 2019.12.09
OpenCV 빌드하기 (OpenCV 3.2 + CUDA + TBB)  (0) 2019.11.01
Zookeeper znode type  (0) 2019.11.01
Docker Zookeeper server install  (0) 2019.11.01
Zookeeper Commands - Four Letter Words  (0) 2019.11.01