<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki.sn4ky.net/index.php?action=history&amp;feed=atom&amp;title=Xen_Live_migration_avec_DRBD</id>
	<title>Xen Live migration avec DRBD - Historique des versions</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sn4ky.net/index.php?action=history&amp;feed=atom&amp;title=Xen_Live_migration_avec_DRBD"/>
	<link rel="alternate" type="text/html" href="https://wiki.sn4ky.net/index.php?title=Xen_Live_migration_avec_DRBD&amp;action=history"/>
	<updated>2026-05-06T13:18:05Z</updated>
	<subtitle>Historique des versions pour cette page sur le wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://wiki.sn4ky.net/index.php?title=Xen_Live_migration_avec_DRBD&amp;diff=9&amp;oldid=prev</id>
		<title>Sn4kY : Page créée avec « Nous considérons ici que Xen et DRBD sont installés et fonctionnels, et qu&#039;une VM est installée sur un block-device DRBD.  Le but ici est de pouvoir effectuer des bascu... »</title>
		<link rel="alternate" type="text/html" href="https://wiki.sn4ky.net/index.php?title=Xen_Live_migration_avec_DRBD&amp;diff=9&amp;oldid=prev"/>
		<updated>2018-04-12T13:57:57Z</updated>

		<summary type="html">&lt;p&gt;Page créée avec « Nous considérons ici que Xen et DRBD sont installés et fonctionnels, et qu&amp;#039;une VM est installée sur un block-device DRBD.  Le but ici est de pouvoir effectuer des bascu... »&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nouvelle page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Nous considérons ici que Xen et DRBD sont installés et fonctionnels, et qu&amp;#039;une VM est installée sur un block-device DRBD.&lt;br /&gt;
&lt;br /&gt;
Le but ici est de pouvoir effectuer des bascules de manière semi-automatique (par déclenchement manuel)&lt;br /&gt;
&lt;br /&gt;
==Modifications DRBD==&lt;br /&gt;
Xen a besoin de savoir si le block-device peut être écrit sur le node qui va recevoir la VM avant de procéder à la migration. Ce n&amp;#039;est pas le cas par défaut (&amp;lt;code&amp;gt;ro:Secondary/Primary&amp;lt;/code&amp;gt;) on va donc indiquer à DRBD que la ressource peut être écrite simultanément via les deux nodes (ne vous en faites pas, Xen n&amp;#039;écrit JAMAIS des deux côtés simultanément)&lt;br /&gt;
&lt;br /&gt;
Dans votre fichier de définition de la ressource, il faut ajouter, &amp;lt;code&amp;gt;allow-two-primaries;&amp;lt;/code&amp;gt; dans la sous-section &amp;lt;code&amp;gt;net {}&amp;lt;/code&amp;gt; :&lt;br /&gt;
 #DRBD 8.3&lt;br /&gt;
 resource testdrbd {&lt;br /&gt;
  net {&lt;br /&gt;
   allow-two-primaries;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 #DRBD 8.4&lt;br /&gt;
 resource testdrbd {&lt;br /&gt;
  net {&lt;br /&gt;
   allow-two-primaries yes;&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
(a faire sur les deux nodes)&lt;br /&gt;
&lt;br /&gt;
Puis faire un reload de drbd&lt;br /&gt;
 [root@node1 ~]# /etc/init.d/drbd reload&lt;br /&gt;
 [root@node2 ~]# /etc/init.d/drbd reload&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Modifications Xend==&lt;br /&gt;
Pour effectuer une migration en mode Live, il faut activer la fonctionnalité, en définissant les paramètres d&amp;#039;interface, de port et de hosts autorisés à faire de la migration. Ces configurations sont a effectuer sur les deux nodes.&lt;br /&gt;
&lt;br /&gt;
 [root@nodeX ~]# vim /etc/xen/xend-config.sxp&lt;br /&gt;
 (xend-relocation-server yes)&lt;br /&gt;
 (xend-relocation-port 8002)&lt;br /&gt;
 (xend-relocation-address &amp;#039;192.168.0.X&amp;#039;)&lt;br /&gt;
 (xend-relocation-hosts-allow &amp;#039;192.168.0.X&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
Le paramètre &amp;lt;code&amp;gt;xend-relocation-address&amp;lt;/code&amp;gt; permet de n&amp;#039;écouter que sur une interface spécifique (le laisser vide revient à écouter sur &amp;lt;code&amp;gt;0.0.0.0&amp;lt;/code&amp;gt;.&amp;lt;br /&amp;gt;&lt;br /&gt;
Le paramètre &amp;lt;code&amp;gt;xend-relocation-hosts-allow&amp;lt;/code&amp;gt; permet de n&amp;#039;autoriser que certains nodes. L&amp;#039;option comprends les expressions régulières, et les FQDN. -RTFM-&lt;br /&gt;
&lt;br /&gt;
Il est possible (voir fortement conseillé) de renforcer la sécurité via un coup d&amp;#039;iptables&lt;br /&gt;
&lt;br /&gt;
Il faut restarter xend sur les deux nodes&lt;br /&gt;
 [root@nodeX ~]# /etc/init.d/xend restart&lt;br /&gt;
&lt;br /&gt;
On peut vérifier que les paramètres réseau ont bien été pris en compte :&lt;br /&gt;
 [root@node1 ~]# netstat -lnp | grep 8002&lt;br /&gt;
 tcp        0      0 192.168.0.1:8002          0.0.0.0:*               LISTEN      3406/python2.5&lt;br /&gt;
&lt;br /&gt;
 [root@node2 ~]# netstat -lnp | grep 8002&lt;br /&gt;
 tcp        0      0 192.168.0.2:8002          0.0.0.0:*               LISTEN      3412/python2.5&lt;br /&gt;
&lt;br /&gt;
==Modifications du domU==&lt;br /&gt;
La configuration de la VM reste quasi-identique. La seule modification est de spécifier le nom de la ressource drbd en utilisant le script associé (fourni dans le package drbd).&lt;br /&gt;
&lt;br /&gt;
 [root@nodeX ~]# vim /etc/xen/vm-testdrbd.cfg&lt;br /&gt;
 name    = &amp;#039;vm-testdrbd&amp;#039;;&lt;br /&gt;
 disk = [ &amp;#039;drbd:testdrbd,xvda1,w&amp;#039; ];&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;drbd:testdrbd&amp;lt;/code&amp;gt; indique à xen d&amp;#039;utiliser le script &amp;lt;code&amp;gt;/etc/xen/scripts/block-drbd&amp;lt;/code&amp;gt; avec la ressource &amp;lt;script&amp;gt;testdrbd&amp;lt;/script&amp;gt; (c&amp;#039;est le nom qu&amp;#039;on lui a donné dans le fichier de config de DRBD).&lt;br /&gt;
&lt;br /&gt;
Le fichier de configuration doit, bien entendu, exister sur les deux nodes !&lt;br /&gt;
&lt;br /&gt;
==hotplugpath.sh==&lt;br /&gt;
Il semblerait qu&amp;#039;un oubli ait eu lieu avec Xen 4.0, le script &amp;lt;code&amp;gt;hotplugpth.sh&amp;lt;/code&amp;gt; nécessaire au script drbd.&lt;br /&gt;
&lt;br /&gt;
Le symptôme :&lt;br /&gt;
 [root@node1 ~]# xm create /etc/xen/vm-testdrbd.cfg&lt;br /&gt;
 Using config file &amp;quot;/etc/xen/vm-testdrbd.cfg&amp;quot;.&lt;br /&gt;
 Error: Device 51714 (vbd) could not be connected. Hotplug scripts not working.&lt;br /&gt;
&lt;br /&gt;
La solution :&lt;br /&gt;
 [root@node1 ~]#  cat /etc/xen/scripts/hotplugpath.sh&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #&lt;br /&gt;
 # CAUTION: this script is manually created&lt;br /&gt;
 # see: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=591456&lt;br /&gt;
 # it should go away with xen-common 4.1.0~rc6-1&lt;br /&gt;
 #&lt;br /&gt;
 SBINDIR=&amp;quot;/usr/sbin&amp;quot;&lt;br /&gt;
 BINDIR=&amp;quot;/usr/bin&amp;quot;&lt;br /&gt;
 #LIBEXEC=&amp;quot;/usr/lib/xen/bin&amp;quot;&lt;br /&gt;
 LIBEXEC=&amp;quot;/usr/lib/xen-4.0/bin&amp;quot;&lt;br /&gt;
 #LIBDIR=&amp;quot;/usr/lib64&amp;quot;&lt;br /&gt;
 LIBDIR=&amp;quot;/usr/lib&amp;quot;&lt;br /&gt;
 SHAREDIR=&amp;quot;/usr/share&amp;quot;&lt;br /&gt;
 #PRIVATE_BINDIR=&amp;quot;/usr/lib64/xen/bin&amp;quot;&lt;br /&gt;
 PRIVATE_BINDIR=&amp;quot;/usr/lib/xen-4.0/bin&amp;quot;&lt;br /&gt;
 #XENFIRMWAREDIR=&amp;quot;/usr/lib/xen/boot&amp;quot;&lt;br /&gt;
 XENFIRMWAREDIR=&amp;quot;/usr/lib/xen-4.0/boot&amp;quot;&lt;br /&gt;
 XEN_CONFIG_DIR=&amp;quot;/etc/xen&amp;quot;&lt;br /&gt;
 XEN_SCRIPT_DIR=&amp;quot;/etc/xen/scripts&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Démarrage de la machine virtuelle==&lt;br /&gt;
&lt;br /&gt;
Il est grand temps de démarrer la VM. Attention, la VM &amp;#039;&amp;#039;&amp;#039;ne doit être démarrée que sur l&amp;#039;un des nodes&amp;#039;&amp;#039;&amp;#039;. Deux VM sur le même block device endommagera sévèrement le file system.&lt;br /&gt;
&lt;br /&gt;
 [root@node1 ~]# xm create /etc/xen/vm-testdrbd.cfg&lt;br /&gt;
 Using config file &amp;quot;/etc/xen/vm-testdrbd.cfg&amp;quot;.&lt;br /&gt;
 Started domain vm-testdrbd (id=1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On vérifie le succès de l&amp;#039;opération&lt;br /&gt;
 [root@node1 ~]# xm list&lt;br /&gt;
 Name                                        ID   Mem VCPUs      State   Time(s)&lt;br /&gt;
 Domain-0                                     0   249     4     r-----   4516.4&lt;br /&gt;
 vm-testdrbd                                  1   512     1     -b----      2.7&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A ce stade, le status de DRDB est le suivant :&lt;br /&gt;
 [root@node1 ~]# cat /proc/drbd&lt;br /&gt;
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----&lt;br /&gt;
    ns:260 nr:78064 dw:78324 dr:472 al:13 bm:8 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0&lt;br /&gt;
&lt;br /&gt;
 [root@node2 ~]# cat /proc/drbd&lt;br /&gt;
 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----&lt;br /&gt;
    ns:78064 nr:260 dw:78324 dr:190807 al:85 bm:82 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Migration de la VM==&lt;br /&gt;
Une fois que la VM a bien été bootée sur node1, nous pouvons procéder à sa migration vers le second node :&lt;br /&gt;
&lt;br /&gt;
 [root@node1 ~]# xm migrate --live vm-testdrbd node2&lt;br /&gt;
(&amp;lt;code&amp;gt;migrate&amp;lt;/code&amp;gt; accepte une adresse IP, tout comme un FQDN)&lt;br /&gt;
&lt;br /&gt;
Il est normal que cette commande n&amp;#039;ait pas d&amp;#039;output, et ne rende pas la main tout de suite : la migration est en cours.&lt;br /&gt;
&lt;br /&gt;
Pendant la migration, on peut vérifier le status de la VM sur node2 :&lt;br /&gt;
 [root@node2 ~]# xm list&lt;br /&gt;
 Name                                        ID   Mem VCPUs      State   Time(s)&lt;br /&gt;
 Domain-0                                     0   249     4     r-----   4434.1&lt;br /&gt;
 vm-testdrbd                                  4   512     0     --p---      0.0&lt;br /&gt;
&lt;br /&gt;
Il est également intéressant de noter l&amp;#039;état de DRBD pendant la migration :&lt;br /&gt;
 [root@node2 ~]# cat /proc/drbd&lt;br /&gt;
 0: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r----&lt;br /&gt;
    ns:78064 nr:260 dw:78324 dr:191007 al:85 bm:82 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Une fois que node1 a rendu la main, il est simple de vérifier que la VM a bien migré d&amp;#039;un node à l&amp;#039;autre :&lt;br /&gt;
 [root@node1 ~]# xm list&lt;br /&gt;
 Name                                        ID   Mem VCPUs      State   Time(s)&lt;br /&gt;
 Domain-0                                     0   249     4     r-----   4516.4&lt;br /&gt;
&lt;br /&gt;
 [root@node2 ~]# xm list&lt;br /&gt;
 Name                                        ID   Mem VCPUs      State   Time(s)&lt;br /&gt;
 Domain-0                                     0   249     4     r-----   4445.8&lt;br /&gt;
 testdrbd                                     4   512     1     -b----      0.1&lt;br /&gt;
&lt;br /&gt;
A ce stade, le status de DRDB est le suivant :&lt;br /&gt;
 [root@node1 ~]# cat /proc/drbd&lt;br /&gt;
 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r----&lt;br /&gt;
    ns:78064 nr:260 dw:78324 dr:190807 al:85 bm:82 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0&lt;br /&gt;
&lt;br /&gt;
 [root@node2 ~]# cat /proc/drbd&lt;br /&gt;
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----&lt;br /&gt;
    ns:260 nr:78064 dw:78324 dr:472 al:13 bm:8 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0&lt;br /&gt;
&lt;br /&gt;
La VM a bien migré, et le script Xen DRBD a effectué toutes les étapes nécessaires à la migration de la VM :&lt;br /&gt;
* set both drbd nodes as primary (pour le droit en écriture à la destination !)&lt;br /&gt;
* migrating xen virtual machine&lt;br /&gt;
* set drbd node original source as secondary&lt;br /&gt;
&lt;br /&gt;
==sources==&lt;br /&gt;
&lt;br /&gt;
[http://www.drbd.org/users-guide/ch-xen.html]&lt;br /&gt;
[http://backdrift.org/live-migration-and-synchronous-replicated-storage-with-xen-drbd-and-lvm]&lt;br /&gt;
[http://lists.linbit.com/pipermail/drbd-user/2011-March/015879.html]&lt;/div&gt;</summary>
		<author><name>Sn4kY</name></author>
	</entry>
</feed>