IL-0265 Open Build Service · 2023-01-05networking
HAProxy 패키지 업데이트 뒤 Open Build Service 참조 서버가 약 2시간 동안 내려갔다
2023년 1월 5일, Open Build Service 팀은 참조 서버의 패키지를 업데이트했다. 이런 작업은 보통 CET/CEST 기준 목요일 오전 8시부터 10시까지의 점검 시간에 한다. 이번에는 점검 시간이 11시에 끝난다고 잘못 알고, 점검 시간이 지난 뒤에 시작했다. 10시 26분 UTC 에 zypper 업데이트를 시작했고 1분 뒤 OBS 가 내려갔다. 업데이트된 haproxy 패키지에 예상하지 못한 설정 변경이 들어 있었다.
10시 35분에 보조 HAProxy 시스템으로 넘기려 했지만 소용이 없었다. 갱신된 인증서의 자동 동기화가 예고 없이 멈춰 있어서, 보조 시스템에는 옛 인증서가 남아 있었다. 팀은 10시 47분부터 HAProxy 설정 파일을 고쳤다. 그래도 서비스는 올라오지 않았다. 다른 서버의 Apache 설정에 "MAINTENANCE" 플래그가 남아 있었기 때문이다. 그 서버는 평소 이 플래그를 쓰지 않았다. 그 Apache 는 점검 페이지를 보여 주고 Passenger 를 시작하지 않았다. 12시 18분에 플래그를 지우고 서버를 재시작했고, 12시 20분에 OBS 가 다시 올라왔다. 참조 서버는 약 2시간 동안 내려가 있었고 영구적인 손상은 없었다.
- 심각도
- –
- 영향 범위
- OBS reference server: API and web interface unavailable, answering with a maintenance message or HTTP 503
- 영향 사용자
- everyone using the OBS reference server
- 지역
- –
- 감지까지
- 0m
- 복구까지
- 1h 53m
증상
업데이트 직후 Open Build Service 참조 서버가 내려갔다. 애플리케이션은 점검 안내 메시지나 HTTP 503 Service Unavailable 오류로 응답했고, 아무도 API 와 웹 화면을 쓸 수 없었다. 팀도 사용자도 이를 알아챘고, 사용자들은 여러 채널로 알려 왔다.
팀은 먼저 보조 HAProxy 시스템으로 넘기려 했지만 실패했다. 보조 시스템의 인증서가 갱신되지 않은 옛것이었기 때문이다. 갱신한 인증서를 자동으로 동기화하던 작업이 아무 알림 없이 멈춰 있었다.
업데이트된 HAProxy 패키지가 예상하지 못한 설정 변경을 함께 들여왔다. 팀은 설정 파일을 고쳤지만 서비스는 한동안 계속 내려가 있었고, 팀은 서버가 왜 다시 올라오지 않는지 원인을 짐작해 가며 디버깅했다.
원인은 다른 서버의 Apache 설정에 남아 있던 "MAINTENANCE" 플래그였다. 이 플래그 때문에 그 Apache 는 점검 페이지를 보여 주고 Passenger 를 시작하지 않았다. 이 플래그를 아무도 알아채지 못했다. Apache 데몬 자체는 눈에 띄는 문제 없이 떠 있었다.
증상 서비스 중단
원인
- 촉발
- 참조 서버에서 zypper 업데이트로 haproxy 패키지를 업데이트했다.
감지
팀과 사용자 모두 애플리케이션이 내려간 것을 알아챘다. 사용자들이 여러 소통 채널로 알려 왔다. 문제는 업데이트 직후에 드러났다.
조치
- HAProxy 설정 파일을 모두 고쳤다.
- 다른 서버의 Apache 설정에 남아 있던 점검 모드 플래그를 지웠다.
- 서버를 재시작했고, 12시 20분 UTC 에 OBS 가 다시 올라왔다.
후속 조치
- 점검 모드 설정 블록이 도움이 되는지 문제가 되는지 논의한다.
- 보조 프록시들의 SSL 인증서 동기화를 다시 살핀다.
교훈
"zypper up" 을 실행하면 무엇이 바뀌는지 더 잘 따져 봐야 한다. 업그레이드 중에는 주의가 필요한 것이 있기 때문이다. 보조 서버와 그 설정도 지켜봐야 한다. 평소에는 Salt 로 모든 것을 배포하지만 이번에는 보조 서버의 인증서를 놓쳤다. Apache 를 통해 Passenger 를 시작하면, Apache 에 문제가 있을 때 Passenger 프로세스가 뜨지 않는다. 그러므로 데몬이 문제없이 떠 있어도 Apache 설정 전체를 두 번 확인해야 한다. 긴 휴가 뒤에는 예상하지 못한 일이 생길 것이라고 생각해야 한다.
출처
관련 사례
–
내 클러스터에도 있는지 확인하기
AI 도구와 스크립트용
- 이 사례의 JSON: https://incidentlib-api.benchlet.com/cases/IL-0265
- 가장 비슷한 사례들: https://incidentlib-api.benchlet.com/cases/IL-0265/similar
- MCP 서버(Streamable HTTP, 키 없음):
https://incidentlib-mcp.benchlet.com/mcp
API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.