BDD

Matériel

2 serveurs OVH Advance-4 Gamme 2026 (1 Master / 1 Slave) :

CPU : AMD EPYC 4585PX - 16c/32t - 4.3GHz/5.7GHz
RAM : 128GB DDR5 5600MHz
Disques : 4×7.68 To SSD NVMe Soft RAID

1 serveur OVH Advance-STOR Gamme 2026 (Backup) :

CPU : AMD EPYC 4345P - 8c/16t - 3.8 GHz/5.5 GHz
RAM : 128GB DDR5 5600MHz
Disques : 2×960 Go SSD NVMe Soft RAID + 4×24 To HDD SAS Soft RAID

Installer les serveurs MASTER/SLAVE

OS

Partitionnement

Partitionning

L’installeur OVH utilise 2 disques sur 4 au hasard (ici nvme2 et nvme3) :

# fdisk -l /dev/nvme*n1
Disk /dev/nvme0n1: 6.99 TiB, 7681501126656 bytes, 15002931888 sectors
Disk model: SAMSUNG MZQL27T6HBLA-00A07
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 131072 bytes / 131072 bytes
Disklabel type: gpt
Disk identifier: F57BB925-0B46-4398-826A-1EBD837A902D

Device           Start         End     Sectors  Size Type


Disk /dev/nvme1n1: 6.99 TiB, 7681501126656 bytes, 15002931888 sectors
Disk model: SAMSUNG MZQL27T6HBLA-00A07
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 131072 bytes / 131072 bytes
Disklabel type: gpt
Disk identifier: F57BB925-0B46-4398-826A-1EBD837A902D

Device           Start         End     Sectors  Size Type


Disk /dev/nvme2n1: 6.99 TiB, 7681501126656 bytes, 15002931888 sectors
Disk model: SAMSUNG MZQL27T6HBLA-00A07
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 131072 bytes / 131072 bytes
Disklabel type: gpt
Disk identifier: F57BB925-0B46-4398-826A-1EBD837A902D

Device           Start         End     Sectors  Size Type
/dev/nvme2n1p1    2048     1048575     1046528  511M EFI System
/dev/nvme2n1p2 1048576     3145727     2097152    1G Linux RAID
/dev/nvme2n1p3 3145728 15002927103 14999781376    7T Linux filesystem


Disk /dev/nvme3n1: 6.99 TiB, 7681501126656 bytes, 15002931888 sectors
Disk model: SAMSUNG MZQL27T6HBLA-00A07
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 131072 bytes / 131072 bytes
Disklabel type: gpt
Disk identifier: 1E48E8CA-E071-4980-A603-1BAB6CA2827B

Device           Start         End     Sectors  Size Type
/dev/nvme3n1p1    2048     1048575     1046528  511M EFI System
/dev/nvme3n1p2 1048576     3145727     2097152    1G Linux RAID
/dev/nvme3n1p3 3145728 15002927103 14999781376    7T Linux filesystem

Copier le partitionnement sur les disques vierges :

sgdisk --replicate=/dev/nvme0n1 /dev/nvme2n1
sgdisk --replicate=/dev/nvme1n1 /dev/nvme2n1
Partition EFI (cf. https://wiki.evolix.org/HowtoRAIDLogiciel#partition-efi)

Dans le cas d’un serveur qui démarre en EFI, il peut être utile d’avoir au moins deux entrées entrées pour pouvoir démarrer même lorsque le disque qui héberge la partition EFI est hors service. Il n’est pas possible de mettre la partition EFI dans du RAID logiciel, donc il faut dupliquer la partition à la main.

cp /dev/nvme2n1p1 /dev/nvme0n1p1
cp /dev/nvme2n1p1 /dev/nvme1n1p1
apt install efibootmgr
efibootmgr -c -g -d /dev/nvme0n1 -p 1 -L debian -l '\EFI\debian\grubx64.efi'
efibootmgr -c -g -d /dev/nvme1n1 -p 1 -L debian -l '\EFI\debian\grubx64.efi'
Partition /boot

L’installeur OVH a configuré un RAID 1 soft avec les deux premiers disques. On va ajouter les deux autres en plus :

root@ns3264579:/home/debian# cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4] [raid10]
md2 : active raid1 nvme3n1p2[0] nvme2n1p2[1]
      1046528 blocks super 1.2 [2/2] [UU]

unused devices: <none>

root@ns3264579:/home/debian# mdadm /dev/md2 --add /dev/nvme0n1p2
mdadm: added /dev/nvme0n1p2

root@ns3264579:/home/debian# mdadm /dev/md2 --add /dev/nvme1n1p2
mdadm: added /dev/nvme1n1p2

root@ns3264579:/home/debian# cat /proc/mdstat
Personalities : [raid1] [raid0] [raid6] [raid5] [raid4] [raid10]
md2 : active raid1 nvme1n1p2[3](S) nvme0n1p2[2](S) nvme3n1p2[0] nvme2n1p2[1]
      1046528 blocks super 1.2 [2/2] [UU]

unused devices: <none>

ZFS RAID10

L’installeur OVH a normalement créé un pool ZFS mirror :

root@ns3264579:/home/debian# zpool status
  pool: zp0
 state: ONLINE
config:

	NAME           STATE     READ WRITE CKSUM
	zp0            ONLINE       0     0     0
	   mirror-0     ONLINE       0     0     0
	     nvme2n1p3  ONLINE       0     0     0
	     nvme3n1p3  ONLINE       0     0     0

Il faut maintenant ajouter un autre vdev mirroir pour avoir un équivalent RAID10 :

root@ns3264579:/home/debian# zpool add zp0 mirror /dev/nvme0n1p3 /dev/nvme1n1p3

root@ns3264579:/home/debian# zpool status
  pool: zp0
 state: ONLINE
config:

	NAME           STATE     READ WRITE CKSUM
	zp0            ONLINE       0     0     0
	   mirror-0     ONLINE       0     0     0
	     nvme2n1p3  ONLINE       0     0     0
	     nvme3n1p3  ONLINE       0     0     0
	   mirror-1     ONLINE       0     0     0
	     nvme0n1p3  ONLINE       0     0     0
	     nvme1n1p3  ONLINE       0     0     0

Enfin il faut mettre à jour les quotas :

root@ns3264579:/home/debian# zfs get quota,refquota zp0/zd0
NAME     PROPERTY  VALUE     SOURCE
zp0/zd0  quota     6.98T     local
zp0/zd0  refquota  none      default

root@ns3264579:/home/debian# zfs set quota=none zp0/zd0

root@ns3264579:/home/debian# zfs get quota,refquota zp0/zd0
NAME     PROPERTY  VALUE     SOURCE
zp0/zd0  quota     none      local
zp0/zd0  refquota  none      default

root@ns3264579:/home/debian# df -h /
Filesystem      Size  Used Avail Use% Mounted on
zp0/zd0          14T  1.5G   14T   1% /

Optimisation ZFS/MariaDB

Afin de tirer parti des performances de ZFS, il faut séparer les LOGS et les DATAS. Pour créer les datasets :

zfs create -p -o recordsize=16K -o compression=lz4 -o atime=off -o primarycache=metadata -o logbias=throughput -o mountpoint=/mariadb-data zp0/mariadb/data
zfs create -o compression=off -o sync=always -o primarycache=metadata -o mountpoint=/mariadb-logs zp0/mariadb/logs
chown mysql:mysql /mariadb-data
chown mysql:mysql /mariadb-logs

Installer le serveur de BACKUP

OS

Partitionnement

Partitionning

ZFS RAID10

L’installeur OVH a normalement créé un pool ZFS mirror avec les deux premiers disques NVMe :

root@ns31830291:/home/debian# zpool status
  pool: zp0
 state: ONLINE
config:

	NAME           STATE     READ WRITE CKSUM
	zp0            ONLINE       0     0     0
	   mirror-0     ONLINE       0     0     0
	     nvme0n1p3  ONLINE       0     0     0
	     nvme1n1p3  ONLINE       0     0     0

Il faut maintenant créer un autre pool (équivalent RAID10) avec les disques SAS :

zpool create zp1 mirror /dev/sda /dev/sdb
zpool add zp1 mirror /dev/sdc /dev/sdd
zfs set mountpoint=none zp1

root@ns31830291:/home/debian# zpool status
  pool: zp0
 state: ONLINE
config:

	NAME           STATE     READ WRITE CKSUM
	zp0            ONLINE       0     0     0
	   mirror-0     ONLINE       0     0     0
	     nvme0n1p3  ONLINE       0     0     0
	     nvme1n1p3  ONLINE       0     0     0

errors: No known data errors

  pool: zp1
 state: ONLINE
config:

	NAME        STATE     READ WRITE CKSUM
	zp1         ONLINE       0     0     0
	   mirror-0  ONLINE       0     0     0
	     sda     ONLINE       0     0     0
	     sdb     ONLINE       0     0     0
	   mirror-1  ONLINE       0     0     0
	     sdc     ONLINE       0     0     0
	     sdd     ONLINE       0     0     0

Optimisation ZFS/MariaDB

Afin de tirer parti des performances de ZFS, il faut séparer les LOGS et les DATAS. Pour créer les datasets : Attention : le dataset des logs est créé sur le pool ZFS des disques NVMe

zfs create -p -o recordsize=16K -o compression=lz4 -o atime=off -o primarycache=metadata -o logbias=throughput -o mountpoint=/mariadb-data zp1/mariadb/data
zfs create -o compression=off -o sync=always -o primarycache=metadata -o mountpoint=/mariadb-logs zp0/mariadb/logs
zfs create -o mountpoint=/mariadb-dumps zp1/mariadb/dumps
chown mysql:mysql /mariadb-data
chown mysql:mysql /mariadb-logs

Ansible

Si besoin de debug ajouter : “-vvv -e ‘debops__no_log=false’”

ansible-playbook -i inventory/100_hosts playbooks/debops_bootstrap.yml --vault-id @prompt --flush-cache --user debian --limit <server>.pkgdata.net
ansible-playbook -i inventory/100_hosts playbooks/debops_site.yml --vault-id @prompt --flush-cache --limit <server>.pkgdata.net