Services/Proxmox.md
... ...
@@ -69,425 +69,6 @@ Il faut créer des comptes utilisateurs dédiés pour les administrateurs de l'h
69 69
Attention cependant, les noeuds échangent entre eux en SSH (à priori avec le compte root), il faut faire attention à ne pas les bloquer en autorisant qu'un certain groupe à se connecter ou en refusant complètement une connexion root. L'option sshd `PermitRootLogin without-password` devrait fonctionner.
70 70
71 71
72
-
73
-## Architecture à Brest I11
74
-
75
-À Brest, le groupe principal est composé de 3 hyperviseurs ([Camille](/Serveurs/Camille), [Nikita](/Serveurs/Nikita) et [Proxima](/Serveurs/Proxima)) qui partagent tous un même espace de stockage sur le [SAN](/Services/SAN). Cette architecture permet un load balancing de la charge et un fail over en cas de perte d'un noeud.
76
-
77
-Architecture montée par Alexandre Levavasseur FIP 2016 en février-mars 2015, puis mise à jour en 2016.
78
->> Image de l'archi à ajouter.
79
-https://sandstorm.resel.fr/shared/W65mdEUXHx9quIuNaWQckm1eCOPNcrqBKOmjT5nZfT9
80
-
81
-### Configuration Réseau
82
-
83
-La première chose à configurer, via l'interface graphique, c'est le réseau ( https://pve.proxmox.com/wiki/Open_vSwitch ).
84
-* désactiver `vmbr0` (par défaut) en décochant l'autoboot, retirant la passerelle (sinon conflit dans les étapes suivantes), mettant `eth0.997` au lieu de `eth0`
85
-* créer 2 OVS Bridge `vmbr1` et `vmbr2`, aucune option
86
-* créer 2 OVS Bond `bond1` (attention au nom !) prenant eth0 et eth1, puis bond2 prenant eth2 et eth3, les 2 en mode balance-tcp
87
-* Créer 2 OVS IntPort :
88
- * `mgr` portant l'adresse de management (reprendre les paramètres de l'install), dans le vlan 997
89
- * `sto` portant une adresse dans le vlan stockage, seuls adresse et masque sont renseignés
90
-
91
-Un différentiel est disponible dans le cadre du bas. Lorsque vous avez bien tout configuré et vérifié, il faudra mettre en place les jumbo frames sur l'interface de stockage (possible avant le reboot de changement des interfaces en modifiant `interfaces.new`), en éditant `/etc/netwok/interfaces :
92
-```
93
-iface sto inet static
94
-[..]
95
- mtu 9000
96
-
97
-iface bond2 inet manual
98
-[..]
99
- pre-up ( ifconfig eth2 mtu 9000 && ifconfig eth3 mtu 9000 )
100
- mtu 9000
101
-
102
-iface vmbr2 inet manual
103
-[..]
104
- mtu 9000
105
-```
106
-
107
-Les hyperviseurs sont connectés aux switch sur le VLAN 5 qui sert uniquement pour le stockage à l'aide de 2 liens LACP Gi.
108
-Le Port Channel configuré par interface sur Laetitia:
109
-* PC 5 : LACP SAN - Laetitia (eth2 : Gi0/35, eth3 : Gi0/34)
110
-* PC 10 : LACP SAN - Camille (eth2 : Gi0/32, eth3 : Gi0/33)
111
-* PC 11 : LACP SAN - Nikita (eth2 : Gi0/28, eth3 : Gi0/29)
112
-* PC 20 : LACP Core - Camillle (eth0 : Gi0/30, eth1 : Gi0/31)
113
-* PC 21 : LACP Core - Nikita (eth0 : Gi0/26, eth1 : Gi0/27)
114
-
115
-Le LACP est un protocole permettant d'agréger des liens sur un même switch afin d'avoir une résistance en cas de chute de lien, mais également plus de débit. [Documentation Cisco sur le LACP](https://www.cisco.com/c/en/us/td/docs/ios/12_2sb/feature/guide/gigeth.html).
116
-
117
-[Alternative au LACP iSCSI Multipath](https://pve.proxmox.com/wiki/ISCSI_Multipath)
118
-
119
-Il faut adapter la configuration des ports du switch en face ; un exemple :
120
-
121
-Attention, cette documentation peut évoluer (car les confs des sw c'est facile à changer), n'hésitez pas à aller [voir la configuration de Laetitia](https://git.resel.fr/confs/cisco) en cas de doute.
122
-
123
-```
124
-!
125
-interface GigabitEthernet0/26
126
- description Nikita LACP CORE 1
127
- switchport trunk encapsulation dot1q
128
- switchport mode trunk
129
- storm-control broadcast level pps 300 250
130
- storm-control action trap
131
- channel-protocol lacp
132
- channel-group 21 mode passive
133
-!
134
-interface GigabitEthernet0/27
135
- description Nikita LACP CORE 2
136
- switchport trunk encapsulation dot1q
137
- switchport mode trunk
138
- ip access-group 101 in
139
- mls qos trust dscp
140
- snmp trap mac-notification change added
141
- snmp trap mac-notification change removed
142
- storm-control broadcast level pps 300 250
143
- storm-control action trap
144
- channel-protocol lacp
145
- channel-group 21 mode passive
146
- spanning-tree portfast
147
- spanning-tree bpdufilter enable
148
- ip dhcp snooping trust
149
-!
150
-interface GigabitEthernet0/28
151
- description Nikita LACP SAN 1
152
- switchport access vlan 5
153
- storm-control broadcast level pps 200 5
154
- storm-control action trap
155
- channel-protocol lacp
156
- channel-group 11 mode passive
157
- spanning-tree portfast
158
- spanning-tree bpdufilter enable
159
-!
160
-interface GigabitEthernet0/29
161
- description Nikita LACP SAN 2
162
- switchport access vlan 5
163
- storm-control broadcast level pps 200 5
164
- storm-control action trap
165
- channel-protocol lacp
166
- channel-group 11 mode passive
167
- spanning-tree portfast
168
- spanning-tree bpdufilter enable
169
-!
170
-interface GigabitEthernet0/30
171
- description Camille LACP CORE 1
172
- switchport trunk encapsulation dot1q
173
- switchport mode trunk
174
- ip access-group 101 in
175
- mls qos trust dscp
176
- storm-control broadcast level pps 300 250
177
- storm-control action trap
178
- channel-protocol lacp
179
- channel-group 20 mode passive
180
- spanning-tree portfast
181
- spanning-tree bpdufilter enable
182
- ip dhcp snooping trust
183
-!
184
-interface GigabitEthernet0/31
185
- description Camille LACP CORE 2
186
- switchport trunk encapsulation dot1q
187
- switchport mode trunk
188
- ip access-group 101 in
189
- mls qos trust dscp
190
- snmp trap mac-notification change added
191
- snmp trap mac-notification change removed
192
- storm-control broadcast level pps 300 250
193
- storm-control action trap
194
- channel-protocol lacp
195
- channel-group 20 mode passive
196
- spanning-tree portfast
197
- spanning-tree bpdufilter enable
198
- ip dhcp snooping trust
199
-!
200
-interface GigabitEthernet0/32
201
- description Camille LACP SAN 1
202
- switchport access vlan 5
203
- storm-control broadcast level pps 200 5
204
- storm-control action trap
205
- channel-protocol lacp
206
- channel-group 10 mode passive
207
- spanning-tree portfast
208
- spanning-tree bpdufilter enable
209
-!
210
-interface GigabitEthernet0/33
211
- description Camille LACP SAN 2
212
- switchport access vlan 5
213
- storm-control broadcast level pps 200 5
214
- storm-control action trap
215
- channel-protocol lacp
216
- channel-group 10 mode passive
217
- spanning-tree portfast
218
- spanning-tree bpdufilter enable
219
-!
220
-interface GigabitEthernet0/34
221
- description Sanizator LACP 2
222
- switchport access vlan 5
223
- storm-control broadcast level pps 200 5
224
- storm-control action trap
225
- channel-protocol lacp
226
- channel-group 5 mode passive
227
- spanning-tree portfast
228
- spanning-tree bpdufilter enable
229
-!
230
-interface GigabitEthernet0/35
231
- description Sanizator LACP
232
- switchport access vlan 5
233
- storm-control broadcast level pps 200 5
234
- storm-control action trap
235
- channel-protocol lacp
236
- channel-group 5 mode passive
237
- spanning-tree portfast
238
- spanning-tree bpdufilter enable
239
-```
240
-
241
-**Uniquement pour promox 3** :
242
-Enfin, pour la partie réseau, il reste un détail (à mettre en place au bon moment de l'installation mais décrit ici) : le passage dans un état réellement fonctionnel des interfaces tels que sw semble pouvoir mettre beaucoup de temps au boot, or entre l'initialisation du réseau et la tentative de formation du cluster il ne s'écoule que quelques secondes au plus, ce qui peut poser des problèmes (notamment, le problème a été diagnostiqué parce que le noeud tente de s'unfencer -> fail -> pas de join du domain de fence -> pas de rmanager). Il faut donc attendre que le réseau soit bien prêt avant de continuer, j'ai pour cela créé un petit script qui va vérifier que les adresses fournies (et choisie pour permettre de vérifier l'état de l'interface) sont bien opérationnelles avant de continuer :
243
-
244
-```
245
-echo > /etc/network/if-up.d/z-boot-wait <<EOF
246
-#!/usr/bin/env sh
247
-#
248
-# Script d'attente au boot par Alexandre Levavasseur, FIP16
249
-# --
250
-# Attend que les réseaux nécessaires, ici lien avec laetitia et avec le san, soient
251
-# prêts avant de continuer le boot ; si délai > 5 minutes le script laisse quand
252
-# même le système booter (pour éviter les erreurs humaines).
253
-
254
-log() {
255
- echo "[boot-wait] $*"
256
-}
257
-
258
-NEEDED="172.22.5.5 172.22.0.115"
259
-MAX_WAIT=300
260
-
261
-t=0
262
-if [ "$IFACE" = "--all" ] && [ "$PHASE" = "post-up" ]; then
263
- for addr in $NEEDED; do
264
- echo -n "[boot-wait] Waiting for $addr .. "
265
- until [ $t -gt $MAX_WAIT ] || ping -c1 -W1 $addr > /dev/null; do
266
- t=$((t+1))
267
- done
268
- echo "exited at t=$t"
269
- done
270
-
271
- if [ $t -gt $MAX_WAIT ]; then
272
- log "Failed, deadline expired"
273
- exit 1
274
- else
275
- log "Ok :)"
276
- fi
277
-fi
278
-EOF
279
-
280
-puis
281
-
282
-chmod +x /etc/network/if-up.d/z-boot-wait
283
-```
284
-
285
-### Reverse proxy
286
-
287
-Pour profiter du HA du pool, les trois hyperviseurs peuvent proposer l'interface graphique de proxmox. Ceux-ci sont situés derrière le reverse proxy situs en round robin. L'option `ip_hash` est très importante pour éviter de se connecter sur les 3 serveurs à tour de rôle, cela pose des problèmes lors de l'ouverture de la console qui va s'ouvrir sur un autre hyperviseur.
288
-
289
-Voici la configuration (au 2017-01-29):
290
-```
291
-upstream proxmox {
292
- ip_hash;
293
- server 172.22.2.42:8006; # Nikita
294
- server 172.22.2.58:8006; # Camille
295
- server 172.22.2.63:8006; # Proxima
296
-}
297
-
298
-server {
299
- listen 80;
300
- server_name proxmox.resel.fr;
301
- return 301 https://$server_name$request_uri;
302
-}
303
-
304
-server {
305
- listen 443 ssl;
306
- server_name proxmox.resel.fr;
307
-
308
- access_log /var/log/nginx/proxmox.resel.fr/access.log;
309
- error_log /var/log/nginx/proxmox.resel.fr/errors.log;
310
-
311
- proxy_redirect off;
312
- location / {
313
- proxy_http_version 1.1;
314
- proxy_set_header Upgrade $http_upgrade;
315
- proxy_set_header Connection "upgrade";
316
- proxy_pass https://proxmox;
317
- }
318
-}
319
-```
320
-
321
-### Stockage
322
-
323
-Le stockage se fait sur le SAN Sanizator qui exporte des volumes en iSCSI (tcp).
324
-
325
-#### Création des volumes
326
-TODO
327
-
328
-#### Configuration des volumes dans proxmox
329
-
330
-La configuration dans proxmox 4 se fait depuis l'interface graphiques. On commence par ajouter les volumes iSCSI, l'ID sera le nom attribué, le portal l'adresse du SAN, la target la cible contenant les volumes voulus. Pas de restriction sur les noeuds.
331
-
332
-| ID | Portal | Target | Direct* |
333
-| ------- | -------| ------ | -------- |
334
-| SAN-VMs | 172.22.5.5 | iqn.2015-02.fr.resel:promox | Non |
335
-| VM-SAN-Clubs | 172.22.5.5 | iqn.2015-02.fr.resel:clubs | Oui |
336
-| VM-SAN-Miroir | 172.22.5.5 | iqn.2015-02.fr.resel:miroir | Oui |
337
-| VM-SAN-Reloaded | 172.22.5.5 | iqn.2017-01.fr.resel:proxmox-reloaded | Non |
338
-
339
-**Direct* indique que les volumes pourront être utilisés directement par les VMs. Pour le moment Proxmox ne protège pas ces accès direct contre les accès multiples ni dans le reste de l'interface Proxmox, il font donc savoir qu'ils ne doivent pas être utilisés. Ils sont préfixés par VM pour indiquer que leur usage est réservé aux VMs.**
340
-
341
-Ensuite, dans le LUN (volume) 1 de la target `promox`, crée les VG qui accueillent les VMs.
342
-Add>LVM :
343
-
344
-| ID | Base Storage | Base Volume | Volume Group | Shared |
345
-| --- | ------------ | ----------- | ------------ | ------ |
346
-| Disks-VMs | SAN-VMs | LUN00 | vms | Oui |
347
-| Disks-ViM-Reloaded | VM-SAN-Reloaded | LUN01 | vg-reloaded | Oui |
348
-
349
-On peut vérifier la prise en compte avec la commande vgs :
350
-```
351
-lcarr@camille:~$ sudo vgs
352
- VG #PV #LV #SN Attr VSize VFree
353
- clubs 1 1 0 wz--n- 1024.00g 0
354
- miroir 1 4 0 wz--n- 900.00g 30.00g
355
- pve 1 3 0 wz--n- 136.00g 15.84g
356
- vg-reloaded 1 29 0 wz--n- 1024.00g 595.50g
357
- vms 1 44 0 wz--n- 1024.00g 500.50g
358
-```
359
-
360
-
361
-#### Informations sur le CLVM
362
-
363
-Des liens en vrac en attendant plus de doc :
364
-* https://github.com/proxmox/lvm/blob/master/patchdir/fix-clvm-init.patch
365
-* http://forum.proxmox.com/threads/5207-shared-storage-LVM2-or-CLVM
366
-* http://forum.proxmox.com/threads/14703-When-is-CLVM-needed
367
-* http://forum.proxmox.com/threads/7225-cLVM
368
-* http://serverfault.com/questions/444043/does-proxmox-ve-support-lvm-as-block-storage-for-kvm-guests
369
-* http://forum.proxmox.com/threads/12798-Proxmox-VE-2-2-and-clvm
370
-* http://pve.proxmox.com/wiki/Proxmox_ISCSI_installation + pas de clvm mais resynchro des metas
371
-
372
-
373
-### Mise en place de la HA
374
-
375
-#### Explications
376
-La haute disponibilité est la technologie permettant d'avoir un service constant malgré la chute de noeuds. Elle est enforcée ici par le fait qu'il y ait 3 noeuds en concurrence.
377
-
378
-**Quorum** : Un quorum est le principe qui permet de vérifier l'état d'un service distribué à l'aide d'un vote. Chacun des noeuds du service possède un (ou plusieurs) votes et si le quorum est atteint (généralement la majorité) le noeud considère qu'il est dans une partition fonctionnelle. Si il le quorum n'est pas atteint, le noeud considère qu'il est isolé ou dysfonctionnel.
379
-
380
-**Fencing** : Le fencing est le processus permettant d'isoler du système un noeud qui est dysfonctionnel.
381
-
382
-#### Mise en cluster
383
-
384
-Nous créons un cluster nommé `lyoko-cluster` :
385
-```bash
386
-root@camille:~# pvecm create lyoko-cluster
387
-Restarting pve cluster filesystem: pve-cluster[dcdb] notice: wrote new cluster config '/etc/cluster/cluster.conf'
388
-.
389
-Starting cluster:
390
- Checking if cluster has been disabled at boot... [ OK ]
391
- Checking Network Manager... [ OK ]
392
- Global setup... [ OK ]
393
- Loading kernel modules... [ OK ]
394
- Mounting configfs... [ OK ]
395
- Starting cman... [ OK ]
396
- Waiting for quorum... [ OK ]
397
- Starting fenced... [ OK ]
398
- Starting dlm_controld... [ OK ]
399
- Tuning DLM kernel config... [ OK ]
400
- Unfencing self... [ OK ]
401
-```
402
-
403
-Ajout des noeuds au quorum :
404
-```bash
405
-root@nikita:~# pvecm add 172.22.2.58 # Nikita
406
-The authenticity of host '172.22.2.58 (172.22.2.58)' can't be established.
407
-ECDSA key fingerprint is 0d:f2:dd:e1:bb:ae:e4:71:86:ad:ed:5e:02:78:cf:7c.
408
-Are you sure you want to continue connecting (yes/no)? yes
409
-root@172.22.2.58's password:
410
-copy corosync auth key
411
-stopping pve-cluster service
412
-Stopping pve cluster filesystem: pve-cluster.
413
-backup old database
414
-Starting pve cluster filesystem : pve-cluster.
415
-Starting cluster:
416
- Checking if cluster has been disabled at boot... [ OK ]
417
- Checking Network Manager... [ OK ]
418
- Global setup... [ OK ]
419
- Loading kernel modules... [ OK ]
420
- Mounting configfs... [ OK ]
421
- Starting cman... [ OK ]
422
- Waiting for quorum... [ OK ]
423
- Starting fenced... [ OK ]
424
- Starting dlm_controld... [ OK ]
425
- Tuning DLM kernel config... [ OK ]
426
- Unfencing self... [ OK ]
427
-waiting for quorum...OK
428
-generating node certificates
429
-merge known_hosts file
430
-restart services
431
-Restarting PVE Daemon: pvedaemon.
432
-Restarting PVE API Proxy Server: pveproxy.
433
-successfully added node 'nikita' to cluster.
434
-
435
-
436
-root@nikita:~# pvecm add 172.22.2.63 # Proxima
437
-```
438
-
439
-Pour voir l'état du cluster :
440
-```bash
441
- root@camille ~ # pvecm status
442
-Quorum information
443
-------------------
444
-Date: Sun Jan 29 01:36:56 2017
445
-Quorum provider: corosync_votequorum
446
-Nodes: 3
447
-Node ID: 0x00000002
448
-Ring ID: 1/25104
449
-Quorate: Yes
450
-
451
-Votequorum information
452
-----------------------
453
-Expected votes: 3
454
-Highest expected: 3
455
-Total votes: 3
456
-Quorum: 2
457
-Flags: Quorate
458
-
459
-Membership information
460
-----------------------
461
- Nodeid Votes Name
462
-0x00000001 1 172.22.2.42
463
-0x00000002 1 172.22.2.58 (local)
464
-0x00000004 1 172.22.2.63
465
-zsh: exit 1 pvecm status
466
-```
467
-
468
-La liste des noeuds :
469
-```bash
470
-root@camille ~ # pvecm nodes
471
-
472
-Membership information
473
-----------------------
474
- Nodeid Votes Name
475
- 1 1 nikita
476
- 2 1 camille (local)
477
- 4 1 proxima
478
-```
479
-
480
-Liens (concernant la mise en quorum):
481
-* http://blogs.technet.com/b/windowsinternals/archive/2009/03/30/le-quorum-et-le-cluster.aspx
482
-* http://clusterlabs.org/doc/en-US/Pacemaker/1.1/html/Clusters_from_Scratch/_perform_a_failover.html#_quorum_and_two_node_clusters
483
-* http://techthoughts.typepad.com/managing_computers/2007/10/split-brain-quo.html
484
-* http://linux-ha.org/wiki/Cluster_Concepts
485
-* http://blogs.msdn.com/b/clustering/archive/2011/05/27/10169261.aspx
486
-* https://pve.proxmox.com/wiki/Proxmox_VE_2.0_Cluster#Two_nodes_cluster_and_quorum_issues
487
-* https://pve.proxmox.com/wiki/Two-Node_High_Availability_Cluster
488
-* http://serverfault.com/questions/371067/how-to-setup-stonith-in-a-2-node-active-passive-linux-ha-pacemaker-cluster
489
-
490
-
491 72
## Ressources utiles
492 73
* [Wikipedia sur l'hypervision](https://en.wikipedia.org/wiki/Hypervisor)
493 74
* [Site officiel de Proxmox](https://www.proxmox.com)