diff --git a/journey/troubleshooting/250801_크론잡로그동기화설정.md b/journey/troubleshooting/250801_크론잡로그동기화설정.md new file mode 100644 index 0000000..c0fdcbf --- /dev/null +++ b/journey/troubleshooting/250801_크론잡로그동기화설정.md @@ -0,0 +1,46 @@ +# 250801 크론잡 로그 동기화 설정 + +tags: [logs, sshfs, cron, sync, infra] + +상위 원칙: +- [Writing Principles](https://github.com/happybell80/0_VALUE/blob/main/02_Governance/writing-principles.md) +- [Infra Project Identity](../../00_Philosophy/00_IDENTITY/Infra_Project_Identity.md) +- [Core Infrastructure Principles](../../00_Philosophy/01_PRINCIPLES/Core_Infrastructure_Principles.md) + +## 배경 +- Docker와 SSHFS(SSH Filesystem) 직접 결합으로 중앙 로그 저장 구조를 만들려 했지만, 마운트 충돌과 권한 불일치로 실패했다. +- 51124 SSD에 먼저 로그를 기록한 뒤, 51123 HDD로 배치 동기화하는 구조가 더 운영 가능하다고 판단했다. + +## 관련 문서 +- [250731_로그저장소_SSHFS설정과_템플릿해결책](./250731_로그저장소_SSHFS설정과_템플릿해결책.md) +- [251014_skill-rag-file_sshfs_allow_other_해결](./251014_skill-rag-file_sshfs_allow_other_해결.md) + +## 확인된 사실 +1. Docker 볼륨이 SSHFS 마운트 포인트와 직접 충돌했다. +- 기존 기록: `mkdir /mnt/51123logs: file exists` + +2. SSHFS 권한은 UID/GID 정합성에 민감했다. +- `admin(1001)`로 마운트하면 컨테이너 사용자 `999`와 충돌했다. +- 권한 정합화 없이는 `rsync` 임시 파일 생성도 실패했다. + +3. 배치 동기화는 실제로 성공했다. +- 51124 서비스 로그를 51123 `/mnt/hdd/logs/51124-server/`로 동기화한 기록이 남아 있다. +- 매일 새벽 3시 크론 실행 구조가 당시 운영안으로 채택됐다. + +## 실제 적용 구조 +### 51124 원본 +- `/home/admin/ivada_project/*/logs/` + +### 51123 백업 +- `/mnt/hdd/logs/51124-server/*` + +### 동기화 방식 +- SSHFS 마운트 경로를 직접 Docker 볼륨으로 쓰지 않고, `rsync` 기반 크론 배치로 넘긴다. + +## 결론 +- 이 이슈의 핵심 교훈은 `Docker + SSHFS 직접 결합보다 배치 동기화가 더 안정적이었다`는 점이다. +- 외부 저장소나 원격 마운트와 컨테이너 런타임을 직접 묶을 때는 권한, 상위 디렉토리 생성, 마운트 포인트 충돌을 먼저 검증해야 한다. + +## 전후 관계 문서 +- 이전: [250731_로그저장소_SSHFS설정과_템플릿해결책](./250731_로그저장소_SSHFS설정과_템플릿해결책.md) +- 관련: [260115_postgresql_neo4j_tcp_healthcheck](./260115_postgresql_neo4j_tcp_healthcheck.md)