레디스 AOF 시 오류 발생
레디스 aof 시 아래와 같은 오류가 발생했습니다.
이 에러는 AOF 쓰기작업을 하는데 디스크에 쓰는 속도가 느려 레디스가 느려질 수 있다는 의미입니다.
Asynchronous AOF fsync is taking too long (disk is busy?). |
AOF 와 관련된 레디스 옵션 (일부)
appendonly
aof 쓰기를 활성화 하는 여부입니다.
appendfsync
always : 명령어가 수행될 때마다 aof 파일로 디스크 쓰기를 진행합니다.
everysec : 1초에 한번씩 aof 파일로 디스크 쓰기를 진행합니다.
no : aof 파일로 디스크 쓰는것을 OS 에서 진행합니다.
1
2
3
4
5
|
"appendonly" # AOF 진행
"yes"
"appendfsync" # AOF 파일로 쓰는 주기 (1초) always | everysec | no
"everysec"
|
cs |
중요 포인트
everysec 와 always 는 레디스 fsync 명령어로 처리되며, 이 작업이 완료될때까지 다른 명령어들은 대기하게 됩니다.
no 는 OS 에서 하기 때문에 레디스 명령어로 처리되지 않아서 aof 에 쓰는동안에도 다른 명령어가 수행 가능합니다.
그렇지만 OS 에서 쓰기 동작은 30초에 한번씩 수행될 가능성이 있기 때문에 이 부분을 고려해야 합니다.
이 오류로 인해 파생되는 문제
1. 클라이언트에서 레디스 접속이 느려져 Timeout 으로 커넥션 실패할 수 있습니다.
레디스 접속 시 레디스에서 응답을 못해주기 때문입니다.
2. 다른 레디스 명령어들의 처리가 fsync 가 완료될때까지 늦어집니다.
3. 센티넬 모니터링을 하고있는경우 sdown 과 odown 알람발생 혹은 Failover 까지도 진행될 수 있습니다.
센티넬-레디스는 PING-PONG 으로 헬스체크를 하는데 PONG 응답이 늦게오면
센티넬에서는 레디스가 다운되었다고 판단하여 sdown - odown 으로 가기 때문입니다.
결론
AOF 기능을 써야하는경우 가능하다면 appendfsync 를 NO 옵션으로 설정합니다.
혹은 Timeout 과 관련된 설정을 더 늘리는 방법도 있습니다.
'Database > Redis' 카테고리의 다른 글
[Redis] jemalloc No such file or directory 오류 해결하기 (0) | 2021.03.08 |
---|---|
[Redis] save 동작 시 메모리 사용률에 대한 정리 (0) | 2021.01.09 |
[Redis] Key 관리를 통해 메모리를 효율적으로 사용하는 방법 (0) | 2021.01.08 |
[Redis] Jedis 에서 Sentinel 의 pub/sub 을 제대로 인지할까? (0) | 2020.12.27 |
[Redis] Jedis 에서 Redis Sentinel 을 통한 마스터 정보 얻는 방법 (0) | 2020.12.23 |