Démarrer l’installation d’un clusteur de 3 serveurs dédié chez OVH.
Pour l’exemple j’ai choisi des serveurs dédiés avec 64Go Ram et différentes configurations de disques dur (SSD 2*480Go, Sata 4*2TO).
La 1ère étape consiste à installer les serveurs et le choix du partitionnement / système de fichier ZFS permet ainsi de profiter des fonctions pratiques comme les réplications et snap shot …

Documentzation OVH :
https://docs.ovh.com/fr/dedicated/

 

CPU : Intel Xeon E5-1630v3 – 4c/8t – 3.7 GHz/3,8 GHz
Mémoire: 64 Go DDR4 ECC
Stockage: 2 x 480 Go SSD SATA Soft RAID

CPU : Intel Xeon E5-1630v3 – 4c/8t – 3,7 GHz/3,8 GHz
Mémoire : 64 Go DDR4 ECC
Stockage: 4 x 2 To HDD SATA Soft RAID

Pour le swap je défini sa taille à 1/4 de la RAM (64Go) soit donc 16 Go. Etant donné que j’ai 2 disques il suffit de définir 8Go.

Pour le volume /var/lib/vz j’ai choisi le système de fichier ZFS en RAID1 (ayant que 2 disques sur ce serveur).

zpool list
NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zp0    416G   860K   416G        -         -     0%     0%  1.00x    ONLINE  -
zfs list
NAME      USED  AVAIL     REFER  MOUNTPOINT
zp0       680K   403G       96K  none
zp0/zd0   104K   403G      104K  /var/lib/vz
df -h
Filesystem      Size  Used Avail Use% Mounted on
udev             32G     0   32G   0% /dev
tmpfs           6.3G  1.3M  6.3G   1% /run
/dev/md3         20G  3.1G   16G  17% /
tmpfs            32G   43M   32G   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/md2        988M   91M  831M  10% /boot
/dev/sda1       511M  168K  511M   1% /boot/efi
zp0/zd0         404G  128K  404G   1% /var/lib/vz
/dev/fuse       128M   16K  128M   1% /etc/pve
tmpfs           6.3G     0  6.3G   0% /run/user/0
zpool history
History for 'zp0':
zpool create -R /tmp/a -f -m none -o ashift=12 zp0 mirror /dev/sdb5 /dev/sda5
zpool set autoexpand=off zp0
zpool set autoreplace=off zp0
zfs set recordsize=128KB zp0
zfs set xattr=sa zp0
zfs set acltype=posixacl zp0
zfs create zp0/zd0 -o canmount=off
zfs set quota=448425623552B zp0/zd0
zfs set recordsize=128KB zp0/zd0
zfs set xattr=sa zp0/zd0
zfs set acltype=posixacl zp0/zd0
zfs set compression=off zp0/zd0
zfs set mountpoint=/var/lib/vz zp0/zd0
zfs inherit -S canmount zp0/zd0
zpool export -a
zpool import -aN -d /dev/disk/by-id -o cachefile=none
zpool status
  pool: zp0
 state: ONLINE
status: Some supported and requested features are not enabled on the pool.
	The pool can still be used, but some features are unavailable.
action: Enable all features using 'zpool upgrade'. Once this is done,
	the pool may no longer be accessible by software that does not support
	the features. See zpool-features(7) for details.
config:

	NAME                              STATE     READ WRITE CKSUM
	zp0                               ONLINE       0     0     0
	  mirror-0                        ONLINE       0     0     0
	    wwn-0x55cd2e414dce04b0-part5  ONLINE       0     0     0
	    wwn-0x55cd2e414d51121d-part5  ONLINE       0     0     0

errors: No known data errors

Pour le swap je défini sa taille à 1/4 de la RAM (64Go) soit donc 16 Go. Etant donné que j’ai 4 disques il suffit de définir 4 Go ainsi le swap sera réparti sur les 4 disque pour obtenir un total de 16Go.

Pour le volume / et /var/lib/vz, j’ai choisi le système de fichier ZFS en RAID5, ainsi 2 pools zfs en raidZ1 vont être crées.

zpool list
NAME   SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zp0   19.5G  3.26G  16.2G        -         -     1%    16%  1.00x    ONLINE  -
zp1   14.5T  1.70M  14.5T        -         -     0%     0%  1.00x    ONLINE  -
zfs list
NAME      USED  AVAIL     REFER  MOUNTPOINT
zp0      3.26G  15.6G       96K  none
zp0/zd0  3.26G  15.6G     3.26G  /
zp1      1006K  10.4T      140K  none
zp1/zd1   151K  3.62T      151K  /var/lib/vz
df -h
Filesystem      Size  Used Avail Use% Mounted on
udev             32G     0   32G   0% /dev
tmpfs           6.3G  1.4M  6.3G   1% /run
zp0/zd0          19G  3.3G   16G  18% /
tmpfs            32G   40M   32G   1% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
/dev/md2        988M   90M  831M  10% /boot
/dev/sdb1       511M  168K  511M   1% /boot/efi
zp1/zd1         3.7T  256K  3.7T   1% /var/lib/vz
/dev/fuse       128M   16K  128M   1% /etc/pve
tmpfs           6.3G     0  6.3G   0% /run/user/0
zpool history
History for 'zp0':
zpool create -R /tmp/a -f -m none -o ashift=12 zp0 mirror /dev/sda3 /dev/sdb3 /dev/sdc3 /dev/sdd3
zpool set autoexpand=off zp0
zpool set autoreplace=off zp0
zfs set recordsize=128KB zp0
zfs set xattr=sa zp0
zfs set acltype=posixacl zp0
zfs create zp0/zd0 -o canmount=off
zfs set quota=21474836480B zp0/zd0
zfs set recordsize=128KB zp0/zd0
zfs set xattr=sa zp0/zd0
zfs set acltype=posixacl zp0/zd0
zfs set compression=off zp0/zd0
zfs set mountpoint=/ zp0/zd0
zfs inherit -S canmount zp0/zd0
zpool export -a
zpool import -N zp0

History for 'zp1':
zpool create -R /tmp/a -f -m none -o ashift=12 zp1 raidz1 /dev/sdc5 /dev/sdd5 /dev/sda5 /dev/sdb5
zpool set autoexpand=off zp1
zpool set autoreplace=off zp1
zfs set recordsize=128KB zp1
zfs set xattr=sa zp1
zfs set acltype=posixacl zp1
zfs create zp1/zd1 -o canmount=off
zfs set quota=3976624865280B zp1/zd1
zfs set recordsize=128KB zp1/zd1
zfs set xattr=sa zp1/zd1
zfs set acltype=posixacl zp1/zd1
zfs set compression=off zp1/zd1
zfs set mountpoint=/var/lib/vz zp1/zd1
zfs inherit -S canmount zp1/zd1
zpool export -a
zpool import -aN -d /dev/disk/by-id -o cachefile=none
zpool status
  pool: zp0
 state: ONLINE
status: Some supported and requested features are not enabled on the pool.
	The pool can still be used, but some features are unavailable.
action: Enable all features using 'zpool upgrade'. Once this is done,
	the pool may no longer be accessible by software that does not support
	the features. See zpool-features(7) for details.
config:

	NAME        STATE     READ WRITE CKSUM
	zp0         ONLINE       0     0     0
	  mirror-0  ONLINE       0     0     0
	    sda3    ONLINE       0     0     0
	    sdb3    ONLINE       0     0     0
	    sdc3    ONLINE       0     0     0
	    sdd3    ONLINE       0     0     0

errors: No known data errors

  pool: zp1
 state: ONLINE
status: Some supported and requested features are not enabled on the pool.
	The pool can still be used, but some features are unavailable.
action: Enable all features using 'zpool upgrade'. Once this is done,
	the pool may no longer be accessible by software that does not support
	the features. See zpool-features(7) for details.
config:

	NAME                              STATE     READ WRITE CKSUM
	zp1                               ONLINE       0     0     0
	  raidz1-0                        ONLINE       0     0     0
	    wwn-0x5000cca097ce27b1-part5  ONLINE       0     0     0
	    wwn-0x5000cca0bcd162b5-part5  ONLINE       0     0     0
	    wwn-0x5000cca097d00cb3-part5  ONLINE       0     0     0
	    wwn-0x5000cca097cdb805-part5  ONLINE       0     0     0

errors: No known data errors
ZFS - Vérifier la compression

Vérifier la compression ZFS, l’option ATIME permet d’optimiser les accés disque de notre serveur.

openzfs – performance-tuning
zfs-101-understanding-zfs-storage-and-performance

 

Activer la compression ZFS

Activer la compression ZFS permet de réduire le entrées sorties IO augmentant les performances de lecture / écriture en prenant légèrement des ressources CPU (Et oui ecrire et lire moins de données compressée en lz4 est plus rapide due à la vitesse des disques dur, même pour un ssd). De plus on gagnera de la place sur le disque.

zfs get compression

NAME PROPERTY VALUE SOURCE
zp0         compression off default
zp0/zd0     compression off local
zp1         compression off default
zp1/zd1     compression off local

Activer la compression :

zfs set compression=lz4 zp0

zfs set compression=lz4 zp0/zd0

Vérifier :

zfs get all | grep compress

zp0      compressratio         1.01x                  -
zp0      compression           on                     local
zp0      refcompressratio      1.00x                  -
zp0/zd0  compressratio         1.01x                  -
zp0/zd0  compression           on                     local
zp0/zd0  refcompressratio      1.01x                  -
zp1      compressratio         1.00x                  -
zp1      compression           on                     local
zp1      refcompressratio      1.00x                  -
zp1/zd1  compressratio         1.00x                  -
zp1/zd1  compression           on                     local
zp1/zd1  refcompressratio      1.00x                  -
Désactiver ATIME

Par défaut l’option atime est activée; A chaque fois q’un finchier est ouvert zfs va enregistrer cette date, ce qui engendre des accès disques supplémentaire.
Sur un serveur, avons nous vraiment besoin de cette date de ernière lecture ? Pour ma part je préfère optimiser les accès disque, est donc je désactive cette option.

zfs get all | grep time
 zfs set atime=off zp0
ZFS ARC (Adaptive Replacement Cache)

ZFS ARC est un systeme de cache pour accelerer les accès disque. L’inconvénient c’est qu’il peut parfois être gourmand en mémoire RAM. En fait il prend l’espace libre à un instant T, mais la libère pas toujours aussi vite.

Voici quelques conseils en anglais :
https://www.cyberciti.biz/faq/how-to-set-up-zfs-arc-size-on-ubuntu-debian-linux/

surveiller la RAM : free -g
zpool iostat -v
arc_summary | more
cat /proc/spl/kstat/zfs/arcstats |grep c_

Le principe gérnéral :

Désactiver ou réduirre  la cache ZFS ARC pour des volumes utilisant MYSQL, NGINX, APACHE … et utiliser plutôt le système de cache implémenté dans ces applications.

https://openzfs.github.io/openzfs-docs/Performance%20and%20Tuning/Module%20Parameters.html
https://dannyda.com/2021/12/20/how-to-check-zfs-io-status-and-arc-l2arc-zil-slog-status/https://wiki.deimos.fr/ZFS_:_Le_FileSystem_par_excellence.html#Le_cache_ARC_ZFS
https://pve.proxmox.com/wiki/ZFS_on_Linux

2GB = 2 147 483 648 Bytes
4GB = 4 294 967 296 Bytes

cat /sys/module/zfs/parameters/zfs_arc_max

echo "$[2 * 1024*1024*1024 - 1]" >/sys/module/zfs/parameters/zfs_arc_min
echo "$[4 * 1024*1024*1024]" >/sys/module/zfs/parameters/zfs_arc_max
vi /etc/modprobe.d/zfs.conf
options zfs zfs_arc_min=2147483647
options zfs zfs_arc_max=4294967296

 

Alertes e-mail

Etre alerté par e-mail d’un problème sur le serveur. Par defaut les services envoient des alertes dans la boite local du server postmaster / root … Sinon, au travers du fichier de configuration il est aussi possible de configurer l’email, comme par exemple les alerte ZFS avec le service ZED.

Ajouter un email dans /etc/aliases

vi /etc/aliases

# See man 5 aliases for format
postmaster: root
root: monemail@mondomaine.fr

Puis executer la commande suivante pour actualiser aliases.db :

newaliases

Puis redémarrer postfix :

systemctl restart postfix

Tester :

echo test | mail -s "test message" root
zfs zed.rc

vi /etc/zfs/zed.d/zed.rc

# Email address of the zpool administrator for receipt of notifications;
ZED_EMAIL_ADDR= »root »

arc_summary | more

free -g

               total        used        free      shared  buff/cache   available
Mem:              62           2          59           0           0          59
Swap:              3           0           3

arc_summary | more

ARC status:                                                      HEALTHY
        Memory throttle count:                                         0

ARC size (current):                                     3.0 %  963.4 MiB
        Target size (adaptive):                         6.2 %    2.0 GiB
        Min size (hard limit):                          6.2 %    2.0 GiB
        Max size (high water):                           16:1   31.3 GiB

Commandes utiles

vi ~/.vimrc

apt-get install vim

vi ~/.vimrc

# Ne pas passer en mode visuel avec VI pour pouvoir copier / coller avec la souris
set term=xterm
vi /etc/aliases

root: mon_email@domaine.fr

Installer fail2ban
apt install fail2ban
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Votre titre va ici

Your content goes here. Edit or remove this text inline or in the module Content settings. You can also style every aspect of this content in the module Design settings and even apply custom CSS to this text in the module Advanced settings.

Sécurisez le serveur Proxmox

Votre serveur étant fraichement installé, il convient de le sécuriser au plus vite.

– Connectez vous en SSH sur votre serveur et changez le mot de passe root. Ajoutez un nouvel utilisateur, et installez une clef ssh pour cet utilisateur, ajoutez le au groupe sudo.
Modifiez la conf sshd pour ne pas autoriser un l’acces root et n’autoriser que les accès avec clef SSH (pas de mot passe).

– Connectez-vous avec votre navigateur à Proxmox https://monserveur.fr:8006/
Configurez le firewal avec au minimum les règles suivantes :

  • Autorisez l’accès SSH et web sur le port 8006 exclusivement pouy votre IP fixe.
  • Autorisez les Pings afin que le monitoring d’OVH considère toujours votre serveur actif.
  • Autorisez le protocole HTTP (temporairement) pour mettre en place un certificat LetsEncryp avec la méthos HTTP.
  • Enfin, activez les firewall avec l’Input Plolicy sur DROP ou EJECT afin que tout ce qui n’est pas inscrit dans les règles du firewall soit bloqué.

Configuration réseau du serveur proxmox

IP V4 OVH et passerelle

L’adresse de la passerelle est constituée des trois premiers octets de l’adresse IP principale de votre serveur, le dernier octet étant de 254. Par exemple, si l’adresse IP principale de votre serveur est :

  • 123.456.789.111

Votre adresse de passerelle sera alors :

  • 123.456.789.254

IP V6 OVH et passerelle

La passerelle par défaut de votre Block IPv6 (IPv6_GATEWAY) est toujours IP:v:6FF:FF:FF:FF:FF.

Quelques exemples :

    • L’IPv6 du serveur est 2607:5300:60:62ac::/64

    • L’IPv6_GATEWAY sera alors 2607:5300:60:62FF:FF:FF:FF:FF

    • L’IPv6 du serveur est 2001:41D0:1:46e::/64

    • L’IPV6_GATEWAY sera alors 2001:41D0:1:4FF:FF:FF:FF:FF.

IP V6 pour les VM Proxmox
http://howto.zw3b.fr/linux/reseaux/howto-ipv6-proxmox-ovh

Il faut savoir qu’OVH propose un masque de 56 et non pas un masque de 64 (ce qui permet d’attribuer à nos VMs différents sous-réseaux).


Sur le « host proxmox » ajouter les routes par defaut sur une IP v6 :

post-up /sbin/ip -f inet6 route add 2001:41d0:8:54d1::1 dev vmbr0
post-up /sbin/ip -f inet6 route add default via 2001:41d0:8:54d1::1
pre-down /sbin/ip -f inet6 route del default via 2001:41d0:8:54d1::1
pre-down /sbin/ip -f inet6 route del 2001:41d0:8:54d1::1 dev vmbr0

Sur chaque container, mettre une ip v6 valide et comme passerelle celle inscrite comme route par défaut.