Redis 복제 서버 3대로 구성된 환경에서 마스터 서버가 장애가 발생했을 때, 기본적으로 슬레이브 서버들은 읽기 전용 상태로 유지되며, 쓰기 작업을 처리할 수 없습니다. 따라서, 마스터가 다운되면 새로운 쓰기 작업을 처리할 수 없는 상태가 됩니다.
장애 발생 시 기본적인 동작:
- 마스터 서버 장애: 마스터 서버가 다운되면, 슬레이브 서버들은 여전히 읽기 작업을 처리할 수 있지만, 새로운 데이터를 쓸 수는 없습니다.
- 슬레이브 서버: 슬레이브 서버들은 마스터가 복구되기 전까지 데이터 동기화를 받지 않지만, 읽기 작업을 계속해서 처리할 수 있습니다.
이런 상황에서 Redis Sentinel이나 Redis Cluster와 같은 고가용성 기능을 사용하지 않았다면, 수동으로 새로운 마스터를 지정해야 합니다.
Redis Sentinel을 사용하는 경우:
Redis Sentinel은 Redis의 고가용성을 위한 솔루션으로, 마스터 장애 시 자동으로 새로운 마스터를 선출하고, 클러스터의 복구를 자동화해줍니다. 만약 Redis Sentinel이 구성되어 있다면:
- Sentinel 감시: Sentinel 프로세스는 지속적으로 마스터 서버를 모니터링합니다. Sentinel은 마스터 서버가 다운되면 이를 감지하고 복구 절차를 시작합니다.
- 새로운 마스터 선출: 마스터 장애가 감지되면, Sentinel은 슬레이브 서버 중 하나를 새로운 마스터로 승격합니다.
- 슬레이브 재구성: 다른 슬레이브 서버들은 새로운 마스터로 재구성되며, 이를 통해 마스터 장애 후에도 클러스터가 정상적으로 작동할 수 있게 됩니다.
- 클라이언트 재연결: 새로운 마스터로 전환되면 클라이언트들은 Sentinel을 통해 새로운 마스터 서버에 연결하게 됩니다.
Redis Sentinel을 사용하지 않는 경우:
Sentinel을 사용하지 않았다면, 수동으로 새로운 마스터 서버를 구성해야 합니다. 절차는 다음과 같습니다:
- 남은 슬레이브 중 하나를 마스터로 승격:
슬레이브 중 한 서버를 수동으로 마스터로 전환해야 합니다. 해당 슬레이브에 접속한 후 SLAVEOF NO ONE 명령어를 실행하여 마스터로 승격시킬 수 있습니다. - redis-cli SLAVEOF NO ONE
- 나머지 슬레이브 서버 재구성:
다른 슬레이브 서버들은 이제 새로 승격된 마스터 서버와 동기화해야 합니다. 나머지 슬레이브 서버에서 SLAVEOF <new-master-ip> <port> 명령을 실행해 새로운 마스터와 연결합니다. - redis-cli SLAVEOF <new-master-ip> 6379
- 클라이언트 재설정:
클라이언트들이 기존의 마스터로 연결되어 있었다면, 새로운 마스터로 수동으로 클라이언트 연결을 재구성해야 합니다.
Redis Cluster를 사용하는 경우:
Redis Cluster는 Redis의 고가용성과 자동 분산을 위해 설계된 기능으로, 각 노드가 파티셔닝된 데이터를 저장하고, 마스터-슬레이브 구조로 데이터를 복제합니다. Redis Cluster는 기본적으로 자동 장애 복구 기능을 지원합니다.
- 자동 장애 복구: 클러스터에서 마스터 노드가 장애를 일으키면, 슬레이브 노드 중 하나가 자동으로 새로운 마스터로 승격됩니다.
- 데이터 파티셔닝: Redis Cluster는 데이터를 여러 노드에 분산 저장하며, 노드 중 하나가 장애를 일으켜도 전체 데이터가 손실되지 않습니다.
결론
Redis 환경에서 마스터가 장애가 나면, Sentinel이나 Cluster 구성이 없는 경우 쓰기 작업이 중단되지만, 슬레이브 서버는 읽기 작업을 계속 처리합니다. 고가용성을 위해 Redis Sentinel을 구성해두면 마스터 장애 시 자동으로 복구되고 슬레이브 서버 중 하나가 새로운 마스터로 자동 전환됩니다. Sentinel을 구성하지 않았다면, 수동으로 마스터를 승격하고 클러스터를 재구성해야 합니다.