Redis를 다중화하고, Sentinel 구성을 해보자

cloud_park·2023년 10월 8일
0

현재의 django 어플리케이션에서 Redis의 정보가 사라지면 데이터가 빠르게 없어진다.

따라서 Redis를 다중화하고, Fail-over 할수 있는 방법이 필요하다고 생각했다.

사실상 Cache에 올라가는 내용은 API에서 받거나, DB에서 받는 내용이므로 운영/개발계 모두 동일한 내용을 Fork해도 된다고 생각했다. 이후 필요할경우 세션에 대한 부분을 Redis내부에서 분류하여서 변경하지 않을예정

master-slave 구성

master-slave 구성은 간단하다. 기존의 글 에서 redis.conf 파일에 아래 한줄만 추가해주면 된다.

...
slaveof [IP주소] [포트번호]
...

이후 redis-cli에서 info replication을 통해 아래와 같이 'master:link_status'를 확인해보면 된다.

Master에서는 같은 명령어가 아래와 같이 보인다. slave에 대하여 slave를 할 수 있는데, 그렇게 2단계에 걸친 slave된 노드들은 여기서 보이지 않는다.

Redis-sentinel 구성

bitnami에서 제공하는 redis-sentienl을 사용할 예정. sentinel에서 slave를 master로 승격하는 투표를 하는데, 이 투표의 기준선이 '쿼럼'이라고 보면된다. 쿼럼이 2이상이여야하기 때문에 sentienl구성은 sentinel 노드가 2개 이상이여한다. 하드웨어적으로 아예 분리된 상태에서 3개여야 HA구성의 의미가 있다.
자세한 설정은 아래를 참고하자
https://hub.docker.com/r/bitnami/redis-sentinel/

-v 폴더내의 아래 파일이 있어야한다. 따라서 아래 기준으로 아래 폴더가 있어야한다. 또한 파일에 대한 권한이 있어야한다.

chmod -R 777 /var/myredis/persistence/
/var/myredis/persistence/redis-sentinel/conf/sentinel.conf
 docker run -d \
  -e REDIS_MASTER_HOST=[Master의 IP주소] \
  -e REDIS_MASTER_PORT_NUMBER=6379 \
  -v /var/myredis/persistence:/bitnami \
  -p 26379:26379 \
  --network redis-net \
  --name redis_sentinel \
  --restart=always \
  bitnami/redis-sentinel:latest
docker exec -it redis_sentinel redis-cli -p 26379 

그런데.. slave에서는 sentienl이 있다고 나오지만, master에서는 sentinel이 Master node의 1개라고 나온다. Master는 Oracle Cloud에 있고, slave 2개는 내 Local망에 있기 때문이다. NAT 설정을 해줘야한다.

profile
Now in progress of untitled advance

0개의 댓글