Redis (Stand alone) HA 구성 feat. Pacemaker

이동욱·2023년 8월 21일

Redis (Stand alone) HA 구성 feat. Pacemaker

1. 개요


redis를 공부하던 중 aof 파일을 통해 데이터를 백업 및 복구 한다는 것을 알게 되어 혹시 해당 파일을 각 서버가 공유한다면 redis stand alone을 사용하더라도 n중화를 통한 HA구성이 가능하지 않을까 라는 생각이 들어 환경을 구성하여 테스트 해보았다.

redis cluster나 sentinel을 통해 HA 구성을 하지만 실질적으로 필요한 물리적 서버가 너무 많다는 것이 문제이기도 하고 cluster 같은 경우는 failover 시 master, slave node를 다시 수동으로 바꿔줘야 하기 때문에, 그리고 sentinel은 quorum 이상의 sentinel server가 살아있어야 하기 때문에 이런 기타 등등의 이유로 stand alone으로 HA 구성을 해보았다.

일단 결론적으론 aof 파일을 공유 시 각 서버에서 redis 기동 시 해당 파일을 읽어 데이터 공유가 가능하였다. 물론 기동 시에 파일을 읽는 것이기 때문에 active standby 구성 밖엔 안됐지만 그래도 뭐 ...

pacemaker를 사용해 본격적으로 이중화 구성을 테스트했다. 실제 어떻게 구성하는지에 대한 구체적인 방법은 적어 놓지 않았고 HA구성을 위한 아이디어만 간략하게 적었다. 나머지 open source들의 사용법들은 다른 사이트 참고하여 진행하면 되겠다.

2. 준비


  • redis
  • pacemaker
  • server 2대 이상

3. 구성


  1. 각 서버에 redis, pacemaker 설치

  2. redis AOF 사용

  • redis.conf 내 appendonly yes, appendfsync always
    • redis 내 쓰기명령을 aof 파일로 백업하고 쓰기명령 때마다 항상 기록한다는 의미
  1. redis AOF 파일이 존재하는 dir mount
  • nfs, sshfs, ...
    • 서버 reboot 시에도 유지되도록 설정 필요
  • 각 서버에서 dir mount 후 redis 기동 시 aof 파일을 읽어 데이터 공유하는 것을 확인 가능
  1. pacemaker로 redis service active-standby 이중화

4. 유의사항


redis AOF 파일은 redis 내 쓰기명령에 대한 것만 기록하기 때문에 클라이언트 어플리케이션에서 pubsub 같은 기능을 사용할 경우 redis failover가 발생하면 redis 기동 시 aof 파일을 읽어도 sub한 채널에 대한 데이터는 사라지게 된다.

따라서 어플리케이션 쪽에서 적절한 조치가 필요하다. 나는 채널 하나를 sub만 하면 됐기 때문에 어플리케이션에서 redis에 client list 명령어를 날려 어플리케이션 서버 ip가 sub한 client list가 있는지 확인 후 없으면 다시 sub하는 명령어를 날리도록 해결했다.

그리고 redis failover가 발생해도 어플리케이션 쪽에서는 failover가 발생한 것을 모르기 때문에 scheduler를 통해 polling 방식으로 위 로직을 수행했다.

5. 요약


  1. redis AOF 파일로 데이터 백업 및 복구
  2. AOF 파일이 있는 dir mount
  3. pacemaker를 통해 HA 구성
  4. pubsub 등등은 application 쪽에서 적절한 조치
profile
lduk 웹 개발자(back)

0개의 댓글