자동 시작 및 복구
이 페이지는 레포지토리가 부팅 시 자동으로 마운트되고 시작되는 방법, 그리고 서버가 이미 실행 중인 상태에서 레포지토리가 중단되었을 때 주기적 조정자가 복구하는 방법을 설명합니다.
레포지토리에서 자동 시작을 활성화하거나 비활성화하는 방법은 서비스: 부팅 시 자동 시작을 참조하세요.
자동 시작 작동 방식
레포지토리의 자동 시작을 활성화하면 Rediacc는 256바이트의 무작위 LUKS 키파일을 생성하고 암호화된 볼륨의 LUKS 슬롯 1에 추가합니다. 키파일은 다음 위치에 저장됩니다:
{datastore}/.credentials/keys/{guid}.key
이를 통해 머신은 패스프레이즈를 입력하지 않고 레포지토리를 마운트할 수 있습니다. LUKS 슬롯 0(패스프레이즈)은 변경되지 않습니다.
부팅 시 rediacc-autostart.service라는 원샷 systemd 서비스가 자동 시작이 활성화된 레포지토리 목록을 읽고, 각 레포지토리를 키파일을 사용해 마운트하며, 레포지토리별 Docker 데몬을 시작하고, Rediaccfile의 up() 훅을 실행합니다. 종료 시에는 서비스가 down()을 실행하고, Docker를 중지하며, LUKS 볼륨을 닫습니다.
보안 참고: 키파일은 패스프레이즈 없이 레포지토리에 루트 수준으로 접근할 수 있게 합니다. 서버에 루트 접근 권한을 가진 누구든 자동 시작이 활성화된 레포지토리를 마운트할 수 있습니다. 민감한 레포지토리에 자동 시작을 활성화하기 전에 위협 모델에 따라 평가하세요.
복구 공백
부팅 자동 시작은 부팅당 정확히 한 번만 실행됩니다. 이후 지속적으로 실행되는 라우터 왓치독은 실행 중인 Docker 데몬을 가진, 이미 실행 중인 레포지토리 내의 컨테이너만 재시작할 수 있습니다. LUKS 볼륨을 다시 마운트하거나 중단된 레포지토리별 Docker 데몬을 재시작할 수 없습니다.
즉, 서버가 부팅된 후 레포지토리의 LUKS 볼륨이 언마운트되거나 Docker 데몬이 중단되면, 부팅 서비스도 왓치독도 이를 복구하지 못합니다. 조정자가 존재하기 전에는 이 상태의 레포지토리는 운영자가 개입할 때까지 중단된 상태로 유지되었습니다.
주기적 조정자
rediacc-autostart-reconcile.timer systemd 타이머가 약 3분마다 실행되며 renet repository reconcile을 실행합니다. 자동 시작이 활성화된 각 레포지토리에 대해 조정자는 세 가지를 확인합니다:
- LUKS 볼륨이 마운트되어 있는가?
- 레포지토리별 Docker 데몬이 실행 중인가?
- 레포지토리의 서비스가 실행 중인가?
확인 중 하나라도 실패하면 조정자는 키파일을 사용해 레포지토리를 복구합니다: 볼륨을 마운트하고, Docker 데몬을 시작하며, up()을 실행합니다. 패스프레이즈는 필요하지 않습니다.
정상인 레포지토리, 현재 콜드 백업 실행이 소유하고 있는 레포지토리, 또는 백오프 창 내에 있는 레포지토리는 건너뜁니다.
백오프 및 영구 실패 마커
복구에 실패한 레포지토리는 매 틱마다 즉시 재시도되지 않습니다. 조정자는 지수 백오프를 사용합니다:
| 실패 횟수 | 다음 시도까지 대기 시간 |
|---|---|
| 1 | 1분 |
| 2 | 2분 |
| 3 | 5분 |
| 4 | 15분 |
| 5회 이상 | 30분, 그 후 60분 |
5번 연속 실패하면 조정자는 다음 위치에 영구 마커 파일을 씁니다:
/var/lib/rediacc/reconcile/failed/{guid}
이 파일은 로그 순환 후에도 남아 있습니다. 파일이 존재한다는 것은 레포지토리에 운영자의 주의가 필요하다는 의미입니다. 조정자는 오류 수준으로 실패를 로그하고 마커가 지워질 때까지 해당 레포지토리의 자동 복구 시도를 중단합니다.
영구 복구 실패의 일반적인 원인:
- 신뢰되지 않거나 만료된 레포지토리 라이선스: 라이선스 확인이
up()전에 실행됩니다. - 키파일 누락:
{datastore}/.credentials/keys/{guid}.key의 키파일이 삭제된 경우 조정자는 패스프레이즈 없이 볼륨을 마운트할 수 없습니다. - 손상된 Rediaccfile: 구문 오류 또는 항상 0이 아닌 값으로 종료하는
up()훅.
라우터 왓치독과의 관계
조정자와 라우터 왓치독은 서로 다른 수준의 실패를 처리하며 상호 보완적으로 설계되었습니다:
| 레이어 | 처리 내용 |
|---|---|
| 라우터 왓치독 | 실행 중이고 마운트된 레포지토리 내, 라이브 Docker 데몬이 있는 컨테이너 수준 재시작 |
조정자(rediacc-autostart-reconcile.timer) | 레포지토리 수준 복구: LUKS 재마운트, Docker 데몬 재시작, up() 재실행 |
단일 컨테이너가 정상적인 레포지토리 내에서 충돌하면 왓치독이 처리합니다. 전체 레포지토리 데몬이 중단되면 조정자가 처리합니다.
복구 상태 확인
타이머 및 서비스 상태
systemctl status rediacc-autostart-reconcile.timer
systemctl list-timers rediacc-autostart-reconcile.timer
조정자 로그
journalctl -u rediacc-autostart-reconcile.service
journalctl -u rediacc-autostart-reconcile.service --since "1 hour ago"
영구 실패 마커
영구 실패 마커가 있는 레포지토리 목록:
ls /var/lib/rediacc/reconcile/failed/
각 파일 이름은 레포지토리 GUID입니다. rdc config repository list와 교차 참조하여 GUID를 레포지토리 이름에 매핑하세요.
근본적인 문제를 해결한 후 마커를 지우려면 파일을 삭제하세요:
rm /var/lib/rediacc/reconcile/failed/{guid}
조정자는 다음 타이머 틱에서 복구를 다시 시도합니다.
관련 페이지
- 서비스: 부팅 시 자동 시작: 자동 시작 활성화 및 비활성화, 키파일 관리
- 백업 및 복원: 실행 중인 서비스와 콜드 백업의 상호 작용