two/main/deploiement/route-reflector.html
2026-10-05 19:15:15 +00:00

624 lines
No EOL
29 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="fr" data-content_root="../" >
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>VM route reflector &#8212; Documentation two 0.1.0</title>
<script data-cfasync="false">
document.documentElement.dataset.mode = localStorage.getItem("mode") || "";
document.documentElement.dataset.theme = localStorage.getItem("theme") || "";
</script>
<!--
this give us a css class that will be invisible only if js is disabled
-->
<noscript>
<style>
.pst-js-only { display: none !important; }
</style>
</noscript>
<!-- Loaded before other Sphinx assets -->
<link href="../_static/styles/theme.css?digest=8878045cc6db502f8baf" rel="stylesheet" />
<link href="../_static/styles/pydata-sphinx-theme.css?digest=8878045cc6db502f8baf" rel="stylesheet" />
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=8f2a1f02" />
<link rel="stylesheet" type="text/css" href="../_static/styles/sphinx-book-theme.css?v=3c74b3bc" />
<!-- So that users can add custom icons -->
<script src="../_static/scripts/fontawesome.js?digest=8878045cc6db502f8baf"></script>
<!-- Pre-loaded scripts that we'll load fully later -->
<link rel="preload" as="script" href="../_static/scripts/bootstrap.js?digest=8878045cc6db502f8baf" />
<link rel="preload" as="script" href="../_static/scripts/pydata-sphinx-theme.js?digest=8878045cc6db502f8baf" />
<script src="../_static/documentation_options.js?v=57395fb6"></script>
<script src="../_static/doctools.js?v=fd6eb6e6"></script>
<script src="../_static/sphinx_highlight.js?v=6ffebe34"></script>
<script src="../_static/scripts/sphinx-book-theme.js?v=fab101a9"></script>
<script src="../_static/translations.js?v=e6b791cb"></script>
<script>DOCUMENTATION_OPTIONS.pagename = 'deploiement/route-reflector';</script>
<script>
DOCUMENTATION_OPTIONS.theme_version = '0.16.1';
DOCUMENTATION_OPTIONS.theme_switcher_json_url = '../switcher.json';
DOCUMENTATION_OPTIONS.theme_switcher_version_match = 'main';
DOCUMENTATION_OPTIONS.show_version_warning_banner =
false;
</script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Recherche" href="../search.html" />
<link rel="next" title="Exploitation" href="../exploitation/index.html" />
<link rel="prev" title="Premier hyperviseur" href="premier-hyperviseur.html" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="docsearch:language" content="fr"/>
<meta name="docsearch:version" content="0.1" />
</head>
<body data-bs-spy="scroll" data-bs-target=".bd-toc-nav" data-offset="180" data-bs-root-margin="0px 0px -60%" data-default-mode="">
<div id="pst-skip-link" class="skip-link d-print-none"><a href="#main-content">Passer au contenu principal</a></div>
<div id="pst-scroll-pixel-helper"></div>
<button type="button" class="btn rounded-pill" id="pst-back-to-top">
<i class="fa-solid fa-arrow-up"></i>Haut de page</button>
<dialog id="pst-search-dialog">
<form class="bd-search d-flex align-items-center"
action="../search.html"
method="get">
<i class="fa-solid fa-magnifying-glass"></i>
<input type="search"
class="form-control"
name="q"
placeholder="Search..."
aria-label="Search..."
autocomplete="off"
autocorrect="off"
autocapitalize="off"
spellcheck="false"/>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd>K</kbd></span>
</form>
</dialog>
<div class="pst-async-banner-revealer d-none">
<aside id="bd-header-version-warning" class="d-none d-print-none" aria-label="Alerte de version"></aside>
</div>
<header class="bd-header navbar navbar-expand-lg bd-navbar d-print-none">
</header>
<div class="bd-container">
<div class="bd-container__inner bd-page-width">
<dialog id="pst-primary-sidebar-modal"></dialog>
<div id="pst-primary-sidebar" class="bd-sidebar-primary bd-sidebar">
<div class="sidebar-header-items sidebar-primary__section">
</div>
<div class="sidebar-primary-items__start sidebar-primary__section">
<div class="sidebar-primary-item">
<a class="navbar-brand logo" href="../index.html">
<p class="title logo__title">Documentation two 0.1.0</p>
</a></div>
<div class="sidebar-primary-item"><ul class="navbar-icon-links"
aria-label="Icon Links">
<li class="nav-item">
<a href="https://git.g3e.fr/syonad/two" title="Dépôt" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-solid fa-code-branch fa-lg" aria-hidden="true"></i>
<span class="sr-only">Dépôt</span></a>
</li>
</ul></div>
<div class="sidebar-primary-item">
<div class="version-switcher__container dropdown pst-js-only">
<button id="pst-version-switcher-button-2"
type="button"
class="version-switcher__button btn btn-sm dropdown-toggle"
data-bs-toggle="dropdown"
aria-haspopup="listbox"
aria-controls="pst-version-switcher-list-2"
aria-label="Version switcher list"
>
Choose version <!-- this text may get changed later by javascript -->
<span class="caret"></span>
</button>
<div id="pst-version-switcher-list-2"
class="version-switcher__menu dropdown-menu list-group-flush py-0"
role="listbox" aria-labelledby="pst-version-switcher-button-2">
<!-- dropdown will be populated by javascript on page load -->
</div>
</div></div>
<div class="sidebar-primary-item">
<button class="btn search-button-field search-button__button pst-js-only" title="Recherche" aria-label="Recherche" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="fa-solid fa-magnifying-glass"></i>
<span class="search-button__default-text">Recherche</span>
<span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span>
</button></div>
<div class="sidebar-primary-item"><nav class="bd-links bd-docs-nav" aria-label="Main">
<div class="bd-toc-item navbar-nav active">
<ul class="nav bd-sidenav bd-sidenav__home-link">
<li class="toctree-l1">
<a class="reference internal" href="../index.html">
two
</a>
</li>
</ul>
<p aria-level="2" class="caption" role="heading"><span class="caption-text">Mise en œuvre</span></p>
<ul class="current nav bd-sidenav">
<li class="toctree-l1 has-children"><a class="reference internal" href="../demarrage/index.html">Démarrage</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="../demarrage/installation.html">Installation d’un hyperviseur</a></li>
<li class="toctree-l2"><a class="reference internal" href="../demarrage/premier-vpc.html">Premier VPC, premier subnet, première VM</a></li>
</ul>
</details></li>
<li class="toctree-l1 current active has-children"><a class="reference internal" href="index.html">Déploiement d’un cluster</a><details open="open"><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="architecture-cluster.html">Architecture du cluster</a></li>
<li class="toctree-l2"><a class="reference internal" href="image-qcow2.html">Construction de l’image qcow2</a></li>
<li class="toctree-l2"><a class="reference internal" href="routeurs.html">Routeurs</a></li>
<li class="toctree-l2"><a class="reference internal" href="premier-hyperviseur.html">Premier hyperviseur</a></li>
<li class="toctree-l2 current active"><a class="current reference internal" href="#">VM route reflector</a></li>
</ul>
</details></li>
</ul>
<p aria-level="2" class="caption" role="heading"><span class="caption-text">Exploitation</span></p>
<ul class="nav bd-sidenav">
<li class="toctree-l1 has-children"><a class="reference internal" href="../exploitation/index.html">Exploitation</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="../exploitation/configuration.html">Configuration</a></li>
<li class="toctree-l2"><a class="reference internal" href="../exploitation/services.html">Services systemd</a></li>
<li class="toctree-l2 has-children"><a class="reference internal" href="../exploitation/api-agent/index.html">API de l’agent</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l3"><a class="reference internal" href="../exploitation/api-agent/asynchronisme.html">Modèle asynchrone et codes de retour</a></li>
<li class="toctree-l3"><a class="reference internal" href="../exploitation/api-agent/reference.html">Référence</a></li>
</ul>
</details></li>
<li class="toctree-l2"><a class="reference internal" href="../exploitation/observabilite.html">Observabilité</a></li>
<li class="toctree-l2"><a class="reference internal" href="../exploitation/diagnostic.html">Diagnostic</a></li>
</ul>
</details></li>
</ul>
<p aria-level="2" class="caption" role="heading"><span class="caption-text">Développement</span></p>
<ul class="nav bd-sidenav">
<li class="toctree-l1 has-children"><a class="reference internal" href="../developpement/index.html">Développement</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="../developpement/lab.html">Lab de test multi-nœud</a></li>
</ul>
</details></li>
</ul>
<p aria-level="2" class="caption" role="heading"><span class="caption-text">Interne</span></p>
<ul class="nav bd-sidenav">
<li class="toctree-l1 has-children"><a class="reference internal" href="../concepts/index.html">Concepts</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="../concepts/vpc-subnet-vm.html">VPC, subnet et VM</a></li>
<li class="toctree-l2"><a class="reference internal" href="../concepts/modes-reseau.html">Modes réseau</a></li>
<li class="toctree-l2"><a class="reference internal" href="../concepts/cycle-de-vie.html">Cycle de vie des ressources</a></li>
<li class="toctree-l2"><a class="reference internal" href="../concepts/metadata-cloud-init.html">Metadata et cloud-init</a></li>
</ul>
</details></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../architecture/index.html">Architecture</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="../architecture/vue-densemble.html">Vue d’ensemble</a></li>
<li class="toctree-l2"><a class="reference internal" href="../architecture/stockage.html">Schéma des clés</a></li>
<li class="toctree-l2"><a class="reference internal" href="../architecture/contraintes.html">Invariants et pièges</a></li>
</ul>
</details></li>
<li class="toctree-l1 has-children"><a class="reference internal" href="../versions/index.html">Versions</a><details><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul>
<li class="toctree-l2"><a class="reference internal" href="../versions/0.2.0.html">Bael</a></li>
<li class="toctree-l2"><a class="reference internal" href="../versions/0.1.0.html">Michael</a></li>
</ul>
</details></li>
</ul>
</div>
</nav></div>
</div>
<div class="sidebar-primary-items__end sidebar-primary__section">
<div class="sidebar-primary-item">
<div id="ethical-ad-placement"
class="flat"
data-ea-publisher="readthedocs"
data-ea-type="readthedocs-sidebar"
data-ea-manual="true">
</div></div>
</div>
</div>
<main id="main-content" class="bd-main" role="main">
<div class="sbt-scroll-pixel-helper"></div>
<div class="bd-content">
<div class="bd-article-container">
<div class="bd-header-article d-print-none">
<div class="header-article-items header-article__inner">
<div class="header-article-items__start">
<div class="header-article-item"><button class="sidebar-toggle primary-toggle btn btn-sm" title="Toggle primary sidebar" data-bs-placement="bottom" data-bs-toggle="tooltip">
<span class="fa-solid fa-bars"></span>
</button></div>
</div>
<div class="header-article-items__end">
<div class="header-article-item">
<div class="article-header-buttons">
<button onclick="toggleFullScreen()"
class="btn btn-sm btn-fullscreen-button pst-navbar-icon"
title="Mode plein écran"
data-bs-placement="bottom" data-bs-toggle="tooltip"
>
<span class="btn__icon-container">
<i class="fas fa-expand"></i>
</span>
</button>
<button class="btn btn-sm nav-link pst-navbar-icon theme-switch-button pst-js-only" aria-label="Thème" data-bs-title="Thème" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="theme-switch fa-solid fa-sun fa-lg" data-mode="light" title="Clair"></i>
<i class="theme-switch fa-solid fa-moon fa-lg" data-mode="dark" title="Sombre"></i>
<i class="theme-switch fa-solid fa-circle-half-stroke fa-lg" data-mode="auto" title="Paramètres système"></i>
</button>
<button class="btn btn-sm pst-navbar-icon search-button search-button__button pst-js-only" title="Recherche" aria-label="Recherche" data-bs-placement="bottom" data-bs-toggle="tooltip">
<i class="fa-solid fa-magnifying-glass fa-lg"></i>
</button>
<button class="sidebar-toggle secondary-toggle btn btn-sm pst-navbar-icon" title="Toggle secondary sidebar" data-bs-placement="bottom" data-bs-toggle="tooltip">
<span class="fa-solid fa-list"></span>
</button>
</div></div>
</div>
</div>
</div>
<div id="jb-print-docs-body" class="onlyprint">
<h1>VM route reflector</h1>
<!-- Table of contents -->
<div id="print-main-content">
<div id="jb-print-toc">
<div>
<h2> Contenu </h2>
</div>
<nav aria-label="Page">
<ul class="visible nav section-nav flex-column">
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#adressage">Adressage</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#configuration-de-frr">Configuration de FRR</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#points-de-vigilance">Points de vigilance</a></li>
</ul>
</nav>
</div>
</div>
</div>
<div id="searchbox"></div>
<article class="bd-article">
<section id="vm-route-reflector">
<h1>VM route reflector<a class="headerlink" href="#vm-route-reflector" title="Lien vers cette rubrique">#</a></h1>
<p>Le route reflector est le point de rendez-vous du plan de contrôle : plutôt que de maintenir une
session entre chaque paire d’hyperviseurs, chaque hyperviseur ouvre une session vers le route
reflector, qui redistribue.</p>
<p>Il tourne lui-même en machine virtuelle, ce qui crée une dépendance circulaire à traiter
explicitement : la VM qui porte le plan de contrôle du cluster est hébergée par le cluster.</p>
<section id="adressage">
<h2>Adressage<a class="headerlink" href="#adressage" title="Lien vers cette rubrique">#</a></h2>
<p>Le route reflector est <strong>sur le même segment L2 que les hyperviseurs</strong>, avec trois adresses :</p>
<div class="pst-scrollable-table-container"><table class="table">
<colgroup>
<col style="width: 30.0%" />
<col style="width: 25.0%" />
<col style="width: 45.0%" />
</colgroup>
<thead>
<tr class="row-odd"><th class="head"><p>Adresse</p></th>
<th class="head"><p>Interface</p></th>
<th class="head"><p>Rôle</p></th>
</tr>
</thead>
<tbody>
<tr class="row-even"><td><p>une adresse de <code class="docutils literal notranslate"><span class="pre">192.168.14.0/24</span></code></p></td>
<td><p>interface principale</p></td>
<td><p>celle de n’importe quelle machine du segment ; les réponses aux hyperviseurs en partent</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">169.254.0.3/28</span></code></p></td>
<td><p>interface principale, <strong>adresse secondaire</strong></p></td>
<td><p>le lien avec les routeurs de cluster (<code class="docutils literal notranslate"><span class="pre">169.254.0.1</span></code> et <code class="docutils literal notranslate"><span class="pre">.2</span></code>), sur le même L2</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">10.255.255.1/32</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">lo1</span></code>, interface <code class="docutils literal notranslate"><span class="pre">dummy</span></code></p></td>
<td><p><code class="docutils literal notranslate"><span class="pre">router-id</span></code>, <code class="docutils literal notranslate"><span class="pre">cluster-id</span></code> et source des sessions EVPN ; seule route annoncée aux routeurs</p></td>
</tr>
</tbody>
</table>
</div>
<p>Les hyperviseurs ne connaissent que la loopback : ils ouvrent leur session vers <code class="docutils literal notranslate"><span class="pre">10.255.255.1</span></code>
par leur passerelle (<code class="docutils literal notranslate"><span class="pre">192.168.14.1</span></code>), les routeurs l’ayant apprise du route reflector en eBGP.
Aucune adresse d’hyperviseur n’est déclarée côté route reflector : il accepte toute session venant
du segment (<code class="docutils literal notranslate"><span class="pre">bgp</span> <span class="pre">listen</span> <span class="pre">range</span></code>).</p>
<p>L’adresse du lien est une <strong>adresse secondaire</strong> de l’interface principale, pas une interface à
part : même L2, même MAC sur le fil, une interface de moins qu’avec un <code class="docutils literal notranslate"><span class="pre">ipvlan</span></code>. Elle doit
survivre aux renouvellements DHCP de l’adresse principale : la déclarer dans la configuration
réseau du système, pas la poser à la main.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p><strong>Non vérifié sur l’image de production.</strong> Avec NetworkManager, la forme attendue est :</p>
<div class="highlight-bash notranslate"><div class="highlight"><pre><span></span>nmcli<span class="w"> </span>connection<span class="w"> </span>modify<span class="w"> </span>&lt;connexion&gt;<span class="w"> </span>+ipv4.addresses<span class="w"> </span><span class="m">169</span>.254.0.3/28
nmcli<span class="w"> </span>connection<span class="w"> </span>add<span class="w"> </span><span class="nb">type</span><span class="w"> </span>dummy<span class="w"> </span>ifname<span class="w"> </span>lo1<span class="w"> </span>con-name<span class="w"> </span>lo1<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>ipv4.method<span class="w"> </span>manual<span class="w"> </span>ipv4.addresses<span class="w"> </span><span class="m">10</span>.255.255.1/32<span class="w"> </span>ipv6.method<span class="w"> </span>disabled
</pre></div>
</div>
<p>Ces commandes restent à valider sur l’image golden.</p>
</div>
</section>
<section id="configuration-de-frr">
<h2>Configuration de FRR<a class="headerlink" href="#configuration-de-frr" title="Lien vers cette rubrique">#</a></h2>
<p><code class="docutils literal notranslate"><span class="pre">bgpd</span></code> et <code class="docutils literal notranslate"><span class="pre">bfdd</span></code> activés dans <code class="docutils literal notranslate"><span class="pre">/etc/frr/daemons</span></code>.</p>
<div class="highlight-text notranslate"><div class="highlight"><pre><span></span>frr defaults traditional
hostname rr1
log syslog informational
!
ip prefix-list RR-LOOPBACK-OUT seq 10 permit 10.255.255.1/32
!
route-map NO-IN deny 999
description deny
exit
!
router bgp 65000
no bgp default ipv4-unicast
bgp router-id 10.255.255.1
bgp cluster-id 10.255.255.1
neighbor CLUSTER peer-group
neighbor CLUSTER remote-as 65100
neighbor CLUSTER bfd
neighbor 169.254.0.1 peer-group CLUSTER
neighbor 169.254.0.1 description router-1
neighbor 169.254.0.2 peer-group CLUSTER
neighbor 169.254.0.2 description router-2
neighbor fabric peer-group
neighbor fabric remote-as 64600
neighbor fabric local-as 64600 no-prepend replace-as
neighbor fabric capability extended-nexthop
neighbor fabric update-source 10.255.255.1
bgp listen range 192.168.14.0/24 peer-group fabric
bgp listen limit 200
!
address-family ipv4 unicast
network 10.255.255.1/32
neighbor CLUSTER activate
neighbor CLUSTER prefix-list RR-LOOPBACK-OUT out
neighbor CLUSTER route-map NO-IN in
exit-address-family
!
address-family l2vpn evpn
neighbor fabric activate
neighbor fabric route-reflector-client
exit-address-family
!
exit
!
</pre></div>
</div>
<p>Ce qu’elle établit :</p>
<ul class="simple">
<li><p><strong>Routeurs de cluster</strong> (groupe <code class="docutils literal notranslate"><span class="pre">CLUSTER</span></code>) : eBGP vers l’AS 65100, avec BFD, en IPv4
unicast. Le route reflector n’annonce que sa loopback (<code class="docutils literal notranslate"><span class="pre">RR-LOOPBACK-OUT</span></code>) et <strong>n’accepte
rien</strong> (<code class="docutils literal notranslate"><span class="pre">NO-IN</span></code>) : il ne reçoit aucune route des routeurs.</p></li>
<li><p><strong>Hyperviseurs</strong> (groupe <code class="docutils literal notranslate"><span class="pre">fabric</span></code>) : voisins dynamiques, toute session venant de
<code class="docutils literal notranslate"><span class="pre">192.168.14.0/24</span></code> étant acceptée, jusqu’à 200. <code class="docutils literal notranslate"><span class="pre">local-as</span> <span class="pre">64600</span> <span class="pre">no-prepend</span> <span class="pre">replace-as</span></code> fait
que, du point de vue des hyperviseurs, la session est en iBGP dans l’AS 64600 — celui de leur
configuration — alors que le route reflector est en AS 65000 face aux routeurs.</p></li>
<li><p><strong>EVPN</strong> : seule famille activée vers les hyperviseurs, qui sont ses clients
(<code class="docutils literal notranslate"><span class="pre">route-reflector-client</span></code>) : il réfléchit les routes EVPN de chacun vers tous les autres.</p></li>
</ul>
<div class="admonition warning">
<p class="admonition-title">Avertissement</p>
<p><strong>Les tunnels ne survivent pas à la perte du route reflector.</strong> Avec un seul route reflector
et sans <code class="docutils literal notranslate"><span class="pre">graceful-restart</span></code>, à l’arrêt de FRR sur le route reflector, la session EVPN des
hyperviseurs tombe aussitôt, FRR retire les routes apprises et, avec elles, le VTEP distant et l’entrée d’inondation du VXLAN — <strong>plus
aucun paquet ne passe</strong> entre hyperviseurs, à 30 s comme à 90 s. Au redémarrage de FRR sur le
route reflector, VTEP distant et trafic reviennent <strong>31 s</strong> plus tard. Le trafic entre VM d’un
même hyperviseur n’est pas concerné. La redondance (deux route reflectors) ou
<code class="docutils literal notranslate"><span class="pre">graceful-restart</span></code> sont les deux leviers ; ni l’un ni l’autre n’est encore qualifié.</p>
</div>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p><strong>À rédiger.</strong> Reste à documenter :</p>
<ul class="simple">
<li><p>la création de la VM : ressources, subnet et mode utilisés (<code class="docutils literal notranslate"><span class="pre">bridge</span></code>, pour pouvoir la
lancer sur n’importe quel hyperviseur), et s’il s’agit d’une VM créée par l’agent comme les
autres ou d’un cas particulier — l’image, elle, est l’image golden de <a class="reference internal" href="image-qcow2.html"><span class="doc">Construction de l’image qcow2</span></a> ;</p></li>
<li><p>la redondance : une seule VM route reflector, ou deux, et sur quels hyperviseurs ;</p></li>
<li><p>la procédure de reconstruction — l’état du cluster pendant l’absence du route reflector est
décrit ci-dessus : plus de trafic entre hyperviseurs ;</p></li>
<li><p>la procédure d’amorçage : ce qui fonctionne, et dans quel ordre, quand on démarre un cluster
entier depuis zéro — le premier hyperviseur n’a pas de session FRR établie tant que cette VM
n’existe pas, cf. <a class="reference internal" href="premier-hyperviseur.html"><span class="doc">Premier hyperviseur</span></a>.</p></li>
</ul>
</div>
</section>
<section id="points-de-vigilance">
<h2>Points de vigilance<a class="headerlink" href="#points-de-vigilance" title="Lien vers cette rubrique">#</a></h2>
<div class="admonition warning">
<p class="admonition-title">Avertissement</p>
<p>L’agent <strong>ne réattache pas</strong> les VM existantes à son démarrage, et les processus QEMU ne
survivent pas à un redémarrage de l’hyperviseur. Le redémarrage de l’hyperviseur qui héberge
le route reflector est donc un événement à part entière : la procédure de remise en service
doit être écrite, et testée.</p>
</div>
<div class="admonition warning">
<p class="admonition-title">Avertissement</p>
<p><code class="docutils literal notranslate"><span class="pre">instance-id</span></code> valant le nom de la VM, recréer la VM route reflector sous le même nom sur le
même disque fait que cloud-init <strong>ne rejoue pas</strong> le user-data. Cf.
<a class="reference internal" href="../concepts/metadata-cloud-init.html"><span class="doc">Metadata et cloud-init</span></a>.</p>
</div>
</section>
</section>
</article>
<footer class="prev-next-footer d-print-none">
<div class="prev-next-area">
<a class="left-prev"
href="premier-hyperviseur.html"
title="page précédente">
<i class="fa-solid fa-angle-left"></i>
<div class="prev-next-info">
<p class="prev-next-subtitle">précédent</p>
<p class="prev-next-title">Premier hyperviseur</p>
</div>
</a>
<a class="right-next"
href="../exploitation/index.html"
title="page suivante">
<div class="prev-next-info">
<p class="prev-next-subtitle">suivant</p>
<p class="prev-next-title">Exploitation</p>
</div>
<i class="fa-solid fa-angle-right"></i>
</a>
</div>
</footer>
</div>
<dialog id="pst-secondary-sidebar-modal"></dialog>
<div id="pst-secondary-sidebar" class="bd-sidebar-secondary bd-toc"><div class="sidebar-secondary-items sidebar-secondary__inner">
<div class="sidebar-secondary-item"><div
id="pst-page-navigation-heading-2"
class="page-toc tocsection onthispage">
<i class="fa-solid fa-list"></i> Contenu
</div>
<nav id="pst-page-toc-nav" class="page-toc" aria-labelledby="pst-page-navigation-heading-2">
<ul class="visible nav section-nav flex-column">
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#adressage">Adressage</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#configuration-de-frr">Configuration de FRR</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#points-de-vigilance">Points de vigilance</a></li>
</ul>
</nav></div>
</div></div>
</div>
<footer class="bd-footer-content">
<div class="bd-footer-content__inner container">
<div class="footer-item">
<p class="component-author">
Par Nicolas Boufidjeline
</p>
</div>
<div class="footer-item">
<p class="copyright">
© Copyright 2026, Nicolas Boufidjeline.
<br/>
</p>
</div>
<div class="footer-item">
</div>
<div class="footer-item">
</div>
</div>
</footer>
</main>
</div>
</div>
<!-- Scripts loaded after <body> so the DOM is not blocked -->
<script defer src="../_static/scripts/bootstrap.js?digest=8878045cc6db502f8baf"></script>
<script defer src="../_static/scripts/pydata-sphinx-theme.js?digest=8878045cc6db502f8baf"></script>
<footer class="bd-footer">
</footer>
</body>
</html>