Files
LibreQoS/_build/html/docs/v2.0/high-availability.html
T
2026-02-25 19:40:43 -07:00

242 lines
14 KiB
HTML

<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.19: https://docutils.sourceforge.io/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>High Availability and Failure Domains &mdash; LibreQoE documentation</title>
<link rel="stylesheet" type="text/css" href="../../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../../_static/css/theme.css" />
<script src="../../_static/jquery.js"></script>
<script src="../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script>
<script src="../../_static/doctools.js"></script>
<script src="../../_static/sphinx_highlight.js"></script>
<script src="../../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../../genindex.html" />
<link rel="search" title="Search" href="../../search.html" />
<link rel="next" title="Upgrading" href="update.html" />
<link rel="prev" title="StormGuard" href="stormguard.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../index.html" class="icon icon-home">
LibreQoE
</a>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Getting Started</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="quickstart.html">Quickstart (Start Here)</a></li>
<li class="toctree-l1"><a class="reference internal" href="design.html">Deployment Scenarios</a></li>
<li class="toctree-l1"><a class="reference internal" href="requirements.html">System Requirements</a></li>
<li class="toctree-l1"><a class="reference internal" href="prereq.html">Prerequisites</a></li>
<li class="toctree-l1"><a class="reference internal" href="ubuntu-server.html">Install Ubuntu Server</a></li>
<li class="toctree-l1"><a class="reference internal" href="bridge.html">Configure Shaping Bridge</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Managing LibreQoS (v1.5 to v2.0):</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configure LibreQoS</a></li>
<li class="toctree-l1"><a class="reference internal" href="operating-modes.html">Operating Modes and Source of Truth</a></li>
<li class="toctree-l1"><a class="reference internal" href="configuration-advanced.html">Advanced Configuration Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="integrations.html">CRM/NMS Integrations</a></li>
<li class="toctree-l1"><a class="reference internal" href="components.html">LibreQoS Software Components</a></li>
<li class="toctree-l1"><a class="reference internal" href="node-manager-ui.html">LibreQoS WebUI (Node Manager)</a></li>
<li class="toctree-l1"><a class="reference internal" href="scale-topology.html">Scale Planning and Topology Design</a></li>
<li class="toctree-l1"><a class="reference internal" href="stormguard.html">StormGuard</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">High Availability and Failure Domains</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#scope-and-assumptions">Scope and Assumptions</a></li>
<li class="toctree-l2"><a class="reference internal" href="#active-backup-ha-model">Active/Backup HA Model</a></li>
<li class="toctree-l2"><a class="reference internal" href="#ospf-example-primary-cost-1-backup-cost-100">OSPF Example (Primary Cost 1, Backup Cost 100)</a></li>
<li class="toctree-l2"><a class="reference internal" href="#bgp-equivalent-if-you-use-bgp-instead-of-ospf">BGP Equivalent (If You Use BGP Instead of OSPF)</a></li>
<li class="toctree-l2"><a class="reference internal" href="#recovery-and-failback-conceptual-runbook">Recovery and Failback (Conceptual Runbook)</a></li>
<li class="toctree-l2"><a class="reference internal" href="#planned-maintenance-conceptual-procedure">Planned Maintenance (Conceptual Procedure)</a></li>
<li class="toctree-l2"><a class="reference internal" href="#ha-readiness-checklist">HA Readiness Checklist</a></li>
<li class="toctree-l2"><a class="reference internal" href="#known-limits">Known Limits</a></li>
<li class="toctree-l2"><a class="reference internal" href="#related-documentation">Related Documentation</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="update.html">Upgrading</a></li>
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Insight</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="insight.html">LibreQoS Insight (Insight)</a></li>
<li class="toctree-l1"><a class="reference internal" href="api.html">LibreQoS Node API</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Misc:</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="cake.html">CAKE</a></li>
<li class="toctree-l1"><a class="reference internal" href="performance-tuning.html">Performance Tuning</a></li>
<li class="toctree-l1"><a class="reference internal" href="extras.html">Extras</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../index.html">LibreQoE</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item active">High Availability and Failure Domains</li>
<li class="wy-breadcrumbs-aside">
<a href="../../_sources/docs/v2.0/high-availability.md.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="high-availability-and-failure-domains">
<h1>High Availability and Failure Domains<a class="headerlink" href="#high-availability-and-failure-domains" title="Permalink to this heading"></a></h1>
<p>This page describes a practical active/backup model for LibreQoS.</p>
<section id="scope-and-assumptions">
<h2>Scope and Assumptions<a class="headerlink" href="#scope-and-assumptions" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p>This page covers LibreQoS high availability as an active/backup design.</p></li>
<li><p>Failover should be controlled by dynamic routing (for example OSPF or BGP).</p></li>
<li><p>Hardware and router vendors are intentionally not prescribed.</p></li>
<li><p>Insight-specific high availability guidance is out of scope for this page.</p></li>
</ul>
</section>
<section id="active-backup-ha-model">
<h2>Active/Backup HA Model<a class="headerlink" href="#active-backup-ha-model" title="Permalink to this heading"></a></h2>
<p>One path is active (preferred), and one path is backup (standby). Routing policy controls path selection and failover.</p>
</section>
<section id="ospf-example-primary-cost-1-backup-cost-100">
<h2>OSPF Example (Primary Cost 1, Backup Cost 100)<a class="headerlink" href="#ospf-example-primary-cost-1-backup-cost-100" title="Permalink to this heading"></a></h2>
<p>Use OSPF interface cost to prefer the active path.</p>
<ul class="simple">
<li><p>Primary LibreQoS path: <code class="docutils literal notranslate"><span class="pre">ip</span> <span class="pre">ospf</span> <span class="pre">cost</span> <span class="pre">1</span></code></p></li>
<li><p>Backup LibreQoS path: <code class="docutils literal notranslate"><span class="pre">ip</span> <span class="pre">ospf</span> <span class="pre">cost</span> <span class="pre">100</span></code></p></li>
</ul>
<p>Conceptual result:</p>
<ul class="simple">
<li><p>Normal state: traffic uses the primary path because cost <code class="docutils literal notranslate"><span class="pre">1</span></code> is lower than <code class="docutils literal notranslate"><span class="pre">100</span></code>.</p></li>
<li><p>Failure state: if the primary path/router goes down, OSPF converges and traffic uses the backup path.</p></li>
<li><p>Recovery state: after the primary is healthy again, traffic returns to primary based on lower cost.</p></li>
</ul>
<p>Example policy intent:</p>
<ol class="arabic simple">
<li><p>Keep both paths up and routable at all times.</p></li>
<li><p>Ensure backup has enough capacity for expected peak load.</p></li>
<li><p>Test failover and failback during maintenance windows.</p></li>
</ol>
</section>
<section id="bgp-equivalent-if-you-use-bgp-instead-of-ospf">
<h2>BGP Equivalent (If You Use BGP Instead of OSPF)<a class="headerlink" href="#bgp-equivalent-if-you-use-bgp-instead-of-ospf" title="Permalink to this heading"></a></h2>
<p>If you run BGP, use standard preference controls to make one path primary and one backup (for example local preference, MED, or AS path prepending based on your design). Keep policy deterministic and documented.</p>
</section>
<section id="recovery-and-failback-conceptual-runbook">
<h2>Recovery and Failback (Conceptual Runbook)<a class="headerlink" href="#recovery-and-failback-conceptual-runbook" title="Permalink to this heading"></a></h2>
<ol class="arabic simple">
<li><p>Confirm whether failover occurred (routing table/path checks).</p></li>
<li><p>Verify customer traffic is flowing on backup path.</p></li>
<li><p>Repair the failed primary path.</p></li>
<li><p>Validate primary path health.</p></li>
<li><p>Return route preference to normal (primary preferred).</p></li>
<li><p>Verify traffic has returned to primary and performance is stable.</p></li>
</ol>
</section>
<section id="planned-maintenance-conceptual-procedure">
<h2>Planned Maintenance (Conceptual Procedure)<a class="headerlink" href="#planned-maintenance-conceptual-procedure" title="Permalink to this heading"></a></h2>
<ol class="arabic simple">
<li><p>Announce window and success criteria.</p></li>
<li><p>Confirm backup path health and capacity.</p></li>
<li><p>Shift traffic to backup using routing policy.</p></li>
<li><p>Perform maintenance on former active path.</p></li>
<li><p>Validate repaired path.</p></li>
<li><p>Optionally return traffic to normal active state.</p></li>
<li><p>Close window with post-change validation notes.</p></li>
</ol>
</section>
<section id="ha-readiness-checklist">
<h2>HA Readiness Checklist<a class="headerlink" href="#ha-readiness-checklist" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p>Dynamic routing is deployed and documented.</p></li>
<li><p>Active/backup preferences are explicit and tested.</p></li>
<li><p>Monitoring and alerting cover both paths and key dependencies.</p></li>
<li><p>On-call runbook includes failover and failback steps.</p></li>
<li><p>Regular drill cadence exists (for example quarterly failover tests).</p></li>
<li><p>Capacity on backup path is validated for realistic peak load.</p></li>
</ul>
</section>
<section id="known-limits">
<h2>Known Limits<a class="headerlink" href="#known-limits" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p>High availability depends on surrounding network design quality.</p></li>
<li><p>Dynamic routing convergence is not zero-time.</p></li>
<li><p>Misconfigured policy can cause asymmetric or unstable failover behavior.</p></li>
<li><p>HA does not replace backups or operational discipline.</p></li>
</ul>
</section>
<section id="related-documentation">
<h2>Related Documentation<a class="headerlink" href="#related-documentation" title="Permalink to this heading"></a></h2>
<ul class="simple">
<li><p><a class="reference internal" href="scale-topology.html"><span class="std std-doc">Scale Planning and Topology Design</span></a></p></li>
<li><p><a class="reference internal" href="performance-tuning.html"><span class="std std-doc">Performance Tuning</span></a></p></li>
<li><p><a class="reference internal" href="stormguard.html"><span class="std std-doc">StormGuard</span></a></p></li>
<li><p><a class="reference internal" href="configuration.html"><span class="std std-doc">Configuration</span></a></p></li>
<li><p><a class="reference internal" href="integrations.html"><span class="std std-doc">Integrations</span></a></p></li>
<li><p><a class="reference internal" href="troubleshooting.html"><span class="std std-doc">Troubleshooting</span></a></p></li>
</ul>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="stormguard.html" class="btn btn-neutral float-left" title="StormGuard" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="update.html" class="btn btn-neutral float-right" title="Upgrading" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2026, LibreQoE, LLC.</p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>