2017-05-24 4 views
1

저는 장고 프로젝트에서 샐러리의 중개인으로 redis를 사용하고 있습니다. 배포 프로세스의 일환으로 서비스를 다시 시작합니다. 즉, redis, 셀러리, gunicorn (django) 등은 다시 시작합니다. 그러나 redis가 종료되지 않는 문제가 발생합니다.redis를 재시작하는 데 오랜 시간이 걸립니다.

$ sudo systemctl restart redis 
$ 

그리고 15 분 동안 글을 쓰다가 멈 춥니 다. journalctl는 (로그 내가 가정 하룻밤 회전 한) 어떤 항목을 보여줍니다, systemctl status은 SIG (기간)를 비활성화로 레디 스 유닛을 표시하지만 이외의 그 무엇을하고 있는지 전혀 표시 :

May 24 10:31:22 staging systemd[1]: Stopping Advanced key-value store... 
May 24 10:31:22 staging run-parts[305]: run-parts: executing /etc/redis/redis-server.pre-down.d/00_example 

나는 SIG-용어 레디 스를 허용 이해하지 정상적으로 나가기 위해 셀러리가 작업을 수행하는지 또는 장고 서버가 액세스하고 있는지 궁금해하지만 그 서비스를 중단 한 상태에서 여전히 중단되었습니다. 상태를 확인할 수있는 위치/수행중인 작업을 알지 못하는 곳이 있습니까?

편집 :

31602:M 24 May 10:59:56.097 * 1 changes in 900 seconds. Saving... 
31602:M 24 May 10:59:56.101 * Background saving started by pid 1151 
1151:C 24 May 10:59:56.103 # Failed opening .rdb for saving: Read-only file system 
31602:M 24 May 10:59:56.204 # Background saving error 

I가 기본값을 사용하고 있습니다 : 아하, 확인 그래서 대신에 실제로 몇 가지 정보를 얻을 않는 /var/log/redis를 기록, 실제로 기본적으로 systemd에 기록하지 않습니다 레디 스를 밝혀 dirdbfilename 지시

는 은 는

그것은 레디 스에 의해이 소유는 왜 읽기 전용으로 설정 될 것이다 ..

# The filename where to dump the DB 
dbfilename dump.rdb 

# The working directory. 
# 
# The DB will be written inside this directory, with the filename specified 
# above using the 'dbfilename' configuration directive. 
# 
# The Append Only File will also be created inside this directory. 
# 
# Note that you must specify a directory here, not a file name. 
dir /var/lib/redis 

[email protected]:/var/lib/redis$ ls -l 
total 252 
-rw-r--r-- 1 redis redis 249649 May 23 02:44 dump.rdb 
?

확인 ... 그래서

[email protected]:/var/lib/redis$ redis-cli config get dir 
1) "dir" 
2) "/var/spool/cron" 
[email protected]:/var/lib/redis$ redis-cli config get dbfilename 
1) "dbfilename" 
2) "root" 

이 매우 이상하게 보일 시작합니다. 지구상에 무엇을 설정할 수 있었을까요?

+1

왜 재 다이얼을 다시 시작했다고 생각하십니까? – e4c5

+0

좋은 점은 현실이 아닐지 몰라도 변경하려는 생각이 들었습니다. 문제가 무엇인지 알아내는 것이 대부분입니다. – ptr

+0

Redis는 캐시의 전체 내용을 디스크에 쓰려고합니다. 그런 다음 디스크에서 전체 캐시를 읽어야합니다. 느린 하드 드라이브에서 천천히 reall 수 있습니다 – e4c5

답변

0

점점 더 이런 공격의 결과였다 보이기 시작이야 : https://github.com/antirez/redis/issues/3594

흥미로운 것은 내가 방화벽 레디 스를 실행 한 것입니다. 현재 구성이 어떻게 변경되었는지 확실하지 않습니다. 다행히도 중요한 정보가없는 스테이징 서버이므로 문제가 무엇인지 정확히 알아낼 때까지 내려 놓을 수 있습니다.

업데이트 : 이에 대한 조사가 끝나면 서버에 파일을 설치 한 후 방화벽을 활성화하기 전에 공격이 발생했음을 확인할 수 있습니다. 사용하고 있던 redis 버전은 기본적으로 0.0.0.0에 바인딩됩니다. 취약성 시간이 ~ 10 초가되어야하므로 배포 스크립트를 사용하여 서버를 설정했습니다. 패키지를 설치하기 전에 방화벽을 활성화하십시오.

기본적으로 0.0.0.0으로의 redis 바인딩을 싫어합니다. 특히 노출 된 상태로두면 서버를 완전히 손상시킬 수 있습니다. 그러나 필자가 읽은 것을 토대로 그 논쟁은 끝났고 이후 버전에서는 개선되었다.

관련 문제