RocketMQ 이중 마스터 클러스터 구성 방법

실제 운영 환경에서 고가용성과 성능을 고려할 때, RocketMQ의 이중 마스터(Master-Master) 아키텍처는 충분한 안정성을 제공합니다. 아래에서는 두 대의 리눅스 서버를 활용해 이중 마스터 클러스터를 구축하는 절차를 설명합니다.

서버 정보

  • 서버 A: 121.43.181.101
  • 서버 B: 47.114.41.151

1. 설치 파일 다운로드 및 압축 해제 (A, B 동시 수행)

공식 미러 사이트에서 최적화된 버전을 다운로드하고, 지정 디렉토리에 배치합니다.

wget http://mirrors.hust.edu.cn/apache/rocketmq/4.3.0/rocketmq-all-4.3.0-bin-release.zip
unzip rocketmq-all-4.3.0-bin-release.zip -d /opt/
cd /opt && mv rocketmq-all-4.3.0-bin-release rocketmq

2. JVM 메모리 설정 조정 (A, B 동시)

기본적으로 높은 메모리를 요구하지만, 테스트 환경이나 리소스 제약이 있는 경우 다음과 같이 낮은 사양으로 조정합니다.

JVM 옵션 수정 – NameServer 실행 스크립트

vim /opt/rocketmq/bin/runserver.sh

다음 줄을 찾아 적절한 값으로 변경:

# 기존:
# JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g..."
# 변경 후:
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

JVM 옵션 수정 – Broker 실행 스크립트

vim /opt/rocketmq/bin/runbroker.sh

다음 줄을 수정:

# 기존:
# JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g..."
# 변경 후:
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m"

3. Broker-A 설정 파일 구성 (서버 A 전용)

설정 파일 경로: /opt/rocketmq/conf/2m-noslave/broker-a.properties

brokerClusterName=DefaultCluster
brokerName=broker-a
brokerId=0
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH

namesrvAddr=121.43.181.101:9876;47.114.41.151:9876
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true

listenPort=10911
brokerIP1=121.43.181.101

storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
storePathConsumeQueue=/data/rocketmq/store/consumequeue
storePathIndex=/data/rocketmq/store/index
storeCheckpoint=/data/rocketmq/store/checkpoint
abortFile=/data/rocketmq/store/abort
maxMessageSize=65536
fileReservedTime=48
deleteWhen=04

4. Broker-B 설정 파일 구성 (서버 B 전용)

설정 파일 경로: /opt/rocketmq/conf/2m-noslave/broker-b.properties

brokerClusterName=DefaultCluster
brokerName=broker-b
brokerId=0
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH

namesrvAddr=121.43.181.101:9876;47.114.41.151:9876
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true

listenPort=10911
brokerIP1=47.114.41.151

storePathRootDir=/data/rocketmq/store
storePathCommitLog=/data/rocketmq/store/commitlog
storePathConsumeQueue=/data/rocketmq/store/consumequeue
storePathIndex=/data/rocketmq/store/index
storeCheckpoint=/data/rocketmq/store/checkpoint
abortFile=/data/rocketmq/store/abort
maxMessageSize=65536
fileReservedTime=48
deleteWhen=04

참고: 각 서버는 자신의 IP 주소와 일치하는 설정 파일만 사용하며, brokerNamebrokerIP1 값이 정확히 매핑되어야 합니다.

5. 서비스 시작 순서

먼저 NameServer를 양쪽 서버에서 모두 실행한 후, 각각의 Broker를 시작합니다.

NameServer 시작 (A와 B 모두 수행)

mkdir -p /data/rocketmq/logs
nohup sh /opt/rocketmq/bin/mqnamesrv >/data/rocketmq/logs/namesrv.log 2>&1 &

Broker-A 시작 (서버 A에서 실행)

nohup sh /opt/rocketmq/bin/mqbroker -n 121.43.181.101:9876 -c /opt/rocketmq/conf/2m-noslave/broker-a.properties >/data/rocketmq/logs/broker.log 2>&1 &

Broker-B 시작 (서버 B에서 실행)

nohup sh /opt/rocketmq/bin/mqbroker -n 47.114.41.151:9876 -c /opt/rocketmq/conf/2m-noslave/broker-b.properties >/data/rocketmq/logs/broker.log 2>&1 &

주의: -n 옵션에는 각 서버의 로컬 NameServer 주소를 입력해야 하며, 클러스터 전체의 주소는 설정 파일 내 namesrvAddr에 명시됩니다.

6. 서비스 종료 방법

정상적인 종료는 아래 스크립트를 통해 수행합니다.

# Broker 종료
sh /opt/rocketmq/bin/mqshutdown broker

# NameServer 종료
sh /opt/rocketmq/bin/mqshutdown namesrv

프로세스 확인이 필요한 경우 다음 명령어를 사용하세요:

ps aux | grep rocketmq

태그: RocketMQ Message Queue distributed messaging cluster configuration high availability

6월 25일 16:13에 게시됨