Redis Cluster는 Redis 배포를 스케일링하여 여러 노드에서 더 높은 가용성, 결함 공차 및 데이터 샤딩을 달성하는 데 인기있는 솔루션입니다. Redis 클러스터의 적절한 구성에는 최적의 성능, 안정성 및 관리 가능성을 보장하는 몇 가지 모범 사례가 포함됩니다.
클러스터 아키텍처 및 노드 구성
Redis 클러스터는 최소 3 개의 마스터 노드가 안정적으로 작동해야합니다. 이상적으로는 생산 클러스터에는 최소 6 개의 노드가 포함되어야하며 각 마스터에는 하나 이상의 복제본이 있습니다. 이 설정은 고 가용성을 보장하여 마스터 노드가 실패 할 경우 자동 장애 조치가 가능합니다. 각 노드는 클러스터 모드에서 실행되며 다음을 포함하여 특정 구성을 활성화해야합니다.
- 각 redis 인스턴스에서 클러스터 모드를 활성화하려면`클러스터 가능성 예 '.
-클러스터 노드 상태가 저장된 파일을 지정하는 클러스터-콘피드 파일 (예 :`Nodes.conf`).
-`클러스터-노드 시간 초과 최대 시간 정의 노드는 실패하기 전에 노드를 풀 수 없을 수 있습니다 (일반적으로 5000 ~ 15000 밀리 초로 설정).
`클러스터-콘피드 파일 '은 노드 ID, 매핑 및 슬롯 소유권과 같은 중요한 상태 정보를 유지하기 때문에 Redis에 의해 자동으로 관리되며 수동으로 편집해서는 안됩니다. 각 노드는 시작시 고유 노드 ID를 할당하며 IP 또는 포트가 변경 되더라도 수명 동안 지속됩니다.
하드웨어 및 네트워크 설정
단일 고장 지점을 피하기 위해 별도의 물리적 또는 가상 머신에 노드를 배포해야합니다. 노드 간 네트워크 연결은 클라이언트 통신 포트 (일반적으로 TCP 6379 또는 사용중인 서비스 포트)와 클러스터 인턴 노드 통신을위한 클라이언트 통신 포트 (일반적으로 TCP 6379 또는 사용중인 서비스 포트)와 클러스터 버스 포트 (예 : 16379)를 허용해야합니다.
네트워크 인터페이스 및 방화벽을 신중하게 구성하여 클라이언트와 클러스터 노드간에 노드와 선택적 으로이 트래픽을 허용합니다. 모든 인터페이스에 바인딩하지 않고 특정 개인 IP에`bind` 지시문을 설정하면 보안이 향상됩니다.
지속성 및 데이터 내구성
필요한 데이터 내구성 및 성능 트레이드 오프에 따라 RDB 스냅 샷 또는 AOF (파일 전용 파일)와 같은 지속 메커니즘을 활성화합니다. AOF는 모든 쓰기 작업을 기록하여 더 나은 내구성을 제공하지만 대기 시간 및 IO 오버 헤드를 추가 할 수 있습니다. RDB 스냅 샷을 AOF와 결합하면 성능과 내구성의 균형을 맞출 수 있습니다.
`appendonly 예 '지침은 AOF 모드를 활성화합니다. 이러한 설정은 워크로드 패턴과 허용 가능한 데이터 손실 창에 따라 신중하게 조정해야합니다.
메모리 관리 및 퇴거 정책
`maxmemory '설정을 구성하여 Redis가 노드에서 사용 가능한 메모리에 맞는지 확인하십시오. 'allkeys-lru'와 같은 'maxmemory-policy'를 사용하여 적절한 퇴거 정책을 선택하여 메모리 제한에 도달 할 때 모든 키에서 가장 최근에 사용 된 알고리즘을 사용하십시오. 메모리 사용 및 HIT/MISS 비율의 일관된 모니터링이 중요합니다.
Redis 클러스터는 데이터 세트가 각 노드에서 메모리에 완전히 맞을 때 가장 잘 수행됩니다. 과도한 교환 또는 메모리 과잉 헌신을 피하십시오.
슬롯 관리 및 데이터 배포
클러스터는 키 공간을 16,384 해시 슬롯으로 나눕니다. 모든 마스터 노드에 분산됩니다. 클러스터를 만들 때 모든 슬롯이 마스터 노드로 덮여 있는지 확인하십시오. 클라이언트는 해시 슬롯 계산을 기반으로 쿼리를 올바른 노드로 라우팅하려면 클러스터 인식이어야합니다.
다른 슬롯에 매핑 된 여러 키와 관련된 작업을 피하십시오. 여기에는 제한되거나 덜 효율적인 크로스 슬롯 명령이 필요합니다.
'Redis-Cli -Cluster Create'와 같은 도구를 사용하여 적절한 슬롯 할당 및 복제 할당을 자동으로 부트 스트랩 클러스터로 부트 스트랩하십시오.
클러스터 인식을위한클라이언트 구성
Redis 클러스터 토폴로지를 처리하도록 클라이언트 라이브러리를 구성하십시오. 많은 클라이언트 라이브러리는 자동 검색 및 클러스터 노드가 슬롯에 실패하거나 재구성 할 때 클러스터 노드의 재구성을 포함하여 클러스터 지원을 제공합니다. 이는 클라이언트 오류를 방지하고 노드 장애 조치 또는 스케일링 작업 중에 신뢰성을 향상시킵니다.
클라이언트는 이동 중에 재 시도하거나 리디렉션을 요청하고 클러스터 상태의 업데이트 된보기를 유지하도록 구성해야합니다.
보안 고려 사항
비밀번호 인증 (`QuessePass 'Directive)를 활성화하고 방화벽 규칙을 통한 네트워크 액세스 제한 및'BIND '구성을 통한 노출 된 인터페이스를 제한하여 클러스터 노드를 보안합니다. 가능한 경우 TLS 암호화를 사용하여 운송 중에 데이터를 보호하십시오.
클러스터 모드에서 REDIS를 실행할 때 보호 모드를 비활성화하지만 네트워킹 구성이 신뢰할 수없는 클라이언트에서 클러스터를 분리하는지 확인하십시오.
모니터링 및 유지 보수
노드 가용성, 대기 시간, 메모리 사용, 복제 지연 및 클러스터 상태 변경을 포함한 클러스터 건강에 대한 포괄적 인 모니터링을 구현하십시오. Redis Sentinel, 타사 모니터링 플랫폼 또는 클라우드 제공 업체 솔루션과 같은 도구는 운영 전략의 일부 여야합니다.
정기적으로 장애 조치 메커니즘을 테스트하고 제어 노드 재시작 또는 스케일링 연습을 수행하여 클러스터 탄력성을 확인합니다.
성능 튜닝
워크로드 세부 사항을 기반으로 Redis 및 클러스터 구성을 조정합니다.
- 차단 명령을 최소화하고 파이프 라인 또는 LUA 스크립트를 사용하여 처리량을 최적화하십시오.
-잘못된 장애 조치를 피하기 위해 네트워크 대기 시간 특성에 따라 '클러스터-노드 타임 아웃'을 조정하십시오.
- 일관된 해싱 및 스마트 키 이름 지정을 사용하여 슬롯 분포를 최적화하십시오.
- 큰 키나 값을 피하고 큰 물체를 작은 덩어리로 나누는 것을 고려하십시오.
- 노드를 추가하거나 제거하여 수평으로 스케일링하기위한 Redis Cluster의 기본 메커니즘을 사용합니다.
백업 및 복구
클러스터 설정과 정렬 된 설계 백업 전략. 마스터 노드 또는 복제본에서주기적인 RDB 스냅 샷을 사용하고 백업을 외부로 저장하십시오. 적절한 슬롯 및 노드 상태 동기화없이 라이브 클러스터에서 백업을 직접 복원하지 마십시오.
복구를 위해 저장된 구성 및 백업에서 클러스터를 재구성하기 위해 Redis가 권장하는 절차를 사용하십시오.
요약
Redis 클러스터 구성 표지에 대한 모범 사례 :
- 장애 조치를 위해 복제본으로 최소 3 개의 마스터 노드를 설정합니다.
-적절한 클러스터 관련 구성 지시문 (`클러스터 가능성 ',`클러스터-콘피드 파일,`클러스터-노드-타임 아웃') 보장.
- 클라이언트 및 클러스터 버스 통신을위한 올바른 네트워크 설정을 갖춘 적절한 하드웨어에 노드를 배포합니다.
- 지속성 및 튜닝 메모리 및 퇴거 정책이 작업량 요구에 맞게 활성화됩니다.
- 해시 슬롯을 효과적으로 관리하고 클라이언트가 클러스터 인식을 보장합니다.
- 인증 및 네트워크 컨트롤로 클러스터를 보호합니다.
- 클러스터 건강 및 성능을 정기적으로 모니터링합니다.
- 백업, 복구 및 스케일링 작업을 신중하게 계획합니다.