010:00 – 5:27
Redis 리밸런싱 — 슬롯 마이그레이션의 원리와 함정
토스 서버 플랫폼 팀의 발표자가 운영 중 직접 겪은 장애와 분석·해결 사례를 소개한다. 다룰 주제는 세 가지로, Redis 클러스터 노드 추가·리밸런싱, Memcached 장애 시 재분배 문제, Prometheus 메트릭 스크래핑 문제다. 먼저 Redis 클러스터는 0부터 16383까지 총 16384개의 해시 슬롯을 가지며 각 샤드가 슬롯 범위를 나눠 갖고, 각 키는 해시 함수로 하나의 슬롯에 매핑된다. 기존 3개 샤드에 노드 3개를 추가해 슬롯을 다시 나눠 갖는 상황이 리밸런싱의 출발점이다.
슬롯이 다른 노드로 옮겨가는 마이그레이션은 시퀀스가 중요하다. 먼저 목적지 노드에서 해당 슬롯 상태를 IMPORTING으로 바꾸고, 그다음 소스 노드를 MIGRATING으로 바꾼다. 이 순서가 매우 중요한데 그 이유는 뒤의 에러 분석에서 드러난다. 상태 변경 후 소스 노드의 키들을 조회해 마이그레이트 명령을 수행하고, 옮길 키가 남지 않을 때까지 반복한 뒤 목적지부터 슬롯 주인을 바꾸고 옛 주인 상태를 바꿔 마무리한다. 실제 리밸런싱은 redis-cli로 자동 실행할 수 있지만, 안정성이 중요하면 슬롯별로 직접 명령을 실행해 옮기길 권한다. 작업이 끊기면 cluster fix로 복구할 수 있되, 상태가 깨진 사이 같은 키가 여러 노드에 쓰이면 덮어써질 수 있어 주의가 필요하다.