11월, 2018의 게시물 표시

래빗MQ 클러스터링 - 1. 클러스터링

1. 클러스터 래빗MQ 클러스터는 둘 이상의 서버를 하나의 래빗MQ처럼 사용할 수 있게 한다. 익스체인지, 큐, 바인딩, 사용자, 가상호스트, 정책 등의 런타임 상태가 모든 노드에서 공유된다. 장애허용(fault tolerance) 시스템을 구성하려는 경우, HA큐를 사용한다. HA큐는 여러 클러스터 노드에 걸쳐있고, 메시지와 큐 상태를 공유한다. HA 큐의 노드 중 하나가 다운돼도 다른 노드들에는 메시지와 큐 상태가 계속 유지된다. 클러스터는 대기시간이 짧은 LAN에서만 구성 가능하다. 아마존 EC2와 같은 클라우드 환경에서도 가능하지만 가용성 영역(availability zone)에 걸쳐서는 안된다. 대기시간이 긴 WAN이나 인터넷 연결에서는 Shovel과 Federation를 써야 함. 클러스터 공유 상태를 관리하는 작업의 로드는 노드 수에 비례한다. 2. 노드유형 디스크 노드 or RAM 노드. - 디스크 노드는 클러스터의 런타임 상태를 RAM과 디스크에 저장. - RAM 노드는 메모리 데이터베이스에만 저장. (익스체인지, 큐, 바인딩, 가상호스트, 사용자, 정책) 노드유형은 메시지의 디스크 저장과는 관련없다. 메시지를 디스크 저장하려면 메시지 속성 delivery-mode를 2(persistent)로 설정. 장애 발생후 재접속 할 때, - 디스크 노드는 런타임상태 재구성 - RAM 노드는 런타임 상태를 포함하지 않는다. 클러스터를 생성할 때 최소 하나의 디스크노드가 있어야 한다. 3. 동작 클러스터에 발행한 메시지는 큐가 클러스터의 어느 노드에 있는지와 상관없이 올바르게 전달된다. HA큐를 사용하면 성능이 저하될 수 있다. 큐에 메시지를 저장하거나 큐에서 메시지를 사용할 때, HA큐가 있는 모든 노드로 알려줘야 하니까. 4. 노드 추가 방법 rabbitmq.config 환경 파일을 편집하여 클러스터의 각 노드를 정의(이걸 써야함) 또는 rabbitmqctl 명령을 사용해 클러스터에 노드...

래빗MQ에서 사용하는 프로토콜인 AMQP의 컨셉

1. AMQP 0-9-1은? Advanced Message Queuing Protocol 클라이언트 어플리케이션을 메시징 미들웨어 브로커와 통신할 수 있도록 하는 메시징 프로토콜 메시징 브로커는 퍼블리셔(프로듀서라고도 함)로부터 메시지를 받아서 컨슈머로(처리하는 어플리케이션) 라우팅한다. 네트워크 프로토콜이므로 퍼블리셔와 컨슈머, 브로커는 다른 머신에 있어도 된다. 2. AMQP 0-9-1 모델 요약 메시지는 exchange에 퍼블리시된다. exchange는 우체국, 우체통에 비교된다. exchange는 binding이라는 규칙을 사용하여 메시지를 복사하여 큐로 분배한다. AMQP 브로커는 메시지를 큐를 구독한 컨슈머로 전달하거나, 필요시 컨슈머가 큐에서 메시지를 가져온다. 메시지를 퍼블리시할때, 퍼블리셔는 다양한 메시지 속성을 지정할 수 있다.(메시지 메타-데이터) 이 메타-데이터의 일부는 브로커에 의해 쓰일 수 있다. 그러나 나머지는 완전히 브로커에게는 불투명하고 메시지를 받는 어플리케이션에 의해서만 쓰인다. 네트워크는 불안정적이고 어플리케이션은 프로세스에 실패할 수 있다. 그래서 AMQP에는 메시지 확인(message acknowledgements) 개념이 있다. 메시지가 컨슈머로 전달될 때, 컨슈머는 자동적으로, 또는 개발자가 선택한 때 바로 브로커에게 알린다. 브로커는 메시지에 대한 알림을 받으면 메시지(또는 메시지 그룹)를 큐에서 완전히 지운다. 특정 상황에서, 메시지가 라우팅되지 못했을때, 메시지는 퍼블리셔에게 되돌아가거나, 드랍되거나, 만약 브로커가 extension을 구현했으면 '죽은 편지 큐'로 이동된다. 퍼블리셔는 특정 파라미터를 사용하여 퍼블리시 해서 어떻게 상황들을 처리할지 선택한다. 3. queue, exchange, binding을 집합적으로 AMQP 엔티티라고 한다. exchange는 메시지가 전송되는 AMQP 엔티티이다. exchange는 메시지를 가져와서 0개 이상의...

래빗MQ 윈도우설치 이상한거

1. non-아스키 문자의 패스에는 인스톨할 수 없다. 아스키가 아닌 문자가 있는 경로에 설치되어 있으면, 래빗MQ 시작시 아래 에러를 내면서 실패한다. RabbitMQ: Erlang machine stopped instantly (distribution name conflict?) 이건 컴파일 된 Erlang 파일의 위치를 Erlang VM에 전달해야 되기 때문이다. UTF-8의 입력을 기대하지만, 콘솔은 일반적으로 다른 인코딩을 사용한다. 2. rabbitmqctl는 non-ascii 문자를 잘못 보여주고 파싱한다. - 유사하게, rabbitmqctl는 커맨드라인 파라미터가 UTF-8로 인코딩 될것으로 예상하고, UTF-8로 스트링을 보여준다. 대신 콘솔은 특정나라 인코딩 언어를 제공하고 기대한다. 3. 비-관리자 유저로 인스톨하면, .erlang.cookie가 잘못된 위치에 남는다. 이는 rabbitmqctl을 사용할 수 없도록 한다. 해결책: 관리자모드로 인스톨하거나, .erlang.cookie 파일을 수동으로 복사하여 놓는다. 4. 윈도우 종료 (shutting down) Windows를 종료하고 R15B02 이전의 Erlang 버전을 사용할 때 예방 조치를 취할 필요가 있다. Erlang VM의 이전 버전의 제한으로 인해 브로커는 Windows가 종료 될 때 제어 된 종료 시퀀스를 거치지 않는다. Erlang의 이전 버전을 사용하는 서비스로 설치되면 Windows를 종료하기 전에 서비스를 수동으로 중지해야 한다. 그렇게하지 않으면 브로커가 이후에 시작할 때 recovery에 더 오래 머물게 될 수 있습니다. R15B02 이후 버전의 Erlang을 설치하길 추천 출처 : https://www.rabbitmq.com/windows-quirks.html

래빗MQ 서버 다운로드 & 설치(윈도우)

래빗MQ 깔기전에 64비트 지원버전 얼랭(Erlang)이 인스톨되어 있어야 한다. * 얼랭 인스톨러는 관리계정으로 실행되어야 한다. 디폴트 세팅으로도 잘 동작하지만, 설정을 해서 커스터마이징 할 수 있다. 래빗MQ는 자동으로 실행된다. 시작메뉴에서 중지, 재설치, 시작 할 수 있다. 출처 : https://www.rabbitmq.com/install-windows.html

래빗MQ Feature

래빗MQ? 스타트업부터 대기업까지 널리 사용되는 오픈소스 메시지 브로커 가볍다. 클라우드에 설치하기도 좋다. 대규모 고가용성 요구사항을 맞추기 위한 클러스터링 다양한 OS와 클라우드 환경에서 동작하고, 다양한 인기있는 언어의 개발자 도구 지원 출처 : https://www.rabbitmq.com/