La technique de snapshot est la plus appropriée pour sauvegarder des gros volumes de données.
Pour sauvegarder par snapshot LVM, il faut :
Remarque : depuis MongoDB 3.2, les journaux peuvent ne pas être sur le même volume que les datafiles.
L'état de la sauvegarde correspond au dernier checkpoint qui se produit tous les 2 Go de données ou toutes les minutes.
Cette étape est à réaliser dans le cas où /var/lib/mongodb n'est pas encore sur un logical volume dédié. Typiquement, c'est le cas lorsque /var/lib/ongodb est monté sous /, ce qui n'est pas conseillé.
1) Créer une partition disque de type LVM pour héberger le futur volume group dédié aux données mongodb
On part d'un disque vierge. La partition doit être de type LVM (code 8e).
fdisk /dev/sdb Welcome to fdisk (util-linux 2.27.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x7f9a1370. Commande (m pour l'aide) : p Disque /dev/sdb : 10 GiB, 10737418240 octets, 20971520 secteurs Unités : sectors of 1 * 512 = 512 octets Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x7f9a1370 Commande (m pour l'aide) : n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Numéro de partition (1-4, 1 par défaut) : 1 Premier secteur (2048-20971519, 2048 par défaut) : Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, 20971519 par défaut) : Created a new partition 1 of type 'Linux' and of size 10 GiB. Commande (m pour l'aide) : t Selected partition 1 Partition type (type L to list all types): 8e Changed type of partition 'Linux' to 'Linux LVM'. Commande (m pour l'aide) : p Disque /dev/sdb : 10 GiB, 10737418240 octets, 20971520 secteurs Unités : sectors of 1 * 512 = 512 octets Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x7f9a1370 Périphérique Amorçage Start Fin Secteurs Size Id Type /dev/sdb1 2048 20971519 20969472 10G 8e LVM Linux Commande (m pour l'aide) : w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
2) Créer un physical volume
pvcreate /dev/sdb1 Physical volume "/dev/sdb1" successfully created
3) Créer un volume group
vgcreate mongodb_data /dev/sdb1 Volume group "mongodb_data" successfully created vgdisplay -s "mongodb_data" 10,00 GiB [0 used / 10,00 GiB free]
4) Créer un logical volume qui ne prend pas toute la place du vg
Il faut laisser de la place dans le vg pour le volume de snapshot.
lvcreate -L8G -n lv_mongodb_data mongodb_data Logical volume "lv_mongodb_data" created. lvdisplay mongodb_data --- Logical volume --- LV Path /dev/mongodb_data/lv_mongodb_data LV Name lv_mongodb_data VG Name mongodb_data LV UUID VKkFaH-IP3P-mwDR-TjAd-qIS5-5e2E-u5C6f4 LV Write Access read/write LV Creation host, time mongodb01, 2016-12-26 18:37:08 +0100 LV Status available # open 0 LV Size 8,00 GiB Current LE 2048 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0 vgdisplay -s "mongodb_data" 10,00 GiB [8,00 GiB used / 2,00 GiB free]
5) Créer un File System
mkfs -t xfs /dev/mongodb_data/lv_mongodb_data meta-data=/dev/mongodb_data/lv_mongodb_data isize=512 agcount=4, agsize=524288 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=0 data = bsize=4096 blocks=2097152, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =aucun extsz=4096 blocks=0, rtextents=0
6) Configurer le montage de File System de maniere permanente
On peut utiliser le nom du Logical Volume ou bien son UUID donné par la commande blkid :
# blkid /dev/sda1: UUID="aa326a29-95b4-4430-a132-118fdb5a41dd" TYPE="ext4" PARTUUID="f73d47e4-01" /dev/sda5: UUID="183c21ef-286d-45cc-9b15-15ef6b96f258" TYPE="swap" PARTUUID="f73d47e4-05" /dev/sdb1: UUID="u1z8Iq-mMCB-Du0X-XAr6-IdGY-uVSb-7lMAq2" TYPE="LVM2_member" PARTUUID="7f9a1370-01" /dev/mapper/mongodb_data-lv_mongodb_data: UUID="72339a7b-d636-4052-95a1-c32e04cdf03d" TYPE="xfs"
echo "/dev/mongodb_data/lv_mongodb_data /var/lib/mongodb xfs defaults 0 2" >> /etc/fstab options = defaults : valeurs par défaut dump = 0 : utilisé pour les sauvegardes, toujours 0 pass = 2 : 0 pour le swap, 1 pour le FS / et 2 pour les autres partitions
7) Arreter mongodb pour déplacer les fichiers
service mongod stop
8) Déplacer les fichiers vers le nouveau File System
mount /dev/mongodb_data/lv_mongodb_data /mnt df -T /mnt Sys. de fichiers Type blocs de 1K Utilisé Disponible Uti% Monté sur /dev/mapper/mongodb_data-lv_mongodb_data xfs 8378368 32960 8345408 1% /mnt mv /var/lib/mongodb/* /mnt umount /mnt mount -a df -T Sys. de fichiers Type blocs de 1K Utilisé Disponible Uti% Monté sur udev devtmpfs 1004796 0 1004796 0% /dev tmpfs tmpfs 204836 3288 201548 2% /run /dev/sda1 ext4 101015968 2145872 93715744 3% / tmpfs tmpfs 1024176 0 1024176 0% /dev/shm tmpfs tmpfs 5120 0 5120 0% /run/lock tmpfs tmpfs 1024176 0 1024176 0% /sys/fs/cgroup tmpfs tmpfs 100 0 100 0% /run/lxcfs/controllers tmpfs tmpfs 204836 0 204836 0% /run/user/1000 /dev/mapper/mongodb_data-lv_mongodb_data xfs 8378368 340504 8037864 5% /var/lib/mongodb chown mongodb:mongodb /var/lib/mongodb
9) Démarrer mongodb
service mongod start service mongod status . mongod.service - High-performance, schema-free document-oriented database Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled) Active: active (running) since lun. 2016-12-26 19:06:08 CET; 7s ago Docs: https://docs.mongodb.org/manual Main PID: 1664 (mongod) Tasks: 17 Memory: 33.1M CPU: 215ms CGroup: /system.slice/mongod.service +-1664 /usr/bin/mongod --quiet --config /etc/mongod.conf déc. 26 19:06:08 mongodb01 systemd[1]: Started High-performance, schema-free document-oriented database.
Vérifier au préalable qu'il reste de la place dans le vg mongodb_data
vgdisplay -s mongodb_data "mongodb_data" 10,00 GiB [8,00 GiB used / 2,00 GiB free]
La sauvegarde s'effectue comme suit :.
lvcreate -L2000M -s -n snap_mongodb /dev/mongodb_data/lv_mongodb_data Logical volume "snap_mongodb" created. mkdir /mnt/snap_mongodb mount /dev/mongodb_data/snap_mongodb /mnt/snap_mongodb -onouuid,ro BACKUP_DIR=/backup/mongodb/`date '+%Y%m%d'` mkdir -p $BACKUP_DIR cp -rp /mnt/snap_mongodb/* $BACKUP_DIR umount /mnt/snap_mongodb rmdir /mnt/snap_mongodb lvremove -f /dev/mongodb_data/snap_mongodb Logical volume "snap_mongodb" successfully removed
service mongod stop BACKUP_DIR=/backup/mongodb/20161226 rm -rf /var/lib/mongodb/* cp -rp $BACKUP_DIR/* /var/lib/mongodb service mongod start service mongod status . mongod.service - High-performance, schema-free document-oriented database Loaded: loaded (/lib/systemd/system/mongod.service; disabled; vendor preset: enabled) Active: active (running) since lun. 2016-12-26 19:50:05 CET; 4s ago Docs: https://docs.mongodb.org/manual Main PID: 1943 (mongod) Tasks: 17 Memory: 33.1M CPU: 651ms CGroup: /system.slice/mongod.service +-1943 /usr/bin/mongod --quiet --config /etc/mongod.conf déc. 26 19:50:05 mongodb01 systemd[1]: Started High-performance, schema-free document-oriented database.