Vo firme sme riesili potrebu zrychlit pristup k datam v databaze (MariaDB), kde sme narazili na bottle-neck pristupove doby a rychlosti citania diskov. Zvazovali sme najprv nasadenie SSD, no koli obave z ich nizsej zivotnosti padol vyber na RAMdisk.
Volba padla na brd modul. Uvodne testy ukazali, ze idem spravnym smerom:
Zapis:
------
santa@DB-server:~$ sudo dd if=/dev/zero of=/mnt/disk/aa bs=4k count=1000000
1000000+0 records in
1000000+0 records out
4096000000 bytes (4.1 GB) copied, 22.1489 s, 185 MB/s
santa@DB-server:~$ sudo dd if=/dev/zero of=/mnt/ramdisk/aa bs=4k count=1000000
1000000+0 records in
1000000+0 records out
4096000000 bytes (4.1 GB) copied, 6.75993 s, 606 MB/s
Citanie:
santa@DB-server:~$ sudo dd if=/mnt/disk/aa of=/dev/null bs=4k count=1000000
1000000+0 records in
1000000+0 records out
4096000000 bytes (4.1 GB) copied, 20.8874 s, 196 MB/s
santa@DB-server:~$ sudo dd if=/mnt/ramdisk/aa of=/dev/null bs=4k count=1000000
1000000+0 records in
1000000+0 records out
4096000000 bytes (4.1 GB) copied, 1.94548 s, 2.1 GB/s
Potreba rychleho citania dat a zaroven nutnost zabezpecit data proti vypadku ma doviedla ku kombinacii SW RAID 1 nad diskom a ramdiskom.
vytvoril som si prazdny image subor (52GB) a ten pripojil na loop5, a pre ramdisk som nastavil rovnaku velkost, 52GB. (server ma 64 GB RAM)
Nasledne som pomocou mdadm vytvoril RAID 1 zariadenie, formatol ho a pripojil.
mdadm -C /dev/md1 -n 2 -l 1 /dev/ram0 -W /dev/loop5
mkfs.ext4 /dev/md1
mount /dev/md1 /mnt/ramdisk
Vysledne casy boli viac ako uspokojive:
santa@DB-server:~# sudo dd if=/dev/zero of=/mnt/ramdisk/aa bs=4k count=1000000
1000000+0 records in
1000000+0 records out
4096000000 bytes (4.1 GB) copied, 15.3726 s, 266 MB/s
santa@DB-server:~# sudo dd if=/mnt/ramdisk/aa of=/dev/null bs=4k count=1000000
1000000+0 records in
1000000+0 records out
4096000000 bytes (4.1 GB) copied, 1.79785 s, 2.3 GB/s
Zostala uz len posledna vec, ako zabezpecit, aby po restarte servera doslo k spusteniu RAIDu a rekonstrukcii obsahu RAMdisku a revalidacii takehoto pola:
/sbin/losetup /dev/loop5 /srv/db_images/ramdisk.img
mdadm --assemble /dev/md1 /dev/loop5
mdadm --run /dev/md1
mdadm --manage /dev/md1 --add /dev/ram0
mount /dev/md1 /mnt/ramdisk
nasledne som na diskovej urovni pri vypnutom MariaDB presunul databazy, ktore som potreboval zrychlit do /mnt/ramdisk/ a vytvortil z /var/lib/mysql linky na ramdisk.
That's all...
Snad toto niekomu pomoze, ked bude potrebovat nieco podobne riesit. komplexne selekty nad takto vytvorenou databazou lietaju ako namydlene
