복붙노트

[REDIS] MISCONF 레디 스는 RDB 스냅 샷을 저장하도록 구성되어

REDIS

MISCONF 레디 스는 RDB 스냅 샷을 저장하도록 구성되어

레디 스 (SET foo는 바) 나는 다음과 같은 오류가 점점 오전에 쓰기 중 :

기본적으로 나는 문제가 레디 스 디스크에 데이터를 저장하지만, 문제를 제거하는 방법을 아무 생각 할 수없는 있다는 것을 이해합니다.

또한 다음과 같은 질문 같은 문제를 가지고, 그것은 어떤 답변을 오래 전에 포기하고 대부분의 아마 더 시도는 문제를 해결할 수 없습니다.

해결법

  1. ==============================

    1.경우 오류가 발생하고 몇 가지 중요한 데이터가합니다 (RDB 파일이나 잘못의 디렉토리 또는 디스크 공간 부족에 대한 사용 권한에 문제가) 실행 레디 스 인스턴스에서 무시 될 수 없다, 당신은 항상 RDB 파일을 리디렉션 할 수 어딘가에을 쓸 수 그밖에.

    경우 오류가 발생하고 몇 가지 중요한 데이터가합니다 (RDB 파일이나 잘못의 디렉토리 또는 디스크 공간 부족에 대한 사용 권한에 문제가) 실행 레디 스 인스턴스에서 무시 될 수 없다, 당신은 항상 RDB 파일을 리디렉션 할 수 어딘가에을 쓸 수 그밖에.

    레디 스-CLI를 사용하여, 당신은 이런 식으로 뭔가를 할 수 있습니다 :

    CONFIG SET dir /tmp/some/directory/other/than/var
    CONFIG SET dbfilename temp.rdb
    

    이 후에는 데이터가 RDB 파일에 기록됩니다 있는지 확인하기 위해 BGSAVE 명령을 실행 할 수 있습니다. 있는지 확인이 정보를 실행할 때, bgsave_in_progress가 이미 0입니다 (작업이 성공 또는 발생하는 오류가 있습니다 중 하나). 그 후, 당신은 지금 생성 된 RDB 파일 어딘가에 안전하게 백업을 시작할 수 있습니다.

  2. ==============================

    2.레디 스-CLI를 사용하여, 당신은 스냅 샷을 저장하려고을 중지 할 수 있습니다 :

    레디 스-CLI를 사용하여, 당신은 스냅 샷을 저장하려고을 중지 할 수 있습니다 :

    config set stop-writes-on-bgsave-error no
    

    이것은 빠른 해결 방법입니다,하지만 당신은 당신이 그것을 사용하는 데이터에 대해 관심이 있다면, 당신은 bgsave가 처음에 실패한 이유를 확인하기 위해 확인해야합니다.

  3. ==============================

    3.메모리 부족으로 인해에 bgsave 과정에서 오류가있을 수 있습니다. 이 (FAQ 저장 레디 스에서 배경을) 시도

    메모리 부족으로 인해에 bgsave 과정에서 오류가있을 수 있습니다. 이 (FAQ 저장 레디 스에서 배경을) 시도

    echo 'vm.overcommit_memory = 1' >> /etc/sysctl.conf
    sysctl vm.overcommit_memory=1
    
  4. ==============================

    4.이 오류 때문에 BGSAVE 실패하고 발생합니다. BGSAVE 동안, 레디 스 디스크에 데이터를 저장하도록 자식 프로세스를 만들어 낸다. BGSAVE의 실패에 대한 정확한 이유는 (리눅스 시스템에서 일반적으로 /var/log/redis/redis-server.log에서) 로그에서 확인하지만, 포크 메모리를 할당 할 수 있기 때문에 배 BGAVE의 많은 실패 할 수 있지만. 여러 번 포크는 (기계가 사용할 수있는 충분한 RAM을 가지고 있지만) 때문에 OS에 의해 충돌하는 최적화의 메모리를 할당하는 데 실패합니다.

    이 오류 때문에 BGSAVE 실패하고 발생합니다. BGSAVE 동안, 레디 스 디스크에 데이터를 저장하도록 자식 프로세스를 만들어 낸다. BGSAVE의 실패에 대한 정확한 이유는 (리눅스 시스템에서 일반적으로 /var/log/redis/redis-server.log에서) 로그에서 확인하지만, 포크 메모리를 할당 할 수 있기 때문에 배 BGAVE의 많은 실패 할 수 있지만. 여러 번 포크는 (기계가 사용할 수있는 충분한 RAM을 가지고 있지만) 때문에 OS에 의해 충돌하는 최적화의 메모리를 할당하는 데 실패합니다.

    으로는 레디 스 자주 묻는 질문에서 읽을 수 있습니다 :

    OS가이 디스크에 쓰기를 수행 생각하는 레디 스 때문에 예방 적 사전 포크를 실패 할 수 있습니다, 많은 메모리로 필요하지 않습니다.

    이 문제를 해결하려면, 당신은 할 수 있습니다 :

    /etc/sysctl.conf에 수정 및 추가 :

    vm.overcommit_memory=1
    

    그런 다음 sysctl을을로 다시 시작

    FreeBSD의 경우 :

    sudo /etc/rc.d/sysctl reload
    

    Linux의 경우 :

    sudo sysctl -p /etc/sysctl.conf
    
  5. ==============================

    5.경우에 당신은 리눅스 시스템에서 작업 또한 데이터베이스의 파일 및 폴더 권한을 다시 확인한다.

    경우에 당신은 리눅스 시스템에서 작업 또한 데이터베이스의 파일 및 폴더 권한을 다시 확인한다.

    DB를 그것의 경로를 통해 얻을 수있다 :

    대가로, 디 :

    및 명령 줄에서 LS는 -l. 사용자가 레디 스 때문에 그것 또한 사용자를 줄 좋은 sudo는 대한 Chown -R 실행하여 폴더의 소유권을 레디 스 같은 디렉토리의 권한을 755되어야하며 파일의 사람들은 또한 644을해야 정상적으로 실행하는 서버 레디 스 레디 스 : 레디 스 / 경로 /로 / RDB / 폴더에 있습니다. 이것은 여기이 질문에 대해 자세히 설명하고있다.

  6. ==============================

    6.감사합니다 모든 사람이 문제를 확인하기 위해, 분명히 오류가 bgsave 동안 생산되었다.

    감사합니다 모든 사람이 문제를 확인하기 위해, 분명히 오류가 bgsave 동안 생산되었다.

    나를 위해, 입력의 설정 세트 정지 - 쓰기 - 온 - bgsave 오류없이 쉘과 레디 스를 다시 시작하여 문제를 해결했다.

  7. ==============================

    7.의지 위의 대답은 확실히 당신의 문제를 해결하지만, 여기에서 실제로 무슨 일이 일어나고 있는지입니다 :

    의지 위의 대답은 확실히 당신의 문제를 해결하지만, 여기에서 실제로 무슨 일이 일어나고 있는지입니다 :

    rdb.dump 파일을 저장하기위한 기본 위치는 (현재 디렉토리를 나타내는) ./이다. 당신은 당신의 redis.conf 파일에서이를 확인할 수 있습니다. dump.rdb 파일이 생성 및 업데이트됩니다 경우 따라서, 당신은 레디 스 서버를 시작할 곳에서 디렉토리입니다.

    당신이 레디 스이 dump.rdb 파일을 만들 수있는 올바른 권한이없는 디렉토리에있는 레디 스 서버를 실행하기 시작했습니다 보인다.

    설상가상으로, 레디 스도 아마 데이터의 적절한 절약을 보장하는 RDB 파일을 생성 할 수있을 때까지 당신도 서버를 종료 할 수 없습니다.

    이 문제를 해결하기 위해, 당신은 레디 스-CLI를 사용하여 활성 레디 스 클라이언트 환경으로 이동하고 DIR 키를 업데이트하고 프로젝트 폴더 또는 루트가 아닌 저장 할 수있는 권한이있는 폴더에 그 값을 설정해야합니다. 그런 다음 dump.rdb 파일의 생성을 호출 BGSAVE를 실행합니다.

    CONFIG SET dir "/hardcoded/path/to/your/project/folder"
    BGSAVE
    

    당신은 당신이에 서버를 시작하는 디렉토리에 dump.rdb 파일을 저장해야하는 경우가 레디 스를 기록 할 수 있도록 (지금, 당신은 디렉토리에 대한 권한을 변경해야합니다. 당신은 그렇게하는 방법에 대한 유래를 검색 할 수 있습니다 ).

    이제 레디 스 서버를 종료 할 수 있어야한다. 우리가 경로를 하드 코딩합니다. 하드 코딩 거의 좋은 연습없고 내가보기 엔 당신의 프로젝트 디렉토리에서 레디 스 서버를 시작으로 디렉토리 키 등을 변경하는 것이 좋습니다. /`.

    CONFIG SET dir "./"
    BGSAVE
    

    다른 프로젝트에 대한 레디 스를 필요로 그 방법은, 덤프 파일은 현재 프로젝트의 디렉토리가 아닌 하드 경로의 프로젝트 디렉토리에 생성됩니다.

  8. ==============================

    8.이 오류가 발생하고 오류 때문에 디스크 공간이 충분 없다는 것을 로그에서 알아낼 수 있었다 있었다. 내 경우에는 삽입 된 모든 데이터는 더 이상 필요하지 않았다. 그래서 FLUSHALL로했습니다. 레디 스-RDB-bgsave 프로세스가 실행 된 이후, 그것은 또한 데이터를 플러시 할 수 없습니다. 나는 단계 아래에 다음과를 계속할 수있었습니다.

    이 오류가 발생하고 오류 때문에 디스크 공간이 충분 없다는 것을 로그에서 알아낼 수 있었다 있었다. 내 경우에는 삽입 된 모든 데이터는 더 이상 필요하지 않았다. 그래서 FLUSHALL로했습니다. 레디 스-RDB-bgsave 프로세스가 실행 된 이후, 그것은 또한 데이터를 플러시 할 수 없습니다. 나는 단계 아래에 다음과를 계속할 수있었습니다.

    프로세스 레디 스-RDB-bgsave는 더 이상 위의 단계 이후에 실행되지 않았다.

  9. ==============================

    9.좀 더 영구적 인 수정 레디 스의 일부가되지 않은 RDB 기능에 대한 설정이 2.x는 일에 다시가 라인 200-250 주위 /etc/redis/redis.conf에서 볼 수 있습니다.

    좀 더 영구적 인 수정 레디 스의 일부가되지 않은 RDB 기능에 대한 설정이 2.x는 일에 다시가 라인 200-250 주위 /etc/redis/redis.conf에서 볼 수 있습니다.

    현저하게

    dir ./
    

    로 변경할 수 있습니다

    dir /home/someuser/redislogfiledirectory
    

    또는 당신은 모든 라인 저장 주석, 및 지속성에 대해 걱정하지 수 있습니다. (/etc/redis/redis.conf의 주석을 참조하십시오)

    또한, 잊지 마세요

    service redis-server stop
    service redis-server start
    
  10. ==============================

    10.그 모든 답은 RDB가 저장 실패 이유를 설명하지 않습니다.

    그 모든 답은 RDB가 저장 실패 이유를 설명하지 않습니다.

    내 경우로, 나는 레디 스 로그를 확인하고 발견

    터미널에서 다음 명령을 실행합니다 :

    sudo egrep -i -r 'killed process' /var/log/
    

    그것은 표시 :

    그게입니다! 이 과정 (RDB 저장 레디 스)가 OOM 킬러에 의해 살해

    의미 :

    https://github.com/antirez/redis/issues/1886

    어떤 프로세스 찾기는 리눅스 OOM 킬러에 의해 살해되었다

  11. ==============================

    11.당신이 맥 OS를 실행하는 최근 카탈로 업그레이드 한 경우, 당신은이 문제에 제안 BREW 서비스 레디 스를 다시 실행해야 할 수도 있습니다.

    당신이 맥 OS를 실행하는 최근 카탈로 업그레이드 한 경우, 당신은이 문제에 제안 BREW 서비스 레디 스를 다시 실행해야 할 수도 있습니다.

  12. ==============================

    12.나는이 뒤에있는 주된 이유는 레디 스에 의해 메모리 (RAM)의 소비되었으며, 유사한 문제에 직면했다. 내 EC2 기계 (소비 할 수 7.4 arounf) 8기가바이트 RAM을했다

    나는이 뒤에있는 주된 이유는 레디 스에 의해 메모리 (RAM)의 소비되었으며, 유사한 문제에 직면했다. 내 EC2 기계 (소비 할 수 7.4 arounf) 8기가바이트 RAM을했다

    내 프로그램이 실행되면 RAM의 사용이 일반적으로 MISCONF 레디 스 오류를 트리거 거의 RAM에 ~ 100MB의 남기지 않고 7.2 GB 개까지 갔다 ...

    당신은 htop 명령을 사용하여 RAM 소비를 결정할 수 있습니다. htop 명령을 실행 한 후의 Mem 속성을 찾습니다. 이 높은 consumtion 표시되면 (내 경우는 7.2GB / 7.4GB처럼) 그것은 더 큰 메모리와 인스턴스의 업그레이드하는 것이 좋습니다. 설정 세트를 사용하여이 시나리오에서 정지 - 쓰기 - 온 - bgsave-오류는 서버에 대한 재앙이 될 것 서버 (있는 경우)에서 실행중인 다른 서비스가 중단 될 수 있습니다. 그래서, 그것은 더 나은 config 명령을 피하고 당신의 레디 스 기계를 업그레이드합니다.

    참고 :이 작업을하기 위해 htop 설치해야 할 수도 있습니다 : apt-get을 htop를 설치 sudo는

    그 필요하지 않을 경우 이에 대한 또 하나 개의 솔루션은 시스템에서 실행중인 다른 RAM 무거운 서비스 할 수 있습니다, 서버 / 기계 / 인스턴스에서 실행중인 다른 서비스에 대한 확인 및 그것을 중지합니다. 컴퓨터 사용 서비스 --status 모두에서 실행되는 모든 서비스를 확인하려면

    그리고 직접 config 명령을 붙여 사람들을위한 제안, 약간 reasearch 할 및이어야 같은 명령을 사용하기 전에 사용자에게 경고하시기 바랍니다. 그리고 @Rodrigo 그의 코멘트에 언급 : "그것은 오류를 무시 근사하지 않습니다."

  13. ==============================

    13.FWIW, 나는이에 달려 솔루션은 단순히 상자에 스왑 파일을 추가 할 수 있었다. 나는이 방법을 사용 : https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04

    FWIW, 나는이에 달려 솔루션은 단순히 상자에 스왑 파일을 추가 할 수 있었다. 나는이 방법을 사용 : https://www.digitalocean.com/community/tutorials/how-to-add-swap-on-ubuntu-14-04

  14. ==============================

    14.나도 같은 문제에 직면했다. 두 답변 (가장 upvoted 하나는 허용 하나) 그냥 같은 임시 수정 프로그램을 제공합니다.

    나도 같은 문제에 직면했다. 두 답변 (가장 upvoted 하나는 허용 하나) 그냥 같은 임시 수정 프로그램을 제공합니다.

    또한, 설정 세트 정지 - 쓰기 - 온 - bgsave-오류는 무엇을이 옵션이하는 일은 정지 쓰기가 중지되었는지와의 데이터를 작성하지 않고 이동하는 것을 통지에서 레디 스이기 때문에 이상이 오류를 찾기 위해 끔찍한 방법은 없습니다 스냅 사진. 이것은 단순히이 오류를 무시합니다. 이 참조

    당신은 레디 스 서비스를 다시 시작하면 레디 스-CLI에서 설정에서 디렉토리 설정에 관해서는,이 너무 지워지지하며 같은 오류가 다시 팝업된다. redis.conf에서 디렉토리의 기본값은 ./이며, 루트 사용자로 레디 스를 시작하는 경우, 다음 ./ IS / 쓰기 권한 오류를 부여하고, 따라서되지 않는.

    가장 좋은 방법은 해당 디렉토리 redis.conf 파일 및 설정 적절한 권한의 디렉토리 매개 변수를 설정하는 것입니다. 데비안 배포판의 대부분은 /etc/redis/redis.conf에 있어야한다

  15. ==============================

    15.현재 공식 레디 스에 re-등장 클라이언트에이 오류 메시지가주는 레디 스 쓰기 액세스 문제는 컨테이너를 고정 표시기.

    현재 공식 레디 스에 re-등장 클라이언트에이 오류 메시지가주는 레디 스 쓰기 액세스 문제는 컨테이너를 고정 표시기.

    이 루트 소유 폴더로 공식 레디 스 이미지 시도에서 레디 스 오히려 불행한 일이다 컨테이너 / 데이터 폴더에있는 .rdb 파일을 작성하고 너무 비 영구적 위치하는 경우 (데이터가 사라집니다 기록하여 컨테이너 / 포드 충돌).

    그래서 비 활동 시간 후에는 루트가 아닌 사용자로 레디 스 컨테이너를 실행 한 경우 (예를 들어 고정 표시기 (1007) -u 실행하기보다는 기본 고정 표시기 실행 -u 0), 당신은 (서버 로그에 멋지게 자세한 오류 MSG를 얻을 것이다 ) 레디 스 고정 표시기 로그를 참조하십시오

    1:M 29 Jun 2019 21:11:22.014 * 1 changes in 3600 seconds. Saving...
    1:M 29 Jun 2019 21:11:22.015 * Background saving started by pid 499
    499:C 29 Jun 2019 21:11:22.015 # Failed opening the RDB file dump.rdb (in server root dir /data) for saving: Permission denied
    1:M 29 Jun 2019 21:11:22.115 # Background saving error
    

    , 예컨대 (1007, 등 / 호스트 시스템에 TMP 쓰기 권한을 가지고 여기에 루트가 아닌 사용자가) 그래서 당신이해야 할 것은 외부 위치에 컨테이너의 / 데이터 폴더를 매핑하는 것입니다 :

    docker run --rm -d --name redis -p 6379:6379 -u 1007 -v /tmp:/data redis
    

    그것은 공식 고정 표시기 이미지의 잘못입니다 그래서 당신이 거의 확실 만남만을 생산 ... 하룻밤 동안 일부 특히 조용한 휴일 주말이 "시한 폭탄"생산 (작성해야 / tmp를하지 / 데이터) : /를

  16. ==============================

    16.AFS 디스크 공간이 서버에서 작업하는 동안 내 인증 토큰했다가 레디 스 서버 저장하려고 할 때 권한 거부 반응을 산출하는 만료 때문에 나는이 문제를했다. 내 토큰을 새로 고쳐이 문제를 해결 :

    AFS 디스크 공간이 서버에서 작업하는 동안 내 인증 토큰했다가 레디 스 서버 저장하려고 할 때 권한 거부 반응을 산출하는 만료 때문에 나는이 문제를했다. 내 토큰을 새로 고쳐이 문제를 해결 :

    kinit를 USERNAME_HERE -l (30D) && aklog

  17. ==============================

    17.나를 위해

    나를 위해

    config set stop-writes-on-bgsave-error no
    

    그리고 내 맥이 작동 다시로드

  18. ==============================

    18.당신이 윈도우 머신에서 로컬 레디 스를 실행하는 경우, "관리자 권한으로 실행"을 시도하고 작동되는지 확인합니다. 나와 함께, 문제는 레디 스 기본적으로 권한을 제한하는 "프로그램 파일"폴더에 위치했다이었다. 예상대로.

    당신이 윈도우 머신에서 로컬 레디 스를 실행하는 경우, "관리자 권한으로 실행"을 시도하고 작동되는지 확인합니다. 나와 함께, 문제는 레디 스 기본적으로 권한을 제한하는 "프로그램 파일"폴더에 위치했다이었다. 예상대로.

    그러나, 자동으로 당신은 그것을가 했어야되는 더 많은 권한을 부여하지 않으려는 관리자로 레디 스를 실행하지 마십시오. 당신은이 책에서이 문제를 해결하려면.

    그래서 우리는 신속하게 관리자로 실행하여 문제를 식별 할 수 있었다, 그러나 이것은 치료되지 않습니다. 가능성이 시나리오는 쓰기 권한이없는 및 그 결과로 DB 파일이 같은 위치에 저장되어있는 폴더에 레디 스를 넣어 가지고 있다는 것입니다.

    당신은 redis.windows.conf를 열고 다음과 같은 구성을 검색하여이를 해결할 수 있습니다 :

    # 작업 디렉토리.     #     파일 이름 지정과 함께 설명 # DB,이 디렉토리 내에 작성됩니다     # 'dbfilename'구성 지시문을 사용하여 위.     #     # 추가] 만 파일도이 디렉토리 내에 생성됩니다.     #     # 당신이 여기없는 파일 이름을 디렉토리를 지정해야합니다.     DIR ./

    경로로 변경 디렉토리는 ./ 당신은 정기적 읽기 / 쓰기 권한이

    당신은 또한 당신이 올바른 권한이 알고있는 폴더로의 전체의 레디 스 폴더를 이동 할 수있다.

  19. ==============================

    19.혹시 고정 표시기 / 고정 표시기-작성을 사용하여 파일에 쓰는 레디 스 않도록하려면, 당신은 레디 스의 설정을 만들 수 있습니다 및 용기에 장착

    혹시 고정 표시기 / 고정 표시기-작성을 사용하여 파일에 쓰는 레디 스 않도록하려면, 당신은 레디 스의 설정을 만들 수 있습니다 및 용기에 장착

    docker.compose.override.yml

      redis:¬
          volumes:¬
            - ./redis.conf:/usr/local/etc/redis/redis.conf¬
          ports:¬
            - 6379:6379¬
    
    

    여기에서 기본 설정을 다운로드 할 수 있습니다

    redis.conf 파일 메이크업에 반드시 다음 3 줄을 주석

    save 900 1
    save 300 10
    save 60 10000
    

    당신은 여기에 영구 데이터를 제거하기 위해 더 많은 솔루션을 볼 수 있습니다

  20. ==============================

    20.내 경우에는 그것은 디스크 여유 공간이 관련되었다. 나는이 오류가 사라진 공간을 확보 할 때 (당신은 DF -h bash는 명령으로 확인할 수 있습니다).

    내 경우에는 그것은 디스크 여유 공간이 관련되었다. 나는이 오류가 사라진 공간을 확보 할 때 (당신은 DF -h bash는 명령으로 확인할 수 있습니다).

  21. ==============================

    21.나는 양조 업그레이드 업그레이드 레디 스 후이 문제를 얻었다.

    나는 양조 업그레이드 업그레이드 레디 스 후이 문제를 얻었다.

    재부팅 한 후, 그냥 벌금을했다. 아마 레디 스 인스턴스가 도움이 될 수 있습니다 다시 시작.

    BREW 서비스는 레디 스를 다시 시작

  22. ==============================

    22.@ 크리스가 지적한 바와 같이이 문제는 메모리 부족에 대한 가능성이 높습니다. 우리는 우리가 MySQL을 (innodb_buffer_pool_size)에 너무 많은 RAM을 할당 할 때 발생하기 시작했다.

    @ 크리스가 지적한 바와 같이이 문제는 메모리 부족에 대한 가능성이 높습니다. 우리는 우리가 MySQL을 (innodb_buffer_pool_size)에 너무 많은 RAM을 할당 할 때 발생하기 시작했다.

    레디 스 우리는 MySQL을 innodb_buffer_pool_size 감소 다른 서비스를위한 충분한 RAM이있어 확인하십시오.

  23. ==============================

    23.내 경우에는, 그 이유는 디스크 매우 낮은 여유 공간 (35 메가)이었다. 나는 다음을했다 -

    내 경우에는, 그 이유는 디스크 매우 낮은 여유 공간 (35 메가)이었다. 나는 다음을했다 -

  24. ==============================

    24.당신은 chmod를하고 새 폴더를 chown하지합니다

    당신은 chmod를하고 새 폴더를 chown하지합니다

    대한 Chown -R 레디 스 그리고 chmod를 ...

  25. ==============================

    25.@Govind 라이의 해결책은 '당신이 서버를 시작하는 디렉토리에 dump.rdb 파일을 저장합니다'

    @Govind 라이의 해결책은 '당신이 서버를 시작하는 디렉토리에 dump.rdb 파일을 저장합니다'

    당신의 레디 스 폴더를 마우스 오른쪽 단추로 클릭하고 속성을 클릭 한 다음 보안 탭을 누릅니다. 사용 권한 대화 상자를 열려면 편집을 클릭합니다.

    '모두의 응용 프로그램 패키지를 클릭합니다

    사용 권한 상자에서 확인란 '모든 권한을'허용을 선택합니다.

  26. from https://stackoverflow.com/questions/19581059/misconf-redis-is-configured-to-save-rdb-snapshots by cc-by-sa and MIT license