Redis 에서 Replication은 매우 핫 한 기능입니다. 다만, 메모리를 많이 쓰고 있는 경우에, Replication을 새로 걸어서 새로운 슬레이브를 추가하고 싶다면, Replication이 실패하는 경우가 생길 수 있습니다. 이 때, 어떤 것들을 보아야 할지… 알아보도록 하겠습니다.
1. 디스크의 여유 공간을 확인한다.
-> 의외로 쉽게 발생할 수 있는 이슈입니다. Redis는 Default로 fork 후에 메모리의 내용들을 압축해서 RDB로 저장하게 됩니다. 즉, 디스크에 여유 공간이 없으면 실패하게 됩니다. 이 때는 뭐, 간단하게 디스크 여유 공간을 만들어줌으로써, 해결할 수 있습니다.
3.0에서 추가될것으로 보이는 것 중에, 기존에는 Replication을 위해서 RDB 파일을 로컬에 저장하고 이를 읽어서 전달하는 방식이었는데, 이제, 파일을 저장하지 않고 메모리 상황에서 바로 보내는 기능이 추가되는 중이라서, 이 이슈는 점점 없어질 것으로 보입니다.
다만 2.8까지라면… 마스터/슬레이브 모두 디스크 여유 공간을 확인해야 합니다.
2. 디렉토리의 퍼미션을 확인한다.
-> 위와 같은 이유지만, 퍼미션 역시 확인해야 합니다. 이 경우 RDB 파일을 저장하지 못해서, 계속 마스터/슬레이브 연결이 실패하게 됩니다. 이때 재미난 상황은 슬레이브에서는 마스터랑 연결되었다고 나오지만… 마스터는 슬레이브가 연결된걸 확인하지 못합니다. SYNC 명령이 안끝나서 그렇게 인식이 되는… 재미난…
3. 메모리 사이즈를 확인한다.
-> 보통 버추얼 메모리라는 것은 물리 메모리 + Swap 사이즈를 말합니다. 이 크기를 넘어가면 프로세스가 죽을 수 있는데, vm.overcommit_memory 를 설정함으로써, 회피할 수 있습니다. 다만 이것도 너무 크기가 크면 실패할 수 있습니다.
sysctl vm.overcommit_memory=1