AWS-EC2 Redis-server RDB snapshot write error

저는 Laravel 5.2 프레임워크를 사용하여 웹 애플리케이션을 실행하고 있으며, 세션 드라이버를 redis로 설정하여 다음과 같은 AWS 설정을 사용하고 있습니다.

  • Instance-1: Running web application, with Redis configurations in .env file as follow
  1. Redis-host: aws-private-ip-of-instance-2
  2. Redis-password: NULL
  3. Redis-port: 6379
  • Instance-2: Redis-server running with following configuration
  1. Bind aws-private-ip-of-instance-2 and 127.0.0.1
  2. Working directory /var/lib/redis with 775 permission, and ower-group is redis.
  3. RDB snapshot name dump.rdb with 660 permission, and ower-group is redis.

NOTE: In AWS inbound rule for port 6379 is configured for Instance-2.

모든 것이 잘 작동하지만, Redis가 RDB 파일에 데이터를 쓰려고 할 때 문제가 발생합니다. 프론트엔드에는 다음과 같은 오류 메시지가 표시됩니다.

MISCONF Redis가 RDB 스냅샷을 저장하도록 구성되어 있지만 현재 디스크에 데이터를 영구히 저장할 수 없습니다. 데이터 세트를 수정할 수 있는 명령어가 비활성화되었습니다. 오류에 대한 자세한 내용은 Redis 로그에 있습니다.

Redis 서버 로그에서는 다음과 같은 데이터를 얻을 수 있습니다.

4873:M 23 Sep 10:08:15.028 * 1 changes in 900 seconds. Saving...
4873:M 23 Sep 10:08:15.028 * Background saving started by pid 7392
7392:C 23 Sep 10:08:15.028 # Failed opening .rdb for saving: Read-only file system
4873:M 23 Sep 10:08:15.128 # Background saving error```

시도한 항목들

  • Add vm.overcommit_memory = 1 to /etc/sysctl.conf, as suggested in Redis-administraition-blog
  • Change path to dump.rdb file to tmp folder and change permissions to 777.

이 링크 other Stack Exchange thread 가 도움이 될 듯해요. 사용자가 데이터용으로 사용자 지정 /tmp 디렉토리를 사용하는 경우라면…

간단한 방법은 systemctl edit redis를 실행하는 것입니다. 이렇게 하면 변경 사항을 포함시킬 수 있는 재정의 드롭인 파일 /etc/systemd/system/redis.service.d/override.conf가 생성됩니다 (올바른 섹션에 배치해야 함). :

[Service] ReadWriteDirectories=-/my/custom/data/dir

해당 디렉토리를 직접 생성하고 .conf로 끝나는 파일들을 그 안에 수동으로 넣을 수 있습니다. 하지만 디렉토리를 비워두지 마십시오. 그렇게 하면 서비스가 비활성화됩니다.
어느 쪽이든, systemctl daemon-reload 명령을 실행한 후 서비스를 재시작할 준비가 됩니다.
많은 게시글에서 파일 시스템의 불일치를 근본 원인으로 지적하고 있습니다. EC2를 사용 중이라면, 이 AWS 포럼 게시글을 확인하십시오:
이 문제를 해결하려면 다음과 같은 작업이 필요합니다:

In either case, run systemctl daemon-reload and you are ready to restart your service.

많은 게시글에서 파일 시스템의 불일치가 근본 원인으로 지적되고 있습니다. EC2를 사용 중이라면, 다음 내용을 확인해보십시오. AWS forums post

문제를 고치는 순서는 아래와 같습니다.

  1. 인스턴스를 중지합니다.
  2. 인스턴스의 루트 볼륨을 분리합니다.
  3. 해당 볼륨을 동일한 가용 영역 내의 실행 중인 다른 리눅스 인스턴스에 데이터 볼륨으로 연결합니다.
  4. 해당 볼륨에 대해 파일 시스템 검사(fsck)를 수행하고 문제를 수정합니다.
  5. 볼륨을 분리한 후 원래 인스턴스에 루트 볼륨으로 다시 연결합니다.
  6. 인스턴스를 부팅하고 볼륨이 정상적으로 마운트되었는지 확인합니다.

최후의 수단으로, 가능하다면 인스턴스를 종료(terminate)하십시오.
도움이 되길 바랍니다!