You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
현재 실무에서 알림 시스템 [아키텍처를 개선](https://treestone94.github.io/posts/2025-03-11-architecture/)하게 되면서 RabbitMQ 단일 서버가 장애 시 알림 시스템의 리스크가 크고 안정성에 문제가 있는걸로 판단되었습니다. 이를 해결하기 위해 RabbitMQ 클러스터링 환경을 구축하게 되었습니다. 구축하게 되면서 어떤점을 중점적으로 보았는지 공유할려고 합니다.
12
12
13
-
<aside>
14
-
🤔
15
13
16
-
RabbitMQ 클러스터링이 뭔가요?
17
-
18
-
여러 대의 RabbitMq 노드를 논리적으로 하나의 브로커처럼 동작하도록 구성하는 것입니다. 각 노드는 메타데이터와 큐 정보를 공유하며, 클라이언트는 어느 노드에 연결하든 동일한 큐와 익스체인지에 접근할 수 있습니다.
19
-
20
-
</aside>
14
+
> 🤔 RabbitMQ 클러스터링이 뭔가요?\
15
+
> 여러 대의 RabbitMq 노드를 논리적으로 하나의 브로커처럼 동작하도록 구성하는 것입니다. 각 노드는 메타데이터와 큐 정보를 공유하며, 클라이언트는 어느 노드에 연결하든 동일한 큐와 익스체인지에 접근할 수 있습니다.
21
16
22
17
## 구축하면 이점은?
23
18
@@ -224,36 +219,29 @@ NODENAME=rabbit@rabbit1
224
219
- 노드 이름은 변경할 수 없습니다
225
220
- 형식은 `name@hostname` 이어야 합니다
226
221
227
-
<aside>
228
-
🤔
229
-
230
-
노드 이름은 왜 변경 할 수 없을까요?
231
-
232
-
RabbitMQ는 Erlang의 Mnesia 데이터베이스를 사용하는데, 노드 이름이 데이터 저장 구조의 핵심 식별자로 사용됩니다.
233
-
234
-
1.**Mnesia 데이터 디렉토리 구조**
235
-
236
-
```bash
237
-
/var/lib/rabbitmq/mnesia/rabbit@rabbit1/
238
-
├── DECISION_TAB.LOG
239
-
├── LATEST.LOG
240
-
├── nodes_running_at_shutdown
241
-
├── rabbit_durable_exchange.DCD
242
-
├── rabbit_durable_queue.DCD
243
-
└── ...
244
-
```
245
222
246
-
- 노드 이름이 디렉토리 경로에 포함됨
247
-
- 모든 데이터베이스 파일이 이 경로에 저장됨
248
-
1.**클러스터 메타데이터**
249
-
- 클러스터 구성 정보에 노드 이름이 하드코딩됨
250
-
- 큐의 소유권, 복제 정보가 노드 이름으로 참조됨
251
-
- 쿼럼 큐의 멤버십 정보에 노드 이름 포함
252
-
2.**Erlang 분산 시스템**
253
-
- Erlang 노드는 시작 시 이름으로 등록됨
254
-
- 다른 노드들이 이 이름으로 통신 채널 설정
255
-
- 이름 변경 시 기존 연결이 모두 무효화됨
256
-
</aside>
223
+
> 🤔 노드 이름은 왜 변경 할 수 없을까요?\
224
+
> RabbitMQ는 Erlang의 Mnesia 데이터베이스를 사용하는데, 노드 이름이 데이터 저장 구조의 핵심 식별자로 사용됩니다.
0 commit comments