Tagged: RabbitMQ

서로 다른 RabbitMQ 버전으로 Cluster 구성 테스트.

RabbitMQ 는 인기있는 메시지 브로커 입니다. 비동기 메시지를 다루는데 있어서 RabbitMQ 는 많이 사용되어 집니다. 거기다 RabbitMQ 는 여러 RabbitMQ 를 하나로 묶는 Cluster 기능을 제공합니다. 그런데, 언제나 그렇지만, 서로다른 RabbitMQ 버전끼리 하나로 묶을 수 있을까하는 의문이 들었습니다. 테스트를 해보았습니다.

환경 세팅

master, slave 라 불리는 2개의 서버를 준비했고 각각 3.5.4 버전과 3.1.5 버전을 설치했습니다. 모든 버전은 Epel 저장소에서 RPM으로 설치를 했습니다.

그리고 다음과 같이 RabbitMQ 를 설정했습니다.

  1. master 의 쿠키 파일를(/var/lib/rabbitmq/.erlang.cookie) slave에 복사했습니다.
  2. 양쪽모두 호스트네임을 /etc/rabbitmq/rabbitmq-env.conf 에 지정해줬습니다.

결과

결과적으로 RabbitMQ 는 서로다른 버전으로 Cluster 를 구성할 수 없습니다.

버전이 맞지 않는다고 에러를 냅니다.

혹시나 Master 버전이 Slave 버전보다 낮아서 그런가 싶어서 거꾸로 해봤습니다. (Slave 버전이 Master 버전보다 높습니다.) 즉, 버전이 낮은 RabbitMQ Node 를 높은 버전의 RabbitMQ Node 로 묶어보자는 거였는데 그것도 안됐습니다.

이 메시지는 아마도 데이터베이스 스키마가 달라졌기 때문에 안되다는 오류 메시지로 보입니다.

RabbitMQ 통계 보기.

RabbitMQ 는 AMQP 를 지원하는 Message Queue 프로그램 입니다. 여러 솔루션에서 함께 쓰이고 있는 매우 인기있는 프로그램입니다.

언제나 그렇지만 RabbitMQ 또한 각종 통계자료를 제공 합니다. 이를 통해서 RabbitMQ 건강상태를 체크할 수 있습니다. 이 문서는 이에 대해 간략히 다룹니다.

RabbitMQ Statistics
RabbitMQ Statistics

통계정보를 보는 방법으로는 CLI 를 통해서 볼 수도 있지만, 웹을 통해서 GUI 환경에서 쉽게 볼수 있습니다. 이를 위해서는 GUI Management Plugin 을 활성화해줘야 합니다.

이렇게 하면 웹브라우저를 통해서 RabbitMQ 를 관리할 수 있으며, 간략한 통계정보를 볼 수 있습니다. 이 통계정보를 이해하기 위해서는 Message Broker 에 대한 짧막한 지식이 필요합니다.

Global Counts

전역적인 통계자료 입니다.

Connections

Message Broker 에 TCP 접속을 한 개수 입니다. 그냥 간단하게 RabbitMQ 에 접속한 개수를 말합니다.

Channels

RabbitMQ 는 Channel 이라는 개념을 사용합니다. Connection 내에 존재하는 것으로 가상 커넥션이라고 불리기도 합니다. 이것은 애플리케이션이 다중의 접속을 요구하는 경우에 하나의 TCP Connection 으로 접속을  Multiplex 해주어 접속량을 획기적으로 줄여줍니다.

따라서 하나의 TCP Connection 에 여러개의 접속이 이루어질 수 있어 이 수치는 Connections 개수보다 많이 나올 수 있습니다.

Exchanges

이것은 단일 생산자-소비자 구조에서 생산자-다중 소비자 구조시에 중간에 생산자의 메시지를 분배해주는 역활하는 Exchanges 개수를 말합니다. Publish/Subcribe 패턴에서 나옵니다.

Publish/Subscribe Pattern
Publish/Subscribe Pattern

Queues

메시지 큐의 개수를 말합니다.

Consumers

큐에서 메시지를 꺼내서 쓰는 소비자의 개수를 말합니다.

Nodes 

RabbiMQ 는 Cluster 구조로 여러 서버들을 붙일 수 있습니다. 그렇게되면 Nodes 에 그 서버들이 나타나고 상태정보도 보입니다.

File Descriptors

프로세스에 의해서 오픈한 File Descriptor 개수 입니다. 아래에는 최대 활용가능한 개수도 나옵니다. 만일 이것이 비율로 90%가 넘는다면 문제가 생길 수 있어 이를 잘 모니터링 해야 합니다. 또, 운영체제의 최대 파일 오픈 개수에 영향을 받습니다.

Socket Descriptor

프로세스에 의해서 오픈한 Socket Descriptor 개수 입니다. 아래에는 최대 활용가능한 개수도 나옵니다. 만일 이것이 비율로 90%가 넘는다면 문제가 생길 수 있어 이를 잘 모니터링해야 합니다.

Erlang Processes

Erlang 프로세스들의 개수 입니다. 아래에는 최대 활용가능한 개수도 나옵니다. 만일 이것이 비율로 90%가 넘는다면 문제가 생길 수 있어 이를 잘 모니터링해야 합니다.

Memory

RabbiMQ 서버에서 사용하고 있는 메모리양 입니다.

RabbitMQ 설정

RabbitMQ LogoRabbitMQ 는 기본적으로 효율적으로 RabbitMQ 서버을 운영하기에 충분할만큼 내장된 설정으로 가지고 있습니다. 만약에 이 설정을 변경하고자 한다면 설정을 해야 합니다.

RabbitMQ 설정은 기본적으로 다음과 같이 3가지 방법을 제공 합니다.

  • 환경변수들(environment variables) : 포트(port), 파일 위치(file location), 파일 이름(file name)들을 정의. 이것은 쉘 환경변수로부터 가지고 올수 있으며 rabbitmq-env.conf 파일에 설정할 수 있다.
  • 설정파일 : 허가권(permission), 제한과 클러스터, 플러그인 세팅과 같은 서버 컨포넌트들을 정의.
  • 런타임 파라미터와 정책들 : 클러스터 전체 세팅을 런타임에서 변경할 수 있다.

설정파일의 위치는 배포판의 경우에 /etc/rabbitmq 를 루트하며, 컴파일 설치시에 지정해준 디렉토리를 기준으로 합니다.

rabbitmq-env.conf

이 설정 파일은 RabbitMQ 서버의 전체적인 설정들, 예를들어 서버 Port, 호스트이름, 노드이름등 입니다.

이는 쉘의 환경변수로 설정이 가능한데, 이 설정파일의 변수들에 ‘RABBITMQ_’ 를 붙이면 사용가능 합니다.

rabbitmq.conf

이 파일은 기본적으로 rabbitmq-env.conf 에서 지정 가능합니다. 주의해야 할 것은 파일명을 적을때에 conf 확장자를 생략하고 적으셔야 합니다. 왜냐하면 RabbitMQ 가 확장자 conf 를 추가하기 때문입니다.

이 설정 파일에서는 RabbitMQ 운영에 관련된 내용들을 주로 다룹니다. 사용할 메모리, 인증방법, SSL 인증서 설정등 입니다.

이러한 설정들은 다음의 명령어로 확인이 가능 합니다.

 

CentOS 7 RabbitMQ 설치

RabbitMQ Logo RabbitMQ 는 AMQP(Advanced Message Queuing Protocol) 를 지원하는 메시징 큐 브로커 입니다. 큐(Queue) 자료구조의 동작방법 그대로 서버로서 역활을 하도록 만든 서버 입니다.

CentOS 7 RabbitMQ 설치 방법을 설명 합니다.

1. EPEL 저장소 추가.

RabbitMQ  는 Erlang 이라는 언어로 작성되었습니다. 따라서 이 패키지가 설치되어 있어야 하는데,  CentOS 7 에서는 패키지로 제공하지 않습니다. 대신에  EPEL 저장소를 추가해서 사용 합니다.

2. RabbitMQ 설치.

현재(2014년 9월 16일)  RabbitMQ 서버의 최신 버전은 ‘3.3.5-1’ 입니다. 이를 설치 합니다.

3. Web Console 활성화.

RabbitMQ 는 Web Console 을 지원 합니다. 이를 위해서 RabbitMQ 의 Console Management 플러그인을 활성화 해주고 서버를 재시작 해줍니다.

4. 서비스 등록

CentOS 7 부터 서비스 관리는 systemd 에서 하도록 변경되었지만 RabbitMQ  는 아직 여기에 대응하지 않습니다. 예전과 같이 chkconfig 도구를 이용해서 서비스를 런레벨(run level) 에 등록해 줍니다.

5. CentOS 7 에서 시작 문제.

RabbitMQ 의 최신 패키지는 CentOS 7 의 Systemd 를 지원하지 않아 구동을 한다고 하더라도 다음과 같은 오류를 만나게 됩니다.

이는 SELINUX 를 disabled 처리해주면 구동이 가능합니다.

6. Web Console 에 로그인 계정 추가.

메뉴얼에 의하면 Web Console 의 기본 계정인 guest/guest 는 로컬호스트에서 접속할때만 가능합니다. 외부에서 접속할때는 불가능 합니다. 그래서 새로운 계정을 다음과 같이 추가해줍니다.

7. firewalld 로 Web Console 접속 포트 개발

RabbitMQ 의 Web Console 은 15672 포트를 사용 합니다. 이를 firewalld 를 이용해서 개방해 줍니다.

8. http://서버IP:15672 접속.

이제 웹 브라우저를 열고 http://서버ip:15672 를 하면 로그인 화면이 나옵니다. 여기서 아까 생성한 관리자 아이디/패스워드를 입력해서 로그인이 되면 정상입니다.

RabbitMQ 서버 관리자 화면
RabbitMQ 서버 관리자 화면