-
Redis replication? Sharding? Sentinel? Cluster?프로젝트/redis 2023. 7. 11. 00:01728x90
개요
Redis를 사용하게 되었을 때 물리 머신이 가진 메모리를 한계를 초과하는 데이터를 저장하고 싶거나, failover(장애)에 대한 처리를 통한 HA(고가용성)을 보장하려면 Sentinel이나 Cluster 등의 운영 방식을 선택해서 사용해야 합니다.
여기서 Sentinel, Cluster, Sharding, Replication 등에 대해 알아보겠습니다.
One Redis Instance
가장 단순한 방법입니다.
여러 개의 서버가 단일 Redis 인스턴스를 바라보고 있습니다.
하지만 Redis에 장애가 발생하는 경우 모든 종속 서비스가 중단되는 사태가 발생합니다.
즉, 가용성 또는 내결함성이 없습니다.
Redis Replication
Redis가 복제(replication)를 통해 HA(High Availability) 고가용성 및 failover(장애)를 지원하는 방법입니다.
Redis Cluster, Redis Sentinel에서 추가 계층으로 제공하는 것 이외로 leader와 follewer 전략으로 복제본을 둡니다.
복제본은 비동기적으로 마스터와 동기화됩니다.
복제본은 대게 읽기전용으로 사용됩니다.
하나이상의 Leader 노드에 요청을 보낼 수 있고, 일부 노드가 다운될 경우에도 데이터 지속성을 유지하여 고가용성을 제공하기 위해 클러스터의 전체 Redis 노드를 데이터 복제합니다.
마스터가 다운되면 슬레이브를 마스터로 승격시켜야 합니다.
Redis Sharding
샤딩은 데이터 분할을 뜻하며 파티셔닝이라고도 불립니다.
데이터의 일부만 저장하여 각 노드의 성능이 향상됩니다.
Redis Sentinel
redis v.2.4에 추가되었으며 기본적으로 leader와 follower의 모니터링 서비스입니다.
알림을 전송하고, 리더가 다운된 경우 리더와 팔로워의 역할을 자동으로 전환하는 작업을 수행합니다.
Replication과 유사해 보이지만 Sentienl에는 마스터를 선출할 때 우선순위를 갖는 하나의 마스터 인스턴스가 있습니다.
Sentinal 인스턴스 과반 수 이상이 Master 장애를 감지하면 Slave 하나를 Master로 승격시키고 기존의 Master는 Slave로 강등됩니다.
장애는 어떻게 감지할까?
Sentinal에서 주기적으로 Master에게 PING과 INFO 명령의 응답이 설정한 값 이상동안 오지 않는다면 주관적 다운으로 인지
설정한 정족수(quorum) 이상의 Sentinal에서 해당 Master가 다운되었다고 인지하면 객관적 다운으로 인지
정족수란 분산 트랜잭션이 얻어야 하는 최소 투표수입니다.
Redis Cluster
redis v.3.0에 추가되었으며 세분화, 복제 및 해당 노드 관리를 위한 완전한 클러스터링 솔루션입니다.
Replication, Sharding을 동시에 사용가능합니다.
가장 강력한 솔루션이며 여러 개의 마스터와 여러개의 슬레이브로 구성되어 있습니다.
1000대의 노드까지 확장이 가능합니다.
모든 데이터는 Master 단위로 샤딩되고, Slave 단위로 복제됩니다.
장애는 어떻게 파악할까?
Master가 죽으면 Master는 Slave의 gossip Protocol을 통해 Master의 죽음을 파악하고 Slave 중 하나가 Master로 승격됩니다.
기존 Master가 다시 살아나면 새로운 Maser가 Slave가 됩니다.
gossip Protocol은 각 Redis와 다른 Redis들과 직접 연결하여 상태 정보를 통신하는 것을 의미합니다.
분산환경에서 메시지를 전달하는 커뮤니케이션 방식 중 하나입니다.
결론
sentinel은 One Master 구조이기 때문에 데이터 사이즈가 커지면 스케일업이 필요하다!
추후 확장성을 위해서는 Cluster를 사용하자
참고자료
https://redis.io/docs/management/scaling/
https://redis.io/docs/management/sentinel/
https://redis.io/docs/management/replication/
https://www.baeldung.com/redis-sentinel-vs-clustering
'프로젝트 > redis' 카테고리의 다른 글
공식문서로 알아보는 Redis pipeline (0) 2023.11.05 Redis를 통해 분산락 구현하기 - 실전편 (0) 2023.10.27 Redis를 통해 분산락 구현하기 - 이론편 (0) 2023.10.25 공식문서로 알아보는 Redis persistence (0) 2023.09.05 공식문서로 알아보는 Redis Transaction (0) 2023.08.30