« Clustering proxmox avec tinc » : différence entre les versions

De Linux Server Wiki
Aller à la navigation Aller à la recherche
 
(25 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
cluster de 2 nodes : node1 ayant comme ip principale 88.88.88.88 et node2 ayant comme ip principale 99.99.99.99
[[Category:serveur]]
[[Category:debian]]
[[Category:virtualisation]]
 
cluster de 2 nodes : node1 ayant comme ip principale 88.88.88.88 et node2 ayant comme ip principale 99.99.99.99<br>
Valable pour proxmox 2.x à proxmox 5.x


=node 1=
=node 1=
Ligne 15 : Ligne 20 :
Name = node1
Name = node1
AddressFamily = ipv4
AddressFamily = ipv4
#BindToAddress = x.x.x.x
Device = /dev/net/tun
Device = /dev/net/tun
Mode = switch
Mode = switch
ConnectTo = node2
ConnectTo = node2
TcpOnly=no
IndirectData=no
</pre>
</pre>


Ligne 35 : Ligne 43 :


/sbin/ip link set vpn up
/sbin/ip link set vpn up
/sbin/ip addr add 10.10.10.1 dev vpn
/sbin/ip addr add 10.10.10.1/24 dev vpn
/sbin/ip route add 10.10.10.0/24 dev vpn
/sbin/ip route add 10.10.10.0/24 dev vpn
/sbin/route add -net 224.0.0.0 netmask 240.0.0.0 dev vpn
/sbin/route add -net 224.0.0.0 netmask 240.0.0.0 dev vpn
Ligne 67 : Ligne 75 :
Name = node2
Name = node2
AddressFamily = ipv4
AddressFamily = ipv4
#BindToAddress = x.x.x.x
Device = /dev/net/tun
Device = /dev/net/tun
Mode = switch
Mode = switch
ConnectTo = node1
ConnectTo = node1
TcpOnly=no
IndirectData=no
</pre>
</pre>


Ligne 87 : Ligne 98 :


/sbin/ip link set vpn up
/sbin/ip link set vpn up
/sbin/ip addr add 10.10.10.2 dev vpn
/sbin/ip addr add 10.10.10.2/24 dev vpn
/sbin/ip route add 10.10.10.0/24 dev vpn
/sbin/ip route add 10.10.10.0/24 dev vpn
/sbin/route add -net 224.0.0.0 netmask 240.0.0.0 dev vpn
/sbin/route add -net 224.0.0.0 netmask 240.0.0.0 dev vpn
Ligne 111 : Ligne 122 :
Copiez le fichier <code>/etc/tinc/vpn/hosts/node2</code> de <code>node2</code> vers <code>/etc/tinc/vpn/hosts/</code> sur <code>node1</code>
Copiez le fichier <code>/etc/tinc/vpn/hosts/node2</code> de <code>node2</code> vers <code>/etc/tinc/vpn/hosts/</code> sur <code>node1</code>


=Lancement et test de la configuration=
=Test de la configuration=


Ajoutez ceci dans <code>/etc/hosts</code> sur les deux nodes :
Ajoutez ceci dans <code>/etc/hosts</code> sur les deux nodes :
Ligne 120 : Ligne 131 :


Sur les deux nodes :
Sur les deux nodes :
<pre>/etc/init.d/tinc start</pre>
<pre>systemctl start tinc@vpn</pre>


Installez omping pour tester le multicast (sur les deux nodes) :
Installez omping pour tester le multicast (sur les deux nodes) :
Ligne 127 : Ligne 138 :
Lancez cette commande sur les deux nodes  
Lancez cette commande sur les deux nodes  
<pre>omping node1 node2</pre>
<pre>omping node1 node2</pre>
=Lancement automatique=
Si tout fonctionne, nous allons configurer tinc pour se lancer automatiquement au démarrage, et ce avant corosync.
<pre>systemctl edit --full tinc@vpn.service</pre>
et ajoutez la ligne suivante dans la section <code>[Unit]</code> :
<pre>Before=corosync.service</pre>
Puis activez le lancement automatique de notre lien tinc "vpn" :
<pre>systemctl enable tinc@vpn</pre>
Puis recharger la configuration de systemd :
<pre>systemctl daemon-reload</pre>


=Création du cluster=
=Création du cluster=


Attention : si vous avez désactivé le login ssh root par password il faut le réactiver (vous pourrez à nouveau le désactiver une fois le cluster créé).
Attention : si vous avez désactivé le login ssh root par password il faut le réactiver obligatoirement car proxmox force le login par password lors de la création du cluster ; vous pourrez à nouveau le désactiver une fois le cluster créé.


==Sur node1==
==Sur node1==
Ligne 141 : Ligne 166 :


==Sur node2==
==Sur node2==
Pour connecter node2 au cluster vous devez pouvoir vous connecter à l'interface proxmox avec l'utilisateur root@pam avec le mot-de-passe. Si vous l'aviez désactivé, réactivez le temporairement.
Pour lancer l'ajout :
<pre>pvecm add node1</pre>
<pre>pvecm add node1</pre>


Ligne 149 : Ligne 178 :
</pre>
</pre>


=Sur tous les nodes avec tinc=
=Suppression d'un node=
Editez le fichier <code>/etc/init.d/tinc</code> et ajoutez dans les en-tête d'init les deux lignes suivantes :
 
Avant de lancer la commande de suppression, vous devez impérativement couper la machine que vous souhaitez supprimer du cluster et vous assurer qu'elle ne redémarre à aucun moment sur proxmox (ou du moins pas sur cette installation de proxmox) car elle rejoindrait à nouveau le cluster. Si la machine rejoint le cluster après avoir été supprimé du cluster, vous risqueriez de flinguer totalement le cluster.<br>
Dans l'idéal, passez la machine en mode rescue puis supprimez la configuration de tinc, ou arrêter la complètement.
 
Pour supprimer la machine node5 du cluster, lancez sur n'importe quel autre node :
<pre>pvecm delnode node5</pre>
 
La commande ne retourne aucune confirmation. Si vous lancez <code>pvecm status</code>, vous devriez voir la ligne <code>Nodes:</code> décrémentée de 1.
 
Pour supprimer définitivement les fichiers de configurations du node, et qu'il ne soit plus affiché dans la gui :
<pre>rm -rf /etc/pve/nodes/node5</pre>
 
=Afficher les informations du lien tinc=
Le démon tinc permet egalement d'obtenir des informations plus détaillées sur le statut du lien :
<pre>tincd -n <nom> -kUSR2</pre>
Les informations seront dans le syslog
 
=Note sur la gestion du démon tinc par systemd sous debian=
 
Sous debian avec systemd, une unit par défaut est créée (<code>tinc.service</code>) mais ne reflete pas réellement le statut de votre démon tinc. Elle est utilisée pour propager les commandes stop, restart et reload à tous les démons tinc que vous pourriez lancer.
 
Si vous créez deux VPN différents dans <code>/etc/tinc/vpnA/</code> et <code>/etc/tinc/vpnB/</code>, il vous faudra les activer avec :
<pre>
<pre>
# X-Start-Before:    pve-cluster
systemctl enable tinc@vpnA.service
# X-Stop-After:      pve-cluster
systemctl enable tinc@vpnB.service
</pre>
</pre>


Puis lancez <pre>update-rc.d tinc defaults</pre>
Puis vous pourrez gérer indépendamment vpnA ou vpnB en utilisant les noms complets, par exemple :
<pre>
systemctl status tinc@vpnA.service
systemctl status tinc@vpnB.service
</pre>


Ainsi, tinc démarrera toujours avant pve-cluster et s'arrêtera toujours après pve-cluster (il est logique que le lien vpn soit prêt avant et tombe après le cluster)
L'unit <code>tinc.service</code> permet de propager les commandes stop, restart et reload à l'ensemble des démons tinc. Ainsi, <code>systemctl stop tinc.service</code> provoquera l'arrêt de <code>tinc@vpnA.service</code> et <code>tinc@vpnB.service</code>


=Documentations tinc=
=Documentations tinc=

Dernière version du 6 février 2021 à 15:36


cluster de 2 nodes : node1 ayant comme ip principale 88.88.88.88 et node2 ayant comme ip principale 99.99.99.99
Valable pour proxmox 2.x à proxmox 5.x

node 1

aptitude install tinc
mkdir -p /etc/tinc/vpn/hosts

Créez le fichier /etc/tinc/vpn/tinc.conf contenant :

Name = node1
AddressFamily = ipv4
#BindToAddress = x.x.x.x
Device = /dev/net/tun
Mode = switch
ConnectTo = node2
TcpOnly=no
IndirectData=no

Créez le fichier /etc/tinc/vpn/hosts/node1

Address = 88.88.88.88
Port = 655
Compression = 0

Nous allons maintenant générer la paire de clé de node1. Tapez simplement la commande suivante et validez a chaque question :

tincd -n vpn -K4096

créez le fichier /etc/tinc/vpn/tinc-up contenant :

#!/bin/bash

/sbin/ip link set vpn up
/sbin/ip addr add 10.10.10.1/24 dev vpn
/sbin/ip route add 10.10.10.0/24 dev vpn
/sbin/route add -net 224.0.0.0 netmask 240.0.0.0 dev vpn

Créez le fichier /etc/tinc/vpn/tinc-down contenant :

#!/bin/bash
/sbin/route del -net 224.0.0.0 netmask 240.0.0.0 dev vpn
/sbin/ip link set vpn down

Rendez ces deux fichiers executables :

chmod +x /etc/tinc/vpn/tinc-*

Ajoutez le lancement du vpn :

echo vpn >> /etc/tinc/nets.boot

node 2

aptitude install tinc
mkdir -p /etc/tinc/vpn/hosts

Créez le fichier /etc/tinc/vpn/tinc.conf contenant :

Name = node2
AddressFamily = ipv4
#BindToAddress = x.x.x.x
Device = /dev/net/tun
Mode = switch
ConnectTo = node1
TcpOnly=no
IndirectData=no

Créez le fichier /etc/tinc/vpn/hosts/node2

Address = 99.99.99.99
Port = 655
Compression = 0

Nous allons maintenant générer la paire de clé de node2. Tapez simplement la commande suivante et validez a chaque question :

tincd -n vpn -K4096

créez le fichier /etc/tinc/vpn/tinc-up contenant :

#!/bin/bash

/sbin/ip link set vpn up
/sbin/ip addr add 10.10.10.2/24 dev vpn
/sbin/ip route add 10.10.10.0/24 dev vpn
/sbin/route add -net 224.0.0.0 netmask 240.0.0.0 dev vpn

Créez le fichier /etc/tinc/vpn/tinc-down contenant :

#!/bin/bash
/sbin/route del -net 224.0.0.0 netmask 240.0.0.0 dev vpn
/sbin/ip link set vpn down

Rendez ces deux fichiers executables :

chmod +x /etc/tinc/vpn/tinc-*

Ajoutez le lancement du vpn :

echo vpn >> /etc/tinc/nets.boot

Synchronisez la configuration des deux nodes

Copiez le fichier /etc/tinc/vpn/hosts/node1 de node1 vers /etc/tinc/vpn/hosts/ sur node2

Copiez le fichier /etc/tinc/vpn/hosts/node2 de node2 vers /etc/tinc/vpn/hosts/ sur node1

Test de la configuration

Ajoutez ceci dans /etc/hosts sur les deux nodes :

10.10.10.1      node1
10.10.10.2      node2

Sur les deux nodes :

systemctl start tinc@vpn

Installez omping pour tester le multicast (sur les deux nodes) :

aptitude install omping

Lancez cette commande sur les deux nodes

omping node1 node2

Lancement automatique

Si tout fonctionne, nous allons configurer tinc pour se lancer automatiquement au démarrage, et ce avant corosync.

systemctl edit --full tinc@vpn.service

et ajoutez la ligne suivante dans la section [Unit] :

Before=corosync.service

Puis activez le lancement automatique de notre lien tinc "vpn" :

systemctl enable tinc@vpn

Puis recharger la configuration de systemd :

systemctl daemon-reload

Création du cluster

Attention : si vous avez désactivé le login ssh root par password il faut le réactiver obligatoirement car proxmox force le login par password lors de la création du cluster ; vous pourrez à nouveau le désactiver une fois le cluster créé.

Sur node1

pvecm create <nom-du-cluster>
pvecm status

Vérifiez notamment que vous avez bien la ligne :

Node addresses: 10.10.10.1

Sur node2

Pour connecter node2 au cluster vous devez pouvoir vous connecter à l'interface proxmox avec l'utilisateur root@pam avec le mot-de-passe. Si vous l'aviez désactivé, réactivez le temporairement.

Pour lancer l'ajout :

pvecm add node1
pvecm nodes
Node  Sts   Inc   Joined               Name
   1   M     16   2013-08-23 22:46:09  node1
   2   M     12   2013-08-23 22:46:09  node2

Suppression d'un node

Avant de lancer la commande de suppression, vous devez impérativement couper la machine que vous souhaitez supprimer du cluster et vous assurer qu'elle ne redémarre à aucun moment sur proxmox (ou du moins pas sur cette installation de proxmox) car elle rejoindrait à nouveau le cluster. Si la machine rejoint le cluster après avoir été supprimé du cluster, vous risqueriez de flinguer totalement le cluster.
Dans l'idéal, passez la machine en mode rescue puis supprimez la configuration de tinc, ou arrêter la complètement.

Pour supprimer la machine node5 du cluster, lancez sur n'importe quel autre node :

pvecm delnode node5

La commande ne retourne aucune confirmation. Si vous lancez pvecm status, vous devriez voir la ligne Nodes: décrémentée de 1.

Pour supprimer définitivement les fichiers de configurations du node, et qu'il ne soit plus affiché dans la gui :

rm -rf /etc/pve/nodes/node5

Afficher les informations du lien tinc

Le démon tinc permet egalement d'obtenir des informations plus détaillées sur le statut du lien :

tincd -n <nom> -kUSR2

Les informations seront dans le syslog

Note sur la gestion du démon tinc par systemd sous debian

Sous debian avec systemd, une unit par défaut est créée (tinc.service) mais ne reflete pas réellement le statut de votre démon tinc. Elle est utilisée pour propager les commandes stop, restart et reload à tous les démons tinc que vous pourriez lancer.

Si vous créez deux VPN différents dans /etc/tinc/vpnA/ et /etc/tinc/vpnB/, il vous faudra les activer avec :

systemctl enable tinc@vpnA.service
systemctl enable tinc@vpnB.service

Puis vous pourrez gérer indépendamment vpnA ou vpnB en utilisant les noms complets, par exemple :

systemctl status tinc@vpnA.service
systemctl status tinc@vpnB.service

L'unit tinc.service permet de propager les commandes stop, restart et reload à l'ensemble des démons tinc. Ainsi, systemctl stop tinc.service provoquera l'arrêt de tinc@vpnA.service et tinc@vpnB.service

Documentations tinc