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 주소와 일치하는 설정 파일만 사용하며, brokerName과 brokerIP1 값이 정확히 매핑되어야 합니다.

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에 게시됨