Raspberry Pi로 MQTT 클러스터 구축하기
Raspberry Pi에서 EMQX 기반 MQTT 클러스터를 만들기 위한 준비, 설치, 노드 구성, 테스트 명령을 단계별로 정리한 실무용 모음
목차
개요
이 글은 Raspberry Pi를 이용해 EMQX 기반 MQTT 클러스터를 구성하는 방법을 설명한다. 초보자도 이해할 수 있도록 하드웨어 준비부터 노드 연결, 검증까지 단계별로 정리했다. 핵심 키워드는 raspberry pi mqtt 클러스터, 라즈베리파이 mqtt 노드 구성, 라즈베리파이 emqx 설치이다.
사전 준비
필요한 항목
- Raspberry Pi 3 이상(권장 Raspberry Pi 4)
- Raspbian 또는 Raspberry Pi OS 최신 버전
- 고정 IP 또는 DHCP 예약이 가능한 네트워크
- 각 노드에 대한 SSH 접근 권한
네트워크 고려사항
클러스터 노드 간 통신이 원활해야 한다. 방화벽에서 Erlang 포트(4369, 25672, 노드 간 통신 포트)를 허용하고, 서로의 호스트명을 해석할 수 있어야 한다. DNS가 없으면 /etc/hosts에 IP와 호스트명을 등록한다.
EMQX 설치 (라즈베리파이 emqx 설치)
EMQX는 ARM 아키텍처용 패키지를 제공한다. 다음은 기본적인 설치 절차이다. 루트 권한이나 sudo가 필요하다.
sudo apt update
sudo apt install -y wget tar
# EMQX 다운로드 (버전은 안정화 릴리스로 변경)
wget https://www.emqx.io/downloads/broker/4.4.10/emqx-4.4.10-ubuntu20.04-arm64.zip
unzip emqx-4.4.10-ubuntu20.04-arm64.zip
cd emqx
sudo ./bin/emqx start
시스템 서비스로 등록하려면 systemd 유닛을 작성하거나 제공된 방법을 따른다. 설치 중 발생하는 의존성이나 아키텍처 문제는 EMQX 문서를 참고한다.
노드 구성 (라즈베리파이 mqtt 노드 구성)
노드 이름과 쿠키 설정
EMQX는 Erlang 분산 기능을 사용하므로 각 노드에 고유한 이름과 동일한 cookie를 설정해야 한다. /etc/emqx/emqx.conf 또는 설치 디렉토리의 conf 파일을 편집한다.
# emqx.conf 예시
node.name = emqx@192.168.1.101
node.cookie = mysecretcookie
다른 노드에는 node.name만 변경하여 IP나 호스트명으로 지정한다. node.cookie는 모든 노드에서 동일해야 한다.
호스트명 해석
호스트명이 정상적으로 해석되지 않으면 클러스터가 실패한다. /etc/hosts에 다음처럼 추가한다.
192.168.1.101 emqx-node1
192.168.1.102 emqx-node2
192.168.1.103 emqx-node3
클러스터 연결 절차
한 노드를 기준으로 다른 노드를 연결한다. 예를 들어 node1에서 node2에 조인한다.
# 노드1에서 실행
cd /path/to/emqx
./bin/emqx_ctl cluster join emqx@192.168.1.102
./bin/emqx_ctl cluster status
정상적으로 연결되면 cluster status 명령에서 모든 노드가 나열된다. 필요한 경우 방화벽 규칙을 점검하고 쿠키값을 재확인한다.
테스트와 검증
클러스터 동작을 확인하려면 간단한 퍼블리셔/서브스크라이버 테스트를 수행한다. mosquitto 클라이언트를 사용하면 편리하다.
# 한 터미널: 구독
mosquitto_sub -h 192.168.1.101 -t 'test/topic' -v
# 다른 터미널: 발행
mosquitto_pub -h 192.168.1.102 -t 'test/topic' -m 'hello from node2'
메시지가 정상적으로 전달되면 클러스터 라우팅이 작동하는 것이다. MQTT 세션이 노드 간에 올바르게 분산되는지도 확인한다.
운영 팁과 확장
- 로그 관리는 중요한 문제다. /var/log/emqx 아래 로그를 정기적으로 확인한다.
- 저장소와 메시지 지속성을 위해 외부 데이터베이스나 브리지 구성을 고려한다.
- 클러스터 규모를 키울 때는 네트워크 대역폭과 CPU, 메모리 사용량을 모니터링한다.
보안 고려사항
TLS, 인증, 권한 부여 설정을 통해 클러스터 보안을 강화한다. 인증서 관리는 각 노드에 일관되게 적용해야 하며, 공용 네트워크에서는 암호화된 연결을 사용한다.
문제 해결
노드가 조인되지 않을 때
- node.cookie를 확인한다.
- 호스트명/네트워크 연결을 확인한다.
- Erlang 포트(4369, 25672 등)가 열려 있는지 확인한다.
메시지 누락이 발생할 때
- 브리지나 라우팅 규칙을 점검한다.
- QoS 설정과 세션 지속성 옵션을 확인한다.
마무리
Raspberry Pi 여러 대로 구성한 EMQX 클러스터는 소규모 IoT 환경에서 비용 효율적인 미들웨어를 제공한다. 위 절차를 따라 단계적으로 설정하면 raspberry pi mqtt 클러스터와 라즈베리파이 mqtt 노드 구성, 라즈베리파이 emqx 설치를 안정적으로 진행할 수 있다. 이후 모니터링과 보안 강화로 운영 안정성을 높인다.