발생 이슈
현재 cow를 redis에서 해결하는 좋은 방법은 없음. 그래서 절반 이하로 메모리 사용량을 유지하면 최대 2배를 해도 여유로워서 가장 좋긴 하다.
fork할 경우 부모와 자식 프로세스가 읽기용 메모리는 공유해서 메모리를 절약 -> process는 두개지만 메모리를 하나를 사용
공유 메모리에 쓰기가 발생하는 프로세스가 해당 메모리를 복사해서 사용하게 됨
redis child process는 rdb생성을 담당하기 때문에 읽기만 주로 발생
aof에서는 자신의 메모리 페이지에 변경이 발생한 프로세스가 해당 메모리 페이지를 복사(fork)한 뒤에 그곳에 write/delete를 실행한다.
따라서 모든 page에 변경이 일어나게되면 물리 메모리는 최대 2배까지 늘어날 수 있게 된다.
redis가 fork하게되는 경우
AOF(Append Only File)?
레디스는 데이터를 메모리에 저장하기 때문에 레디스가 내려가면 모든 데이터는 유실된다.
이 유실을 방지하기 위해서 AOF기능과 RDB방식을 제공한다.
AOF는 CUD명령이 실행될 때 마다 버퍼에 기록 후 주기적으로 appendonly.aof 파일로 동기화된다.
이 파일이 너무 커지면 데이터 전체를 다시 쓰는 rewrite기능이 있다. rewrite를 하면 aof파일 사이즈가 작아지고, 최종 수정된 마지막 값만 남게 된다.
장애 확인 방법
해결방법