[YT-CC-1174:] 승객 5 응용 프로그램 제어 개선
3864 단어 ey-cookbooks-stable-v5
묘사
패치 설명
CC-1174에 기록된 Passenger5 오류를 수정한 것입니다.
승객에게 잘못이 하나 있다.언제 시작하든지/tmp/passenger-standalone-xxxx 디렉터리를 만들 것입니다.이것은 그것이 임시 파일을 저장하는 곳이다.문제는 승객이 시동을 걸 수 없을 때 이 디렉터리가 지워지지 않는다는 것이다.
우리는 승객들이 사망할 때 다시 작동할 수 있도록 Monit를 운행한다.우리의 기본 모니터링 주기는 30초다.이는 몬트가 승객이 사망했다고 판단하면 30초에 한 번씩 승객을 가동시키려는 뜻이다.만약 승객의 시동을 막는 것이 있다면, 모니트는 결국 승객의 시동을 반복적으로 시도할 것이다.시간이 지날수록 수천 개의 독립 디렉터리로 누적될 수도 있다.우리는 이미 몇몇 응용 실례의inode가 이미 다 쓴 것을 보았다.
어떤 이유로 승객들이 시동을 걸 수 없었는지는 아직 밝혀지지 않았지만, 우리는 다음 두 가지 기술 중 하나를 통해 이 문제를 복제할 수 있습니다.
권장 릴리즈 노트
Passenger5 시작 스크립트에 체크를 추가하여/tmp/passer standalone이 중복되지 않도록 합니다.*카탈로그
위험을 예측하다
높다Passenger5 응용 프로그램 제어 스크립트가 변경됩니다.만약 이것이 파괴된다면, 프로그램은 시작할 수 없을 것이다.
관련된 구성 요소
승객
테스트 완료 설명
QA 참고 사항 - 테스트는 별도의 환경에서 수행됩니다.새로운 실례를 추가하는 테스트가 완료되지 않았습니다.
품질 보증 설명
Passenger5 스택을 실행하는 최신 V5(비 QA) 스택에서 클러스터 환경을 시작합니다.todo 프로그램을 사용합니다.테스트 시작 시 app 메인 실례만 사용하십시오.
현재의 행동을 되돌아보다
1) PID 파일을 삭제할 때
- 승객 독립 PID 파일 삭제
rm /data/todo/shared/pids/passenger.8000.pid
- 운행watch cat /data/todo/shared/pids/passenger.8000.pid
및 몇 분 대기 - 승객이 성공적으로 작동하고 PID를 쓸 수 있는지 관찰- 몇 분 후
ls -lah /tmp
를 운행하고 신규 승객을 독립적으로 계산합니다.*목록PID 파일을 삭제하면 디렉토리가 분당 하나씩 표시됩니다.인스턴스를 복원하는 데 도움을 주려면 PID 파일을 다시 작성합니다.운행
ps ax | grep [P]assengerAgent
을 통해 승객 PID를 받을 수 있습니다.출력의 첫 번째 열은 PID입니다.PID를 가져온 후 실행echo <PID> > /data/todo/shared/pids/passenger.8000.pid
2) 승객 프로세스가 종료되었지만 Nginx 프로세스가 종료되지 않은 경우sudo kill -9 <PID>
watch cat /data/todo/shared/pids/passenger.8000.pid
을 하고 몇 분을 기다린다. - 승객이 성공적으로 작동하는지 관찰하고 PIDls -lah /tmp
신규 승객을 별도로 계산합니다.*목록독립 프로세스 인스턴스 복구를 지원하려면 Nginx 프로세스를 종료합니다.실행
ps aux | grep nginx | grep passenger
- 결과의 첫 번째 열이 Nginx PID입니다.그리고 kill -9 <PID>
로 이 과정을 중지한다.QA 스택으로 업그레이드 및 오류 수정 확인
프로모션 후 위와 같은 단계에 따라 새 동작을 테스트합니다.
1) PID 파일을 삭제할 때
2) 승객 프로세스가 종료되었지만 Nginx 프로세스가 종료되지 않은 경우
이 두 가지 상황에 대해 승객의 독립을 더 이상 보지 마십시오.*목록은
/tmp
에 누적되어 있습니다.최대 5분 후에는 /tmp
에 생성된 새 승객 독립 목록을 볼 수 없습니다.다중 응용 프로그램 환경에서 같은 그룹의 테스트를 실행합니다.
이전 기능이 여전히 유효한지 확인
1) 배포
루트 사용자로 실행
passenger-status
합니다.승객 직원의 PID를 적으세요.배치하다
배포가 완료되면 다시 실행
passenger-status
합니다.승객 스태프의 새 PID를 보셔야 합니다.2) 신규 애플리케이션 시작 사례
새 프로그램을 시작합니다.
응용 프로그램 실례가 자원 공급을 완성한 후 ssh를 응용 프로그램 실례에 연결합니다.
승객이 HTTP 요청을 실행하고 처리하는지 확인합니다.
- 작업자
passenger-status
를 실행하고 작업자의 처리 완료 수를 확인합니다.- 어플리케이션 URL을 여러 번 클릭하여 최소한 하나의 요청이 새 어플리케이션 인스턴스에 적중될 가능성 증가
- 재실행
passenger-status
및 작업자토론 #1
LGTM토론 #2
코드 검토 의견
의 "처리됨"개수 확인grep ":<%= @port %> "
.승객들은 PID를 변경할 필요가 없습니다.-n
와$NGINX_PID
의 조건에서 사용하면$PASSENGER_PID
어때요?-n
는 비지 않는다는 뜻이고! -z
도 비지 않는다는 뜻이죠?/usr/local/bin/passenger start
토론 #셋
@mikong제가'약속'을 넣었어요.https://github.com/engineyard/ey-cookbooks-stable-v5/pull/319/commits/300b1eec5c1444f9f9f5e3ced5afc3ca97322dd4제1항을 처리하다.
다중 애플리케이션 환경을 테스트하기 위해 QA 지침을 업데이트했습니다.
토론 #4
Reference
이 문제에 관하여([YT-CC-1174:] 승객 5 응용 프로그램 제어 개선), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://github.com/engineyard/ey-cookbooks-stable-v5/issues/319텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)