Enlarge your p… partitions (drbd)

Enlarge your p… partitions (drbd)

Je cherchais un titre valable pour cet article et m’est revenu l’objet des spams du dĂ©but des annĂ©es 2000. Ahhh le bon vieux temps… DĂ©solĂ©, je m’Ă©gare de toute façon je ne pourrai t’apporter la solution que pour : agrandir les partitions de ton système Linux.

Ca aurait pas été un meilleur titre ça, non ?

J’ai Ă©tĂ© rĂ©cemment confrontĂ© Ă  des partitions drbd pleines sur des serveurs virtuels et je voulais prendre en note les opĂ©rations d’extension Ă  chaud afin de t’en faire part parce que ça peut faire peur.

Extension du disque

Avant toute chose il faut que tu Ă©tendes la taille du disque de ta vm. Je sais pas ce que tu utilises comme hyperviseur (Xen, Virtualbox, VMWare… etc.) alors, pour cette partie dĂ©brouille-toi ! Mais note bien que si c’est un volume drbd tu devras le faire sur les deux nĹ“uds.

Comme j’utilise Virtualbox, je ne peux pas modifier les tailles de disque Ă  chaud alors je triche mais on va faire comme si ça avait Ă©tĂ© possible… Trop naze Virtualbox !

La problĂ©matique c’est qu’Ă  chaud, ton système n’a pas idĂ©e que la taille des disques Ă  changĂ©.

db1 et db2
root@db-01:~# lsblk
NAME      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda         8:0    0   20G  0 disk 
├─sda1      8:1    0  1,9G  0 part [SWAP]
└─sda2      8:2    0 18,1G  0 part /
sdb         8:16   0    5G  0 disk 
└─sdb1      8:17   0    5G  0 part 
  └─drbd0 147:0    0    5G  0 disk /opt/drbd
sr0        11:0    1 1024M  0 rom
root@db-01:~# fdisk -l | grep sdb
Disk /dev/sdb: 5 GiB, 5368709120 bytes, 10485760 sectors
/dev/sdb1        2048 10485759 10483712   5G 83 Linux

Force alors le noyau à scanner de nouveau tous les bus, cibles et, LUN "- - -", de tous les contrôleurs SCSI exposés dans /sys/class/scsi_host/.

db1 et db2
root@db-01:~# for i in /sys/class/scsi_host/host*/scan ; do echo '- - -' > $i ; done
root@db-01:~# fdisk -l | grep sdb
Disk /dev/sdb: 15 GiB, 16106127360 bytes, 31457280 sectors
/dev/sdb1        2048 10485759 10483712   5G 83 Linux

Extension de la partition

Ton disque sdb est bien de 15Go mais ta partition sdb1 ne fait toujours que 5Go. Tu peux l’Ă©tendre avec growpart, parted ou, fdisk. Je te montre avec fdisk : on casse et recréé la partoche avec le mĂŞme secteur de dĂ©part et sans modifier la signature puis, on Ă©crit les changements.

db1 et db2
root@db-01:~# fdisk /dev/sdb

Welcome to fdisk (util-linux 2.38.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

This disk is currently in use - repartitioning is probably a bad idea.
It's recommended to umount all file systems, and swapoff all swap
partitions on this disk.

Command (m for help): d

Selected partition 1
Partition 1 has been deleted.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 1
First sector (2048-31457279, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-31457279, default 31457279): 

Created a new partition 1 of type 'Linux' and of size 15 GiB.
Partition #1 contains a ext4 signature.

Do you want to remove the signature? [Y]es/[N]o: N

Command (m for help): w

The partition table has been altered.
Syncing disks.

J’ai tapĂ© explicitement les rĂ©ponses Ă  chaque fois mais tu auras compris que fdisk te prends par la main et te propose un choix par dĂ©faut alors il suffit juste de faire EntrĂ©e. ContrĂ´le ta partition et tant qu’Ă  faire ton drbd. Tout va bien !

db1 et db2
root@db-01:~# fdisk -l | grep sdb
Disk /dev/sdb: 15 GiB, 16106127360 bytes, 31457280 sectors
/dev/sdb1        2048 31457279 31455232  15G 83 Linux
root@db-01:~# cat /proc/drbd
version: 8.4.11 (api:1/proto:86-101)
srcversion: 488C1124B879DCE7CD031DA 
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:20228 nr:19760 dw:39496 dr:31377 al:19 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

Redimensionner DRBD

Passe ton nĹ“ud primaire en secondaire et redimensionne la ressource. Chez moi, elle s’appelle r0.

db1
root@db-01:~# drbdadm secondary r0
root@db-01:~# drbdadm status
r0 role:Secondary
  disk:UpToDate
  peer role:Primary
    replication:Established peer-disk:UpToDate

root@db-01:~# drbdadm resize r0
root@db-01:~#

Une resynchronisation de la ressource drbd s’est lancĂ©e Ă  la validation de resize. Une fois terminĂ©e, fais tout de mĂŞme le resize sur le second serveur et contrĂ´le que tout va bien avec drbd setup.

db2
root@db-02:~# drbdadm resize r0
root@db-02:~# drbdsetup status r0 --verbose --statistics
r0 role:Primary suspended:no
    write-ordering:flush
  volume:0 minor:0 disk:UpToDate
      size:15727100 read:10516817 written:39496 al-writes:27 bm-writes:0 upper-pending:0 lower-pending:0 al-suspended:no blocked:no
  peer connection:Connected role:Secondary congested:no
    volume:0 replication:Established peer-disk:UpToDate resync-suspended:no
        received:19760 sent:10505668 out-of-sync:0 pending:0 unacked:0

root@db-02:~# 

Tu l’as peut-ĂŞtre vu, db2 reste le nĹ“ud primaire, moi ça me dĂ©range. J’ai eu beau lui demander poliment, il a rien voulu savoir.

db1
root@db-01:~# drbdadm primary r0
0: State change failed: (-1) Multiple primaries not allowed by config
Command 'drbdsetup-84 primary 0' terminated with exit code 11

Chteuldi, je vais pas me laisser faire par un drbd Ă  la… oh pardon je m’Ă©nerve. Bref, je vais juste redĂ©marrer heartbeat sur db2 pour faire basculer ma vip et drbd.

db2
root@db-02:~# systemctl restart heartbeat
root@db-02:~# drbdsetup status r0 --verbose --statistics
r0 role:Secondary suspended:no
    write-ordering:flush
  volume:0 minor:0 disk:UpToDate
      size:15727100 read:10516817 written:58956 al-writes:27 bm-writes:0 upper-pending:0 lower-pending:0 al-suspended:no blocked:no
  peer connection:Connected role:Primary congested:no
    volume:0 replication:Established peer-disk:UpToDate resync-suspended:no
        received:39004 sent:10505884 out-of-sync:0 pending:0 unacked:0

Ca va mieux lĂ  ! Toi aussi ? Tu crois que c’est fini ? Bah non, regarde ton drbd fait toujours que 5Go banane !

db1
root@db-01:~# df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev               459M       0  459M   0% /dev
tmpfs               97M    592K   96M   1% /run
/dev/sda2           18G    2,5G   16G  14% /
tmpfs              481M     48M  434M  10% /dev/shm
tmpfs              5,0M       0  5,0M   0% /run/lock
tmpfs               97M       0   97M   0% /run/user/0
/dev/drbd0         4,9G    196M  4,4G   5% /opt/drbd

Extension du système de fichiers

Bon toi t’es un vrai barbu, tu l’savais, je t’ai dit « banane » pour rien. Mais moi, je pensais avoir terminĂ© alors que non. Ok dĂ©solĂ©, reste pour la fin de l’article.

Étends la partition avec l’outil adaptĂ© Ă  ton type de système de fichier, moi c’est de l’ext4 alors je vais utiliser resize2fs.

db1
root@db-01:~# resize2fs /dev/drbd0
resize2fs 1.47.0 (5-Feb-2023)
Filesystem at /dev/drbd0 is mounted on /opt/drbd; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/drbd0 is now 3931775 (4k) blocks long.

root@db-01:~# df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
udev               459M       0  459M   0% /dev
tmpfs               97M    592K   96M   1% /run
/dev/sda2           18G    2,5G   16G  14% /
tmpfs              481M     48M  434M  10% /dev/shm
tmpfs              5,0M       0  5,0M   0% /run/lock
tmpfs               97M       0   97M   0% /run/user/0
/dev/drbd0          15G    196M   14G   2% /opt/drbd

Tu vois c’est pas si compliquĂ© mĂŞme si la suppression de partition avec fdisk fait un peu flipper. Dans tout ça mon MySQL fonctionne toujours comme il faut.

db1 > mysql
mysql> use wordpress;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> SHOW TABLES;
+-----------------------+
| Tables_in_wordpress   |
+-----------------------+
| wp_commentmeta        |
| wp_comments           |
| wp_links              |
| wp_options            |
| wp_postmeta           |
| wp_posts              |
| wp_term_relationships |
| wp_term_taxonomy      |
| wp_termmeta           |
| wp_terms              |
| wp_usermeta           |
| wp_users              |
+-----------------------+
12 rows in set (0,00 sec)

mysql> 

Conclusion

Vu qu’on avait fait du drbd dans le laboratoire haute disponibilitĂ©, je trouvais ça cool de te montrer que mĂŞme avec ce genre de techno un peu sensible c’est parfaitement maintenable (Ă  chaud mĂŞme, si tu utilises pas Virtualbox). D’autant plus que cette mĂ©thode fonctionne très bien mĂŞme sans drbd – tu adapteras au type de stockage (LVM tout ça…) et de système de fichier (coucou XFS…).

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *