{"id":2107,"date":"2016-05-26T12:19:14","date_gmt":"2016-05-26T11:19:14","guid":{"rendered":"http:\/\/sdubois.evolix.net\/blog\/?p=2107"},"modified":"2018-08-14T15:55:30","modified_gmt":"2018-08-14T15:55:30","slug":"evolution-infrastructure-serveur-perso","status":"publish","type":"post","link":"https:\/\/sdubois.fr\/blog\/2016\/05\/evolution-infrastructure-serveur-perso\/","title":{"rendered":"Evolution infrastructure serveur perso &#8211; KVM\/Libvirt\/DRBD"},"content":{"rendered":"<p>On parle souvent du cordonnier mal chauss\u00e9. J&rsquo;ai d\u00e9cid\u00e9 de faire mentir le proverbe \ud83d\ude00<br \/>\nDepuis ma premi\u00e8re infra. perso d\u00e9crite sur <a href=\"http:\/\/sdubois.evolix.net\/blog\/2011\/08\/08\/gerer-sa-propre-infra-perso-sans-trop-de-frais\/\">http:\/\/sdubois.evolix.net\/blog\/2011\/08\/08\/gerer-sa-propre-infra-perso-sans-trop-de-frais\/<\/a>, j&rsquo;avais d\u00e9j\u00e0 fait des \u00e9volutions.<br \/>\nEn juin 2013, passage sur une offre serveur sp\u00e9ciale avec RAID hard (HP DL120G7 Corei3 2100 2C\/4T 4Go ram ECC + 2x1To + Raid hard + KVMIP) et utilisation de la virtualisation avec par simplicit\u00e9 (apparente) Proxmox (avec KVM)<br \/>\nEn novembre 2014, ajout d&rsquo;un second serveur d\u00e9di\u00e9 externe pour service de backup et VM d\u00e9di\u00e9e pour agenda perso (et d&rsquo;autres tests) et bascule vers KVM+libvirt *sans* Proxmox (sans trop de probl\u00e9matique en conservant mes machines .qcow2 cr\u00e9\u00e9 avec Proxmox)<br \/>\nIl \u00e9tait temps en 2016 de mettre \u00e0 l&rsquo;oeuvre un Cloud priv\u00e9 (cf <a href=\"http:\/\/sdubois.evolix.net\/blog\/2015\/11\/13\/hebergement-nouvelle-offre-de-cloud-prive-par-evolix\/\">http:\/\/sdubois.evolix.net\/blog\/2015\/11\/13\/hebergement-nouvelle-offre-de-cloud-prive-par-evolix\/<\/a>)<\/p>\n<p>Voici comment j&rsquo;ai proc\u00e9d\u00e9 :<\/p>\n<p>Cible serveur : Deux serveurs low cost XC2016 [Intel\u00ae C2750 (Avoton) 8 C \/ 8T @2,4 Ghz \/\/ 16 Go DDR3 \/\/ 1 To SATA]<\/p>\n<p>Voici les grosses \u00e9tapes et astuces utilis\u00e9es \/ bug rencontr\u00e9s :<\/p>\n<h2>Install des hyperviseurs en Debian 8 (mode Online) en mode cloud priv\u00e9 LVM+DRBD<\/h2>\n<p>Je ne vais pas d\u00e9tailler ces \u00e9tapes mais \u00e0 noter du fait d&rsquo;une limitation de l&rsquo;interface de partitionnement Online, la contrainte de partir sur 4 partitions primaires et retoucher les choses ensuite<\/p>\n<p>##config partition<br \/>\n\/boot 1024<br \/>\n\/ 19000<br \/>\nswap 1024<br \/>\n\/srv le reste !<\/p>\n<p>Les indispensables :<br \/>\n<code>apt update; apt upgrade; apt install vim lvm2 qemu kvm uml-utilities bridge-utils libvirt-bin screen virt-manager netcat-openbsd linux-headers-amd64 drbd-utils ocfs2-tools<br \/>\nmodprobe drbd<\/code><\/p>\n<p>Puis :<br \/>\n<code>umount \/srv<\/code><\/p>\n<h3>Cr\u00e9ation volume LVM dans l&rsquo;espace laiss\u00e9 par \/srv demont\u00e9<\/h3>\n<p>\/srv correspond \u00e0 \/dev\/sda4 dans mon cas<br \/>\nOn cr\u00e9\u00e9 le Volume groupe (VG) qui ensuite accueillera des Logical Volume (LV) (cf <a href=\"http:\/\/trac.evolix.net\/infogerance\/wiki\/HowtoLVM\">http:\/\/trac.evolix.net\/infogerance\/wiki\/HowtoLVM<\/a>)<\/p>\n<p><code>root@hyperviseur1:~# pvcreate \/dev\/sda4<br \/>\nPhysical volume \"\/dev\/sda4\" successfully created<br \/>\nroot@hyperviseur1:~# vgcreate vg0 \/dev\/sda4<br \/>\n\/proc\/devices: No entry for device-mapper found<br \/>\nVolume group \"vg0\" successfully created<\/code><\/p>\n<p>Idem sur hyperviseur2<\/p>\n<p>puis cr\u00e9ation d&rsquo;un premier volume (LV) pour mon serveur d&rsquo;agenda (serveur1)<\/p>\n<p><code>lvcreate -n serveur1 -L 20g vg0<\/code><\/p>\n<p>On doit cr\u00e9er le m\u00eame volume (LV) sur l&rsquo;autre hyperviseur et pour faire cela on prend la taille pr\u00e9cise gr\u00e2ce \u00e0 :<\/p>\n<p><code>root@hyperviseur1:~# lvdisplay --units B \/dev\/mapper\/vg0-serveur1<br \/>\n--- Logical volume ---<br \/>\nLV Path                \/dev\/vg0\/serveur1<br \/>\nLV Name                serveur1<br \/>\nVG Name                vg0<br \/>\nLV UUID                hGuVnd-FmnX-Rjjc-puaE-DSgn-f2T3-Ha1ECW<br \/>\nLV Write Access        read\/write<br \/>\nLV Creation host, time hyperviseur1, 2016-04-20 16:30:16 +0200<br \/>\nLV Status              available<br \/>\n# open                 0<br \/>\nLV Size                21474836480 B<br \/>\nCurrent LE             2560<br \/>\nSegments               1<br \/>\nAllocation             inherit<br \/>\nRead ahead sectors     auto<br \/>\n- currently set to     256<br \/>\nBlock device           254:0<\/code><\/p>\n<p>Ce qui permet sur le second hyperviseur :<\/p>\n<p>root@hyperviseur2:~# lvcreate -L 21474836480B -n serveur1 vg0<br \/>\nLogical volume \u00ab\u00a0serveur1\u00a0\u00bb created<\/p>\n<p>On a ainsi des p\u00e9riph\u00e9riques de stockage utilisables (accessibles via \/dev\/mapper\/vg-lv ou \/dev\/vg\/lv) que l&rsquo;on peut formater<\/p>\n<p>On voit bien l&rsquo;arborescence :<\/p>\n<p><code>root@hyperviseur1:~# lsblk<br \/>\nNAME           MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT<br \/>\nsda              8:0    0 931.5G  0 disk<br \/>\n\u251c\u2500sda1           8:1    0   190M  0 part \/boot<br \/>\n\u251c\u2500sda2           8:2    0  17.7G  0 part \/<br \/>\n\u251c\u2500sda3           8:3    0   977M  0 part [SWAP]<br \/>\n\u2514\u2500sda4           8:4    0 912.7G  0 part<br \/>\n\u2514\u2500vg0-serveur1 254:0    0    10G  0 lvm  <\/code><\/p>\n<h3>Configuration r\u00e9seau Hyperviseurs<\/h3>\n<p>Une des forces des serveurs lowcost XC2016 est d&rsquo;avoir un RPN gigabit avec IP d\u00e9di\u00e9e qui va permettre de relier les 2 serveurs (pour la synchro DRBD) via un lien \u00ab\u00a0d\u00e9di\u00e9\u00a0\u00bb et performant.<\/p>\n<p>La configuration du reseau priv\u00e9 est d\u00e9crit dans : <a href=\"https:\/\/documentation.online.net\/fr\/serveur-dedie\/tutoriel\/rpn-by-online.net\">https:\/\/documentation.online.net\/fr\/serveur-dedie\/tutoriel\/rpn-by-online.net<\/a><br \/>\nRPN -&gt; Groupe RPN -&gt; cr\u00e9er un groupe<\/p>\n<p>C\u00f4t\u00e9 hyperviseur*, il faut ajouter cette seconde interface dans \/etc\/network\/interfaces<\/p>\n<p><code>#seconde interface RPN<br \/>\nauto eth1<br \/>\niface eth1 inet dhcp<\/code><\/p>\n<p>puis<\/p>\n<p><code>ifup eth1<\/code><br \/>\net verif MTU<\/p>\n<h3>Cr\u00e9ation de la d\u00e9finition de la VM<\/h3>\n<p>Ref. pour mise en place Drbd<br \/>\n<a href=\"https:\/\/www.drbd.org\/en\/doc\/users-guide-83\/ch-lvm\">https:\/\/www.drbd.org\/en\/doc\/users-guide-83\/ch-lvm<\/a><br \/>\n<a href=\"https:\/\/www.drbd.org\/en\/doc\/users-guide-84\/s-lvm-lv-as-drbd-backing-dev\">https:\/\/www.drbd.org\/en\/doc\/users-guide-84\/s-lvm-lv-as-drbd-backing-dev<\/a><\/p>\n<h3>Conf. DRBD<\/h3>\n<p>Voici mon exemple de conf DRBD simple mono-volume :<\/p>\n<p><code>root@hyperviseur1:~# vim \/etc\/drbd.d\/serveur1.res<br \/>\nresource serveur1 {<br \/>\nnet {<br \/>\ncram-hmac-alg \"sha1\";<br \/>\nshared-secret \"*************\";<br \/>\n# Si pas de lien d\u00e9di\u00e9 10G, passer en protocol A<br \/>\n# Et desactiver allow-two-primaries;<br \/>\nprotocol A;<br \/>\n#allow-two-primaries;<br \/>\n# Tuning perf.<br \/>\nmax-buffers 8000;<br \/>\nmax-epoch-size 8000;<br \/>\nsndbuf-size 0;<br \/>\n}<br \/>\n# A utiliser si RAID HW avec cache + batterie<br \/>\n#disk {<br \/>\n#    disk-barrier no;<br \/>\n#    disk-flushes no;<br \/>\n#}<br \/>\nvolume 0 {<br \/>\ndevice minor 0;<br \/>\ndisk \/dev\/vg0\/serveur1;<br \/>\nmeta-disk internal;<br \/>\n}<br \/>\non hyperviseur1 {<br \/>\naddress $IP_reseauRPN_hyperviseur1:7788;<br \/>\n}<br \/>\non hyperviseur2 {<br \/>\naddress $IP_reseauRPN_hyperviseur2:7788;<br \/>\n}<br \/>\n}<\/code><\/p>\n<p>Je ne d\u00e9taille pas les diff\u00e9rentes options (cf <a href=\"http:\/\/trac.evolix.net\/infogerance\/wiki\/HowtoDRBD\">http:\/\/trac.evolix.net\/infogerance\/wiki\/HowtoDRBD<\/a>), mais bien penser dans le \/etc\/hosts \u00e0 avoir une correspondance pour hyperviseur1 et hyperviseur2<\/p>\n<h3>Cr\u00e9ation volume DRBD<\/h3>\n<p><code>root@hyperviseur1:~# drbdadm create-md serveur1<br \/>\nmd_offset 10737414144<br \/>\nal_offset 10737381376<br \/>\nbm_offset 10737053696<\/code><\/p>\n<p>Found some data<\/p>\n<p>==&gt; This might destroy existing data! &lt; ==<\/p>\n<p>Do you want to proceed?<br \/>\n[need to type &lsquo;yes&rsquo; to confirm] yes<\/p>\n<p>initializing activity log<br \/>\nNOT initializing bitmap<br \/>\nWriting meta data&#8230;<br \/>\nNew drbd meta data block successfully created.<\/p>\n<p>Idem sur hyperviseur2 !<\/p>\n<p><code>\/etc\/init.d\/drbd start<\/code> sur les 2 hyperviseurs<\/p>\n<p><code>root@hyperviseur1:~# drbdadm attach serveur1<br \/>\nDevice '0' is configured!<br \/>\nCommand 'drbdmeta 0 v08 \/dev\/vg0\/serveur1 internal apply-al' terminated with exit code 20<\/code><\/p>\n<p>Idem sur hyperviseur2 !<\/p>\n<h3>Initialisation volume DRBD<\/h3>\n<p>Sur l&rsquo;un des 2 hyperviseur, initialiser le volume DRBD.<\/p>\n<p><code>drbdadm -- --overwrite-data-of-peer primary serveur1<\/code><\/p>\n<p>On voit l&rsquo;avanc\u00e9e dans<br \/>\n<code>root@hyperviseur1:~# cat \/proc\/drbd<\/code><\/p>\n<p>On a maintenant notre volume DRBD utilisable pour installer notre VM !<\/p>\n<p>Remarque : pour supprimer un volume DRBD<br \/>\n<code>drbdadm down XX<br \/>\ndrbdadm disconnect XX<br \/>\nlvremove -v \/dev\/vg0\/XX<\/code><\/p>\n<h3>Utilisation du volume DRBD pour y mettre une VM<\/h3>\n<p>Dans mon cas un peu tordu, je veux mettre (sans r\u00e9installer\/prendre de temps) une VM existante qui a \u00e9t\u00e9 cr\u00e9\u00e9 via Proxmox\/KVM en .qcow2 &#8230; et tout \u00e7a sans gaspiller d&rsquo;espace car je n&rsquo;ai donc dans cette nouvelle infra que 1To de stockage !<\/p>\n<p>Exemple :<br \/>\n<code>root@hyperviseur1:\/var\/lib\/libvirt\/images# qemu-img info vm-101-disk-1.qcow2<br \/>\nimage: vm-101-disk-1.qcow2<br \/>\nfile format: qcow2<br \/>\nvirtual size: 150G (161061273600 bytes)<br \/>\ndisk size: 7.4G<br \/>\ncluster_size: 65536<br \/>\nFormat specific information:<br \/>\ncompat: 0.10<\/code><\/p>\n<p>Si on transformait en raw, pas possible de faire rentrer dans les 20Go ces 150Go ! (plus de format \u00e0 trou sur lvm+drbd)<\/p>\n<p><strong><em>Astuce : Monter avec qemu-nbd l&rsquo;image qcow2 et faire un copie par block (commande dd) qui ne se terminera pas<\/em><\/strong><\/p>\n<p>J&rsquo;ai test\u00e9 le resize de la partition LVM dans la VM pour mettre toutes les chances de mon cot\u00e9 pour faire tenir dans mon volume DRBD 20Go (int\u00e9ressant pour les \u00e9tapes, pas vital a priori) :<\/p>\n<h3>Resize partitions LVM dans la VM<\/h3>\n<p>Il faut se logguer dans la VM<\/p>\n<p><code>root@vm_amigrer_sur_ancienhyperviseur:~# dmsetup ls<br \/>\nserveur1-home  (253:5)<br \/>\nserveur1-root  (253:0)<br \/>\nserveur1-swap_1        (253:1)<br \/>\nserveur1-tmp   (253:4)<br \/>\nserveur1-usr   (253:2)<br \/>\nserveur1-var   (253:3)<br \/>\n<\/code><\/p>\n<p>En root au sein de la machine virtuelle \u00e0 migrer (sur l&rsquo;ancien hyperviseur) (sans se logguer en user)<br \/>\numount \/home<br \/>\nVerif pas d&rsquo;erreur<br \/>\n<code>e2fsck -f \/dev\/mapper\/serveur1-home <\/code><br \/>\nRedimensionnement<br \/>\n<code>resize2fs \/dev\/mapper\/serveur1-home 5000M<\/code><br \/>\nR\u00e9duction du LV :<br \/>\n<code>lvresize -L -130G \/dev\/mapper\/serveur1-home<\/code><br \/>\nReduction partition active<br \/>\nresize2fs \/dev\/mapper\/serveur1-home<br \/>\nRemonte \/home<br \/>\n<code>mount \/home<\/code><\/p>\n<p>On a :<\/p>\n<p>image: vm-101-disk-1.qcow2<br \/>\nfile format: qcow2<br \/>\nvirtual size: 150G (161061273600 bytes)<br \/>\ndisk size: 8.0G<br \/>\ncluster_size: 65536<\/p>\n<p>donc<br \/>\nLancement de gparted<br \/>\nResize partition lvm<br \/>\npuis Resize partition etendue<br \/>\n120Go en free space<\/p>\n<p><strong>!!ATTENTION le dd doit etre fait sur le volume DRBD et pas le volume LVM!!<\/strong><\/p>\n<p>On monte le qcow2 optimis\u00e9<br \/>\n<code>modprobe nbd max_part=16<br \/>\nqemu-nbd -c \/dev\/nbd0 \/var\/lib\/libvirt\/images\/vm-101-disk-1.qcow2<\/code><br \/>\nOn copie ensuite<br \/>\n<code>root@hyperviseur1# dd if=\/dev\/nbd0 of=\/dev\/drbd0 bs=64k<br \/>\ndd: error writing \u2018\/dev\/drbd0\u2019: No space left on device<\/code><\/p>\n<p>mais pas grave vu que c&rsquo;\u00e9tait du free space<\/p>\n<p>et quand dd se termine, on demonte l&rsquo;image<\/p>\n<p><code>qemu-nbd -d \/dev\/nbd0<br \/>\nrmmod nbd<\/code><\/p>\n<h3>Forcer le resync du secondary (suite au dd)<\/h3>\n<p><code>drbdadm secondary serveur1<br \/>\ndrbdadm invalidate serveur1<br \/>\ndrbdadm disconnect serveur1<br \/>\ndrbdadm connect serveur1<\/code><\/p>\n<p>Et enfin magie : La VM d\u00e9marre \ud83d\ude42<\/p>\n<h2>Migration machine principale<\/h2>\n<p>Vu la taille de ma machine principale (900Go) et les services critiques en place dessus, une migration comme plus haut n&rsquo;est pas tentable.<br \/>\nPar ailleurs l&rsquo;id\u00e9e est de repartir sur un partitionnement propre sans cumuler deux niveaux de LVM.<\/p>\n<p>J&rsquo;ai donc pr\u00e9f\u00e9r\u00e9 le sc\u00e9nario de recr\u00e9er une VM \u00ab\u00a0propre\u00a0\u00bb sur deux volumes DRBD (un d\u00e9di\u00e9 \u00e0 \/home). \u00c0 l&rsquo;inverse je ne souhaitais pas repartir dans de la configuration de serveur mail et l&rsquo;objectif \u00e9tait de transposer \u00e0 l&rsquo;identique c\u00f4t\u00e9 syst\u00e8me\/data ma VM existante.<\/p>\n<p>Voici les \u00e9tapes utilis\u00e9es :<\/p>\n<h3>Cr\u00e9ation du double volume DRBD<\/h3>\n<p>vim \/etc\/drbd.d\/serveurprincipal.res<\/p>\n<p><code>resource serveurprincipal {<br \/>\nnet {<br \/>\ncram-hmac-alg \"sha1\";<br \/>\nshared-secret \"*******************\";<br \/>\n# Si pas de lien dedi\u00e9 10G, passer en protocol A<br \/>\n# Et desactiver allow-two-primaries;<br \/>\nprotocol A;<br \/>\n#allow-two-primaries;<br \/>\n# Tuning perf.<br \/>\nmax-buffers 8000;<br \/>\nmax-epoch-size 8000;<br \/>\nsndbuf-size 0;<br \/>\n}<br \/>\n# A utiliser si RAID HW avec cache + batterie<br \/>\n#disk {<br \/>\n#    disk-barrier no;<br \/>\n#    disk-flushes no;<br \/>\n#}<br \/>\nvolume 0 {<br \/>\ndevice minor 2;<br \/>\ndisk \/dev\/vg0\/serveurprincipal;<br \/>\nmeta-disk internal;<br \/>\n}<br \/>\nvolume 1 {<br \/>\ndevice minor 3;<br \/>\ndisk \/dev\/vg0\/serveurprincipalhome;<br \/>\nmeta-disk internal;<br \/>\n}<br \/>\non hyperviseur1 {<br \/>\naddress $IP_reseauRPN_hyperviseur1:7790;<br \/>\n}<br \/>\non hyperviseur2 {<br \/>\naddress $IP_reseauRPN_hyperviseur2:7790;<br \/>\n}<br \/>\n}<\/code><\/p>\n<p>rem : attention \u00e0 bien utiliser des device minor diff\u00e9rents et des ports diff\u00e9rents (7790, etc)<\/p>\n<p><code>root@hyperviseur1:~# lvcreate -n serveurprincipal -L 40g vg0<br \/>\nroot@hyperviseur1:~# lvdisplay --units B \/dev\/mapper\/vg0-serveurprincipal<br \/>\nroot@hyperviseur1:~# lvcreate -n serveurprincipalhome -L 750g vg0<br \/>\nroot@hyperviseur1:~# lvdisplay --units B \/dev\/mapper\/vg0-serveurprincipalhome<\/code><\/p>\n<p>root@hyperviseur2:~# lvcreate -L 42949672960B -n serveurprincipal vg0<br \/>\nLogical volume \u00ab\u00a0serveurprincipal\u00a0\u00bb created<br \/>\nroot@hyperviseur2:~# lvcreate -L 805306368000B -n serveurprincipalhome vg0<br \/>\nLogical volume \u00ab\u00a0serveurprincipalhome\u00a0\u00bb created<\/p>\n<p>root@hyperviseur1:~# drbdadm create-md serveurprincipal<br \/>\nroot@hyperviseur2:~# drbdadm create-md serveurprincipal<br \/>\nroot@hyperviseur1:~# drbdadm create-md serveurprincipalhome<br \/>\n&lsquo;serveurprincipalhome&rsquo; not defined in your config (for this host)<\/p>\n<p><strong>Cr\u00e9ation du second volume<\/strong><\/p>\n<p><code>root@hyperviseur1:~# drbdadm create-md serveurprincipal\/1<br \/>\nroot@hyperviseur2:~# drbdadm create-md serveurprincipal\/1<br \/>\nYou want me to create a v08 style flexible-size internal meta data block.<br \/>\nThere appears to be a v08 flexible-size internal meta data block<br \/>\nalready in place on \/dev\/vg0\/serveurprincipalhome at byte offset 805306363904<\/code><\/p>\n<p>Do you really want to overwrite the existing meta-data?<br \/>\n[need to type &lsquo;yes&rsquo; to confirm] yes<\/p>\n<p>initializing activity log<br \/>\nNOT initializing bitmap<br \/>\nWriting meta data&#8230;<br \/>\nNew drbd meta data block successfully created.<\/p>\n<p>Puis sur 2 machines<\/p>\n<p><code>\/etc\/init.d\/drbd reload <\/code><\/p>\n<p>et<\/p>\n<p><code>drbdadm attach serveurprincipal<\/code> puis serveurprincipal\/1 sur 2 hyperviseurs<br \/>\n<code>drbdadm up serveurprincipal<\/code> puis serveurprincipal\/1<br \/>\n<code>drbdadm -- --overwrite-data-of-peer primary serveurprincipal<\/code> puis serveurprincipal\/1 sur hyperviseur primaire<\/p>\n<p>On voit que tout est OK :<\/p>\n<p><code>root@hyperviseur1:~# lsblk<br \/>\nNAME              MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT<br \/>\nsda                 8:0    0 931.5G  0 disk<br \/>\n\u251c\u2500sda1              8:1    0   190M  0 part \/boot<br \/>\n\u251c\u2500sda2              8:2    0  17.7G  0 part \/<br \/>\n\u251c\u2500sda3              8:3    0   977M  0 part [SWAP]<br \/>\n\u2514\u2500sda4              8:4    0 912.7G  0 part<br \/>\n\u251c\u2500vg0-serveur1             254:0    0    20G  0 lvm<br \/>\n\u251c\u2500vg0-serveur2             254:1    0    21G  0 lvm<br \/>\n\u251c\u2500vg0-serveurprincipal     254:2    0    40G  0 lvm<br \/>\n\u2514\u2500vg0-serveurprincipalhome 254:3    0   750G  0 lvm<br \/>\ndrbd0             147:0    0    20G  0 disk<br \/>\ndrbd1             147:1    0    21G  1 disk<br \/>\ndrbd2             147:2    0    40G  1 disk<br \/>\ndrbd3             147:3    0   750G  1 disk <\/code><\/p>\n<p>On fait l&rsquo;install de la VM (iso version Debian ;)) sur \/dev\/drbd2 [avec une autre IP\/mac adress]<br \/>\net dans la d\u00e9finition de la VM on ajoute le disque \/dev\/drbd3<\/p>\n<p><code>root@serveurprincipal2:~# lsblk<br \/>\nNAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT<br \/>\nvda    254:0    0    40G  0 disk<br \/>\n\u251c\u2500vda1 254:1    0   4,7G  0 part \/<br \/>\n\u251c\u2500vda2 254:2    0   9,3G  0 part \/usr<br \/>\n\u251c\u2500vda3 254:3    0   2,7G  0 part [SWAP]<br \/>\n\u251c\u2500vda4 254:4    0     1K  0 part<br \/>\n\u251c\u2500vda5 254:5    0   9,3G  0 part \/var<br \/>\n\u2514\u2500vda6 254:6    0   4,7G  0 part \/tmp<br \/>\nvdb    254:16   0   750G  0 disk<br \/>\nsr0     11:0    1  1024M  0 rom <\/code><\/p>\n<p>(en ayant ajout\u00e9 dans \/etc\/fstab<br \/>\n\/dev\/vdb \/home ext4 defaults 0 2<br \/>\n)<\/p>\n<h3>Installation \u00e0 l&rsquo;identique<\/h3>\n<p>sur serveurprincipal : <code>aptitude -F \"%p\" search '~i!~M' &gt; \/tmp\/mes_paquets.txt<\/code><br \/>\nsur serveurprincipal2 : <code>aptitude install $(cat mes_paquets.txt)<\/code><br \/>\n(apr\u00e8s avoir transf\u00e9r\u00e9 mes_paquets.txt ;))<\/p>\n<h3>Premi\u00e8re synchro des donn\u00e9es<\/h3>\n<p>important : On commence par \/etc (car par la suite important pour avoir les bons user\/group li\u00e9 au UID de \/etc\/passwd) et on exclue \/etc\/fstab et \/etc\/network\/interfaces !<\/p>\n<p>Depuis serveurprincipal :<br \/>\n<code>rsync --progress -avz --numeric-ids --exclude \/etc\/network\/interfaces --exclude \/etc\/fstab --delete \/etc\/ root@serveurprincipal2.sdubois.net:\/etc\/<\/code><\/p>\n<p>Puis :<code><br \/>\nrsync --progress -avz --numeric-ids --delete \/usr\/ root@serveurprincipal2.sdubois.net:\/usr\/<\/code><br \/>\net<code><br \/>\nrsync --progress -avz --numeric-ids --delete \/var\/ root@serveurprincipal2.sdubois.net:\/var\/ <\/code><\/p>\n<p>et bien s\u00fbr idem avec le \/home (vu le volume &#8230; faut \u00eatre patient et v\u00e9rifier le bon d\u00e9roulement)<\/p>\n<p>dans mon cas j&rsquo;ai aussi du adapter \/etc\/hosts.allow et qq sp\u00e9cificit\u00e9 (genre <code>cd \/;ln -s \/home srv<\/code> )<\/p>\n<p>Une fois cela fait, on peut forcer les DNS et valider que apache\/mysql OK. Plus dur pour les mails :p<\/p>\n<h3>Bascule finale<\/h3>\n<p>Il faut avoir en t\u00eate chez Online que les IP failover son attach\u00e9e \u00e0 un mac adress qui n&rsquo;est pas modifiable mais peut-\u00eatre reg\u00e9n\u00e9r\u00e9. Une fois bascule l&rsquo;IP sur le bon hyperviseur avec l&rsquo;interface web Online, il faut donc jouer le jeu de modifier avec virt-manager ou virsh la mac adress sur l&rsquo;interface r\u00e9seau (il faut dans les faits recr\u00e9er une nouvelle interface et supprimer l&rsquo;ancienne)<\/p>\n<p>Etapes :<br \/>\n* Coupure service sur serveurprincipal + Suppression crontab<br \/>\n* Dernier rsync (principalement \/var\/lib\/mysql\/ et \/home)<br \/>\n* Bascule IP<br \/>\n* Retouche \/etc\/network\/interfaces sur serveurprincipal2<br \/>\n* Test<br \/>\n* Red\u00e9marrge des services + R\u00e9activiation crontab<br \/>\n* V\u00e9rification<\/p>\n<p>Et voil\u00e0, tout est en place sur ce Cloud Priv\u00e9 low cost !<\/p>\n<p><code>root@hyperviseur1:~# cat \/proc\/drbd<br \/>\nversion: 8.4.3 (api:1\/proto:86-101)<br \/>\nsrcversion: 1A9F77B1CA5FF92235C2213<br \/>\n0: cs:Connected ro:Primary\/Secondary ds:UpToDate\/UpToDate A r-----<br \/>\nns:109797229 nr:0 dw:67855890 dr:42606988 al:4838 bm:2594 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0<br \/>\n1: cs:Connected ro:Secondary\/Primary ds:UpToDate\/UpToDate A r-----<br \/>\nns:0 nr:30198054 dw:68123174 dr:0 al:0 bm:2693 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0<br \/>\n2: cs:Connected ro:Primary\/Secondary ds:UpToDate\/UpToDate A r-----<br \/>\nns:63187560 nr:0 dw:21245836 dr:47163454 al:1489 bm:2560 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0<br \/>\n3: cs:Connected ro:Primary\/Secondary ds:UpToDate\/UpToDate A r-----<br \/>\nns:1200886668 nr:0 dw:414478704 dr:831195436 al:36859 bm:47999 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0<\/code><\/p>\n<p><code>root@hyperviseur1:~# virsh list<br \/>\nId    Name                           State<br \/>\n----------------------------------------------------<br \/>\n5     serveur1                         running<br \/>\n8     serveurprincipal                         running<\/code><\/p>\n<p><code>root@hyperviseur2:~# virsh list<br \/>\nId    Name                           State<br \/>\n----------------------------------------------------<br \/>\n3     serveur2                         running<\/code><\/p>\n<h2>On se fait une migration \u00e0 Chaud ?<\/h2>\n<p>On va le faire avec serveur1 (volume drbd0)<\/p>\n<p>Il est en Primary\/Secondary pour l&rsquo;instant et en Protocol A, il faut \u00eatre en primary\/primary<br \/>\n<a href=\"http:\/\/trac.evolix.net\/infogerance\/wiki\/HowtoKVM#Migrerunemachine\">http:\/\/trac.evolix.net\/infogerance\/wiki\/HowtoKVM#Migrerunemachine<\/a><\/p>\n<p>On passe en Protocol C (sur les 2 hyperviseurs)<br \/>\n<code>protocol C;<br \/>\nallow-two-primaries;<br \/>\n<\/code><br \/>\net on reload drbd (sur les 2 hyperviseurs)<br \/>\n<code>\/etc\/init.d\/drbd reload<\/code><\/p>\n<p><code>root@hyperviseur2:~# drbdadm primary cyther<br \/>\nroot@hyperviseur2:~# cat \/proc\/drbd<br \/>\nversion: 8.4.3 (api:1\/proto:86-101)<br \/>\nsrcversion: 1A9F77B1CA5FF92235C2213<br \/>\n0: cs:Connected ro:Primary\/Primary ds:UpToDate\/UpToDate C r-----<br \/>\nns:0 nr:42661565 dw:88851375 dr:912 al:0 bm:1315 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0<br \/>\n1: cs:Connected ro:Primary\/Secondary ds:UpToDate\/UpToDate A r-----<br \/>\nns:7363878 nr:0 dw:29155134 dr:22400973 al:3153 bm:1349 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0<br \/>\n2: cs:Connected ro:Secondary\/Primary ds:UpToDate\/UpToDate A r-----<br \/>\nns:0 nr:63278804 dw:63278804 dr:0 al:0 bm:2560 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0<br \/>\n3: cs:Connected ro:Secondary\/Primary ds:UpToDate\/UpToDate A r-----<br \/>\nns:0 nr:1200891548 dw:1200891548 dr:0 al:0 bm:47999 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0<\/code><\/p>\n<p>Voil\u00e0 on va pouvoir faire la migration \u00e0 chaud :<\/p>\n<p><code>virsh migrate --live --unsafe serveur1 qemu+ssh:\/\/hyperviseur2\/system tcp:\/\/$IP_reseauRPN_hyperviseur2<\/code><br \/>\n(le second argument le force \u00e0 passer par le r\u00e9seau DRBD d\u00e9di\u00e9)<\/p>\n<p>Bug rencontr\u00e9<br \/>\nerror: internal error: Attempt to migrate guest to the same host 12341234-1234-1234-1234-1234123412341234<\/p>\n<p>Li\u00e9 au fait que m\u00eame system-uuid !! (<code>dmidecode -s system-uuid<\/code>)<\/p>\n<p>Astuce : \u00e9diter \/etc\/libvirt\/libvirtd.conf et ajouter un autre uuid<br \/>\n<code>service libvirtd restart<\/code><br \/>\n[pour eviter de vraiment changer le system-uuid comme d\u00e9crit sur <a href=\"https:\/\/onapp.zendesk.com\/entries\/33781277-VS-Hot-Migration-Fail-with-error-error-internal-error-Attempt-to-migrate-guest-to-the-same-host-uuid\">https:\/\/onapp.zendesk.com\/entries\/33781277-VS-Hot-Migration-Fail-with-error-error-internal-error-Attempt-to-migrate-guest-to-the-same-host-uuid<\/a>]<\/p>\n<p>On refait :<br \/>\n<code>virsh migrate --live --unsafe serveur1 qemu+ssh:\/\/hyperviseur2\/system tcp:\/\/$IP_reseauRPN_hyperviseur2<\/code><\/p>\n<p><code>root@hyperviseur1:~# virsh list<br \/>\nId    Name                           State<br \/>\n----------------------------------------------------<br \/>\n8     serveurprincipal                         running<\/code><\/p>\n<p><code>root@hyperviseur2:~# virsh list<br \/>\nId    Name                           State<br \/>\n----------------------------------------------------<br \/>\n3     serveur2                         running<br \/>\n5     serveur1                         running<\/code><\/p>\n<p>Petite bascule IP de l&rsquo;IP failover et pour \u00eatre propre un \u00ab\u00a0virsh undefine serveur1\u00a0\u00bb sur hyperviseur1 et \u00ab\u00a0virsh define serveur1\u00a0\u00bb sur hyperviseur2 c&rsquo;est bon !<\/p>\n<p>\ud83d\ude00<\/p>\n","protected":false},"excerpt":{"rendered":"<p>On parle souvent du cordonnier mal chauss\u00e9. J&rsquo;ai d\u00e9cid\u00e9 de faire mentir le proverbe \ud83d\ude00 Depuis ma premi\u00e8re infra. perso d\u00e9crite sur http:\/\/sdubois.evolix.net\/blog\/2011\/08\/08\/gerer-sa-propre-infra-perso-sans-trop-de-frais\/, j&rsquo;avais d\u00e9j\u00e0 fait des \u00e9volutions. En juin 2013, passage sur une offre serveur sp\u00e9ciale avec RAID hard (HP DL120G7 Corei3 2100 2C\/4T 4Go ram ECC + 2x1To + Raid hard + KVMIP) <a href=\"https:\/\/sdubois.fr\/blog\/2016\/05\/evolution-infrastructure-serveur-perso\/\"> lire la suite <span class=\"meta-nav\"><\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":2050,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-2107","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tic"],"_links":{"self":[{"href":"https:\/\/sdubois.fr\/blog\/wp-json\/wp\/v2\/posts\/2107","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sdubois.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sdubois.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sdubois.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sdubois.fr\/blog\/wp-json\/wp\/v2\/comments?post=2107"}],"version-history":[{"count":1,"href":"https:\/\/sdubois.fr\/blog\/wp-json\/wp\/v2\/posts\/2107\/revisions"}],"predecessor-version":[{"id":2859,"href":"https:\/\/sdubois.fr\/blog\/wp-json\/wp\/v2\/posts\/2107\/revisions\/2859"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sdubois.fr\/blog\/wp-json\/wp\/v2\/media\/2050"}],"wp:attachment":[{"href":"https:\/\/sdubois.fr\/blog\/wp-json\/wp\/v2\/media?parent=2107"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sdubois.fr\/blog\/wp-json\/wp\/v2\/categories?post=2107"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sdubois.fr\/blog\/wp-json\/wp\/v2\/tags?post=2107"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}