[Redis] 장애상황과 대응:Redis

기훈·2024년 8월 23일

Redis

목록 보기
1/12

Master-Replica 전환 후 Client의 인식 문제

  • Client 는 Master에는 Write, Replica에는 Read request를 날림

  • 어떤 이유로 Master-Replica 전환

  • Client 는 새로 바뀐 정보가 아닌 예전 Master/Replica 정보를 계속
    참조하 며 Write 가 불가하다는 메세지가 발생됨

  • READONLY You can't write against a read only replica.


full sync 실패로 인한 장애유발 : client -output -buffer-limit slave 수정

  • 동기화 문제로 인해 RDB를 반영하는 과정에서 client-output-buffer-limit 값을 초과하면 반영이 중단될 수 있다. 이 경우, 디스크에서는 계속해서 RDB 파일이 생성되고, Replica는 동기화를 반복적으로 시도하는 악순환에 빠지게 된다.

통신 불가로 인한 Buffer 증가, 데이터 삭제

  • 클라이언트에게 전달해야할 데이터가 출력 버퍼에 계속 쌓이게 됨

  • client-output-buffer-limit에 도달하면, Redis는 클라이언트의 연결을 해제


그 외

Client 무한 증가

  • Redis에서 timeout을 설정하더라도, 특정 라이브러리에서는 주기적으로 신호를 보내기 때문에 해당 연결이 idle connection으로 인식되지 않아 자동으로 종료되지 않을 수 있다.

  • 이로 인해 클라이언트 측에서 직접 연결을 종료하거나, TCP 연결을 임의로 강제 종료하는 작업이 필요하다. 관련 설정으로는 timeout=21600과 maxclient=10000이 있다.

AOF 쓰기작업

  • AOF 는 Client 에서 보내는 명령을 모두 hard disk에 기록하는 파일임. (Append Only File).

  • 이를 통해 RDB로 한꺼번에 쓰지 않아도 되지만, 너무 빈번하게 발생되는 경우 Redis Service 성능에 영향을 준다.
    (관련 parameter : appendfsync: everysec),

  • AOF 쓰기가 너무 오래 걸리는 경우 성능에 문제가 되기도 한다. 때문에 대량 쓰기(rdb, aof 생성) 시 fsync를 하지
    않도록 설정할 수 있다. (관련 Paramter : no-appendfsync-on-rewrite no )

KEYS, HGETALL 등 과도한 요청으로 인한 장애

  • 전체 데이터를 조회하는 식의 요청은 최대한 지양하는 것이 좋다.

  • KEY 명령어는 rename command 를 통해 실행되지 않게 조정할 수 있으며, 전체 데이터를 지우는 flushall, flushdb 등의 명령어도 제한해 놓는 것이 좋다. (관련 parameter : rename-command keys “”)

0개의 댓글