<!-- CANARY: REQ=REQ-SERVER-STARTUP-INTEGRATION-001; FEATURE="Server Startup Integration Tests"; ASPECT=EndToEndServerTesting; STATUS=TESTED; OWNER=server; UPDATED=2025-10-05 --> <h2 id="deployment-patterns" class="position-relative d-flex align-items-center group"> <span>Deployment Patterns</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="deployment-patterns" aria-haspopup="dialog" aria-label="Share link: Deployment Patterns"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h2><div id="headingShareModal" class="heading-share-modal" role="dialog" aria-modal="true" aria-labelledby="headingShareTitle" hidden> <div class="hsm-dialog" role="document"> <div class="hsm-header"> <h2 id="headingShareTitle" class="h6 mb-0 fw-bold">Share this section</h2> <button type="button" class="hsm-close" aria-label="Close"> <i class="fa-solid fa-xmark"></i> </button> </div> <div class="hsm-body"> <label for="headingShareInput" class="form-label small text-muted mb-1 text-uppercase fw-bold" style="font-size: 0.7rem; letter-spacing: 0.5px;">Permalink</label> <div class="input-group mb-4 hsm-url-group"> <input id="headingShareInput" type="text" class="form-control font-monospace" readonly aria-readonly="true" style="font-size: 0.85rem;" /> <button class="btn btn-primary hsm-copy" type="button" aria-label="Copy" title="Copy"> <i class="fa-duotone fa-clipboard" aria-hidden="true"></i> </button> </div> <div class="small fw-bold mb-2 text-muted text-uppercase" style="font-size: 0.7rem; letter-spacing: 0.5px;">Share via</div> <div class="hsm-share-grid"> <a id="share-twitter" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-twitter me-2"></i>Twitter </a> <a id="share-linkedin" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-linkedin me-2"></i>LinkedIn </a> <a id="share-facebook" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer"> <i class="fa-brands fa-facebook me-2"></i>Facebook </a> </div> </div> </div> </div> <style> .heading-share-modal { position: fixed; inset: 0; display: flex; justify-content: center; align-items: center; background: rgba(0, 0, 0, 0.6); z-index: 1050; padding: 1rem; backdrop-filter: blur(4px); -webkit-backdrop-filter: blur(4px); } .heading-share-modal[hidden] { display: none !important; } .hsm-dialog { max-width: 420px; width: 100%; background: var(--bs-body-bg, #fff); color: var(--bs-body-color, #212529); border: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); border-radius: 1rem; box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25); overflow: hidden; animation: hsm-fade-in 0.2s ease-out; } @keyframes hsm-fade-in { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } [data-bs-theme="dark"] .hsm-dialog { background: #1e293b; border-color: rgba(255,255,255,0.1); color: #f8f9fa; } .hsm-header { display: flex; justify-content: space-between; align-items: center; padding: 1rem 1.5rem; border-bottom: 1px solid var(--bs-border-color, rgba(0,0,0,0.1)); background: rgba(0,0,0,0.02); } [data-bs-theme="dark"] .hsm-header { background: rgba(255,255,255,0.02); border-color: rgba(255,255,255,0.1); } .hsm-close { background: transparent; border: none; color: inherit; opacity: 0.5; padding: 0.25rem 0.5rem; border-radius: 0.25rem; font-size: 1.2rem; line-height: 1; transition: opacity 0.2s; } .hsm-close:hover { opacity: 1; } .hsm-body { padding: 1.5rem; } .hsm-url-group { display: flex !important; align-items: stretch; } .hsm-url-group .form-control { flex: 1; min-width: 0; margin: 0; background: var(--bs-secondary-bg, #f8f9fa); border-color: var(--bs-border-color, #dee2e6); border-top-right-radius: 0; border-bottom-right-radius: 0; height: 42px; } .hsm-url-group .btn { flex: 0 0 auto; margin: 0; margin-left: -1px; border-top-left-radius: 0; border-bottom-left-radius: 0; height: 42px; display: flex; align-items: center; justify-content: center; padding: 0 1.25rem; z-index: 2; } [data-bs-theme="dark"] .hsm-url-group .form-control { background: #0f172a; border-color: #334155; color: #e2e8f0; } .hsm-share-grid { display: flex; flex-direction: column; gap: 0.5rem; } .hsm-share-grid .btn { display: flex; align-items: center; justify-content: center; font-size: 0.9rem; padding: 0.6rem; border-color: var(--bs-border-color); width: 100%; } [data-bs-theme="dark"] .hsm-share-grid .btn { color: #e2e8f0; border-color: #475569; } [data-bs-theme="dark"] .hsm-share-grid .btn:hover { background: #334155; border-color: #cbd5e1; } </style> <script> (function(){ const modal = document.getElementById('headingShareModal'); if(!modal) return; const input = modal.querySelector('#headingShareInput'); const copyBtn = modal.querySelector('.hsm-copy'); const twitter = modal.querySelector('#share-twitter'); const linkedin = modal.querySelector('#share-linkedin'); const facebook = modal.querySelector('#share-facebook'); const closeBtn = modal.querySelector('.hsm-close'); let lastFocus=null; let trapBound=false; function buildUrl(id){ return window.location.origin + window.location.pathname + '#' + id; } function isOpen(){ return !modal.hasAttribute('hidden'); } function hydrate(id){ const url=buildUrl(id); input.value=url; const enc=encodeURIComponent(url); const text=encodeURIComponent(document.title); if(twitter) twitter.href=`https://twitter.com/intent/tweet?url=${enc}&text=${text}`; if(linkedin) linkedin.href=`https://www.linkedin.com/sharing/share-offsite/?url=${enc}`; if(facebook) facebook.href=`https://www.facebook.com/sharer/sharer.php?u=${enc}`; } function openModal(id){ lastFocus=document.activeElement; hydrate(id); if(!isOpen()){ modal.removeAttribute('hidden'); } requestAnimationFrame(()=>{ input.focus(); }); trapFocus(); } function closeModal(){ if(!isOpen()) return; modal.setAttribute('hidden',''); if(lastFocus && typeof lastFocus.focus==='function') lastFocus.focus(); } function copyCurrent(){ try{ navigator.clipboard.writeText(input.value).then(()=>feedback(true),()=>fallback()); } catch(e){ fallback(); } } function fallback(){ input.select(); try{ document.execCommand('copy'); feedback(true);}catch(e){ feedback(false);} } function feedback(ok){ if(!copyBtn) return; const icon=copyBtn.querySelector('i'); if(!icon) return; const prev=copyBtn.getAttribute('data-prev')||icon.className; if(!copyBtn.getAttribute('data-prev')) copyBtn.setAttribute('data-prev',prev); icon.className= ok ? 'fa-duotone fa-clipboard-check':'fa-duotone fa-circle-exclamation'; setTimeout(()=>{ icon.className=prev; },1800); } function handleShareClick(e){ e.preventDefault(); const btn=e.currentTarget; const id=btn.getAttribute('data-share-target'); if(id) openModal(id); } function bindShareButtons(){ document.querySelectorAll('.h-share').forEach(btn=>{ if(!btn.dataset.hShareBound){ btn.addEventListener('click', handleShareClick); btn.dataset.hShareBound='1'; } }); } bindShareButtons(); if(document.readyState==='loading'){ document.addEventListener('DOMContentLoaded', bindShareButtons); } else { requestAnimationFrame(bindShareButtons); } document.addEventListener('click', function(e){ const shareBtn=e.target.closest && e.target.closest('.h-share'); if(shareBtn && !shareBtn.dataset.hShareBound){ handleShareClick.call(shareBtn, e); } }, true); document.addEventListener('click', e=>{ if(e.target===modal) closeModal(); if(e.target.closest && e.target.closest('.hsm-close')){ e.preventDefault(); closeModal(); } if(copyBtn && (e.target===copyBtn || (e.target.closest && e.target.closest('.hsm-copy')))) { e.preventDefault(); copyCurrent(); } }); document.addEventListener('keydown', e=>{ if(e.key==='Escape' && isOpen()) closeModal(); }); function trapFocus(){ if(trapBound) return; trapBound=true; modal.addEventListener('keydown', f=>{ if(f.key==='Tab' && isOpen()){ const focusable=[...modal.querySelectorAll('a[href],button,input,textarea,select,[tabindex]:not([tabindex="-1"])')].filter(el=>!el.hasAttribute('disabled')); if(!focusable.length) return; const first=focusable[0]; const last=focusable[focusable.length-1]; if(f.shiftKey && document.activeElement===first){ f.preventDefault(); last.focus(); } else if(!f.shiftKey && document.activeElement===last){ f.preventDefault(); first.focus(); } } }); } if(closeBtn) closeBtn.addEventListener('click', e=>{ e.preventDefault(); closeModal(); }); })(); </script><p>Geode offers flexible deployment patterns to match your infrastructure requirements, from single-node development environments to distributed production clusters with full observability stacks.</p> <h3 id="overview" class="position-relative d-flex align-items-center group"> <span>Overview</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="overview" aria-haspopup="dialog" aria-label="Share link: Overview"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Geode supports multiple deployment architectures:</p> <ul> <li><strong>Single-Node Deployment</strong> - Simple setup for development, testing, or low-traffic production</li> <li><strong>Distributed Deployment</strong> - Multi-node clusters with sharding and federation for high availability</li> <li><strong>Cloud Deployment</strong> - Container orchestration with Kubernetes or Docker Swarm</li> <li><strong>GPU-Accelerated Deployment</strong> - Hardware acceleration for vector operations and graph analytics</li> <li><strong>Infrastructure Stack</strong> - Complete observability with monitoring, logging, and backup systems</li> </ul> <p>This guide covers production-ready deployment patterns with best practices for security, performance, and reliability.</p> <h3 id="quick-start" class="position-relative d-flex align-items-center group"> <span>Quick Start</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="quick-start" aria-haspopup="dialog" aria-label="Share link: Quick Start"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="prerequisites" class="position-relative d-flex align-items-center group"> <span>Prerequisites</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="prerequisites" aria-haspopup="dialog" aria-label="Share link: Prerequisites"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>System Requirements</strong>:</p> <ul> <li>Docker 20.10+ and Docker Compose 1.29+</li> <li>8GB RAM minimum (16GB recommended for production)</li> <li>50GB disk space for data and backups</li> <li>NVIDIA GPU with drivers + nvidia-docker2 (GPU deployment only)</li> </ul> <p><strong>Network Requirements</strong>:</p> <ul> <li>Port 3141 (standard) or 8443 (alternative) for Geode QUIC+TLS</li> <li>Firewall rules configured for inter-node communication (distributed)</li> <li>Valid TLS certificates (self-signed for development, CA-signed for production)</li> </ul> <h4 id="basic-setup" class="position-relative d-flex align-items-center group"> <span>Basic Setup</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="basic-setup" aria-haspopup="dialog" aria-label="Share link: Basic Setup"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Clone repository and setup deployment</span> </span></span><span class="line"><span class="cl">git clone https://github.com/codeprosorg/geode </span></span><span class="line"><span class="cl"><span class="nb">cd</span> geode/deployment </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Run setup script (generates certificates, passwords, .env)</span> </span></span><span class="line"><span class="cl">./scripts/setup-deployment.sh </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Review and customize environment variables</span> </span></span><span class="line"><span class="cl">vi .env </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Add local DNS entries (development only)</span> </span></span><span class="line"><span class="cl"><span class="nb">echo</span> <span class="s2">&#34;127.0.0.1 geode.local grafana.geode.local prometheus.geode.local minio.geode.local vault.geode.local&#34;</span> <span class="p">|</span> sudo tee -a /etc/hosts </span></span></code></pre></div> <h4 id="start-services" class="position-relative d-flex align-items-center group"> <span>Start Services</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="start-services" aria-haspopup="dialog" aria-label="Share link: Start Services"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Standard Deployment</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Start full stack (Geode + infrastructure)</span> </span></span><span class="line"><span class="cl">docker-compose up -d </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Verify all services running</span> </span></span><span class="line"><span class="cl">docker-compose ps </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Check Geode logs</span> </span></span><span class="line"><span class="cl">docker-compose logs -f geode </span></span></code></pre></div><p><strong>GPU-Accelerated Deployment</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Install NVIDIA Container Toolkit</span> </span></span><span class="line"><span class="cl"><span class="nv">distribution</span><span class="o">=</span><span class="k">$(</span>. /etc/os-release<span class="p">;</span><span class="nb">echo</span> <span class="nv">$ID$VERSION_ID</span><span class="k">)</span> </span></span><span class="line"><span class="cl">curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey <span class="p">|</span> sudo apt-key add - </span></span><span class="line"><span class="cl">curl -s -L https://nvidia.github.io/nvidia-docker/<span class="nv">$distribution</span>/nvidia-docker.list <span class="p">|</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> sudo tee /etc/apt/sources.list.d/nvidia-docker.list </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl">sudo apt-get update </span></span><span class="line"><span class="cl">sudo apt-get install -y nvidia-docker2 </span></span><span class="line"><span class="cl">sudo systemctl restart docker </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Verify GPU availability</span> </span></span><span class="line"><span class="cl">docker run --rm --gpus all nvidia/cuda:12.3.0-base-ubuntu22.04 nvidia-smi </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Start GPU stack</span> </span></span><span class="line"><span class="cl">docker-compose -f docker-compose.yml -f docker-compose.gpu.yml up -d </span></span></code></pre></div> <h4 id="verify-installation" class="position-relative d-flex align-items-center group"> <span>Verify Installation</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="verify-installation" aria-haspopup="dialog" aria-label="Share link: Verify Installation"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Test Geode connectivity</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> geode geode query <span class="s2">&#34;RETURN 1 AS health&#34;</span> --server 127.0.0.1:8443 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Access web interfaces</span> </span></span><span class="line"><span class="cl"><span class="c1"># Grafana: https://grafana.geode.local (admin / check .env)</span> </span></span><span class="line"><span class="cl"><span class="c1"># Prometheus: https://prometheus.geode.local</span> </span></span><span class="line"><span class="cl"><span class="c1"># MinIO Console: https://minio.geode.local</span> </span></span><span class="line"><span class="cl"><span class="c1"># Vault UI: https://vault.geode.local</span> </span></span></code></pre></div> <h3 id="single-node-deployment" class="position-relative d-flex align-items-center group"> <span>Single-Node Deployment</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="single-node-deployment" aria-haspopup="dialog" aria-label="Share link: Single-Node Deployment"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="architecture" class="position-relative d-flex align-items-center group"> <span>Architecture</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="architecture" aria-haspopup="dialog" aria-label="Share link: Architecture"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Single-node deployment runs Geode with a complete infrastructure stack on one machine:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">┌──────────────────────────────────────────────────────┐ </span></span><span class="line"><span class="cl">│ Host Machine │ </span></span><span class="line"><span class="cl">│ │ </span></span><span class="line"><span class="cl">│ ┌──────────────┐ ┌──────────────┐ ┌────────────┐ │ </span></span><span class="line"><span class="cl">│ │ Geode │ │ Vault │ │ Redis │ │ </span></span><span class="line"><span class="cl">│ │ Graph DB │ │ Secrets │ │ Cache │ │ </span></span><span class="line"><span class="cl">│ │ (port 8443) │ │ Management │ │ │ │ </span></span><span class="line"><span class="cl">│ └──────┬───────┘ └──────────────┘ └────────────┘ │ </span></span><span class="line"><span class="cl">│ │ │ </span></span><span class="line"><span class="cl">│ ┌──────▼──────────────────────────────────────────┐ │ </span></span><span class="line"><span class="cl">│ │ Nginx Reverse Proxy │ │ </span></span><span class="line"><span class="cl">│ │ (TLS termination, routing) │ │ </span></span><span class="line"><span class="cl">│ └──────┬──────────────────────────────────────────┘ │ </span></span><span class="line"><span class="cl">│ │ │ </span></span><span class="line"><span class="cl">│ ┌──────▼───────┐ ┌──────────────┐ ┌────────────┐ │ </span></span><span class="line"><span class="cl">│ │ Prometheus │ │ Grafana │ │ MinIO │ │ </span></span><span class="line"><span class="cl">│ │ Metrics │ │ Dashboards │ │ Backups │ │ </span></span><span class="line"><span class="cl">│ └──────────────┘ └──────────────┘ └────────────┘ │ </span></span><span class="line"><span class="cl">│ │ </span></span><span class="line"><span class="cl">│ ┌──────────────┐ ┌──────────────┐ │ </span></span><span class="line"><span class="cl">│ │ Loki │ │ Promtail │ │ </span></span><span class="line"><span class="cl">│ │ Log Storage │ │ Log Collect │ │ </span></span><span class="line"><span class="cl">│ └──────────────┘ └──────────────┘ │ </span></span><span class="line"><span class="cl">└──────────────────────────────────────────────────────┘ </span></span></code></pre></div> <h4 id="configuration" class="position-relative d-flex align-items-center group"> <span>Configuration</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="configuration" aria-haspopup="dialog" aria-label="Share link: Configuration"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Environment Variables</strong> (<code>.env</code> file):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Geode Configuration</span> </span></span><span class="line"><span class="cl"><span class="nv">GEODE_LOG_LEVEL</span><span class="o">=</span>info <span class="c1"># Log level: debug, info, warn, error</span> </span></span><span class="line"><span class="cl"><span class="nv">GEODE_DATA_DIR</span><span class="o">=</span>/data <span class="c1"># Data directory path</span> </span></span><span class="line"><span class="cl"><span class="nv">GEODE_LISTEN_ADDR</span><span class="o">=</span>0.0.0.0:8443 <span class="c1"># Listen address</span> </span></span><span class="line"><span class="cl"><span class="nv">GEODE_MAX_CONNECTIONS</span><span class="o">=</span><span class="m">1000</span> <span class="c1"># Maximum concurrent connections</span> </span></span><span class="line"><span class="cl"><span class="nv">GEODE_QUERY_TIMEOUT</span><span class="o">=</span>30s <span class="c1"># Query execution timeout</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Security</span> </span></span><span class="line"><span class="cl"><span class="nv">VAULT_ADDR</span><span class="o">=</span>http://vault:8200 </span></span><span class="line"><span class="cl"><span class="nv">VAULT_TOKEN</span><span class="o">=</span>&lt;generated-secure-token&gt; </span></span><span class="line"><span class="cl"><span class="nv">REDIS_PASSWORD</span><span class="o">=</span>&lt;generated-secure-password&gt; </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Storage &amp; Backup</span> </span></span><span class="line"><span class="cl"><span class="nv">S3_ENDPOINT</span><span class="o">=</span>http://minio:9000 </span></span><span class="line"><span class="cl"><span class="nv">S3_ACCESS_KEY</span><span class="o">=</span>geode-minio-admin </span></span><span class="line"><span class="cl"><span class="nv">S3_SECRET_KEY</span><span class="o">=</span>&lt;generated-secure-password&gt; </span></span><span class="line"><span class="cl"><span class="nv">S3_BUCKET</span><span class="o">=</span>geode-backups </span></span><span class="line"><span class="cl"><span class="nv">S3_REGION</span><span class="o">=</span>us-east-1 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Monitoring</span> </span></span><span class="line"><span class="cl"><span class="nv">GF_SECURITY_ADMIN_USER</span><span class="o">=</span>admin </span></span><span class="line"><span class="cl"><span class="nv">GF_SECURITY_ADMIN_PASSWORD</span><span class="o">=</span>&lt;generated-secure-password&gt; </span></span><span class="line"><span class="cl"><span class="nv">GF_SERVER_DOMAIN</span><span class="o">=</span>grafana.geode.local </span></span><span class="line"><span class="cl"><span class="nv">GF_SERVER_ROOT_URL</span><span class="o">=</span>https://grafana.geode.local </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Resource Limits</span> </span></span><span class="line"><span class="cl"><span class="nv">GEODE_MEMORY_LIMIT</span><span class="o">=</span>8G </span></span><span class="line"><span class="cl"><span class="nv">GEODE_CPU_LIMIT</span><span class="o">=</span>4.0 </span></span></code></pre></div> <h4 id="docker-compose-configuration" class="position-relative d-flex align-items-center group"> <span>Docker Compose Configuration</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="docker-compose-configuration" aria-haspopup="dialog" aria-label="Share link: Docker Compose Configuration"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Basic <code>docker-compose.yml</code> excerpt</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;3.9&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">services</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">geode</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">geode:latest</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">restart</span><span class="p">:</span><span class="w"> </span><span class="l">unless-stopped</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ports</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="s2">&#34;8443:8443&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">environment</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">GEODE_LOG_LEVEL=${GEODE_LOG_LEVEL}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">GEODE_DATA_DIR=${GEODE_DATA_DIR}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">VAULT_ADDR=${VAULT_ADDR}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">VAULT_TOKEN=${VAULT_TOKEN}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">S3_ENDPOINT=${S3_ENDPOINT}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">S3_ACCESS_KEY=${S3_ACCESS_KEY}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">S3_SECRET_KEY=${S3_SECRET_KEY}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumes</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">geode-data:/data</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">./certs:/certs:ro</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">geode-network</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">deploy</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">resources</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">limits</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cpus</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;${GEODE_CPU_LIMIT}&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="l">${GEODE_MEMORY_LIMIT}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">reservations</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cpus</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;2.0&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="l">4G</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">healthcheck</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">test</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;CMD&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;geode&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;query&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;RETURN 1&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;--server&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;127.0.0.1:8443&#34;</span><span class="p">]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">interval</span><span class="p">:</span><span class="w"> </span><span class="l">30s</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">timeout</span><span class="p">:</span><span class="w"> </span><span class="l">10s</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">retries</span><span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">start_period</span><span class="p">:</span><span class="w"> </span><span class="l">40s</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">vault</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">hashicorp/vault:latest</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">geode-vault</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">restart</span><span class="p">:</span><span class="w"> </span><span class="l">unless-stopped</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">environment</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">VAULT_DEV_ROOT_TOKEN_ID=${VAULT_TOKEN}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cap_add</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">IPC_LOCK</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumes</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">vault-data:/vault/data</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">vault-logs:/vault/logs</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">geode-network</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">redis</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">redis:7-alpine</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">geode-redis</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">restart</span><span class="p">:</span><span class="w"> </span><span class="l">unless-stopped</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">command</span><span class="p">:</span><span class="w"> </span><span class="l">redis-server --requirepass ${REDIS_PASSWORD}</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumes</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">redis-data:/data</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">geode-network</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">volumes</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">geode-data</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">vault-data</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">vault-logs</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">redis-data</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">networks</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">geode-network</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">driver</span><span class="p">:</span><span class="w"> </span><span class="l">bridge</span><span class="w"> </span></span></span></code></pre></div> <h4 id="vault-initialization" class="position-relative d-flex align-items-center group"> <span>Vault Initialization</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="vault-initialization" aria-haspopup="dialog" aria-label="Share link: Vault Initialization"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>First-time setup</strong> (production):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Initialize Vault (save unseal keys and root token securely!)</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> vault vault operator init </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Unseal Vault (required after every restart)</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> vault vault operator unseal &lt;unseal-key-1&gt; </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> vault vault operator unseal &lt;unseal-key-2&gt; </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> vault vault operator unseal &lt;unseal-key-3&gt; </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Login with root token</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> vault vault login </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Enable KV secrets engine</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> vault vault secrets <span class="nb">enable</span> -path<span class="o">=</span>geode kv-v2 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Store encryption keys</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> vault vault kv put geode/encryption <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> <span class="nv">master_key</span><span class="o">=</span><span class="s2">&#34;</span><span class="k">$(</span>openssl rand -base64 32<span class="k">)</span><span class="s2">&#34;</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> <span class="nv">data_key</span><span class="o">=</span><span class="s2">&#34;</span><span class="k">$(</span>openssl rand -base64 32<span class="k">)</span><span class="s2">&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create policy for Geode</span> </span></span><span class="line"><span class="cl">cat <span class="s">&lt;&lt;EOF | docker-compose exec -T vault vault policy write geode-policy - </span></span></span><span class="line"><span class="cl"><span class="s">path &#34;geode/*&#34; { </span></span></span><span class="line"><span class="cl"><span class="s"> capabilities = [&#34;read&#34;, &#34;list&#34;] </span></span></span><span class="line"><span class="cl"><span class="s">} </span></span></span><span class="line"><span class="cl"><span class="s">EOF</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create token for Geode (update .env with this token)</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> vault vault token create -policy<span class="o">=</span>geode-policy </span></span></code></pre></div><p><strong>Development setup</strong> (auto-unseal):</p> <p>For development, Vault runs in dev mode with auto-unseal. Update <code>.env</code>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="nv">VAULT_DEV_MODE</span><span class="o">=</span><span class="nb">true</span> </span></span><span class="line"><span class="cl"><span class="nv">VAULT_TOKEN</span><span class="o">=</span>dev-only-token </span></span></code></pre></div> <h4 id="resource-management" class="position-relative d-flex align-items-center group"> <span>Resource Management</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="resource-management" aria-haspopup="dialog" aria-label="Share link: Resource Management"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Setting Resource Limits</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># docker-compose.yml</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">services</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">geode</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">deploy</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">resources</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">limits</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cpus</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;4.0&#39;</span><span class="w"> </span><span class="c"># Maximum 4 CPU cores</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="l">8G </span><span class="w"> </span><span class="c"># Maximum 8GB RAM</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">reservations</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cpus</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;2.0&#39;</span><span class="w"> </span><span class="c"># Reserve 2 CPU cores</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="l">4G </span><span class="w"> </span><span class="c"># Reserve 4GB RAM</span><span class="w"> </span></span></span></code></pre></div><p><strong>Monitoring Resource Usage</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Real-time container stats</span> </span></span><span class="line"><span class="cl">docker stats </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Geode-specific stats</span> </span></span><span class="line"><span class="cl">docker stats geode </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Check disk usage</span> </span></span><span class="line"><span class="cl">docker system df </span></span><span class="line"><span class="cl">docker volume ls </span></span><span class="line"><span class="cl">du -sh /var/lib/docker/volumes/geode_geode-data </span></span></code></pre></div> <h4 id="backup-and-recovery" class="position-relative d-flex align-items-center group"> <span>Backup and Recovery</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="backup-and-recovery" aria-haspopup="dialog" aria-label="Share link: Backup and Recovery"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Automated Backups to MinIO/S3</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Configure backup schedule (cron)</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> geode geode backup --dest s3://geode-backups/scheduled-<span class="k">$(</span>date +%Y%m%d-%H%M%S<span class="k">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># List backups</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> minio mc ls local/geode-backups </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Restore from backup</span> </span></span><span class="line"><span class="cl">docker-compose stop geode </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> geode geode restore --source s3://geode-backups/backup-20260124-120000 </span></span><span class="line"><span class="cl">docker-compose start geode </span></span></code></pre></div><p><strong>Volume Backups</strong> (full data directory):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Backup volume to tar.gz</span> </span></span><span class="line"><span class="cl">docker run --rm <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> -v geode_geode-data:/data:ro <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> -v <span class="k">$(</span><span class="nb">pwd</span><span class="k">)</span>/backups:/backup <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> alpine tar czf /backup/geode-data-<span class="k">$(</span>date +%Y%m%d<span class="k">)</span>.tar.gz -C /data . </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Restore volume from tar.gz</span> </span></span><span class="line"><span class="cl">docker-compose stop geode </span></span><span class="line"><span class="cl">docker run --rm <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> -v geode_geode-data:/data <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> -v <span class="k">$(</span><span class="nb">pwd</span><span class="k">)</span>/backups:/backup <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> alpine sh -c <span class="s2">&#34;rm -rf /data/* &amp;&amp; tar xzf /backup/geode-data-20260124.tar.gz -C /data&#34;</span> </span></span><span class="line"><span class="cl">docker-compose start geode </span></span></code></pre></div> <h4 id="use-cases" class="position-relative d-flex align-items-center group"> <span>Use Cases</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="use-cases" aria-haspopup="dialog" aria-label="Share link: Use Cases"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Development &amp; Testing</strong>:</p> <ul> <li>Local development with hot reloading</li> <li>Integration testing with realistic infrastructure</li> <li>Feature validation before production</li> </ul> <p><strong>Small Production Deployments</strong>:</p> <ul> <li>Startups and small teams (&lt; 10,000 queries/day)</li> <li>Internal tools and dashboards</li> <li>Proof of concept and prototypes</li> </ul> <p><strong>Edge Computing</strong>:</p> <ul> <li>On-premises installations with limited resources</li> <li>IoT gateway aggregation</li> <li>Offline-capable applications</li> </ul> <h3 id="distributed-deployment" class="position-relative d-flex align-items-center group"> <span>Distributed Deployment</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="distributed-deployment" aria-haspopup="dialog" aria-label="Share link: Distributed Deployment"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="architecture-1" class="position-relative d-flex align-items-center group"> <span>Architecture</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="architecture-1" aria-haspopup="dialog" aria-label="Share link: Architecture"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p>Distributed deployment provides high availability, horizontal scaling, and data sharding:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">┌─────────────────────────────────────────────────────────┐ </span></span><span class="line"><span class="cl">│ Load Balancer │ </span></span><span class="line"><span class="cl">│ (Nginx / HAProxy / Cloud LB) │ </span></span><span class="line"><span class="cl">└────────────┬─────────────┬──────────────┬───────────────┘ </span></span><span class="line"><span class="cl"> │ │ │ </span></span><span class="line"><span class="cl"> ┌────────▼────┐ ┌─────▼──────┐ ┌───▼──────────┐ </span></span><span class="line"><span class="cl"> │ Geode │ │ Geode │ │ Geode │ </span></span><span class="line"><span class="cl"> │ Node 1 │ │ Node 2 │ │ Node 3 │ </span></span><span class="line"><span class="cl"> │ (Shard A) │ │ (Shard B) │ │ (Shard C) │ </span></span><span class="line"><span class="cl"> └────────┬────┘ └─────┬──────┘ └───┬──────────┘ </span></span><span class="line"><span class="cl"> │ │ │ </span></span><span class="line"><span class="cl"> └─────────────┴──────────────┘ </span></span><span class="line"><span class="cl"> │ </span></span><span class="line"><span class="cl"> ┌────────▼─────────┐ </span></span><span class="line"><span class="cl"> │ Raft Consensus │ </span></span><span class="line"><span class="cl"> │ Cluster State │ </span></span><span class="line"><span class="cl"> └──────────────────┘ </span></span><span class="line"><span class="cl"> │ </span></span><span class="line"><span class="cl"> ┌────────────┴──────────────┐ </span></span><span class="line"><span class="cl"> │ │ </span></span><span class="line"><span class="cl"> ┌────────▼────────┐ ┌──────────▼────────┐ </span></span><span class="line"><span class="cl"> │ Shared Storage │ │ Shared Vault │ </span></span><span class="line"><span class="cl"> │ (MinIO / S3) │ │ (Multi-node) │ </span></span><span class="line"><span class="cl"> └─────────────────┘ └───────────────────┘ </span></span></code></pre></div> <h4 id="multi-node-configuration" class="position-relative d-flex align-items-center group"> <span>Multi-Node Configuration</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="multi-node-configuration" aria-haspopup="dialog" aria-label="Share link: Multi-Node Configuration"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Node 1</strong> (<code>docker-compose.node1.yml</code>):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;3.9&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">services</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">geode-node1</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">geode:latest</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">geode-node1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">hostname</span><span class="p">:</span><span class="w"> </span><span class="l">geode-node1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">environment</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">GEODE_NODE_ID=1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">GEODE_CLUSTER_MODE=true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">GEODE_RAFT_PEERS=geode-node1:9000,geode-node2:9000,geode-node3:9000</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">GEODE_SHARD_ID=A</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">GEODE_LISTEN_ADDR=0.0.0.0:8443</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">GEODE_RAFT_ADDR=0.0.0.0:9000</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ports</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="s2">&#34;8443:8443&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="s2">&#34;9000:9000&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumes</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">geode-node1-data:/data</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">geode-cluster</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">volumes</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">geode-node1-data</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">networks</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">geode-cluster</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">driver</span><span class="p">:</span><span class="w"> </span><span class="l">overlay</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">attachable</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span></span></span></code></pre></div><p><strong>Node 2 &amp; 3</strong> - Similar configuration with different node IDs and shard assignments.</p> <h4 id="sharding-strategy" class="position-relative d-flex align-items-center group"> <span>Sharding Strategy</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="sharding-strategy" aria-haspopup="dialog" aria-label="Share link: Sharding Strategy"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Consistent Hashing</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Configure sharding in Geode</span> </span></span><span class="line"><span class="cl">geode admin configure-sharding <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --strategy consistent-hash <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --replicas <span class="m">3</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --rebalance-threshold 0.1 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Assign shards to nodes</span> </span></span><span class="line"><span class="cl">geode admin assign-shard --node geode-node1 --shard A </span></span><span class="line"><span class="cl">geode admin assign-shard --node geode-node2 --shard B </span></span><span class="line"><span class="cl">geode admin assign-shard --node geode-node3 --shard C </span></span></code></pre></div><p><strong>Range-Based Sharding</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">sharded</span><span class="w"> </span><span class="py">graph</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">GRAPH</span><span class="w"> </span><span class="py">social_network</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">PARTITION</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">RANGE</span><span class="w"> </span><span class="p">(</span><span class="py">user_id</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SHARD</span><span class="w"> </span><span class="py">shard_a</span><span class="w"> </span><span class="py">VALUES</span><span class="w"> </span><span class="py">LESS</span><span class="w"> </span><span class="py">THAN</span><span class="w"> </span><span class="p">(</span><span class="py">1000000</span><span class="p">),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SHARD</span><span class="w"> </span><span class="py">shard_b</span><span class="w"> </span><span class="py">VALUES</span><span class="w"> </span><span class="py">LESS</span><span class="w"> </span><span class="py">THAN</span><span class="w"> </span><span class="p">(</span><span class="py">2000000</span><span class="p">),</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">SHARD</span><span class="w"> </span><span class="py">shard_c</span><span class="w"> </span><span class="py">VALUES</span><span class="w"> </span><span class="py">LESS</span><span class="w"> </span><span class="py">THAN</span><span class="w"> </span><span class="p">(</span><span class="py">MAXVALUE</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="federation" class="position-relative d-flex align-items-center group"> <span>Federation</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="federation" aria-haspopup="dialog" aria-label="Share link: Federation"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Cross-Cluster Queries</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Configure</span><span class="w"> </span><span class="py">federation</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">USE</span><span class="w"> </span><span class="py">GRAPH</span><span class="w"> </span><span class="py">social_network</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">FEDERATION</span><span class="w"> </span><span class="py">global_social</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WITH</span><span class="w"> </span><span class="py">CLUSTERS</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">&#39;</span><span class="py">us</span><span class="err">-</span><span class="py">west</span><span class="err">&#39;</span><span class="w"> </span><span class="py">AT</span><span class="w"> </span><span class="err">&#39;</span><span class="py">geode</span><span class="err">-</span><span class="py">us</span><span class="err">-</span><span class="py">west</span><span class="err">.</span><span class="py">example</span><span class="err">.</span><span class="py">com</span><span class="p">:</span><span class="nc">8443</span><span class="err">&#39;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">&#39;</span><span class="py">eu</span><span class="err">-</span><span class="py">central</span><span class="err">&#39;</span><span class="w"> </span><span class="py">AT</span><span class="w"> </span><span class="err">&#39;</span><span class="py">geode</span><span class="err">-</span><span class="py">eu</span><span class="err">.</span><span class="py">example</span><span class="err">.</span><span class="py">com</span><span class="p">:</span><span class="nc">8443</span><span class="err">&#39;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="err">&#39;</span><span class="py">ap</span><span class="err">-</span><span class="py">southeast</span><span class="err">&#39;</span><span class="w"> </span><span class="py">AT</span><span class="w"> </span><span class="err">&#39;</span><span class="py">geode</span><span class="err">-</span><span class="py">ap</span><span class="err">.</span><span class="py">example</span><span class="err">.</span><span class="py">com</span><span class="p">:</span><span class="nc">8443</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Query</span><span class="w"> </span><span class="py">across</span><span class="w"> </span><span class="py">federated</span><span class="w"> </span><span class="py">clusters</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">USE</span><span class="w"> </span><span class="py">FEDERATION</span><span class="w"> </span><span class="py">global_social</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">user</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="err">-</span><span class="p">[:</span><span class="nc">FRIENDS_WITH</span><span class="p">]</span><span class="err">-&gt;</span><span class="p">(</span><span class="py">friend</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">user</span><span class="err">.</span><span class="py">region</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">us</span><span class="err">-</span><span class="py">west</span><span class="err">&#39;</span><span class="w"> </span><span class="py">AND</span><span class="w"> </span><span class="py">friend</span><span class="err">.</span><span class="py">region</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">eu</span><span class="err">-</span><span class="py">central</span><span class="err">&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">user</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">friend</span><span class="err">.</span><span class="py">name</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="consensus-and-coordination" class="position-relative d-flex align-items-center group"> <span>Consensus and Coordination</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="consensus-and-coordination" aria-haspopup="dialog" aria-label="Share link: Consensus and Coordination"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Raft Configuration</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Initialize Raft cluster</span> </span></span><span class="line"><span class="cl">geode admin raft-init <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --node-id <span class="m">1</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --peers geode-node1:9000,geode-node2:9000,geode-node3:9000 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Check cluster status</span> </span></span><span class="line"><span class="cl">geode admin raft-status </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Example output:</span> </span></span><span class="line"><span class="cl"><span class="c1"># Node ID: 1</span> </span></span><span class="line"><span class="cl"><span class="c1"># Role: Leader</span> </span></span><span class="line"><span class="cl"><span class="c1"># Term: 5</span> </span></span><span class="line"><span class="cl"><span class="c1"># Commit Index: 1234</span> </span></span><span class="line"><span class="cl"><span class="c1"># Peers: [geode-node2:Follower, geode-node3:Follower]</span> </span></span></code></pre></div> <h4 id="load-balancing" class="position-relative d-flex align-items-center group"> <span>Load Balancing</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="load-balancing" aria-haspopup="dialog" aria-label="Share link: Load Balancing"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Nginx Configuration</strong> (<code>nginx-lb.conf</code>):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-nginx" data-lang="nginx"><span class="line"><span class="cl"><span class="k">upstream</span> <span class="s">geode_cluster</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kn">least_conn</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">server</span> <span class="n">geode-node1</span><span class="p">:</span><span class="mi">8443</span> <span class="s">max_fails=3</span> <span class="s">fail_timeout=30s</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">server</span> <span class="n">geode-node2</span><span class="p">:</span><span class="mi">8443</span> <span class="s">max_fails=3</span> <span class="s">fail_timeout=30s</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">server</span> <span class="n">geode-node3</span><span class="p">:</span><span class="mi">8443</span> <span class="s">max_fails=3</span> <span class="s">fail_timeout=30s</span><span class="p">;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">server</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kn">listen</span> <span class="mi">443</span> <span class="s">ssl</span> <span class="s">http2</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">server_name</span> <span class="s">geode.example.com</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kn">ssl_certificate</span> <span class="s">/etc/nginx/certs/server.crt</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">ssl_certificate_key</span> <span class="s">/etc/nginx/certs/server.key</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">ssl_protocols</span> <span class="s">TLSv1.3</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kn">location</span> <span class="s">/</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_pass</span> <span class="s">https://geode_cluster</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_set_header</span> <span class="s">Host</span> <span class="nv">$host</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_set_header</span> <span class="s">X-Real-IP</span> <span class="nv">$remote_addr</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_set_header</span> <span class="s">X-Forwarded-For</span> <span class="nv">$proxy_add_x_forwarded_for</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_set_header</span> <span class="s">X-Forwarded-Proto</span> <span class="nv">$scheme</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># QUIC support </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="kn">proxy_http_version</span> <span class="mi">1</span><span class="s">.1</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_set_header</span> <span class="s">Upgrade</span> <span class="nv">$http_upgrade</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_set_header</span> <span class="s">Connection</span> <span class="s">&#34;upgrade&#34;</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Health check endpoint </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="kn">location</span> <span class="s">/health</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_pass</span> <span class="s">https://geode_cluster</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">access_log</span> <span class="no">off</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> <h4 id="failover-and-high-availability" class="position-relative d-flex align-items-center group"> <span>Failover and High Availability</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="failover-and-high-availability" aria-haspopup="dialog" aria-label="Share link: Failover and High Availability"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Automatic Failover</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Configure automatic failover</span> </span></span><span class="line"><span class="cl">geode admin configure-ha <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --min-replicas <span class="m">2</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --auto-promote <span class="nb">true</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --failover-timeout 30s </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Manual failover (if needed)</span> </span></span><span class="line"><span class="cl">geode admin promote-node --node geode-node2 </span></span></code></pre></div><p><strong>Health Checks</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># docker-compose.yml healthcheck</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">healthcheck</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">test</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s2">&#34;CMD&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;geode&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;query&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;RETURN 1&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;--server&#34;</span><span class="p">,</span><span class="w"> </span><span class="s2">&#34;127.0.0.1:8443&#34;</span><span class="p">]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">interval</span><span class="p">:</span><span class="w"> </span><span class="l">10s</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">timeout</span><span class="p">:</span><span class="w"> </span><span class="l">5s</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">retries</span><span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">start_period</span><span class="p">:</span><span class="w"> </span><span class="l">30s</span><span class="w"> </span></span></span></code></pre></div> <h4 id="scaling-operations" class="position-relative d-flex align-items-center group"> <span>Scaling Operations</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="scaling-operations" aria-haspopup="dialog" aria-label="Share link: Scaling Operations"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Horizontal Scaling</strong> (add nodes):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Scale up cluster</span> </span></span><span class="line"><span class="cl">docker-compose up -d --scale <span class="nv">geode</span><span class="o">=</span><span class="m">5</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Rebalance shards</span> </span></span><span class="line"><span class="cl">geode admin rebalance-shards --strategy least-loaded </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Verify distribution</span> </span></span><span class="line"><span class="cl">geode admin shard-distribution </span></span></code></pre></div><p><strong>Vertical Scaling</strong> (increase resources):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># Update resource limits</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">services</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">geode</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">deploy</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">resources</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">limits</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cpus</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;8.0&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="l">16G</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">reservations</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cpus</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;4.0&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="l">8G</span><span class="w"> </span></span></span></code></pre></div> <h3 id="cloud-deployment" class="position-relative d-flex align-items-center group"> <span>Cloud Deployment</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="cloud-deployment" aria-haspopup="dialog" aria-label="Share link: Cloud Deployment"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="kubernetes-deployment" class="position-relative d-flex align-items-center group"> <span>Kubernetes Deployment</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="kubernetes-deployment" aria-haspopup="dialog" aria-label="Share link: Kubernetes Deployment"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Namespace and ConfigMap</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># geode-namespace.yml</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">Namespace</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">metadata</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nn">---</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># geode-config.yml</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">ConfigMap</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">metadata</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode-config</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">namespace</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">data</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">GEODE_LOG_LEVEL</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;info&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">GEODE_DATA_DIR</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;/data&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">GEODE_CLUSTER_MODE</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;true&#34;</span><span class="w"> </span></span></span></code></pre></div><p><strong>StatefulSet for Geode</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># geode-statefulset.yml</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">apps/v1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">StatefulSet</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">metadata</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">namespace</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">spec</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">serviceName</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">replicas</span><span class="p">:</span><span class="w"> </span><span class="m">3</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">selector</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">matchLabels</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">app</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">template</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">metadata</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">labels</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">app</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">spec</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">containers</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">geode:latest</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ports</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">containerPort</span><span class="p">:</span><span class="w"> </span><span class="m">8443</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">quic</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">containerPort</span><span class="p">:</span><span class="w"> </span><span class="m">9000</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">raft</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">env</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">GEODE_NODE_ID</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">valueFrom</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">fieldRef</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">fieldPath</span><span class="p">:</span><span class="w"> </span><span class="l">metadata.name</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">GEODE_CLUSTER_MODE</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">value</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;true&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">GEODE_RAFT_PEERS</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">value</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;geode-0.geode:9000,geode-1.geode:9000,geode-2.geode:9000&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">envFrom</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">configMapRef</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode-config</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">secretRef</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode-secrets</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumeMounts</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">data</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">mountPath</span><span class="p">:</span><span class="w"> </span><span class="l">/data</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">certs</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">mountPath</span><span class="p">:</span><span class="w"> </span><span class="l">/certs</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">readOnly</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">resources</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">requests</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;4Gi&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;2000m&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">limits</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">memory</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;8Gi&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cpu</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;4000m&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">livenessProbe</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">exec</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">command</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">query</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="s2">&#34;RETURN 1&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- --<span class="l">server</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="m">127.0.0.1</span><span class="p">:</span><span class="m">8443</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">initialDelaySeconds</span><span class="p">:</span><span class="w"> </span><span class="m">30</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">periodSeconds</span><span class="p">:</span><span class="w"> </span><span class="m">10</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">readinessProbe</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">exec</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">command</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">query</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="s2">&#34;RETURN 1&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- --<span class="l">server</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="m">127.0.0.1</span><span class="p">:</span><span class="m">8443</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">initialDelaySeconds</span><span class="p">:</span><span class="w"> </span><span class="m">10</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">periodSeconds</span><span class="p">:</span><span class="w"> </span><span class="m">5</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumes</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">certs</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">secret</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">secretName</span><span class="p">:</span><span class="w"> </span><span class="l">geode-tls-certs</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">volumeClaimTemplates</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">metadata</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">data</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">spec</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">accessModes</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"> </span><span class="s2">&#34;ReadWriteOnce&#34;</span><span class="w"> </span><span class="p">]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">storageClassName</span><span class="p">:</span><span class="w"> </span><span class="l">fast-ssd</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">resources</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">requests</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">storage</span><span class="p">:</span><span class="w"> </span><span class="l">100Gi</span><span class="w"> </span></span></span></code></pre></div><p><strong>Service and Ingress</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># geode-service.yml</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">Service</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">metadata</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">namespace</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">spec</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">clusterIP</span><span class="p">:</span><span class="w"> </span><span class="l">None</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">selector</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">app</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ports</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="m">8443</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">quic</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="m">9000</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">raft</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nn">---</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">Service</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">metadata</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode-lb</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">namespace</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">spec</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">type</span><span class="p">:</span><span class="w"> </span><span class="l">LoadBalancer</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">selector</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">app</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ports</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="m">8443</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">targetPort</span><span class="p">:</span><span class="w"> </span><span class="m">8443</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">quic</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nn">---</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># geode-ingress.yml (if using HTTP/3 ingress)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">networking.k8s.io/v1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">Ingress</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">metadata</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode-ingress</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">namespace</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">annotations</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">nginx.ingress.kubernetes.io/backend-protocol</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;HTTPS&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">nginx.ingress.kubernetes.io/ssl-passthrough</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;true&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">spec</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ingressClassName</span><span class="p">:</span><span class="w"> </span><span class="l">nginx</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">rules</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">host</span><span class="p">:</span><span class="w"> </span><span class="l">geode.example.com</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">http</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">paths</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">path</span><span class="p">:</span><span class="w"> </span><span class="l">/</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">pathType</span><span class="p">:</span><span class="w"> </span><span class="l">Prefix</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">backend</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">service</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode-lb</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">number</span><span class="p">:</span><span class="w"> </span><span class="m">8443</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">tls</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">hosts</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">geode.example.com</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">secretName</span><span class="p">:</span><span class="w"> </span><span class="l">geode-tls-certs</span><span class="w"> </span></span></span></code></pre></div><p><strong>Secrets Management</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Create TLS secret</span> </span></span><span class="line"><span class="cl">kubectl create secret tls geode-tls-certs <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --cert<span class="o">=</span>server.crt <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --key<span class="o">=</span>server.key <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --namespace<span class="o">=</span>geode </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create application secrets</span> </span></span><span class="line"><span class="cl">kubectl create secret generic geode-secrets <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --from-literal<span class="o">=</span><span class="nv">VAULT_TOKEN</span><span class="o">=</span>&lt;vault-token&gt; <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --from-literal<span class="o">=</span><span class="nv">S3_ACCESS_KEY</span><span class="o">=</span>&lt;s3-key&gt; <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --from-literal<span class="o">=</span><span class="nv">S3_SECRET_KEY</span><span class="o">=</span>&lt;s3-secret&gt; <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --namespace<span class="o">=</span>geode </span></span></code></pre></div><p><strong>Deploy to Kubernetes</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Apply configurations</span> </span></span><span class="line"><span class="cl">kubectl apply -f geode-namespace.yml </span></span><span class="line"><span class="cl">kubectl apply -f geode-config.yml </span></span><span class="line"><span class="cl">kubectl apply -f geode-statefulset.yml </span></span><span class="line"><span class="cl">kubectl apply -f geode-service.yml </span></span><span class="line"><span class="cl">kubectl apply -f geode-ingress.yml </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Verify deployment</span> </span></span><span class="line"><span class="cl">kubectl get pods -n geode </span></span><span class="line"><span class="cl">kubectl get svc -n geode </span></span><span class="line"><span class="cl">kubectl logs -f geode-0 -n geode </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Scale cluster</span> </span></span><span class="line"><span class="cl">kubectl scale statefulset geode --replicas<span class="o">=</span><span class="m">5</span> -n geode </span></span></code></pre></div> <h4 id="cloud-provider-specifics" class="position-relative d-flex align-items-center group"> <span>Cloud Provider Specifics</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="cloud-provider-specifics" aria-haspopup="dialog" aria-label="Share link: Cloud Provider Specifics"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>AWS Deployment</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># Use EBS for storage</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">storageClassName</span><span class="p">:</span><span class="w"> </span><span class="l">gp3-encrypted</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Use Application Load Balancer</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">service.beta.kubernetes.io/aws-load-balancer-type</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;nlb&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">service.beta.kubernetes.io/aws-load-balancer-backend-protocol</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;tcp&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Use S3 for backups</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">S3_ENDPOINT</span><span class="p">:</span><span class="w"> </span><span class="l">https://s3.us-west-2.amazonaws.com</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">S3_BUCKET</span><span class="p">:</span><span class="w"> </span><span class="l">geode-backups-production</span><span class="w"> </span></span></span></code></pre></div><p><strong>Google Cloud Platform</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># Use Persistent Disk</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">storageClassName</span><span class="p">:</span><span class="w"> </span><span class="l">pd-ssd</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Use Cloud Load Balancer</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">cloud.google.com/load-balancer-type</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Internal&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Use Cloud Storage for backups</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">S3_ENDPOINT</span><span class="p">:</span><span class="w"> </span><span class="l">https://storage.googleapis.com</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">S3_BUCKET</span><span class="p">:</span><span class="w"> </span><span class="l">geode-backups-gcp</span><span class="w"> </span></span></span></code></pre></div><p><strong>Azure Deployment</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># Use Premium SSD</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">storageClassName</span><span class="p">:</span><span class="w"> </span><span class="l">managed-premium</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Use Azure Load Balancer</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">service.beta.kubernetes.io/azure-load-balancer-internal</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;true&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Use Blob Storage for backups</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">S3_ENDPOINT</span><span class="p">:</span><span class="w"> </span><span class="l">https://geodebackups.blob.core.windows.net</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">S3_BUCKET</span><span class="p">:</span><span class="w"> </span><span class="l">geode-backups</span><span class="w"> </span></span></span></code></pre></div><p><strong>Digital Ocean</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># Use DO Block Storage</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">storageClassName</span><span class="p">:</span><span class="w"> </span><span class="l">do-block-storage</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Use DO Load Balancer</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">service.beta.kubernetes.io/do-loadbalancer-protocol</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;tcp&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c"># Use DO Spaces for backups</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">S3_ENDPOINT</span><span class="p">:</span><span class="w"> </span><span class="l">https://nyc3.digitaloceanspaces.com</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">S3_BUCKET</span><span class="p">:</span><span class="w"> </span><span class="l">geode-backups</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">S3_REGION</span><span class="p">:</span><span class="w"> </span><span class="l">nyc3</span><span class="w"> </span></span></span></code></pre></div> <h3 id="gpu-accelerated-deployment" class="position-relative d-flex align-items-center group"> <span>GPU-Accelerated Deployment</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="gpu-accelerated-deployment" aria-haspopup="dialog" aria-label="Share link: GPU-Accelerated Deployment"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="gpu-architecture" class="position-relative d-flex align-items-center group"> <span>GPU Architecture</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="gpu-architecture" aria-haspopup="dialog" aria-label="Share link: GPU Architecture"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">┌────────────────────────────────────────────┐ </span></span><span class="line"><span class="cl">│ Geode Container │ </span></span><span class="line"><span class="cl">│ │ </span></span><span class="line"><span class="cl">│ ┌──────────────────────────────────────┐ │ </span></span><span class="line"><span class="cl">│ │ Query Engine │ │ </span></span><span class="line"><span class="cl">│ │ ├─ Parser │ │ </span></span><span class="line"><span class="cl">│ │ ├─ Planner │ │ </span></span><span class="line"><span class="cl">│ │ └─ Executor │ │ </span></span><span class="line"><span class="cl">│ └────────────┬─────────────────────────┘ │ </span></span><span class="line"><span class="cl">│ │ │ </span></span><span class="line"><span class="cl">│ ┌────────────▼─────────────────────────┐ │ </span></span><span class="line"><span class="cl">│ │ GPU Acceleration Layer │ │ </span></span><span class="line"><span class="cl">│ │ ├─ Vector Operations (HNSW) │ │ </span></span><span class="line"><span class="cl">│ │ ├─ Graph Analytics (PageRank) │ │ </span></span><span class="line"><span class="cl">│ │ └─ ML Embeddings (Node2Vec) │ │ </span></span><span class="line"><span class="cl">│ └────────────┬─────────────────────────┘ │ </span></span><span class="line"><span class="cl">│ │ │ </span></span><span class="line"><span class="cl">│ ┌────────────▼─────────────────────────┐ │ </span></span><span class="line"><span class="cl">│ │ NVIDIA Runtime (CUDA/Vulkan) │ │ </span></span><span class="line"><span class="cl">│ └────────────┬─────────────────────────┘ │ </span></span><span class="line"><span class="cl">└───────────────┼──────────────────────────┘ </span></span><span class="line"><span class="cl"> │ </span></span><span class="line"><span class="cl"> ┌───────────▼───────────┐ </span></span><span class="line"><span class="cl"> │ NVIDIA GPU │ </span></span><span class="line"><span class="cl"> │ (Tesla/A100/RTX) │ </span></span><span class="line"><span class="cl"> └───────────────────────┘ </span></span></code></pre></div> <h4 id="gpu-configuration" class="position-relative d-flex align-items-center group"> <span>GPU Configuration</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="gpu-configuration" aria-haspopup="dialog" aria-label="Share link: GPU Configuration"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Docker Compose with GPU</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># docker-compose.gpu.yml</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">version</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;3.9&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">services</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">geode-gpu</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">geode:latest-gpu</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">geode-gpu</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">runtime</span><span class="p">:</span><span class="w"> </span><span class="l">nvidia</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">environment</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">NVIDIA_VISIBLE_DEVICES=all</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">NVIDIA_DRIVER_CAPABILITIES=compute,utility</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">GEODE_GPU_ENABLED=true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">GEODE_GPU_DEVICE=0</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">GEODE_GPU_MEMORY_FRACTION=0.8</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">deploy</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">resources</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">reservations</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">devices</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">driver</span><span class="p">:</span><span class="w"> </span><span class="l">nvidia</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">count</span><span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">capabilities</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="l">gpu]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">dcgm-exporter</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">nvcr.io/nvidia/k8s/dcgm-exporter:3.1.3-3.1.4-ubuntu22.04</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">container_name</span><span class="p">:</span><span class="w"> </span><span class="l">dcgm-exporter</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">runtime</span><span class="p">:</span><span class="w"> </span><span class="l">nvidia</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">environment</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">NVIDIA_VISIBLE_DEVICES=all</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ports</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="s2">&#34;9400:9400&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cap_add</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">SYS_ADMIN</span><span class="w"> </span></span></span></code></pre></div><p><strong>Kubernetes GPU Deployment</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># geode-gpu-statefulset.yml</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">apps/v1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">StatefulSet</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">metadata</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode-gpu</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">namespace</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">spec</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">replicas</span><span class="p">:</span><span class="w"> </span><span class="m">2</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">template</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">spec</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">containers</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">geode:latest-gpu</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">resources</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">limits</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">nvidia.com/gpu</span><span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w"> </span><span class="c"># Request 1 GPU per pod</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">env</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">GEODE_GPU_ENABLED</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">value</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;true&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">nodeSelector</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">accelerator</span><span class="p">:</span><span class="w"> </span><span class="l">nvidia-tesla-v100 </span><span class="w"> </span><span class="c"># Target GPU nodes</span><span class="w"> </span></span></span></code></pre></div> <h4 id="gpu-optimization" class="position-relative d-flex align-items-center group"> <span>GPU Optimization</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="gpu-optimization" aria-haspopup="dialog" aria-label="Share link: GPU Optimization"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Vector Search with GPU</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">Enable</span><span class="w"> </span><span class="py">GPU</span><span class="w"> </span><span class="py">acceleration</span><span class="w"> </span><span class="py">for</span><span class="w"> </span><span class="py">vector</span><span class="w"> </span><span class="py">operations</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">SET</span><span class="w"> </span><span class="py">SESSION</span><span class="w"> </span><span class="py">gpu_acceleration</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">true</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">Create</span><span class="w"> </span><span class="py">HNSW</span><span class="w"> </span><span class="py">index</span><span class="w"> </span><span class="py">with</span><span class="w"> </span><span class="py">GPU</span><span class="w"> </span><span class="py">support</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CREATE</span><span class="w"> </span><span class="py">INDEX</span><span class="w"> </span><span class="py">user_embeddings_gpu</span><span class="w"> </span><span class="py">ON</span><span class="w"> </span><span class="py">Person</span><span class="p">(</span><span class="py">embedding</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">USING</span><span class="w"> </span><span class="py">HNSW</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">WITH</span><span class="w"> </span><span class="p">(</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">metric</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="err">&#39;</span><span class="py">euclidean</span><span class="err">&#39;</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">ef_construction</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">200</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">m</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">16</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">gpu_enabled</span><span class="w"> </span><span class="p">=</span><span class="w"> </span><span class="py">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">)</span><span class="err">;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="err">--</span><span class="w"> </span><span class="py">GPU</span><span class="err">-</span><span class="py">accelerated</span><span class="w"> </span><span class="py">vector</span><span class="w"> </span><span class="py">search</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">MATCH</span><span class="w"> </span><span class="p">(</span><span class="py">user</span><span class="p">:</span><span class="nc">Person</span><span class="p">)</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">WHERE</span><span class="w"> </span><span class="py">vector_distance</span><span class="p">(</span><span class="py">user</span><span class="err">.</span><span class="py">embedding</span><span class="p">,</span><span class="w"> </span><span class="nv">$query_embedding</span><span class="p">)</span><span class="w"> </span><span class="err">&lt;</span><span class="w"> </span><span class="py">0</span><span class="mf">.5</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">user</span><span class="err">.</span><span class="py">name</span><span class="p">,</span><span class="w"> </span><span class="py">user</span><span class="err">.</span><span class="py">embedding</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">vector_distance</span><span class="p">(</span><span class="py">user</span><span class="err">.</span><span class="py">embedding</span><span class="p">,</span><span class="w"> </span><span class="nv">$query_embedding</span><span class="p">)</span><span class="w"> </span><span class="py">ASC</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">100</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div><p><strong>Graph Analytics with GPU</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-gql" data-lang="gql"><span class="line"><span class="cl"><span class="err">--</span><span class="w"> </span><span class="py">GPU</span><span class="err">-</span><span class="py">accelerated</span><span class="w"> </span><span class="py">PageRank</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">CALL</span><span class="w"> </span><span class="py">graph</span><span class="err">.</span><span class="py">pageRank</span><span class="p">(</span><span class="nv">$graph_name</span><span class="p">,</span><span class="w"> </span><span class="p">{</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">iterations</span><span class="p">:</span><span class="w"> </span><span class="nc">20</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">dampingFactor</span><span class="p">:</span><span class="w"> </span><span class="nc">0</span><span class="mf">.85</span><span class="p">,</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="py">gpu_enabled</span><span class="p">:</span><span class="w"> </span><span class="nc">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">})</span><span class="w"> </span><span class="py">YIELD</span><span class="w"> </span><span class="py">nodeId</span><span class="p">,</span><span class="w"> </span><span class="py">score</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">RETURN</span><span class="w"> </span><span class="py">nodeId</span><span class="p">,</span><span class="w"> </span><span class="py">score</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">ORDER</span><span class="w"> </span><span class="py">BY</span><span class="w"> </span><span class="py">score</span><span class="w"> </span><span class="py">DESC</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="py">LIMIT</span><span class="w"> </span><span class="py">10</span><span class="err">;</span><span class="w"> </span></span></span></code></pre></div> <h4 id="gpu-monitoring" class="position-relative d-flex align-items-center group"> <span>GPU Monitoring</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="gpu-monitoring" aria-haspopup="dialog" aria-label="Share link: GPU Monitoring"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Prometheus Metrics</strong> (from DCGM exporter):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-promql" data-lang="promql"><span class="line"><span class="cl"><span class="c1"># GPU utilization</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">DCGM_FI_DEV_GPU_UTIL</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># GPU memory usage</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">DCGM_FI_DEV_FB_USED</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="nv">DCGM_FI_DEV_FB_FREE</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># GPU temperature</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">DCGM_FI_DEV_GPU_TEMP</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="c1"># GPU power draw</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nv">DCGM_FI_DEV_POWER_USAGE</span><span class="w"> </span></span></span></code></pre></div><p><strong>Grafana Dashboard</strong>:</p> <ul> <li>GPU utilization over time</li> <li>Memory allocation per query</li> <li>Temperature and throttling events</li> <li>Power consumption trends</li> </ul> <h3 id="infrastructure-stack" class="position-relative d-flex align-items-center group"> <span>Infrastructure Stack</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="infrastructure-stack" aria-haspopup="dialog" aria-label="Share link: Infrastructure Stack"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="monitoring-with-prometheus--grafana" class="position-relative d-flex align-items-center group"> <span>Monitoring with Prometheus &amp;amp; Grafana</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="monitoring-with-prometheus--grafana" aria-haspopup="dialog" aria-label="Share link: Monitoring with Prometheus &amp;amp; Grafana"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Prometheus Configuration</strong> (<code>prometheus.yml</code>):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">global</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">scrape_interval</span><span class="p">:</span><span class="w"> </span><span class="l">15s</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">evaluation_interval</span><span class="p">:</span><span class="w"> </span><span class="l">15s</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">scrape_configs</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">job_name</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;geode&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">static_configs</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">targets</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;geode:9090&#39;</span><span class="p">]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">metrics_path</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;/metrics&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">job_name</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;node-exporter&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">static_configs</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">targets</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;node-exporter:9100&#39;</span><span class="p">]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">job_name</span><span class="p">:</span><span class="w"> </span><span class="s1">&#39;dcgm-exporter&#39;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">static_configs</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">targets</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;dcgm-exporter:9400&#39;</span><span class="p">]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">alerting</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">alertmanagers</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">static_configs</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">targets</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="s1">&#39;alertmanager:9093&#39;</span><span class="p">]</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">rule_files</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="s1">&#39;/etc/prometheus/alerts/*.yml&#39;</span><span class="w"> </span></span></span></code></pre></div><p><strong>Alert Rules</strong> (<code>alerts/geode.yml</code>):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">groups</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">geode_alerts</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">interval</span><span class="p">:</span><span class="w"> </span><span class="l">30s</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">rules</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">alert</span><span class="p">:</span><span class="w"> </span><span class="l">GeodeHighMemoryUsage</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">expr</span><span class="p">:</span><span class="w"> </span><span class="l">geode_memory_usage_percent &gt; 90</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">for</span><span class="p">:</span><span class="w"> </span><span class="l">5m</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">labels</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">severity</span><span class="p">:</span><span class="w"> </span><span class="l">warning</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">annotations</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Geode high memory usage on {{ $labels.instance }}&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">description</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Memory usage is {{ $value }}%&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">alert</span><span class="p">:</span><span class="w"> </span><span class="l">GeodeDown</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">expr</span><span class="p">:</span><span class="w"> </span><span class="l">up{job=&#34;geode&#34;} == 0</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">for</span><span class="p">:</span><span class="w"> </span><span class="l">1m</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">labels</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">severity</span><span class="p">:</span><span class="w"> </span><span class="l">critical</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">annotations</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Geode is down on {{ $labels.instance }}&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">description</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Geode database is not responding&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">alert</span><span class="p">:</span><span class="w"> </span><span class="l">HighQueryLatency</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">expr</span><span class="p">:</span><span class="w"> </span><span class="l">geode_query_duration_seconds{quantile=&#34;0.99&#34;} &gt; 5</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">for</span><span class="p">:</span><span class="w"> </span><span class="l">10m</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">labels</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">severity</span><span class="p">:</span><span class="w"> </span><span class="l">warning</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">annotations</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;High query latency detected&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">description</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;P99 query latency is {{ $value }}s&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">alert</span><span class="p">:</span><span class="w"> </span><span class="l">TooManyConnections</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">expr</span><span class="p">:</span><span class="w"> </span><span class="l">geode_active_connections &gt; 900</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">for</span><span class="p">:</span><span class="w"> </span><span class="l">5m</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">labels</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">severity</span><span class="p">:</span><span class="w"> </span><span class="l">warning</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">annotations</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">summary</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Too many active connections&#34;</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">description</span><span class="p">:</span><span class="w"> </span><span class="s2">&#34;Active connections: {{ $value }}&#34;</span><span class="w"> </span></span></span></code></pre></div><p><strong>Grafana Dashboards</strong>:</p> <p>Pre-configured dashboards available in <code>config/grafana/dashboards/</code>:</p> <ol> <li> <p><strong>Geode Overview</strong></p> <ul> <li>Query throughput (queries/second)</li> <li>Query latency (P50, P95, P99)</li> <li>Active connections</li> <li>Memory and CPU usage</li> <li>Cache hit rate</li> </ul> </li> <li> <p><strong>Storage Metrics</strong></p> <ul> <li>Disk I/O (read/write ops)</li> <li>WAL write throughput</li> <li>Index size and growth</li> <li>Page cache efficiency</li> </ul> </li> <li> <p><strong>GPU Metrics</strong> (GPU deployment only)</p> <ul> <li>GPU utilization per card</li> <li>Memory allocation</li> <li>Temperature and power</li> <li>Kernel execution time</li> </ul> </li> <li> <p><strong>System Health</strong></p> <ul> <li>Node availability</li> <li>Raft consensus state</li> <li>Replication lag</li> <li>Backup status</li> </ul> </li> </ol> <h4 id="logging-with-loki--promtail" class="position-relative d-flex align-items-center group"> <span>Logging with Loki &amp;amp; Promtail</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="logging-with-loki--promtail" aria-haspopup="dialog" aria-label="Share link: Logging with Loki &amp;amp; Promtail"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Promtail Configuration</strong> (<code>promtail-config.yml</code>):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">server</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">http_listen_port</span><span class="p">:</span><span class="w"> </span><span class="m">9080</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">grpc_listen_port</span><span class="p">:</span><span class="w"> </span><span class="m">0</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">positions</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">filename</span><span class="p">:</span><span class="w"> </span><span class="l">/tmp/positions.yaml</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">clients</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">url</span><span class="p">:</span><span class="w"> </span><span class="l">http://loki:3100/loki/api/v1/push</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">scrape_configs</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">job_name</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">static_configs</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">targets</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">localhost</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">labels</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">job</span><span class="p">:</span><span class="w"> </span><span class="l">geode</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">__path__</span><span class="p">:</span><span class="w"> </span><span class="l">/var/log/geode/*.log</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">pipeline_stages</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">json</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">expressions</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">level</span><span class="p">:</span><span class="w"> </span><span class="l">level</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">timestamp</span><span class="p">:</span><span class="w"> </span><span class="l">timestamp</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">message</span><span class="p">:</span><span class="w"> </span><span class="l">message</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">query</span><span class="p">:</span><span class="w"> </span><span class="l">query</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">labels</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">level</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">timestamp</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">source</span><span class="p">:</span><span class="w"> </span><span class="l">timestamp</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">format</span><span class="p">:</span><span class="w"> </span><span class="l">RFC3339</span><span class="w"> </span></span></span></code></pre></div><p><strong>Loki Configuration</strong> (<code>loki-config.yml</code>):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">auth_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">server</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">http_listen_port</span><span class="p">:</span><span class="w"> </span><span class="m">3100</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">ingester</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">lifecycler</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">ring</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">kvstore</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">store</span><span class="p">:</span><span class="w"> </span><span class="l">inmemory</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">replication_factor</span><span class="p">:</span><span class="w"> </span><span class="m">1</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">chunk_idle_period</span><span class="p">:</span><span class="w"> </span><span class="l">15m</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">chunk_retain_period</span><span class="p">:</span><span class="w"> </span><span class="l">30s</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">schema_config</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">configs</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="nt">from</span><span class="p">:</span><span class="w"> </span><span class="ld">2024-01-01</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">store</span><span class="p">:</span><span class="w"> </span><span class="l">boltdb-shipper</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">object_store</span><span class="p">:</span><span class="w"> </span><span class="l">filesystem</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">schema</span><span class="p">:</span><span class="w"> </span><span class="l">v11</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">index</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">prefix</span><span class="p">:</span><span class="w"> </span><span class="l">index_</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">period</span><span class="p">:</span><span class="w"> </span><span class="l">24h</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">storage_config</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">boltdb_shipper</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">active_index_directory</span><span class="p">:</span><span class="w"> </span><span class="l">/loki/index</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">cache_location</span><span class="p">:</span><span class="w"> </span><span class="l">/loki/cache</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">shared_store</span><span class="p">:</span><span class="w"> </span><span class="l">filesystem</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">filesystem</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">directory</span><span class="p">:</span><span class="w"> </span><span class="l">/loki/chunks</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">limits_config</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">enforce_metric_name</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">reject_old_samples</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">reject_old_samples_max_age</span><span class="p">:</span><span class="w"> </span><span class="l">168h</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">chunk_store_config</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">max_look_back_period</span><span class="p">:</span><span class="w"> </span><span class="l">0s</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">table_manager</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">retention_deletes_enabled</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">retention_period</span><span class="p">:</span><span class="w"> </span><span class="l">720h </span><span class="w"> </span><span class="c"># 30 days</span><span class="w"> </span></span></span></code></pre></div> <h4 id="backup-with-minio" class="position-relative d-flex align-items-center group"> <span>Backup with MinIO</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="backup-with-minio" aria-haspopup="dialog" aria-label="Share link: Backup with MinIO"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>MinIO Configuration</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Access MinIO container</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> minio sh </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Configure mc (MinIO client)</span> </span></span><span class="line"><span class="cl">mc <span class="nb">alias</span> <span class="nb">set</span> <span class="nb">local</span> http://localhost:9000 <span class="nv">$MINIO_ROOT_USER</span> <span class="nv">$MINIO_ROOT_PASSWORD</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Create buckets</span> </span></span><span class="line"><span class="cl">mc mb local/geode-backups </span></span><span class="line"><span class="cl">mc mb local/geode-wal-archive </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Set retention policy (30 days)</span> </span></span><span class="line"><span class="cl">mc retention <span class="nb">set</span> --default GOVERNANCE 30d local/geode-backups </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Enable versioning</span> </span></span><span class="line"><span class="cl">mc version <span class="nb">enable</span> local/geode-backups </span></span></code></pre></div><p><strong>Lifecycle Policy</strong> (automatic cleanup):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Rules&#34;</span><span class="p">:</span> <span class="p">[</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Expiration&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Days&#34;</span><span class="p">:</span> <span class="mi">30</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;ID&#34;</span><span class="p">:</span> <span class="s2">&#34;DeleteOldBackups&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Filter&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Prefix&#34;</span><span class="p">:</span> <span class="s2">&#34;daily/&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Status&#34;</span><span class="p">:</span> <span class="s2">&#34;Enabled&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Expiration&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Days&#34;</span><span class="p">:</span> <span class="mi">90</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;ID&#34;</span><span class="p">:</span> <span class="s2">&#34;DeleteOldWeeklyBackups&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Filter&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Prefix&#34;</span><span class="p">:</span> <span class="s2">&#34;weekly/&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Status&#34;</span><span class="p">:</span> <span class="s2">&#34;Enabled&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Transition&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Days&#34;</span><span class="p">:</span> <span class="mi">7</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;StorageClass&#34;</span><span class="p">:</span> <span class="s2">&#34;GLACIER&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;ID&#34;</span><span class="p">:</span> <span class="s2">&#34;ArchiveToGlacier&#34;</span><span class="p">,</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Filter&#34;</span><span class="p">:</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Prefix&#34;</span><span class="p">:</span> <span class="s2">&#34;daily/&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">},</span> </span></span><span class="line"><span class="cl"> <span class="nt">&#34;Status&#34;</span><span class="p">:</span> <span class="s2">&#34;Enabled&#34;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> <span class="p">]</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div><p><strong>Apply lifecycle policy</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">cat lifecycle.json <span class="p">|</span> docker-compose <span class="nb">exec</span> -T minio sh -c <span class="s2">&#34;mc ilm import local/geode-backups&#34;</span> </span></span></code></pre></div> <h4 id="nginx-reverse-proxy" class="position-relative d-flex align-items-center group"> <span>Nginx Reverse Proxy</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="nginx-reverse-proxy" aria-haspopup="dialog" aria-label="Share link: Nginx Reverse Proxy"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Nginx Configuration</strong> (<code>nginx.conf</code>):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-nginx" data-lang="nginx"><span class="line"><span class="cl"><span class="k">user</span> <span class="s">nginx</span><span class="p">;</span> </span></span><span class="line"><span class="cl"><span class="k">worker_processes</span> <span class="s">auto</span><span class="p">;</span> </span></span><span class="line"><span class="cl"><span class="k">error_log</span> <span class="s">/var/log/nginx/error.log</span> <span class="s">warn</span><span class="p">;</span> </span></span><span class="line"><span class="cl"><span class="k">pid</span> <span class="s">/var/run/nginx.pid</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">events</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kn">worker_connections</span> <span class="mi">4096</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">use</span> <span class="s">epoll</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">multi_accept</span> <span class="no">on</span><span class="p">;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">http</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kn">include</span> <span class="s">/etc/nginx/mime.types</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">default_type</span> <span class="s">application/octet-stream</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kn">log_format</span> <span class="s">main</span> <span class="s">&#39;</span><span class="nv">$remote_addr</span> <span class="s">-</span> <span class="nv">$remote_user</span> <span class="s">[</span><span class="nv">$time_local]</span> <span class="s">&#34;</span><span class="nv">$request&#34;</span> <span class="s">&#39;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#39;</span><span class="nv">$status</span> <span class="nv">$body_bytes_sent</span> <span class="s">&#34;</span><span class="nv">$http_referer&#34;</span> <span class="s">&#39;</span> </span></span><span class="line"><span class="cl"> <span class="s">&#39;&#34;</span><span class="nv">$http_user_agent&#34;</span> <span class="s">&#34;</span><span class="nv">$http_x_forwarded_for&#34;&#39;</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kn">access_log</span> <span class="s">/var/log/nginx/access.log</span> <span class="s">main</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kn">sendfile</span> <span class="no">on</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">tcp_nopush</span> <span class="no">on</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">tcp_nodelay</span> <span class="no">on</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">keepalive_timeout</span> <span class="mi">65</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">types_hash_max_size</span> <span class="mi">2048</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># SSL Configuration </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="kn">ssl_protocols</span> <span class="s">TLSv1.2</span> <span class="s">TLSv1.3</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">ssl_ciphers</span> <span class="s">&#39;ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256&#39;</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">ssl_prefer_server_ciphers</span> <span class="no">off</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">ssl_session_cache</span> <span class="s">shared:SSL:10m</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">ssl_session_timeout</span> <span class="mi">10m</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Compression </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="kn">gzip</span> <span class="no">on</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">gzip_vary</span> <span class="no">on</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">gzip_proxied</span> <span class="s">any</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">gzip_comp_level</span> <span class="mi">6</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">gzip_types</span> <span class="s">text/plain</span> <span class="s">text/css</span> <span class="s">text/xml</span> <span class="s">text/javascript</span> </span></span><span class="line"><span class="cl"> <span class="s">application/json</span> <span class="s">application/javascript</span> <span class="s">application/xml+rss</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Rate limiting </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="kn">limit_req_zone</span> <span class="nv">$binary_remote_addr</span> <span class="s">zone=geode_limit:10m</span> <span class="s">rate=100r/s</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">limit_conn_zone</span> <span class="nv">$binary_remote_addr</span> <span class="s">zone=geode_conn:10m</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="c1"># Include virtual hosts </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="kn">include</span> <span class="s">/etc/nginx/conf.d/*.conf</span><span class="p">;</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="k">stream</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="c1"># QUIC passthrough for Geode </span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="kn">upstream</span> <span class="s">geode_quic</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kn">server</span> <span class="n">geode</span><span class="p">:</span><span class="mi">8443</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kn">server</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kn">listen</span> <span class="mi">8443</span> <span class="s">udp</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_pass</span> <span class="s">geode_quic</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_timeout</span> <span class="s">30s</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div><p><strong>Virtual Host Configuration</strong> (<code>conf.d/geode.conf</code>):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-nginx" data-lang="nginx"><span class="line"><span class="cl"><span class="c1"># Geode </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">server</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kn">listen</span> <span class="mi">443</span> <span class="s">ssl</span> <span class="s">http2</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">server_name</span> <span class="s">geode.local</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kn">ssl_certificate</span> <span class="s">/etc/nginx/certs/server.crt</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">ssl_certificate_key</span> <span class="s">/etc/nginx/certs/server.key</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kn">location</span> <span class="s">/</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_pass</span> <span class="s">https://geode:8443</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_set_header</span> <span class="s">Host</span> <span class="nv">$host</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_set_header</span> <span class="s">X-Real-IP</span> <span class="nv">$remote_addr</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_set_header</span> <span class="s">X-Forwarded-For</span> <span class="nv">$proxy_add_x_forwarded_for</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_set_header</span> <span class="s">X-Forwarded-Proto</span> <span class="nv">$scheme</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kn">limit_req</span> <span class="s">zone=geode_limit</span> <span class="s">burst=20</span> <span class="s">nodelay</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">limit_conn</span> <span class="s">geode_conn</span> <span class="mi">10</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Grafana </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">server</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kn">listen</span> <span class="mi">443</span> <span class="s">ssl</span> <span class="s">http2</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">server_name</span> <span class="s">grafana.geode.local</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kn">ssl_certificate</span> <span class="s">/etc/nginx/certs/server.crt</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">ssl_certificate_key</span> <span class="s">/etc/nginx/certs/server.key</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kn">location</span> <span class="s">/</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_pass</span> <span class="s">http://grafana:3000</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_set_header</span> <span class="s">Host</span> <span class="nv">$host</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_set_header</span> <span class="s">X-Real-IP</span> <span class="nv">$remote_addr</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Prometheus </span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">server</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kn">listen</span> <span class="mi">443</span> <span class="s">ssl</span> <span class="s">http2</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">server_name</span> <span class="s">prometheus.geode.local</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kn">ssl_certificate</span> <span class="s">/etc/nginx/certs/server.crt</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">ssl_certificate_key</span> <span class="s">/etc/nginx/certs/server.key</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"> <span class="kn">location</span> <span class="s">/</span> <span class="p">{</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_pass</span> <span class="s">http://prometheus:9090</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_set_header</span> <span class="s">Host</span> <span class="nv">$host</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="kn">proxy_set_header</span> <span class="s">X-Real-IP</span> <span class="nv">$remote_addr</span><span class="p">;</span> </span></span><span class="line"><span class="cl"> <span class="p">}</span> </span></span><span class="line"><span class="cl"><span class="p">}</span> </span></span></code></pre></div> <h3 id="security-best-practices" class="position-relative d-flex align-items-center group"> <span>Security Best Practices</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="security-best-practices" aria-haspopup="dialog" aria-label="Share link: Security Best Practices"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="tls-certificates" class="position-relative d-flex align-items-center group"> <span>TLS Certificates</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="tls-certificates" aria-haspopup="dialog" aria-label="Share link: TLS Certificates"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Production Certificates</strong> (Let&rsquo;s Encrypt):</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Install certbot</span> </span></span><span class="line"><span class="cl">apt-get install certbot </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Obtain certificate</span> </span></span><span class="line"><span class="cl">certbot certonly --standalone <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> -d geode.example.com <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --email [email protected] <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --agree-tos </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Copy certificates</span> </span></span><span class="line"><span class="cl">cp /etc/letsencrypt/live/geode.example.com/fullchain.pem certs/server.crt </span></span><span class="line"><span class="cl">cp /etc/letsencrypt/live/geode.example.com/privkey.pem certs/server.key </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Set permissions</span> </span></span><span class="line"><span class="cl">chmod <span class="m">600</span> certs/server.key </span></span><span class="line"><span class="cl">chmod <span class="m">644</span> certs/server.crt </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Restart services</span> </span></span><span class="line"><span class="cl">docker-compose restart geode nginx </span></span></code></pre></div><p><strong>Auto-renewal</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Add cron job for renewal</span> </span></span><span class="line"><span class="cl">cat <span class="s">&lt;&lt;EOF | sudo tee /etc/cron.d/certbot </span></span></span><span class="line"><span class="cl"><span class="s">0 3 * * * root certbot renew --quiet --post-hook &#34;docker-compose -f /path/to/docker-compose.yml restart geode nginx&#34; </span></span></span><span class="line"><span class="cl"><span class="s">EOF</span> </span></span></code></pre></div> <h4 id="firewall-configuration" class="position-relative d-flex align-items-center group"> <span>Firewall Configuration</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="firewall-configuration" aria-haspopup="dialog" aria-label="Share link: Firewall Configuration"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>UFW (Ubuntu)</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Allow SSH</span> </span></span><span class="line"><span class="cl">ufw allow 22/tcp </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Allow Geode QUIC</span> </span></span><span class="line"><span class="cl">ufw allow 8443/udp </span></span><span class="line"><span class="cl">ufw allow 8443/tcp </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Allow HTTPS (Nginx)</span> </span></span><span class="line"><span class="cl">ufw allow 443/tcp </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Allow Raft (internal cluster only)</span> </span></span><span class="line"><span class="cl">ufw allow from 10.0.0.0/8 to any port <span class="m">9000</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Enable firewall</span> </span></span><span class="line"><span class="cl">ufw <span class="nb">enable</span> </span></span></code></pre></div><p><strong>iptables</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Allow established connections</span> </span></span><span class="line"><span class="cl">iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Allow SSH</span> </span></span><span class="line"><span class="cl">iptables -A INPUT -p tcp --dport <span class="m">22</span> -j ACCEPT </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Allow Geode QUIC</span> </span></span><span class="line"><span class="cl">iptables -A INPUT -p udp --dport <span class="m">8443</span> -j ACCEPT </span></span><span class="line"><span class="cl">iptables -A INPUT -p tcp --dport <span class="m">8443</span> -j ACCEPT </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Allow HTTPS</span> </span></span><span class="line"><span class="cl">iptables -A INPUT -p tcp --dport <span class="m">443</span> -j ACCEPT </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Allow Raft (internal network only)</span> </span></span><span class="line"><span class="cl">iptables -A INPUT -s 10.0.0.0/8 -p tcp --dport <span class="m">9000</span> -j ACCEPT </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Drop everything else</span> </span></span><span class="line"><span class="cl">iptables -A INPUT -j DROP </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Save rules</span> </span></span><span class="line"><span class="cl">iptables-save &gt; /etc/iptables/rules.v4 </span></span></code></pre></div> <h4 id="network-segmentation" class="position-relative d-flex align-items-center group"> <span>Network Segmentation</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="network-segmentation" aria-haspopup="dialog" aria-label="Share link: Network Segmentation"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Docker Networks</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="c"># docker-compose.yml</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">networks</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">geode-frontend</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">driver</span><span class="p">:</span><span class="w"> </span><span class="l">bridge</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">geode-backend</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">driver</span><span class="p">:</span><span class="w"> </span><span class="l">bridge</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">internal</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w"> </span><span class="c"># No external access</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">services</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">geode</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">geode-frontend</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">geode-backend</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">vault</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">geode-backend </span><span class="w"> </span><span class="c"># Only internal access</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">nginx</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">networks</span><span class="p">:</span><span class="w"> </span></span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">geode-frontend </span><span class="w"> </span><span class="c"># Only frontend access</span><span class="w"> </span></span></span></code></pre></div> <h4 id="secrets-management" class="position-relative d-flex align-items-center group"> <span>Secrets Management</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="secrets-management" aria-haspopup="dialog" aria-label="Share link: Secrets Management"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Best Practices</strong>:</p> <ol> <li><strong>Never commit secrets to version control</strong></li> <li><strong>Use Vault for production secrets</strong></li> <li><strong>Rotate credentials regularly</strong> (90 days)</li> <li><strong>Use strong random passwords</strong> (32+ characters)</li> <li><strong>Enable MFA for admin access</strong></li> <li><strong>Audit secret access</strong> (Vault audit logs)</li> </ol> <p><strong>Automated Rotation</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Rotate database encryption keys</span> </span></span><span class="line"><span class="cl">geode admin rotate-encryption-key <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --old-key-id vault:geode/encryption/master_key <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --new-key-id vault:geode/encryption/master_key_v2 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Rotate service tokens</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> vault vault token renew -increment<span class="o">=</span>720h </span></span></code></pre></div> <h3 id="troubleshooting" class="position-relative d-flex align-items-center group"> <span>Troubleshooting</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="troubleshooting" aria-haspopup="dialog" aria-label="Share link: Troubleshooting"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="common-issues" class="position-relative d-flex align-items-center group"> <span>Common Issues</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="common-issues" aria-haspopup="dialog" aria-label="Share link: Common Issues"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Geode Won&rsquo;t Start</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Check logs</span> </span></span><span class="line"><span class="cl">docker-compose logs geode </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Verify certificates</span> </span></span><span class="line"><span class="cl">ls -l certs/ </span></span><span class="line"><span class="cl">openssl x509 -in certs/server.crt -text -noout </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Test connectivity to dependencies</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> geode ping vault </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> geode nc -zv minio <span class="m">9000</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> geode nc -zv redis <span class="m">6379</span> </span></span></code></pre></div><p><strong>High Memory Usage</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Check container stats</span> </span></span><span class="line"><span class="cl">docker stats geode </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Verify memory limits</span> </span></span><span class="line"><span class="cl">docker inspect geode <span class="p">|</span> grep -A <span class="m">10</span> Memory </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Adjust limits if needed</span> </span></span><span class="line"><span class="cl"><span class="c1"># Edit docker-compose.yml and restart</span> </span></span><span class="line"><span class="cl">docker-compose up -d geode </span></span></code></pre></div><p><strong>Vault Sealed</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Check Vault status</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> vault vault status </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Unseal Vault</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> vault vault operator unseal &lt;unseal-key-1&gt; </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> vault vault operator unseal &lt;unseal-key-2&gt; </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> vault vault operator unseal &lt;unseal-key-3&gt; </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Enable auto-unseal (AWS KMS, GCP KMS, Azure Key Vault)</span> </span></span></code></pre></div><p><strong>MinIO Access Denied</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Verify credentials in .env</span> </span></span><span class="line"><span class="cl">cat .env <span class="p">|</span> grep S3_ </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Test MinIO access</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> minio mc <span class="nb">alias</span> <span class="nb">set</span> <span class="nb">test</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> http://localhost:9000 <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> <span class="nv">$MINIO_ROOT_USER</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> <span class="nv">$MINIO_ROOT_PASSWORD</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># List buckets</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> minio mc ls test/ </span></span></code></pre></div><p><strong>GPU Not Detected</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Verify NVIDIA runtime</span> </span></span><span class="line"><span class="cl">docker run --rm --gpus all nvidia/cuda:12.3.0-base-ubuntu22.04 nvidia-smi </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Check Docker daemon configuration</span> </span></span><span class="line"><span class="cl">cat /etc/docker/daemon.json </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Should contain:</span> </span></span><span class="line"><span class="cl"><span class="c1"># {</span> </span></span><span class="line"><span class="cl"><span class="c1"># &#34;runtimes&#34;: {</span> </span></span><span class="line"><span class="cl"><span class="c1"># &#34;nvidia&#34;: {</span> </span></span><span class="line"><span class="cl"><span class="c1"># &#34;path&#34;: &#34;nvidia-container-runtime&#34;,</span> </span></span><span class="line"><span class="cl"><span class="c1"># &#34;runtimeArgs&#34;: []</span> </span></span><span class="line"><span class="cl"><span class="c1"># }</span> </span></span><span class="line"><span class="cl"><span class="c1"># },</span> </span></span><span class="line"><span class="cl"><span class="c1"># &#34;default-runtime&#34;: &#34;nvidia&#34;</span> </span></span><span class="line"><span class="cl"><span class="c1"># }</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Restart Docker</span> </span></span><span class="line"><span class="cl">sudo systemctl restart docker </span></span></code></pre></div><p><strong>Cluster Split-Brain</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Check Raft status on all nodes</span> </span></span><span class="line"><span class="cl">geode admin raft-status --node geode-node1 </span></span><span class="line"><span class="cl">geode admin raft-status --node geode-node2 </span></span><span class="line"><span class="cl">geode admin raft-status --node geode-node3 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Force leader election</span> </span></span><span class="line"><span class="cl">geode admin raft-force-election --node geode-node1 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Reset Raft state (DANGEROUS - data loss possible)</span> </span></span><span class="line"><span class="cl">geode admin raft-reset --force </span></span></code></pre></div> <h4 id="performance-issues" class="position-relative d-flex align-items-center group"> <span>Performance Issues</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="performance-issues" aria-haspopup="dialog" aria-label="Share link: Performance Issues"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Slow Queries</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Enable query logging</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> geode geode admin set-log-level --query-log debug </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Analyze slow queries</span> </span></span><span class="line"><span class="cl">docker-compose logs geode <span class="p">|</span> grep <span class="s2">&#34;slow_query&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Use EXPLAIN to analyze query plan</span> </span></span><span class="line"><span class="cl">geode query <span class="s2">&#34;EXPLAIN MATCH (n:Person) RETURN n&#34;</span> --server geode:8443 </span></span></code></pre></div><p><strong>High Latency</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Check network latency</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> geode ping -c <span class="m">10</span> geode-node2 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Verify QUIC performance</span> </span></span><span class="line"><span class="cl">geode admin network-diagnostics --peer geode-node2:8443 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Monitor metrics</span> </span></span><span class="line"><span class="cl">curl http://localhost:9090/api/v1/query?query<span class="o">=</span>geode_query_duration_seconds </span></span></code></pre></div><p><strong>Disk I/O Bottleneck</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Check disk performance</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> geode iostat -x <span class="m">1</span> <span class="m">10</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Enable I/O optimizations</span> </span></span><span class="line"><span class="cl">geode admin configure-io <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --async-io <span class="nb">true</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --io-threads <span class="m">8</span> <span class="se">\ </span></span></span><span class="line"><span class="cl"><span class="se"></span> --read-ahead 128k </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Consider upgrading to faster storage (NVMe SSD)</span> </span></span></code></pre></div> <h4 id="health-checks" class="position-relative d-flex align-items-center group"> <span>Health Checks</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="health-checks" aria-haspopup="dialog" aria-label="Share link: Health Checks"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>System Health</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Check all services</span> </span></span><span class="line"><span class="cl">docker-compose ps </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Verify Geode health</span> </span></span><span class="line"><span class="cl">curl -k https://geode.local/health </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Check cluster health</span> </span></span><span class="line"><span class="cl">geode admin cluster-health </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Example output:</span> </span></span><span class="line"><span class="cl"><span class="c1"># Cluster: healthy</span> </span></span><span class="line"><span class="cl"><span class="c1"># Nodes: 3/3 online</span> </span></span><span class="line"><span class="cl"><span class="c1"># Shards: 3/3 balanced</span> </span></span><span class="line"><span class="cl"><span class="c1"># Replication: current</span> </span></span></code></pre></div><p><strong>Database Integrity</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Run integrity check</span> </span></span><span class="line"><span class="cl">geode admin check-integrity </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Vacuum database</span> </span></span><span class="line"><span class="cl">geode admin vacuum </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Analyze statistics</span> </span></span><span class="line"><span class="cl">geode admin analyze </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Reindex (if needed)</span> </span></span><span class="line"><span class="cl">geode admin reindex </span></span></code></pre></div> <h3 id="maintenance" class="position-relative d-flex align-items-center group"> <span>Maintenance</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="maintenance" aria-haspopup="dialog" aria-label="Share link: Maintenance"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3> <h4 id="regular-maintenance-tasks" class="position-relative d-flex align-items-center group"> <span>Regular Maintenance Tasks</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="regular-maintenance-tasks" aria-haspopup="dialog" aria-label="Share link: Regular Maintenance Tasks"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Daily</strong>:</p> <ul> <li>Monitor metrics and alerts</li> <li>Review error logs</li> <li>Check backup completion</li> <li>Verify cluster health</li> </ul> <p><strong>Weekly</strong>:</p> <ul> <li>Review slow query logs</li> <li>Analyze storage growth</li> <li>Update statistics</li> <li>Rotate logs</li> </ul> <p><strong>Monthly</strong>:</p> <ul> <li>Vacuum database</li> <li>Update Docker images</li> <li>Review and update secrets</li> <li>Test disaster recovery</li> </ul> <p><strong>Quarterly</strong>:</p> <ul> <li>Security audit</li> <li>Performance benchmarks</li> <li>Capacity planning review</li> <li>Update TLS certificates (if needed)</li> </ul> <h4 id="update-procedure" class="position-relative d-flex align-items-center group"> <span>Update Procedure</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="update-procedure" aria-haspopup="dialog" aria-label="Share link: Update Procedure"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Pull latest images</span> </span></span><span class="line"><span class="cl">docker-compose pull </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Backup current state</span> </span></span><span class="line"><span class="cl">geode backup --dest s3://geode-backups/pre-update-<span class="k">$(</span>date +%Y%m%d<span class="k">)</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Stop services</span> </span></span><span class="line"><span class="cl">docker-compose stop geode </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Recreate containers</span> </span></span><span class="line"><span class="cl">docker-compose up -d geode </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Verify health</span> </span></span><span class="line"><span class="cl">docker-compose logs -f geode </span></span><span class="line"><span class="cl">geode query <span class="s2">&#34;RETURN 1&#34;</span> --server geode:8443 </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Clean up old images</span> </span></span><span class="line"><span class="cl">docker image prune -a </span></span></code></pre></div> <h4 id="log-rotation" class="position-relative d-flex align-items-center group"> <span>Log Rotation</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="log-rotation" aria-haspopup="dialog" aria-label="Share link: Log Rotation"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><p><strong>Configure logrotate</strong>:</p> <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># /etc/logrotate.d/geode</span> </span></span><span class="line"><span class="cl">/var/lib/docker/volumes/geode_logs/_data/*.log <span class="o">{</span> </span></span><span class="line"><span class="cl"> daily </span></span><span class="line"><span class="cl"> rotate <span class="m">30</span> </span></span><span class="line"><span class="cl"> compress </span></span><span class="line"><span class="cl"> delaycompress </span></span><span class="line"><span class="cl"> notifempty </span></span><span class="line"><span class="cl"> create <span class="m">0640</span> root root </span></span><span class="line"><span class="cl"> sharedscripts </span></span><span class="line"><span class="cl"> postrotate </span></span><span class="line"><span class="cl"> docker-compose <span class="nb">exec</span> geode <span class="nb">kill</span> -USR1 <span class="m">1</span> </span></span><span class="line"><span class="cl"> endscript </span></span><span class="line"><span class="cl"><span class="o">}</span> </span></span></code></pre></div> <h4 id="cleanup" class="position-relative d-flex align-items-center group"> <span>Cleanup</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="cleanup" aria-haspopup="dialog" aria-label="Share link: Cleanup"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># Remove old backups (30+ days)</span> </span></span><span class="line"><span class="cl">docker-compose <span class="nb">exec</span> minio mc find local/geode-backups --older-than 30d --exec <span class="s2">&#34;mc rm {}&#34;</span> </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Clean up old Docker volumes</span> </span></span><span class="line"><span class="cl">docker volume prune </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Clean up old logs</span> </span></span><span class="line"><span class="cl">find /var/log/geode -name <span class="s2">&#34;*.log&#34;</span> -mtime +30 -delete </span></span><span class="line"><span class="cl"> </span></span><span class="line"><span class="cl"><span class="c1"># Clean WAL archives (after backup)</span> </span></span><span class="line"><span class="cl">geode admin clean-wal-archive --before <span class="k">$(</span>date -d <span class="s2">&#34;7 days ago&#34;</span> +%Y%m%d<span class="k">)</span> </span></span></code></pre></div> <h3 id="production-checklist" class="position-relative d-flex align-items-center group"> <span>Production Checklist</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="production-checklist" aria-haspopup="dialog" aria-label="Share link: Production Checklist"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>Before going to production, verify:</p> <ul> <li> <p><input disabled="" type="checkbox"> <strong>Security</strong></p> <ul> <li><input disabled="" type="checkbox"> Production TLS certificates installed</li> <li><input disabled="" type="checkbox"> All default passwords changed</li> <li><input disabled="" type="checkbox"> Firewall rules configured</li> <li><input disabled="" type="checkbox"> Vault initialized and unsealed</li> <li><input disabled="" type="checkbox"> Secrets rotation policy in place</li> <li><input disabled="" type="checkbox"> Audit logging enabled</li> <li><input disabled="" type="checkbox"> Network encryption between services</li> </ul> </li> <li> <p><input disabled="" type="checkbox"> <strong>High Availability</strong></p> <ul> <li><input disabled="" type="checkbox"> Minimum 3 nodes for distributed deployment</li> <li><input disabled="" type="checkbox"> Raft consensus configured</li> <li><input disabled="" type="checkbox"> Load balancer with health checks</li> <li><input disabled="" type="checkbox"> Automatic failover tested</li> <li><input disabled="" type="checkbox"> Replication lag monitoring</li> </ul> </li> <li> <p><input disabled="" type="checkbox"> <strong>Backup &amp; Recovery</strong></p> <ul> <li><input disabled="" type="checkbox"> Automated backups scheduled</li> <li><input disabled="" type="checkbox"> Backup retention policy configured</li> <li><input disabled="" type="checkbox"> Restore procedure tested</li> <li><input disabled="" type="checkbox"> Disaster recovery plan documented</li> <li><input disabled="" type="checkbox"> Off-site backup storage</li> </ul> </li> <li> <p><input disabled="" type="checkbox"> <strong>Monitoring</strong></p> <ul> <li><input disabled="" type="checkbox"> Prometheus scraping Geode metrics</li> <li><input disabled="" type="checkbox"> Grafana dashboards configured</li> <li><input disabled="" type="checkbox"> Alerting rules defined</li> <li><input disabled="" type="checkbox"> On-call rotation established</li> <li><input disabled="" type="checkbox"> Runbook for common issues</li> </ul> </li> <li> <p><input disabled="" type="checkbox"> <strong>Performance</strong></p> <ul> <li><input disabled="" type="checkbox"> Load testing completed</li> <li><input disabled="" type="checkbox"> Resource limits configured</li> <li><input disabled="" type="checkbox"> Query optimization reviewed</li> <li><input disabled="" type="checkbox"> Index strategy validated</li> <li><input disabled="" type="checkbox"> Scaling plan defined</li> </ul> </li> <li> <p><input disabled="" type="checkbox"> <strong>Operations</strong></p> <ul> <li><input disabled="" type="checkbox"> Maintenance windows scheduled</li> <li><input disabled="" type="checkbox"> Update procedure documented</li> <li><input disabled="" type="checkbox"> Team trained on operations</li> <li><input disabled="" type="checkbox"> Support escalation path defined</li> <li><input disabled="" type="checkbox"> SLA/SLO targets documented</li> </ul> </li> </ul> <h3 id="next-steps" class="position-relative d-flex align-items-center group"> <span>Next Steps</span> <button type="button" class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1" data-share-target="next-steps" aria-haspopup="dialog" aria-label="Share link: Next Steps"> <i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i> <span class="visually-hidden">Share link</span> </button> </h3><p>After successful deployment:</p> <ol> <li><strong>Configure Monitoring</strong> - Set up dashboards and alerts in Grafana</li> <li><strong>Test Backups</strong> - Verify backup and restore procedures</li> <li><strong>Optimize Queries</strong> - Use EXPLAIN and PROFILE to tune performance</li> <li><strong>Review Security</strong> - Conduct security audit and penetration testing</li> <li><strong>Document Operations</strong> - Create runbooks for common operational tasks</li> <li><strong>Train Team</strong> - Ensure operations team is familiar with Geode deployment</li> </ol> <p><strong>Related Documentation</strong>:</p> <ul> <li><a href="/docs/tutorials/index-optimization" >Performance Tuning Guide</a> - Query optimization with EXPLAIN</li> <li><a href="/docs/security/overview/" >Security Configuration</a> - Advanced security features</li> <li><a href="/docs/ops/observability/" >Monitoring Setup</a> - Metrics and alerting</li> <li><a href="/docs/guides/backup-automation/" >Backup Strategies</a> - Backup and recovery procedures</li> <li><a href="/docs/client-libraries/client-comparison" >Client Libraries</a> - Client configuration for production</li> </ul> <hr> <p><em>Last Updated: January 2026</em> <em>Geode Version: <strong>0.2.18</strong>+</em> <em>Status: Production Ready</em></p>