Mise en place d’un Cluster Proxmox 3.1

Pour mon boulot, j'ai dû mettre en place un cluster de tests sous Proxmox 3.1, c'est l'occasion de décrire l'installation ici 🙂
 

Logo-ProxmoxVE

I) L'installation

Ces tests ont été réalisés avec deux nodes, bien qu'il soit plus intéressant de faire un cluster avec au minimum 3 nodes !
Si les tests sont concluants et que cette plateforme de virtu intéresse nos usagers, on envisagera surement de grossir le cluster.

 

Les serveurs :
 

poweredge-r520-2-500x500

– Dell R520:
bi Intel Xeon E5-2420 @ 1.90GHz (24 threads)
64 Go ram
Disque dur pour le système : 2*300 Go SAS (15k tr/min)

 

Le stockage :

RAL_NetAppFAS3140

– La partie production est hebergé sur un Net App FAS 3020, avec un volume de 1 To (le temps des tests) divisé en deux Qtrees (un pour les Isos, l'autre pour les images des VMs).
– Les sauvegardes, elles sont sur un Net App FAS 2040, avec là aussi un volume de 1 To (toujours pour les tests, il sera temps de reconsidérer le stockage, une fois en prod !).

L'OS :

Pour le système, j'ai pris l'ISO de Proxmox VE 3.1 : http://www.proxmox.com/fr/downloads/category/iso-images-pve

L'installation a été celle de base, là dessus pas de surprise, ou de chose particulière à voir !
(dans mon cas j'ai juste rajouter Puppet pour la gestion automatique des confs.)

 

II) La configuration :

C'est là que ça devient intéressant !

1) Les MAJ:

Pour commencer, il faut un système à jour sur les nodes !
Or depuis la version 3, les éditeurs de Proxmox ont changé le repository, donc si comme moi, vous avez une verison "sans support", je vous invite à éditer votre sources.list

nano /etc/apt/sources.list

et modifier :

deb https://enterprise.proxmox.com/debian wheezy pve-enterprise

Par :

deb http://download.proxmox.com/debian wheezy pve-no-subscription

Puis faites un : (mise à jour des repo, mise à jour du système, puis reboot à la fin) :

apt-get update && apt-get upgrade -y && reboot

 

2) La mise en cluster :

Très simple à faire, il faut choisir une des nodes pour être le master,
évidemment vos deux nodes, sont installées à l'identique, et peuvent communiquer entre elles !

pvecm create lenomdecluster
Restarting pve cluster filesystem: pve-cluster[dcdb] notice: wrote new cluster config '/etc/cluster/cluster.conf'
Starting cluster:
   Checking if cluster has been disabled at boot... [  OK  ]
   Checking Network Manager... [  OK  ]
   Global setup... [  OK  ]
   Loading kernel modules... [  OK  ]
   Mounting configfs... [  OK  ]
   Starting cman... [  OK  ]
   Waiting for quorum... [  OK  ]
   Starting fenced... [  OK  ]
   Starting dlm_controld... [  OK  ]
   Tuning DLM kernel config... [  OK  ]
   Unfencing self... [  OK  ]

On vérifie la création du cluster :

pvecm status

Version: 6.2.0
Config Version: 2
Cluster Name: kaamelott
Cluster Id: 52776
Cluster Member: Yes
Cluster Generation: 256
Membership state: Cluster-Member
Nodes: 1
Expected votes: 1
Total votes: 1
Node votes: 1
Quorum: 1  
Active subsystems: 5
Flags: 
Ports Bound: 0  
Node name: gauvain
Node ID: 1
Multicast addresses: 239.192.206.246 
Node addresses: 10.14.32.153

on rajoute le second serveur :

pvecm add 10.14.32.154

et on valide l'échange de clés ssh :

The authenticity of host '10.14.32.153 (10.14.32.153)' can't be established.
ECDSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xxx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)? yes
root@10.14.32.153's password:
copy corosync auth key
stopping pve-cluster service
Stopping pve cluster filesystem: pve-cluster.
backup old database
Starting pve cluster filesystem : pve-clustercan't create shared ssh key database '/etc/pve/priv/authorized_keys'
Starting cluster:
   Checking if cluster has been disabled at boot... [  OK  ]
   Checking Network Manager... [  OK  ]
   Global setup... [  OK  ]
   Loading kernel modules... [  OK  ]
   Mounting configfs... [  OK  ]
   Starting cman... [  OK  ]
   Waiting for quorum... [  OK  ]
   Starting fenced... [  OK  ]
   Starting dlm_controld... [  OK  ]
   Tuning DLM kernel config... [  OK  ]
   Unfencing self... [  OK  ]
generating node certificates
merge known_hosts file
restart services
Restarting PVE Daemon: pvedaemon.
Restarting PVE API Proxy Server: pveproxy.
successfully added node 'yvain' to cluster.

On vérifie l'état des nodes :

pvecm nodes
Node  Sts   Inc   Joined               Name
   1   M    244   2014-02-13 16:36:02  gauvain
   2   M    256   2014-02-13 16:36:34  yvain

Vous pouvez également vérifier la présence des deux nodes, en vous connectant à l'interface web de l'un de vos serveurs : https://ipduserveur:8006
 

Capture d'écran - 17022014 - 11:04:42

Votre cluster est maintenant en place (c'était pas bien compliqué hein ?), avant de commencer à jouer, il faut rajouter un stockage partagé.

3) Le stockage

Pour modifier le stockage, rendez vous dans "Centre de données", sur l'onglet "stockage", et cliquez sur "Ajouter" :
 

Capture d'écran - 17022014 - 11:12:17

Par soucis de simplicité j'ai choisi des montages NFS (bien que je compte faire des essais avec Ceph par la suite :p ) :

L'ajout est assez simple (il n'y qu'à suivre les indications de l'assistant), et vous avez la possibilité d'attribuer des ressources de stockages, à des usages bien particuliers : stockage de VMs, d'ISOs, de backups …

Capture d'écran - 17022014 - 11:17:22

Une fois tout vos montages en place, vous pouvez tester la création d'une VM.

4) Création & Migration

Je ne vais pas détailler la création d'une VM, c'est du KVM tout ce qu'il y a de plus classique, vous avez un bouton en haut à droite "Créer VM", qui vous ouvre l'assistant suivant :

Capture d'écran - 17022014 - 11:21:12

Une fois la VM créée, vous avez accès à ses options, préférences … dans le menu de gauche, en fonction de l'hôte sur lequel elle a été démarrée :

Capture d'écran - 17022014 - 11:23:16

Vous pouvez ainsi tester la migration à chaud (ou pas !) :

Capture d'écran - 17022014 - 11:09:43

III) Améliorations

Pour un usage de base, l'installation par défaut est très bien, mais dans un cadre pro, il est bon d'y apporter quelques modifications !

1) Paramètres réseau

Afin de pouvoir utiliser nos VLANs et une ip virtuelle pour le cluster, j'ai dû adapter le fichier /etc/network/interfaces,
Voici ce que ça donne chez moi (c'est à adapter en fonction de vos besoins ! )

#loopback
auto lo
iface lo inet loopback

#déclaration ip virtuelle du cluster
auto lo:1
iface lo:1 inet static
        address 10.14.32.150
        netmask 255.255.255.255

#bonding en double attachement
auto bond0
iface bond0 inet manual
        slaves eth4 eth5
        bond_mode balance-xor
        bond_miimon 100
        bond_downdelay 200
        bond_updelay 200
        pre-up /bin/ip link set eth4 mtu 1500
        pre-up /bin/ip link set eth5 mtu 1500

#interface par bridge défaut
auto vmbr0
iface vmbr0 inet static
        bridge_ports bond0
        bridge_fd 0
        bridge_maxwait 0
        bridge_stp off
        address 10.14.32.153
        netmask 255.255.255.0
        network 10.14.32.0
        broadcast 10.14.32.255
        gateway 10.14.32.1
        dns-nameservers 10.14.32.30 10.14.32.130
        dns-search mondomaine

#déclaration VLAN 7
auto vlan7
iface vlan7 inet manual
        vlan_raw_device bond0
        up /bin/ip link set vlan7 mtu 1500


#déclaration VLAN 72
auto vlan72
iface vlan72 inet manual
        vlan_raw_device bond0
        up /bin/ip link set vlan72 mtu 1500


#déclaration VLAN 73
auto vlan73
iface vlan73 inet manual
        vlan_raw_device bond0
        up /bin/ip link set vlan73 mtu 1500

#interface par bridge VLAN 72
auto vmbr72
iface vmbr72 inet static
        bridge_ports vlan72
        bridge_fd 0
        bridge_maxwait 0
        bridge_stp off
        address 10.14.31.54
        netmask 255.255.255.0
        network 10.14.31.0
        broadcast 10.14.31.255

#interface par bridge VLAN 73
auto vmbr73
iface vmbr73 inet static
        bridge_ports vlan73
        bridge_fd 0
        bridge_maxwait 0
        bridge_stp off
        address 10.14.30.57
        netmask 255.255.255.0
        network 10.14.30.0
        broadcast 10.14.30.255

2) Failover avec Keepalive

Afin de faire du failover (je ne parle pas de HA qui est géré par le daemon Fence, que je n'utilise pas pour le moment), il faut évidemment avoir une installation fonctionnelle de serveurs keepalive, et y ajouter une nouvelle instance :

vrrp_instance VI_1 {
state MASTER
interface bond0
virtual_router_id 1
priority 100
advert_int 1
lvs_sync_daemon_interface bond0
authentication {
 auth_type PASS
 auth_pass password
}
virtual_ipaddress {
10.14.32.150/24 brd 10.14.32.255 dev bond0 # Proxmox
}

Une fois l'instance délcaré, il faut la modifier :

##############################################
## Proxmox
##############################################

virtual_server 10.14.32.150 443 {
    delay_loop 6
    lb_algo wlc
    lb_kind DR
    protocol TCP
    persistence_timeout 120

    sorry_server 10.14.32.154 443

    real_server 10.14.32.153 443 {
        weight 1
        TCP_CHECK {
            connect_timeout 3
        }
    }
}

virtual_server 10.14.32.150 5900 {
    delay_loop 6
    lb_algo wlc
    lb_kind DR
    protocol TCP
    persistence_timeout 120

    sorry_server 10.14.32.154 5900

    real_server 10.14.32.153 5900 {
        weight 1
        MISC_CHECK {
            misc_path "/usr/lib/nagios/plugins/check_tcp -H 10.14.32.153 -p 443"
        }
    }
}

l'ip virtuelle du cluster est donc 10.14.32.150.
le master déclaré est 10.14.32.153, et keepalive fait un test via nagios sur le port 443 du master, si celui ci ne répond pas en moins de 3s, il passe en "HS", et c'est l'esclave (10.14.32.154) qui prends le relai !
cette conf est appliquée pour le port 443 (je ne souhaite pas utiliser le port par défaut 8006 de proxmox, à vous de l'adapter en fonction de vos besoins) et pour le port 5900, qui sert aux consoles virtuelles en VNC.

3) Ajout d'un Reverse Proxy et d'un certificat SSL

Depuis la version 3.0, Proxmox n'utilise plus Apache comme serveur web, mais un process interne "pvcecluster", il n'y aucune modification possible, un suivis assez flou …
bref, on va intercaler un Nginx (léger, facilement modifiable, et très performant) en RP !

apt-get install nginx-light

puis on va créer le virtual host :
Il écoute sur le port 80, puis redirige vers le 443.
Sur le port 443, il prends en compte mon certificat ssl (validé par une autorité de certification), créé pour le domaine commun aux serveurs (domaine qui pointe vers l'ip virtuelle du cluster), puis redirige en local sur le port 8006.

 

server {
        listen          80;
        server_name     proxmox.mondomaine.fr;
        rewrite         ^ https://$hostname.mondomaine.fr$request_uri? permanent;
}

server {
        listen                  443 ssl;
        server_name             proxmox.mondomaine.fr;
        ssl on;
        ssl_certificate         /etc/nginx/conf.d/cert-20434-proxmox.mondomaine.fr.pem;
        ssl_certificate_key     /etc/nginx/conf.d/proxmox.mondomaine.fr.key;
        location / { proxy_pass https://127.0.0.1:8006; }
}

on active la conf :

rm -f /etc/nginx/sites-enabled/default
ln -sf /etc/nginx/sites-available/pveproxy /etc/nginx/sites-enabled/


on modifie pveproxy, pour cela il faut créer le fichier suivant :

nano /etc/default/pveproxy

et y inclure :

ALLOW_FROM="127.0.0.1,10.14.32.153,10.14.32.154"
DENY_FROM="all"
POLICY="allow"

Il est important de rajouter les ips des nodes faisant partis du cluster !
Sinon l'interface web ne fonctionnera plus correctement (les autres nodes ne pouvant plus s'intérroger entre elles).

Reste à redémmarrer ce qui est nécessaire :

/etc/init.d/pveproxy restart
/etc/init.d/nginx restart

 

 

Voilà pour le moment, je vais rajouter d'autres "améliorations" à ce cluster au fur et à mesure : Ceph (FS distribué), fail2ban …

Vus : 1478
Publié par Sheldon.fr : 17