개인용 LLM 클라우드 구축: Tailscale, xyOps, n8n을 이용한 분산 Ollama 오케스트레이션
요약
본 글은 비용 절감과 보안을 위해 공개 포트 노출 없이 개인용 LLM 클라우드를 구축하는 방법을 설명합니다. Tailscale로 격리된 네트워크를 구성하고, xyOps와 n8n 같은 오픈 소스 도구를 활용하여 분산 Ollama 모델 풀을 오케스트레이션했습니다. 이를 통해 OpenAI 호환 API 엔드포인트를 제공하며 높은 가용성을 확보했습니다.
핵심 포인트
- Tailscale로 격리된 내부 네트워크를 구축하여 보안을 강화합니다.
- xyOps가 서버 상태 모니터링 및 로드 밸런싱의 중앙 역할을 수행합니다.
- n8n을 API 게이트웨이로 사용하여 OpenAI 표준 형식에 맞춰 요청을 처리합니다.
- 전체 시스템은 공용 포트 노출 없이 높은 가용성과 장애 조치 기능을 제공합니다.
저는 비용이 많이 드는 클라우드 LLM API를 사용하지 않고 싶었지만, 오픈 소스 모델(Ollama)의 동적 풀을 관리하기 위해 로컬 Kubernetes 클러스터를 설정하는 과도한 엔지니어링과 복잡성을 감수하고 싶지는 않았습니다. 또한 엄격한 요구사항이 있었습니다: 공개 포트 노출 제로(Zero public port exposure). 결국 저는 네 가지 경량 오픈 소스 도구를 연결하여 5대의 베어 메탈 서버에 걸쳐 매우 탄력적인 분산 'LLM 워커 그룹'을 구축했습니다. 이 시스템은 단일하고 통합된, OpenAI와 호환되는 API 엔드포인트로 응답합니다.
아키텍처 분석:
- 네트워크 계층 (Tailscale): 플릿(fleet)의 모든 서버는 Tailscale 사이드카 컨테이너를 실행합니다. 이들은 암호화되고 격리된 피어-투-피어 메시 네트워크(Tailnet)에 연결됩니다. 모든 노드는 내부 IP를 통해 네이티브하게 통신합니다. 공개 방화벽은 건드리지 않으며, 포트 :11434는 웹에서 완전히 숨겨집니다.
- 오케스트레이션 계층 (xyOps): 이것이 중앙 신경 시스템입니다. 저는 레거시 cron 대신 xyOps(Cronicle의 후속작)를 사용했습니다. 각 머신에 경량 xySat 워커 에이전트를 실행함으로써, xyOps는 서버 상태를 동적으로 모니터링하고, 하드웨어/컴퓨팅 제약을 측정하며, 로드 밸런싱을 처리합니다.
- 자가 복구 루프 (Self-Healing Loop): 특정 노드가 추론(inference) 도중에 오프라인이 되거나 오픈 소스 모델 데몬이 충돌하면, xyOps는 JSON-over-STDIO 상태 플러그인을 통해 실패를 감지합니다. 이는 즉시 성능이 저하된 인스턴스를 클러스터 풀에서 격리하고, 데몬을 재부팅하기 위한 자동화된 셸 워크플로우를 트리거합니다.
- 게이트웨이 계층 (n8n): 저는 n8n을 지능적이고 비동기적인 API 게이트웨이로 사용합니다. 이는 표준 OpenAI 스트리밍 형식(/v1/chat/completions)을 미러링하는 단일 웹훅을 노출합니다. 요청이 게이트웨이에 도달하면, n8n 워크플로우는 xyOps에 그룹 내에서 가장 건강한 사용 가능한 노드를 쿼리하고, 프롬프트를 전달하며, 스트리밍 토큰 청크를 클라이언트 애플리케이션으로 깨끗하게 파이핑합니다.
결과: 공용 웹에 열린 방화벽 포트가 없습니다.
드롭인(Drop-in) 프로바이더 호환성(provider compatibility) 덕분에 클라이언트 앱을 제 홈 랩으로 전환하는 데 필요한 것은 환경 변수 하나만 변경하는 것이었습니다: OPENAI_BASE_URL. 높은 가용성을 유지하면서 원활하고 즉각적인 장애 조치(failovers)가 가능합니다. 저는 라우팅 로직, 부하 분산 임계값(load-balancing thresholds), 그리고 네트워크 토폴로지 다이어그램을 상세히 설명하는 전체 구조 심층 분석 글을 블로그에 작성했습니다. 설정, xyOps 플러그인 구성, 또는 n8n 지연 병목 현상(latency bottlenecks)에 대한 질문은 댓글에서 기꺼이 답변드리겠습니다! submitted by /u/extinct_arnav [link] [comments]
AI 자동 생성 콘텐츠
본 콘텐츠는 r/SelfHosted (AI filter)의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기