
백엔드
OpenStack VM 전원 동기화 로직 분석
두줄요약
OpenStack Nova가 libvirt lifecycle 이벤트를 받아 VM 전원 상태를 비동기적으로 감지하고 DB와 동기화하는 흐름을 설명했습니다. 이벤트 매핑, 큐 전달, 지연 처리, ComputeManager의 상태 비교까지 정리했습니다.
핵심 내용
- OpenStack Nova가 libvirt lifecycle 이벤트를 받아 VM 전원 상태를 감지하는 흐름 정리
- libvirt 이벤트를 nova virtevent로 매핑한 뒤 큐와 파이프로 비동기 전달
- ComputeManager가 이벤트 상태와 DB 전원 상태를 비교해 불일치 시 동기화
- STOPPED 이벤트는 재부팅 가능성 때문에 지연 처리
구조와 흐름
- nova-compute 구동 시 libvirtd에 이벤트 리스너 등록
- native thread에서 이벤트 수신 후 event queue 적재
- dispatch thread가 큐를 읽어 lifecycle event를 compute manager로 전달
주의할 점
- libvirt native thread에서는 로깅 API 사용 제한
- STOPPED 이벤트의 즉시 반영 시 재부팅과 혼동 가능
- 이벤트 지연으로 현재 상태와 불일치할 수 있어 DB 동기화 전 상태 비교 필요
적용해볼 점
- 비동기 이벤트 수신과 전달을 위한 큐/파이프 구조 참고
- 하이퍼바이저 이벤트를 DB와 직접 연결하지 않고 중간 계층에서 정합성 검증
- 상태 전이별 매핑 테이블을 두어 운영 로직 단순화
