Bu yazımızda RabbitMQ uygulamamızı cluster olarak çalıştırarak ayağı kaldıracağız. Ben burada docker compose yöntemini kullanarak ayağı kaldırıyorum sizler stack dosyası olarak da kullanabilirsiniz aynı dosyayı. Öncelikle aşağıdaki gibi bir docker-compose.yml dosyası oluşturuyoruz.

version: '3'

services:

  rabbitmq1:
    image: rabbitmq:3-management
    hostname: rabbitmq1
    environment:
      - RABBITMQ_ERLANG_COOKIE=${RABBITMQ_ERLANG_COOKIE}
      - RABBITMQ_DEFAULT_USER=${RABBITMQ_DEFAULT_USER}
      - RABBITMQ_DEFAULT_PASS=${RABBITMQ_DEFAULT_PASS}
      - RABBITMQ_DEFAULT_VHOST=${RABBITMQ_DEFAULT_VHOST}

  rabbitmq2:
    image: rabbitmq:3-management
    hostname: rabbitmq2
    depends_on:
      - rabbitmq1
    environment:
      - RABBITMQ_ERLANG_COOKIE=${RABBITMQ_ERLANG_COOKIE}
    volumes:
      - ./cluster-entrypoint.sh:/usr/local/bin/cluster-entrypoint.sh
    entrypoint: /usr/local/bin/cluster-entrypoint.sh

  rabbitmq3:
    image: rabbitmq:3-management
    hostname: rabbitmq3
    depends_on:
      - rabbitmq1
    environment:
      - RABBITMQ_ERLANG_COOKIE=${RABBITMQ_ERLANG_COOKIE}
    volumes:
      - ./cluster-entrypoint.sh:/usr/local/bin/cluster-entrypoint.sh
    entrypoint: /usr/local/bin/cluster-entrypoint.sh
    
  haproxy:
    image: haproxy:1.7
    volumes:
      - ./haproxy.cfg:/usr/local/etc/haproxy/haproxy.cfg:ro
    depends_on:
      - rabbitmq1
      - rabbitmq2
      - rabbitmq3
    ports:
      - 15672:15672
      - 5672:5672

Eğer arzu ederseniz proxy olarak nginx kullanabilirsiniz. Ben burada haproxy kullandım. Şimdi bir dosya daha yaratıyoruz cluster-entrypoint.sh şeklinde

#!/bin/bash

set -e
/usr/local/bin/docker-entrypoint.sh rabbitmq-server -detached
rabbitmqctl stop_app
rabbitmqctl join_cluster [email protected]
rabbitmqctl stop
sleep 2s
rabbitmq-server

Şimdi .env dosyamızı yazıyoruz.

RABBITMQ_ERLANG_COOKIE=12345
RABBITMQ_DEFAULT_USER=guest
RABBITMQ_DEFAULT_PASS=guest
RABBITMQ_DEFAULT_VHOST=/

Son olarak haproxy.cfg dosyamızı yaratıyoruz

global
        log 127.0.0.1   local1
        maxconn 4096
 
defaults
        log     global
        mode    tcp
        option  tcplog
        retries 3
        option redispatch
        maxconn 2000
        timeout connect 5000
        timeout client 50000
        timeout server 50000
 
listen  stats
        bind *:1936
        mode http
        stats enable
        stats hide-version
        stats realm Haproxy\ Statistics
        stats uri /
 
listen rabbitmq
        bind *:5672
        mode            tcp
        balance         roundrobin
        timeout client  3h
        timeout server  3h
        option          clitcpka
        server          rabbitmq1 rabbitmq1:5672  check inter 5s rise 2 fall 3
        server          rabbitmq2 rabbitmq2:5672  check inter 5s rise 2 fall 3
        server          rabbitmq3 rabbitmq3:5672  check inter 5s rise 2 fall 3

listen mgmt
        bind *:15672
        mode            tcp
        balance         roundrobin
        timeout client  3h
        timeout server  3h
        option          clitcpka
        server          rabbitmq1 rabbitmq1:15672  check inter 5s rise 2 fall 3
        server          rabbitmq2 rabbitmq2:15672  check inter 5s rise 2 fall 3
        server          rabbitmq3 rabbitmq3:15672  check inter 5s rise 2 fall 3

Son adım olarak komutumuzu verip kaldırmak kalıyor uygulamamızı.

docker-compose up # önplanda çalıştırır
docker-compose up -d # arka planda çalıştırır.
Uygulamamız ayağı kalktı hayırlı olsun.

Varsayılan kullanıcı adı ve şifresi guest ve guesttir. Daha fazla ayrıntı için resmi websitesi olan https://www.rabbitmq.com/clustering.html adresinizi ziyaret edebilirsiniz.

Keyifli okumalar

Share: