redis(keydb)

keydb

DanielZZI 2024. 5. 22. 22:09
728x90

1. keydb vs redis

기본적으로 keydb는 redis에서 fork되어 개선하고자 탄생했다.

특히 keydb는 기존 redis에서 더 발전한 HA구성이 돋보인다.

기존 reids처럼 master-slave 구성도 지원하지만,

Active-Replica와 Multi-Master 이 두가지 특성이 Redis보다 발전된 load balancing 기능을 지원한다.
이 경우 keydb에서 sentinel을 사용할 필요가 없어진다.(redis-sentinel-HA proxy 더이상 안써도되나!!!)

Active-Replica:

  • Active-Replica 모드는 하나의 마스터 노드와 여러 Replica노드를 허용하는 Redis의 일반적인 Master-Slave replica 모델을 개선한 것이다.
  • Active-Repllica 모드에서는 모든 노드가 읽기 및 쓰기 요청을 처리할 수 있다.
  • 데이터가 한 노드에서 업데이트 되면 다른 노드로 전파된다. 이를 위해서 각 노드는 비동기적으로 서로 데이터를 복제한다.
  • 업데이트가 발생하면 변경사항이 나머지 노드로 전파되고, 이 과정에서 지연이 발생할 수 있다.

Multi-Master:

  • Multi-Master모드에서는 모든 노드가 완전한 마스터로 동작한다. 즉, 각노드가 데이터를 독립적으로 수정하고, 이러한 변경사항이 다른 모든 노드로 동기화된다.
  • 이 모드에서는 노드 간의 데이터 충돌을 방지하기위해 CRDT(Conflict-free Replicated Data Types)와 같은 알고리즘을 사용하여 데이터충돌을 해결한다.
  • 데이터가 어느 한 노드에서 업데이트 되면 , 해당 업데이트가 다른 모든 노드에 복제되어 일관성을 유지한다.

고성능 및 멀티스레드 아키텍쳐

  • keydb는 멀티스레드 아키텍쳐를 통해 Redis의 싱글스레드 제한을 극복하고 성능극대화를 할수있다.

2. 현재 내가 사용하고 있는 구성을 보자

https://github.com/Enapter/charts/tree/master

  • k8s 구성
    replica 3의 statefulset으로 구성되어있고, 각 pod는 독립적인 keydb instance를 실행하며 ,이들간의 비동기 데이터 동기화를 이루고 있다.
    data볼륨을 EmptyDir volume으로 하여 해당pod유실시 기본적으로 데이터는 없어진다.
  • active-replica "yes" 로 active 레플리카를
  • multi-master "yes"로 멀티마스터구조를
  • repl-diskless-sync "yes"로 비동기적인 sync를
  • repl-diskless-sync-delay 5 로 비동기주기를 5초로
  • repl-diskless-load disabled 옵션을 통해 memory기반이 아닌 disk기반 비동기 sync를
    설정하고 있다.

이를 통해서 keydb의 3개 pod가 서로간 sync될 충분한 시간(5초+동기화시간)없이 pod가 전부 다운될경우 데이터가 유실될수 있음을 유의해야한다.