Mysql varundamine LVM abil: Difference between revisions

From ICO wiki
Jump to navigationJump to search
Ckallas (talk | contribs)
Ckallas (talk | contribs)
 
(25 intermediate revisions by the same user not shown)
Line 2: Line 2:
==Sissejuhatus==
==Sissejuhatus==


Antud kirjatüki eesmärgiks on tutvustada LVM-i kui abivahendit toimivast süsteemist tagavarakoopiate tegemisel. Kuigi failisüsteemi snapshotide tegemine ja nende kasutamine on ainult üks LVM-i pakutavatest võimalustest. LVM - i  snapshotide tegemise võimalus pole ainult mysql -i varundamiseks, vaid kasutatav ka muude andmete varukoopiate tegemiseks. Antud juhul on MySQL siin ainult „reisija“ aga protsessi selgitamiseks ja LVM snapshoti kasutamiseks on MySQL näitena väga hea. Kogu seadistamise protsess toimub Ubuntu Linux Server 12.04.1 LTS operatsioonisüsteemis ja kasutab sellega kaasnevaid vahendeid.
Antud kirjatüki eesmärgiks on tutvustada Logical Volume Manageri kui abivahendit toimivast süsteemist tagavarakoopiate tegemisel. Kuigi failisüsteemi snapshotide tegemine ja nende kasutamine on ainult üks LVM-i pakutavatest võimalustest. LVM - i  snapshotide tegemise võimalus pole ainult mysql -i varundamiseks, vaid kasutatav ka muude andmete varukoopiate tegemiseks. Antud juhul on MySQL siin ainult „reisija“ aga protsessi selgitamiseks ja LVM snapshoti kasutamiseks on MySQL näitena väga hea. Kogu seadistamise protsess toimub Ubuntu Linux Server 12.04.1 LTS operatsioonisüsteemis ja kasutab sellega kaasnevaid vahendeid.


==Mis on mis?==
==Mis on mis?==
Line 41: Line 41:


'''Viia kõik käsklused läbi sudo kasutaja alt'''
'''Viia kõik käsklused läbi sudo kasutaja alt'''
  sudo -i
sudo -i


===Ketaste lisamine===
===Ketaste lisamine===
Line 56: Line 56:
<pre>apt-get update
<pre>apt-get update
apt-get install lvm2</pre>
apt-get install lvm2</pre>
Olenevalt operatsioonisüsteemist võib olla vajalikud pakeid juba installeeritud, kontrollida saab nii:
Olenevalt operatsioonisüsteemist võib olla vajalikud paketid juba installeeritud, kontrollida saab nii:
<pre>lvm version</pre>
<pre>lvm version</pre>


<pre>lvm version
  LVM version:    2.02.66(2) (2010-05-20)
  Library version: 1.02.48 (2010-05-20)
  Driver version:  4.22.0
</pre>
Lisaks on vajalik installeerida MySQL server ja klientprogramm serveriga ühendumiseks.  
Lisaks on vajalik installeerida MySQL server ja klientprogramm serveriga ühendumiseks.  
<pre>apt-get install mysql-server</pre>
<pre>apt-get install mysql-server</pre>
Line 69: Line 64:


==LVM -i seadistamine==
==LVM -i seadistamine==
[[File: LVM.jpg|450px]]
 
[[File:LVM.jpg|thumb |http://linuxconfig.org/images/Lvm.jpg Pilt on pärit linuxconfig ariklist "Linux lvm - Logical Volume Manager"  |alt=LVM alt text]]
 


LVM ise jaguneb kolmeks eri kihiks: plokkseadmed (PV), kettagrupid (VG), millesse on organiseeritud füüsilised plokkseadmed ja loogilised kettajaod, mis on jagatud kettagrupid.  
LVM ise jaguneb kolmeks eri kihiks: plokkseadmed (PV), kettagrupid (VG), millesse on organiseeritud füüsilised plokkseadmed ja loogilised kettajaod, mis on jagatud kettagrupid.  
Line 76: Line 73:
Esimese asjana tuleb valida ketas/kettajagu, kus LVM-iga toimetama hakata. Uue ketta puhul oleks võimalusel mõtekas luua üks tervet ketast hõlmav partitsioon.  
Esimese asjana tuleb valida ketas/kettajagu, kus LVM-iga toimetama hakata. Uue ketta puhul oleks võimalusel mõtekas luua üks tervet ketast hõlmav partitsioon.  


Näites on kasutatud ühte 4 GB suurust ketast (VirtualBox-i lisatud 4GB suurune virtuualne kõvaketas). Operatsioonisüsteem tunnistab seda kui /dev/sdb ja seega on näites kasutatavad ketta nimed/asukohad just sellised. Partitiooni tüübiks tuleb kindlasti määrata Linux LVM ehk kood „8e“
Operatsioonisüsteem tunnistab näites kasutatavat uut ketast kui /dev/sdb ja seega on näites kasutatavad ketta nimed/asukohad just sellised.  


<pre>fdisk -l 2> /dev/null | grep Disk
Kõikide olemasolevate partitsioonide kuvamine:
Disk /dev/sda: 8589 MB, 8589934592 bytes
<pre>fdisk -l</pre>
 
(Kindla partitsiooni vaatamiseks lisada käsu lõppu see partitsioon:)
<pre>fdisk -l /dev/sda</pre>
 
<pre>fdisk -l 2> /dev/null | grep Disk</pre>
Tulemus:
<pre> Disk /dev/sda: 8589 MB, 8589934592 bytes
  Disk identifier: 0x000bd8b1
  Disk identifier: 0x000bd8b1
  Disk /dev/sdb: 4294 MB, 4294967296 bytes
  Disk /dev/sdb: 4294 MB, 4294967296 bytes
Line 125: Line 129:


===Füüsiline kettajagu===
===Füüsiline kettajagu===
Järgnevalt anname lvm-ile teada, et loodud partitsioon on  „pv“ ehk physical volume.  
Järgnevalt anname lvm-ile teada, et loodud partitsioon (/dev/sdb1) on  „pv“ ehk physical volume.  
{|style="background:lightyellow;width:500px;margin:3px;border:1px solid lightgrey" align=centre
| style="padding:0px 0px 0px 80px;font-family:courier;font-size:8pt;" |pvcreate disk1 disk2 disk3
|}


<pre>pvcreate /dev/sdb1
<pre>pvcreate /dev/sdb1</pre>
  Physical volume "/dev/sdb1" successfully created</pre>


Kui kõik läks hästi siis peaks tulemus olemas selline:
Kui kõik läks hästi siis display käsk peaks kuvama sellise tulemuse:
<pre>pvdisplay
<pre>pvdisplay</pre>
  "/dev/sdb1" is a new physical volume of "4.00 GiB"
Tulemus:
<pre>"/dev/sdb1" is a new physical volume of "4.00 GiB"
   --- NEW Physical volume ---
   --- NEW Physical volume ---
   PV Name              /dev/sdb1
   PV Name              /dev/sdb1
Line 149: Line 150:
===Kettagrupp===
===Kettagrupp===
Loome uue „volume group“ -i ja nimetame selle mysql -iks.  
Loome uue „volume group“ -i ja nimetame selle mysql -iks.  
{|style="background:lightyellow;width:500px;margin:3px;border:1px solid lightgrey" align=centre
| style="padding:0px 0px 0px 80px;font-family:courier;font-size:8pt;" |vgcreate kettagrupi_nimi /dev/sdb1 /dev/sdc1 /dev/sdd1
|}


<pre>vgcreate mysql /dev/sdb1
<pre>vgcreate mysql /dev/sdb1</pre>
  Volume group "mysql" successfully created</pre>


<pre>vgdisplay  
Display käsu tulemus peaks olema sarnane:
  --- Volume group ---
<pre>vgdisplay</pre>
Tulemus:
<pre>  --- Volume group ---
   VG Name              mysql
   VG Name              mysql
   System ID
   System ID
Line 178: Line 177:
   VG UUID              s5AjT8-ss7D-Gm9m-XY6j-ULMv-RLbR-xdy0K6</pre>  
   VG UUID              s5AjT8-ss7D-Gm9m-XY6j-ULMv-RLbR-xdy0K6</pre>  


Järgnevalt saame luua „volume group“ -ile „logical volumes“ ehk loogilised kettajaod. Need on justkui partitsioonid füüsilisel kõvakettal ja neid saab juba andmete talletamiseks kasutada. Nimetame kettajao nimega data ja määrame tema suuruseks 1GB (antud suurus sobib väga hästi katsetamiseks aga reaalsetes süsteemides tuleb muidugi oluliselt suuremaid numbreid kasutada. ). Suuruse seadistamisel tuleb arvestada, et sama „volume group“ peale tuleb mahutada veel vähemalt üks sama suur loogiline kettajagu, mis on loodava LV snapshot. Näide kui VG suurus on kokku 10GB siis on võimalik teha maksimaalselt 5GB suurune loogiline kettajagu. Vastasel ei mahu tema kõrvale, samale VG-le tehtud LV snapshot.  
Järgnevalt saame luua „volume group“ -ile „logical volumes“ ehk loogilised kettajaod. Need on justkui partitsioonid füüsilisel kõvakettal ja neid saab juba andmete talletamiseks kasutada. Nimetame kettajao nimega data ja määrame tema suuruseks 1GB (antud suurus sobib väga hästi katsetamiseks aga reaalsetes süsteemides tuleb muidugi oluliselt suuremaid numbreid kasutada. ). Suuruse seadistamisel tuleb arvestada, et sama „volume group“ peale tuleb mahutada veel vähemalt üks sama suur loogiline kettajagu, mis on loodava LV snapshot. Näide kui VG suurus on kokku 10GB siis on võimalik teha maksimaalselt 5GB suurune loogiline kettajagu. Vastasel ei mahu tema kõrvale, samale VG-le tehtud LV snapshot.


===Loogiline kettajagu===
===Loogiline kettajagu===
{|style="background:lightyellow;width:600px;margin:3px;border:1px solid lightgrey" align=centre
Data nimelise 1GB loogilise kettajao loomine:  
| style="padding:0px 0px 0px 80px;font-family:courier;font-size:8pt;" |lvcreate --size 1G --name loogilise_ketta_nimi kettagrupi_nimi
<pre>lvcreate -n data -L 1GB mysql</pre>
|}
 
<pre>lvcreate -n data -L 1GB mysql
  Logical volume "data" created</pre>


Kontrollime tulemust:
Kontrollime tulemust:
<pre>lvdisplay
<pre>lvdisplay</pre>
  --- Logical volume ---
Tulemus:
<pre>  --- Logical volume ---
   LV Name                /dev/mysql/data
   LV Name                /dev/mysql/data
   VG Name                mysql
   VG Name                mysql
Line 204: Line 200:
   - currently set to    256
   - currently set to    256
   Block device          252:0</pre>
   Block device          252:0</pre>


<b>Teadmiseks:</b> lvdisplay käsu käivitamisel on näha parameeter „LV Status“. See näitab, kas kettajagu on saadaval või mitte. Kasutada on võimalik ainult available olekus kettajagu. Eemaldada saab ainult NOT available olekus kettajagusid. Kettajao NOT available olekusse viimiseks saab kasutada käsku:  
<b>Teadmiseks:</b> lvdisplay käsu käivitamisel on näha parameeter „LV Status“. See näitab, kas kettajagu on saadaval või mitte. Kasutada on võimalik ainult available olekus kettajagu. Eemaldada saab ainult NOT available olekus kettajagusid. Kettajao NOT available olekusse viimiseks saab kasutada käsku:  
Line 233: Line 228:


Nüüd tuleb olemasolev mysql data kaust liigutada /srv/mysql kausta. Esimese asjana peatada mysql server
Nüüd tuleb olemasolev mysql data kaust liigutada /srv/mysql kausta. Esimese asjana peatada mysql server
<pre>service mysql stop
<pre>service mysql stop</pre>
mysql stop/waiting</pre>


Kopeerime (!) kogu mysql-i data kausta loodud lvm kettajaole. Ubuntus (ilmselt ka paljudes teistes operatsioonisüsteemides) asub mysq-i data kaust /var/lib/mysql. Oleks vägagi soovitatav jätta andmed vanasse kausta alles ja kustuta see alles siis kui ollakse täiesti kindel, et server töötab tõrgeteta.
Kopeerime (!) kogu mysql-i data kausta loodud lvm kettajaole. Ubuntus (ilmselt ka paljudes teistes operatsioonisüsteemides) asub mysq-i data kaust /var/lib/mysql. Oleks vägagi soovitatav jätta andmed vanasse kausta alles ja kustuta see alles siis kui ollakse täiesti kindel, et server töötab tõrgeteta.
Line 245: Line 239:
<pre>/var/lib/mysql/ r, -> /srv/mysql r,
<pre>/var/lib/mysql/ r, -> /srv/mysql r,
/var/lib/mysql/** rwk, -> /srv/mysql** rwk,</pre>
/var/lib/mysql/** rwk, -> /srv/mysql** rwk,</pre>
Seejärel on vaja teha AppArmorile restart
<pre>service apparmor restart</pre>


Osadel operatsioonisüsteemidel võib ka init skript ette anda, kus asub mysql-i datadir. Seega oleks mõistlik ka see '''/etc/init.d/mysql''' skriptist üle vaadata.
Osadel operatsioonisüsteemidel võib ka init skript ette anda, kus asub mysql-i datadir. Seega oleks mõistlik ka see '''/etc/init.d/mysql''' skriptist üle vaadata.


Käivitame uuesti mysql-i serveri. Kui kõik läks hästi, peaks olema tulemus sarnane:
Käivitame uuesti mysql-i serveri:


<pre>service mysql start
<pre>service mysql start</pre>
mysql start/running, process 2588</pre>


Kontrollime mysql-i muutujaid:
Kontrollime mysql-i muutujaid:
<pre>mysqladmin -u{mysql-kasutaja} -p variables | grep datadir
<pre>mysqladmin -u [mysql-kasutaja] -p variables | grep datadir</pre>
Enter password: {mysql-parool}
<pre>Enter password: [mysql-parool]
| datadir                                          | /srv/mysql/  
| datadir                                          | /srv/mysql/  
</pre>
</pre>
Lisaks tuleks sobiva mysql kliendiga serverisse sisse logida ja kontrollida üle, kas kõik jäi korrektselt tööle.
Lisaks tuleks sobiva mysql kliendiga serverisse sisse logida ja kontrollida üle, kas kõik jäi korrektselt tööle.


Nüüd, kui MySQL server on korrektselt töödanud ja tekib vajadus varukoopiate tegemiseks. Töötavast serverist snapshoti tegemisel pole vajalik eelnev serveri väljalülitama. Lihtsalt protseduuri ajaks oleks vajalik keelata ära andmete kirjutamine „FLUSH TABLES WITH READ LOCK;“ käsuga, lisaks võiks tühjendada ka logid „FLUSH LOGS;“ käsuga. Snapshoti tegemise protsess on äärmiselt kiire ja andmete lugemine andmebaasist toimib endiselt edasi. Samas andmete kirjutamise protsess viibib seni, kui andmebaasilt kirjutamise lukk maha võetakse (kõik kirjutamise käsud täidetakse kohe peale luku vabastamist).  
Nüüd, kui MySQL server on korrektselt tööle hakanud ja tekib vajadus varukoopiate tegemiseks. Töötavast serverist snapshoti tegemisel pole vajalik eelnev serveri väljalülitamine. Snapshoti tegemise protsess on äärmiselt kiire ja andmete lugemine andmebaasist toimib endiselt edasi. Samas andmete kirjutamise protsess viibib seni kuni andmebaasilt kirjutamise lukk maha võetakse (kõik kirjutamise käsud täidetakse kohe peale luku vabastamist).  
Ehkki varukoopia tegemise protsess ei tekita katkestusi serveri töös, oleks hea mõte teha varukoopiaid sellisel ajal kui serveril on kõige väiksem koormus.  
Ehkki varukoopia tegemise protsess ei tekita katkestusi serveri töös, oleks hea mõte teha varukoopiaid sellisel ajal kui serveril on kõige väiksem koormus.  
On vajalik teada, et andmebaas lukustatakse ainult selleks ajaks, kui mysql serverisse on sisse logitud. Kohe kui sessioon lõpetatakse, vabastatakse ka lukud. Seetõttu peab snaspshoti tegemise ajal olema serverisse sisse logitud. Variant on kasutada kahte terminali sessiooni aga vajalikke käske saab käivitada ka MySQL-i käsurealt (vajalik on mysql-i klient käivitada root kasutaja õigustes).  
On vajalik teada, et andmebaas lukustatakse ainult selleks ajaks, kui mysql serverisse on sisse logitud. Kohe kui sessioon lõpetatakse, vabastatakse ka lukud. Seetõttu peab snaspshoti tegemise ajal olema serverisse sisse logitud. Variant on kasutada kahte terminali sessiooni aga vajalikke käske saab käivitada ka MySQL-i käsurealt (vajalik on mysql-i klient käivitada root kasutaja õigustes).  
<pre>mysql -u root -p
<pre>mysql -u [root] -p
Enter password:  
Enter password:</pre>
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 75
Server version: 5.5.28-0ubuntu0.12.04.2 (Ubuntu)


Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
Protseduuri ajaks on vajalik keelata ära andmete kirjutamine:
<pre>mysql> FLUSH TABLES WITH READ LOCK;</pre>
<pre>Query OK, 0 rows affected (0.00 sec)</pre>
Lisaks võiks tühjendada ka logid:
<pre>mysql> FLUSH LOGS;</pre>
<pre>Query OK, 0 rows affected (0.00 sec)</pre>


Oracle is a registered trademark of Oracle Corporation and/or its
==Tõmmise tegemine==
affiliates. Other names may be trademarks of their respective
/sbin on standardne juurkataloogi alamkataloog Linuxis ja teistes Unix-taolistes operatsioonisüsteemides, mis sisaldab käivitamisvõimelisi programme. Seda on vaja, et saaks kasutada süsteemisiseseid faile.  
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> FLUSH TABLES WITH READ LOCK;
<pre>mysql> SYSTEM /sbin/lvcreate -L 1G --snapshot -n sql_backup /dev/mysql/data</pre>
Query OK, 0 rows affected (0.00 sec)
<pre>File descriptor 3 (socket:[15065]) leaked on lvcreate invocation. Parent PID 3514: sh
 
  Logical volume "sql_backup" created</pre>
mysql> FLUSH LOGS;
Query OK, 0 rows affected (0.00 sec)
</pre>


==Tõmmise tegemine==
Tabelite lukust vabastamine.
<pre>
<pre>mysql> UNLOCK TABLES;</pre>
mysql> SYSTEM /sbin/lvcreate -L 1G --snapshot -n sql_backup /dev/mysql/data
<pre>Query OK, 0 rows affected (0.01 sec)</pre>
File descriptor 3 (socket:[15065]) leaked on lvcreate invocation. Parent PID 3514: sh
  Logical volume "sql_backup" created
mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.01 sec)


mysql> exit
<pre>mysql> exit
Bye
Bye
</pre>
</pre>
Snapshoti kettajagu nimetati kui  sql_backup ja viide loogilisele seadmele asub /dev/mysql/sql_backup. Käivitades käsu „lvs“, saab näha, et lisaks mysql/data LV-le on juurde tekkinud mysql/sql_backup
Snapshoti kettajagu nimetati kui  sql_backup ja viide loogilisele seadmele asub /dev/mysql/sql_backup. Käivitades käsu „lvs“, saab näha, et lisaks mysql/data LV-le on juurde tekkinud mysql/sql_backup
<pre>lvs
<pre>lvs</pre>
  LV        VG    Attr  LSize Origin Snap%  Move Log Copy%  Convert
Tulemus:
  data      mysql owi-ao 1.00g                                       
<pre>LV        VG    Attr  LSize Origin Snap%  Move Log Copy%  Convert
  sql_backup mysql swi-a- 1.00g data    0.00   
data      mysql owi-ao 1.00g                                       
sql_backup mysql swi-a- 1.00g data    0.00   
</pre>
</pre>
Kui nüüd haakida tehtud snapshoti kettajagu, on seal kättesaadav kogu mysql-i data sellel hetkel, kui snapshot tehti.
Kui nüüd haakida tehtud snapshoti kettajagu, on seal kättesaadav kogu mysql-i data sellel hetkel, kui snapshot tehti.
<pre>mkdir /mnt/bk
<pre>mkdir /mnt/bk
mount /dev/mysql/sql_backup /mnt/bk
mount /dev/mysql/sql_backup /mnt/bk
ls -la /mnt/bk
ls -la /mnt/bk</pre>
total 28720
Tulemus:
<pre>total 28720
drwx------ 8 mysql mysql    4096 Dec 12 15:59 .
drwx------ 8 mysql mysql    4096 Dec 12 15:59 .
drwxr-xr-x 3 root  root      4096 Dec 12 16:34 ..
drwxr-xr-x 3 root  root      4096 Dec 12 16:34 ..
Line 321: Line 311:
</pre>
</pre>
MySQL-i server töötab peale snapshoti tegemist katkestusteta edasi. Tehtud snapshoti andmeid võib varundada arhiivi jaoks.  Andmete  varundamisel tuleb spashoti kettajagu failisüsteemi külge haakida ja selle sisu „tar“-i abil arhiveerida ja hiljem eemaldada snapshoti kettajagu
MySQL-i server töötab peale snapshoti tegemist katkestusteta edasi. Tehtud snapshoti andmeid võib varundada arhiivi jaoks.  Andmete  varundamisel tuleb spashoti kettajagu failisüsteemi külge haakida ja selle sisu „tar“-i abil arhiveerida ja hiljem eemaldada snapshoti kettajagu
<pre>mkdir /mnt/bk
 
mount /dev/mysql/sql_backup /mnt/bk
<pre>mkdir -p /var/teekond/arhiivi
tar -cjf  /teekond/arhiivi/kuupäev.tar.bz2 -C /mnt bk
tar -cjf  [/var/teekond/arhiivi/][kuupäev].tar.bz2 -C /mnt/bk
umount /dev/mysql/sql_backup
umount /dev/mysql/sql_backup
lvremove /dev/mysql/sql_backup
lvremove /dev/mysql/sql_backup
Line 329: Line 319:
   Logical volume "sql_backup" successfully removed
   Logical volume "sql_backup" successfully removed
</pre>
</pre>
UUS:
 
<pre>mkdir -p /var/teekond/arhiivi
Tulemuseks nüüd loogilise kettajao vaatamisele on:
tar -cjf  var/teekond/arhiivi/kuupäev.tar.bz2 -C /mnt bk
<pre>lvdisplay</pre>
umount /dev/mysql/sql_backup
Tulemus:
lvremove /dev/mysql/sql_backup
<pre> --- Logical volume ---
Do you really want to remove active logical volume sql_backup? [y/n]: Y
  LV Name                /dev/mysql/data
   Logical volume "sql_backup" successfully removed
  VG Name                mysql
  LV UUID                ZIMxmO-kUQR-u4gD-Wk9m-0MCK-kqwx-1kMaVP
  LV Write Access        read/write
  LV snapshot status    source of
                        /dev/mysql/sql_backup [active]
  LV Status              available
  # open                1
  LV Size                1.00 GiB
  Current LE            256
  Segments              1
  Allocation            inherit
  Read ahead sectors    auto
  - currently set to    256
  Block device          252:1
 
  --- Logical volume ---
  LV Name                /dev/mysql/sql_backup
  VG Name                mysql
  LV UUID                XMqxEq-yRhp-u8lf-mZ9U-1R2F-fBlf-5hoEeR
  LV Write Access        read/write
  LV snapshot status    active destination for /dev/mysql/data
  LV Status              available
  # open                0
  LV Size                1.00 GiB
  Current LE            256
  COW-table size        1.00 GiB
  COW-table LE          256
  Allocated to snapshot  0.02%
  Snapshot chunk size    4.00 KiB
  Segments              1
  Allocation            inherit
  Read ahead sectors    auto
  - currently set to     256
  Block device          252:3                 
</pre>
 
'''Kuna tõmmis kasvab koos originaalkettajaoga on tähtis jälgida, et tõmmis protsentuaalselt täis ei saaks. Regulaarselt tuleb mahtuvust kontrollida lvs käsuga. 100% täitunud tõmmisele ei saa enam juurde kirjutada ning sellega andmeterviklikkus rikutakse ära!'''
 
<pre>lvs</pre>
Tulemus:
<pre>  LV        VG    Attr  LSize Origin Snap%  Move Log Copy%  Convert
  data      mysql owi-ao 1.00g                                     
   sql_backup mysql swi-a- 1.00g data    0.02                       
</pre>
</pre>
Kogu protseduuri automatiseerimiseks on võimalik koostada ka skript, mida saab käivitada sobival aja või kasutades „cron“ ajastamise vahendeid.
Kogu protseduuri automatiseerimiseks on võimalik koostada ka skript, mida saab käivitada sobival aja või kasutades „cron“ ajastamise vahendeid.


Line 370: Line 403:
Aine: Linuxi administreerimine
Aine: Linuxi administreerimine


Viimati muudetud: 13.01.2013
Muutmine lõpetatud: 13.01.2013

Latest revision as of 18:52, 14 January 2013

Sissejuhatus

Antud kirjatüki eesmärgiks on tutvustada Logical Volume Manageri kui abivahendit toimivast süsteemist tagavarakoopiate tegemisel. Kuigi failisüsteemi snapshotide tegemine ja nende kasutamine on ainult üks LVM-i pakutavatest võimalustest. LVM - i snapshotide tegemise võimalus pole ainult mysql -i varundamiseks, vaid kasutatav ka muude andmete varukoopiate tegemiseks. Antud juhul on MySQL siin ainult „reisija“ aga protsessi selgitamiseks ja LVM snapshoti kasutamiseks on MySQL näitena väga hea. Kogu seadistamise protsess toimub Ubuntu Linux Server 12.04.1 LTS operatsioonisüsteemis ja kasutab sellega kaasnevaid vahendeid.

Mis on mis?

Logical Volume Manager - LVM

Physical Volume - PV, plokkseade, füüsiline kettajagu

Volume Group - VG, kettagrupp

Logical Volume - LV, loogiline kettajagu

Snapshot - (hetk)tõmmis

LVM

LVM ehk „Logical Volume Manager“ on ketta partitsioonide haldusvahend Linuxi ja UNIX-i laadsete operatsioonisüsteemide juures. LVM moodustab vahekihi failisüsteemi ja füüsilise kõvaketta vahele. Esmapilgul võib tunduda, et LVM on sarnane RAID (Redundant Array of Independent Disks) kettamassiiviga, on ta siiski hoopis paindlikum viis kettajagudega toimetamiseks. RAID võimaldab kettaid omavahel liita, et saada paremaid tulemusi kiiruses, mahus või töökindluses. LVM seevastu võimaldab korraga hallata mitut (ka loogilist) kettajagu, neid vastavalt vajadusele ümber tõsta ja mahtu muuta. Seega on tihti hea mõte neid kahte hoopis koos kasutada (näiteks RAID 10 ja LVM). Lihtsustatult oleks ettekujutus eri kihtide tasemetest selline:

  • Failisüsteemid
  • LVM
  • RAID (vajadusel)
  • füüsilised plokkmäluseadmed (kõvakettad)

Omadused

LVM pakutavad võimalused on:

  • Failisüsteemi suuruse muutmine
  • Failisüsteemi snapshotide tegemine ja kasutamine (nii read-only kui ka read-write)
  • Loodud/muudetud partitsioonide kohene kasutamine, kui ketas/partitsioon on mingil moel kasutusel. Fdisk-i kasutamisel tuleb OP-süsteem taaskäivitada.
  • Väiksemate füüsiliste plokkseadmete kokku ühendamine, üheks suureks loogiliseks seadmeks. (Nagu RAID)
  • Ketaste liigutamine ja ühendamine üle võrgu

Lisainfot LVM-i kohta: http://en.wikipedia.org/wiki/Logical_Volume_Manager_(Linux)

MySQL

MySQL on Oracle Corporation poolt hallatav relatsioonilise andmebaasi haldamise süsteem. On äärmiselt populaarne andmebaasisüsteem erinevates veebirakendustes aga ka mõningates suuremates süsteemides. Oma populaarsuse on ta saanud tänu äärmiselt lihtsale hallatavusele ja kasutajasõbralikkusele. Hetkel ei hakka MySQL-i omadustel ja võimalustel pikemalt peatuma. Rohkem informatsiooni leiab: http://www.mysql.com/

Eeldused

  • Installeeritud Ubuntu Server (vähemalt 12.04 versioon)
  • Tutvutud kettajagudega (kiire kordamine näiteks Osadmin spikker)

Viia kõik käsklused läbi sudo kasutaja alt

sudo -i

Ketaste lisamine

Kõigepealt on vaja lisada serverile kõvaketas, mida hiljem LVM-iga siduma hakata.

Luua uus 4GB ketas, mis on VirtualBox Disk Image (VDI) formaadis ning dünaamiliselt jagatud.

Vajaliku tarkvara installeerimine

Et LVM-i ja MySQL-i seadistada on vajalikud teadmised, kuidas toimub Linuxis ketaste ja partitisoonide haldamine ja baasteadmised MySQL-ist. Kõigepealt on vajalik installeerida lvm2 nimeline pakett, eelnevalt uuendada tarkvaravaramu nimekirja.

apt-get update
apt-get install lvm2

Olenevalt operatsioonisüsteemist võib olla vajalikud paketid juba installeeritud, kontrollida saab nii:

lvm version

Lisaks on vajalik installeerida MySQL server ja klientprogramm serveriga ühendumiseks.

apt-get install mysql-server

NB! Kuna LVM-i kasutuselevõtmine vajab mõningast MySQL-i ümberseadistamist, tuleb arvestada asjaoluga, et MySQL-i data kausta ümbertõstmisel ei pruugi olemasolevad andmed säilida (InnoDB) ja vajalik oleks serveris olevatest andmetest enne .sql kujul tagavarakoopia teha.

LVM -i seadistamine

LVM alt text
http://linuxconfig.org/images/Lvm.jpg Pilt on pärit linuxconfig ariklist "Linux lvm - Logical Volume Manager"


LVM ise jaguneb kolmeks eri kihiks: plokkseadmed (PV), kettagrupid (VG), millesse on organiseeritud füüsilised plokkseadmed ja loogilised kettajaod, mis on jagatud kettagrupid. Iga kihiga toimetamisel on oma käsud, mis viitavad sellele, mis kihiga hetkel toimetatakse: pv*, vg* ning lv*. Näiteks pvcreate, vgcreate ja lvcreate.

Esimese asjana tuleb valida ketas/kettajagu, kus LVM-iga toimetama hakata. Uue ketta puhul oleks võimalusel mõtekas luua üks tervet ketast hõlmav partitsioon.

Operatsioonisüsteem tunnistab näites kasutatavat uut ketast kui /dev/sdb ja seega on näites kasutatavad ketta nimed/asukohad just sellised.

Kõikide olemasolevate partitsioonide kuvamine:

fdisk -l

(Kindla partitsiooni vaatamiseks lisada käsu lõppu see partitsioon:)

fdisk -l /dev/sda
fdisk -l 2> /dev/null | grep Disk

Tulemus:

 Disk /dev/sda: 8589 MB, 8589934592 bytes
 Disk identifier: 0x000bd8b1
 Disk /dev/sdb: 4294 MB, 4294967296 bytes
 Disk identifier: 0x11844f48

Füüsilise ketta väärtuse muutmine

Avada fdiskiga uue loodud ketta partitsioon ning luua uus primaarne kettajagu:

fdisk /dev/sdb
  Command (m for help): n   
  
  Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended

 Select (default p): p

 Partition number (1-4, default 1): 1 

 First sector (2048-8388607, default 2048): 
 Using default value 2048

 Last sector, +sectors or +size{K,M,G} (2048-8388607, default 8388607): 
 Using default value 8388607

Print käskluse abil kuvatakse kettajagu, algus, lõpp, blokid, id ning süsteem. Loodud partitsioon on 83 ehk Linux. Partitsiooni süsteemse id muutmiseks kasutatakse t.

Käsklus L kuvab kõik kaheksandikkoodid . Linux LVM kood on 8e, et muuta kettajagu Linux LVM-iks on vaja muuta kettajao id 83-lt 8e-ks.

 Command (m for help): t
 Selected partition 1

 Hex code (type L to list codes): 8e
 Changed system type of partition 1 to 8e (Linux LVM) 

 Command (m for help): w
 The partition table has been altered!

 Calling ioctl() to re-read partition table.
 Syncing disks.

NB mitte väljuda q, mis väljub programmist muudatusi salvestamata!

Füüsiline kettajagu

Järgnevalt anname lvm-ile teada, et loodud partitsioon (/dev/sdb1) on „pv“ ehk physical volume.

pvcreate /dev/sdb1

Kui kõik läks hästi siis display käsk peaks kuvama sellise tulemuse:

pvdisplay

Tulemus:

"/dev/sdb1" is a new physical volume of "4.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb1
  VG Name               
  PV Size               4.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               EdmaX9-bXmQ-Oevp-p9W9-I2qY-gpMM-1w77aQ

Kettagrupp

Loome uue „volume group“ -i ja nimetame selle mysql -iks.

vgcreate mysql /dev/sdb1

Display käsu tulemus peaks olema sarnane:

vgdisplay

Tulemus:

  --- Volume group ---
  VG Name               mysql
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  4
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               4.00 GiB
  PE Size               4.00 MiB
  Total PE              1023
  Alloc PE / Size       512 / 2.00 GiB
  Free  PE / Size       511 / 2.00 GiB
  VG UUID               s5AjT8-ss7D-Gm9m-XY6j-ULMv-RLbR-xdy0K6

Järgnevalt saame luua „volume group“ -ile „logical volumes“ ehk loogilised kettajaod. Need on justkui partitsioonid füüsilisel kõvakettal ja neid saab juba andmete talletamiseks kasutada. Nimetame kettajao nimega data ja määrame tema suuruseks 1GB (antud suurus sobib väga hästi katsetamiseks aga reaalsetes süsteemides tuleb muidugi oluliselt suuremaid numbreid kasutada. ). Suuruse seadistamisel tuleb arvestada, et sama „volume group“ peale tuleb mahutada veel vähemalt üks sama suur loogiline kettajagu, mis on loodava LV snapshot. Näide kui VG suurus on kokku 10GB siis on võimalik teha maksimaalselt 5GB suurune loogiline kettajagu. Vastasel ei mahu tema kõrvale, samale VG-le tehtud LV snapshot.

Loogiline kettajagu

Data nimelise 1GB loogilise kettajao loomine:

lvcreate -n data -L 1GB mysql

Kontrollime tulemust:

lvdisplay

Tulemus:

  --- Logical volume ---
  LV Name                /dev/mysql/data
  VG Name                mysql
  LV UUID                SL0yWI-Mc2b-KhkE-V8P1-bW7E-3iL8-8zD6Uf
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                1.00 GiB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:0

Teadmiseks: lvdisplay käsu käivitamisel on näha parameeter „LV Status“. See näitab, kas kettajagu on saadaval või mitte. Kasutada on võimalik ainult available olekus kettajagu. Eemaldada saab ainult NOT available olekus kettajagusid. Kettajao NOT available olekusse viimiseks saab kasutada käsku:

lvchange -a n /dev/mysql/data

ja tagasi:

lvchange -a y /dev/mysql/data

Failisüsteemi loomine ja ühendamine

Nüüd on loodud uus kettajagu, mida saab andmete säiltamiseks kasutada. Loome sellele kettajaole failisüsteemi:

mkfs -t ext4 /dev/mysql/data

Järgmisena tuleb loodud kettajagu kuhugile mountida. Mina teen sellejaoks /srv/mysql kausta ja haagin ketta sinna.

mkdir /srv/mysql
mount /dev/mysql/data /srv/mysql

Lisame /etc/fstab faili lõppu kirje, et ka järgmisel süsteemi käivitamisel oleks ketas kohe külgehaagitud

<file system>     <mount point>     <type> <options> <dump> <pass>
/dev/mysql/data	  /srv/mysql	    ext4   defaults  0	    0

MySQL seadistamine

Muudame kausta õigused mysql-ile sobivaks (kausta omanik on kasutaja mysql ja kaustale on ligipääs ainult kausta omanikul)

chown mysql:mysql /srv/mysql
chmod 0700 /srv/mysql

Nüüd tuleb olemasolev mysql data kaust liigutada /srv/mysql kausta. Esimese asjana peatada mysql server

service mysql stop

Kopeerime (!) kogu mysql-i data kausta loodud lvm kettajaole. Ubuntus (ilmselt ka paljudes teistes operatsioonisüsteemides) asub mysq-i data kaust /var/lib/mysql. Oleks vägagi soovitatav jätta andmed vanasse kausta alles ja kustuta see alles siis kui ollakse täiesti kindel, et server töötab tõrgeteta.

cp -ar  /var/lib/mysql/. /srv/mysql

Seejärel tuleb mysql-i konfiguratsioonifailis (/etc/mysql/my.cnf) muuta ära „datadir“ parameeter

datadir  = /var/lib/mysql -> datadir = /srv/mysql

Teadmiseks: alates Ubuntu 7.10 -st on operatsioonisüsteemiga kaasas programm nimega „AppArmor“ (Loe lähemalt: https://wiki.itcollege.ee/index.php/AppArmor). Tegemist on kerneli turvamooduliga, mis teatavate programmide puhul piirab nende ligipääsu failisüsteemile. Et MySQL server uuesti korrektselt käivituks, tuleb „AppArmor“ -is mysq-i seadistust muuta. Sobiva tekstieditoriga tuleb avada '/etc/apparmor.d/usr.sbin.mysqld konfifail ja teha seal vajalikud muudatused :

/var/lib/mysql/ r, 		-> /srv/mysql r,
/var/lib/mysql/** rwk,	-> /srv/mysql** rwk,

Seejärel on vaja teha AppArmorile restart

service apparmor restart

Osadel operatsioonisüsteemidel võib ka init skript ette anda, kus asub mysql-i datadir. Seega oleks mõistlik ka see /etc/init.d/mysql skriptist üle vaadata.

Käivitame uuesti mysql-i serveri:

service mysql start

Kontrollime mysql-i muutujaid:

mysqladmin -u [mysql-kasutaja] -p variables | grep datadir
Enter password: [mysql-parool]
| datadir                                           | /srv/mysql/ 

Lisaks tuleks sobiva mysql kliendiga serverisse sisse logida ja kontrollida üle, kas kõik jäi korrektselt tööle.

Nüüd, kui MySQL server on korrektselt tööle hakanud ja tekib vajadus varukoopiate tegemiseks. Töötavast serverist snapshoti tegemisel pole vajalik eelnev serveri väljalülitamine. Snapshoti tegemise protsess on äärmiselt kiire ja andmete lugemine andmebaasist toimib endiselt edasi. Samas andmete kirjutamise protsess viibib seni kuni andmebaasilt kirjutamise lukk maha võetakse (kõik kirjutamise käsud täidetakse kohe peale luku vabastamist). Ehkki varukoopia tegemise protsess ei tekita katkestusi serveri töös, oleks hea mõte teha varukoopiaid sellisel ajal kui serveril on kõige väiksem koormus. On vajalik teada, et andmebaas lukustatakse ainult selleks ajaks, kui mysql serverisse on sisse logitud. Kohe kui sessioon lõpetatakse, vabastatakse ka lukud. Seetõttu peab snaspshoti tegemise ajal olema serverisse sisse logitud. Variant on kasutada kahte terminali sessiooni aga vajalikke käske saab käivitada ka MySQL-i käsurealt (vajalik on mysql-i klient käivitada root kasutaja õigustes).

mysql -u [root] -p
Enter password:

Protseduuri ajaks on vajalik keelata ära andmete kirjutamine:

mysql> FLUSH TABLES WITH READ LOCK;
Query OK, 0 rows affected (0.00 sec)

Lisaks võiks tühjendada ka logid:

mysql> FLUSH LOGS;
Query OK, 0 rows affected (0.00 sec)

Tõmmise tegemine

/sbin on standardne juurkataloogi alamkataloog Linuxis ja teistes Unix-taolistes operatsioonisüsteemides, mis sisaldab käivitamisvõimelisi programme. Seda on vaja, et saaks kasutada süsteemisiseseid faile.

mysql> SYSTEM /sbin/lvcreate -L 1G --snapshot -n sql_backup /dev/mysql/data
File descriptor 3 (socket:[15065]) leaked on lvcreate invocation. Parent PID 3514: sh
  Logical volume "sql_backup" created

Tabelite lukust vabastamine.

mysql> UNLOCK TABLES;
Query OK, 0 rows affected (0.01 sec)
mysql> exit
Bye

Snapshoti kettajagu nimetati kui sql_backup ja viide loogilisele seadmele asub /dev/mysql/sql_backup. Käivitades käsu „lvs“, saab näha, et lisaks mysql/data LV-le on juurde tekkinud mysql/sql_backup

lvs

Tulemus:

LV         VG    Attr   LSize Origin Snap%  Move Log Copy%  Convert
data       mysql owi-ao 1.00g                                      
sql_backup mysql swi-a- 1.00g data     0.00   

Kui nüüd haakida tehtud snapshoti kettajagu, on seal kättesaadav kogu mysql-i data sellel hetkel, kui snapshot tehti.

mkdir /mnt/bk
mount /dev/mysql/sql_backup /mnt/bk
ls -la /mnt/bk

Tulemus:

total 28720
drwx------ 8 mysql mysql     4096 Dec 12 15:59 .
drwxr-xr-x 3 root  root      4096 Dec 12 16:34 ..
-rw-r--r-- 1 root  root         0 Nov 30 17:18 debian-5.5.flag
-rw-rw---- 1 mysql mysql 18874368 Dec 12 16:18 ibdata1
-rw-rw---- 1 mysql mysql  5242880 Dec 12 16:18 ib_logfile0
-rw-rw---- 1 mysql mysql  5242880 Nov 30 17:18 ib_logfile1
drwx------ 2 root  root     16384 Dec 12 15:58 lost+found
drwx------ 2 mysql root      4096 Nov 30 17:18 mysql
-rw-rw---- 1 root  root         6 Nov 30 17:18 mysql_upgrade_info
drwx------ 2 mysql mysql     4096 Nov 30 17:18 performance_schema
drwx------ 2 mysql mysql     4096 Nov 30 17:28 phpmyadmin
drwx------ 2 mysql root      4096 Dec 12 16:18 test
drwx------ 2 mysql mysql     4096 Nov 30 17:33 wp

MySQL-i server töötab peale snapshoti tegemist katkestusteta edasi. Tehtud snapshoti andmeid võib varundada arhiivi jaoks. Andmete varundamisel tuleb spashoti kettajagu failisüsteemi külge haakida ja selle sisu „tar“-i abil arhiveerida ja hiljem eemaldada snapshoti kettajagu

mkdir -p /var/teekond/arhiivi
tar -cjf  [/var/teekond/arhiivi/][kuupäev].tar.bz2 -C /mnt/bk
umount /dev/mysql/sql_backup
lvremove /dev/mysql/sql_backup
Do you really want to remove active logical volume sql_backup? [y/n]: Y
  Logical volume "sql_backup" successfully removed

Tulemuseks nüüd loogilise kettajao vaatamisele on:

lvdisplay

Tulemus:

  --- Logical volume ---
  LV Name                /dev/mysql/data
  VG Name                mysql
  LV UUID                ZIMxmO-kUQR-u4gD-Wk9m-0MCK-kqwx-1kMaVP
  LV Write Access        read/write
  LV snapshot status     source of
                         /dev/mysql/sql_backup [active]
  LV Status              available
  # open                 1
  LV Size                1.00 GiB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:1
   
  --- Logical volume ---
  LV Name                /dev/mysql/sql_backup
  VG Name                mysql
  LV UUID                XMqxEq-yRhp-u8lf-mZ9U-1R2F-fBlf-5hoEeR
  LV Write Access        read/write
  LV snapshot status     active destination for /dev/mysql/data
  LV Status              available
  # open                 0
  LV Size                1.00 GiB
  Current LE             256
  COW-table size         1.00 GiB
  COW-table LE           256
  Allocated to snapshot  0.02% 
  Snapshot chunk size    4.00 KiB
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           252:3                   

Kuna tõmmis kasvab koos originaalkettajaoga on tähtis jälgida, et tõmmis protsentuaalselt täis ei saaks. Regulaarselt tuleb mahtuvust kontrollida lvs käsuga. 100% täitunud tõmmisele ei saa enam juurde kirjutada ning sellega andmeterviklikkus rikutakse ära!

lvs

Tulemus:

  LV         VG    Attr   LSize Origin Snap%  Move Log Copy%  Convert
  data       mysql owi-ao 1.00g                                      
  sql_backup mysql swi-a- 1.00g data     0.02                        

Kogu protseduuri automatiseerimiseks on võimalik koostada ka skript, mida saab käivitada sobival aja või kasutades „cron“ ajastamise vahendeid.

Lisaks on võimalik mysql-i data kaust haakida ümber snapshoti kettajaole ja taastada server sellesse seisu, mis oli snapshoti tegemise hetkel minimaalse katkestuse ajaga.

Kokkuvõte

LVM -i kasutamine varundamisel on väikestes ja mittekriitilistes süsteemides küllaltki hea lahendus. See ei nõua eriteadmisi ja kallist riistvara/tarkvara. Kuid suurematesse ja keerukamatesse lahendustesse see ei sobi, kuna see ainult aitab luua snapshoti hetke seisust aga ei paku võimalust seda eraldi salvestada. Arhiveerimiseks tuleb kasutada eraldi vahendeid ja selle protseduuri käigus võib minna kaduma vajalikke andmeid. Ka ei võistle LVM proffessionaalsete vahenditega nagu Arkeia (http://www.arkeia.com/) või BrightStor, mis on just varundamise lahenduste jaoks loodud ja muudavad antud tegemise mugavaks ja kiireks.

Kasutatud kirjandus

http://kuutorvaja.eenet.ee/wiki/LVM
http://www.web-manual.net/linux-3/logical-volume-manager-in-linux/
http://www.lullabot.com/articles/mysql-backups-using-lvm-snapshots
http://www.ubuntugeek.com/how-to-change-the-mysql-data-default-directory.html
https://wiki.ubuntu.com/Lvm
http://linuxconfig.org/Linux_lvm_-_Logical_Volume_Manager
Loodus, Katrin. Andmesalvestustehnoloogiad - loeng 4.1 Ülevaade Logical Volume Manager-ist [1]

"7 Linux fdisk Command Examples to Manage Hard Disk Partition" [2]

"LVM" [3]

Autor

Madis Lauri AK 31


Täiendamine:

Carolys Kallas A32

Aine: Linuxi administreerimine

Muutmine lõpetatud: 13.01.2013