{"id":74327,"date":"2020-03-16T08:42:33","date_gmt":"2020-03-16T05:42:33","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/tonkoe-rezervirovanie-fajlovyh-sistem-linux-kak-sozdavat-rabochie-kopii-trehterabajtnoj-subd-mysql-za-20-sekund"},"modified":"2020-03-16T08:42:33","modified_gmt":"2020-03-16T05:42:33","slug":"tonkoe-rezervirovanie-fajlovyh-sistem-linux-kak-sozdavat-rabochie-kopii-trehterabajtnoj-subd-mysql-za-20-sekund","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/tonkoe-rezervirovanie-fajlovyh-sistem-linux-kak-sozdavat-rabochie-kopii-trehterabajtnoj-subd-mysql-za-20-sekund","title":{"rendered":"\u00d5huke Linuxi failis\u00fcsteemide varundamine. Kuidas luua kolme terabaidi suuruste MySQL andmebaaside t\u00f6\u00f6koopiaid 20 sekundi jooksul","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"\u00d5huke Linuxi failis\u00fcsteemide varundamine. Kuidas luua kolme terabaidi suuruste MySQL andmebaaside t\u00f6\u00f6koopiaid 20 sekundi jooksul\" src=\"\/wp-content\/uploads\/2020\/03\/7502785a78bd6f069913e97829ff2f63.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Minu nimi on Yuriy, ma olen s\u00fcsteemiadministratsiooni meeskonna juht ettev\u00f5ttes Sitimobil. T\u00e4na jagan oma kogemusi Linuxi failis\u00fcsteemide \u00f5hukese varundamise (thin provisioning) tehnoloogia kasutamisest ning r\u00e4\u00e4gin, kuidas seda saab rakendada ettev\u00f5tte CI\/CD-protsessides. Vaatleme olukorda, kus meil on vaja koodide automaatseks testimiseks, kui sisu j\u00f5uab tootmisse, v\u00f5imalikult kiiresti MySQL andmebaasi koopiaid, mis oleksid v\u00f5imalikult l\u00e4hedased \u201etootmisversioonile\u201d, saadaval lugemiseks ja kirjutamiseks.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"vvedenie-zachem-davat-vrednye-sovety\">Sissejuhatus: miks anda vale n\u00f5u?<\/h3>\n<p><\/p>\n<p>Loogiline k\u00fcsimus, kuna olemas on t\u00f5estatud andmebaasi skeemide migratsioonimehhanismid testkeskkondadesse. Miks viia peamine mitte-sharditud andmebaas selliste mahudeni? Ja testimiseks ei ole k\u00f5ik andmed vajalikud. P\u00fc\u00fcan seletada.<\/p>\n<p><\/p>\n<p>Umbes aasta tagasi, meie taksikogujaga (2018. aastal kasvasime l\u00f5petatud s\u00f5itude osas umbes 15 korda) aktiivse kasvu taustal, kasvasid andmemahud, serverite koormus ja v\u00e4ljalaskete sagedus. Me j\u00e4ime j\u00e4rgmisesse olukorda:<\/p>\n<p><\/p>\n<ul>\n<li>Peamine MySQL andmebaas suurenes umbes 1000 tabelini, mille kogumaht oli 2,5 TB, ja j\u00e4tkas kasvu.<\/li>\n<li>Ei olnud v\u00f5imalik kiiresti shardida ja andmebaasi laiali viia. Vanade l\u00e4henemiste korral \u201ekirjutan andmebaasi, mida tahan ja kuidas tahan\u201d, hulk JOIN-e ja sisemisi tabelite s\u00f5ltuvusi, ei v\u00f5imaldanud seda.<\/li>\n<li>Ei olnud mehhanismi andmebaasi skeemi migratsioonideks testkeskkondadesse.<\/li>\n<li>Ei olnud automaatset koodi testimist tootmisse laskmisel.<\/li>\n<\/ul>\n<p><\/p>\n<p>Viimast probleemi sooviti lahendada v\u00f5imalikult kiiresti. Postmani jaoks oli juba kirjutatud testid p\u00f5hifilosoofia monoliidi kontrollimiseks, kuid puudus ajakohane andmebaas. Samuti ei saanud me \u00f6\u00f6sel replikat luua, teha sellest meistriks ja anda seda p\u00e4eva jooksul h\u00e4vitamiseks: v\u00e4ga suur hulk v\u00e4ljalaskmisi ja muudatusi, sealhulgas andmetes ja andmebaasi skeemis, oleks teinud stendi juba p\u00e4eva keskpaigaks mittet\u00f6\u00f6tavaks. Ja v\u00e4ljalaskmiste piiramisega ainult t\u00f6\u00f6p\u00e4evadel ei oleks olnud efektiivne. <\/p>\n<p><\/p>\n<p>Sellegipoolest \u00fclesanne t\u00e4ideti: esimene t\u00f6\u00f6tav stend saadi juba kahe n\u00e4dala jooksul. Selle m\u00f6\u00f6dunud aasta jooksul on see l\u00e4binud palju muudatusi ja j\u00e4tkab kasutamist.<\/p>\n<p><\/p>\n<p>Edasi kirjeldan ma p\u00f5hjalikult k\u00f5ik etapid ja sammud meie lahenduse arengus. Te veendute, et see meetod v\u00e4\u00e4rib eksisteerimist.<\/p>\n<p><\/p>\n<p><strong>Mis on \u201e\u00f5huke reserveerimine\u201c?<\/strong><br \/>\nSee on riist- v\u00f5i tarkvaratehnoloogia (tuntud ka kui sparse volumes), mis v\u00f5imaldab eraldada rohkem vajalikke ressursse, kui tegelikult on saadaval. Eraldatav maht peab siiski vastama just-enough (nii palju kui vajalik) ja just-in-time (vajaliku ajaga) kriteeriumidele. Peamiselt rakendatakse \u00f5hket reserveerimist erinevates andmesalvestuss\u00fcsteemides, et pakkuda ketaspinda vajalikus mahus, mis \u00fcletab tegelikult k\u00e4ttesaadavad. Tehnoloogiat toetavad erinevad failis\u00fcsteemid, nagu LVM2, ZFS, BTRFS. Seda kasutatakse laialdaselt virtualiseerimise h\u00fcperviisorites. \u00d5huke reserveerimine v\u00f5imaldas meil kiiresti luua p\u00f5hikettast andmete l\u00f5ikes nii palju koopiaid, kui meil oli vaja (MySQL andmebaasi data-kaust).<\/p>\n<p><\/p>\n<h3 id=\"pervyy-stend-tehnologiya-thin-lvm\">Esimene stand, \u00f5hukese LVM tehnoloogia<\/h3>\n<p><\/p>\n<p>Seda peat\u00fckki v\u00f5ib nimetada ka \u201eKuidas teha v\u00f5imalikult kiireid snapshots suurtest andmemahtudest kasutades <noindex><a rel=\"nofollow\" href=\"http:\/\/man7.org\/linux\/man-pages\/man7\/lvmthin.7.html\">\u00f5hukest LVM<\/a><\/noindex>, v\u00e4hendades failis\u00fcsteemi ja MySQL andmebaasi stabiilsust lubamatule tasemele.\u201c <\/p>\n<p><\/p>\n<p>Kuna olime juba kasutanud LVM-i operatsioonis\u00fcsteemi p\u00f5hiosade ehitamiseks, otsustasime alustada just sellest. Esiteks vajasime eraldi f\u00fc\u00fcsilist masinat \u2013 meie MySQL p\u00f5hialuse koopiat, millel saaksime n\u00f5udmisel luua koopiana snapshots ja t\u00f5sta see \u00fcles eraldi MySQL eksemplariga. Testimise ajaks lubasime sellel eksemplaril kasutada muudetavaid operatsioone ja testide l\u00f5ppedes kustutasime selle edukalt. Serveri konfiguratsioon oli j\u00e4rgmine:<\/p>\n<p><\/p>\n<ul>\n<li>2 x Intel Silver 4114 (10&#215;2,2 GHz HT)<\/li>\n<li>8 x 32 GB DDR4 <\/li>\n<li>8 x 1920 GB Intel SSD RAID-kontrolleris Adaptec RAID-10<\/li>\n<\/ul>\n<p><\/p>\n<p>RAID-kontrolleri ja tarkvara RAID MD valimise teemal v\u00f5iks kirjutada eraldi artikli. \u00dctlen vaid, et meie valikusse m\u00f5jutasid kaks tegurit:<\/p>\n<p><\/p>\n<ul>\n<li>Kuna \u00fclesande seadmisel installisime k\u00f5ik andmebaasid RAID-kontrolleritele, v\u00f5ib \u00f6elda, et see kujunes ajalooliselt nii. <\/li>\n<li>Erinevus j\u00f5udluses failis\u00fcsteemi s\u00fcnteetilistes testides ja erinevates MySQL operatsioonide testides oli minimaalne. <\/li>\n<\/ul>\n<p><\/p>\n<p>Me jagasime saadud RAID-10: tegime \u00fche Volume Group (VG) kogu ruumi peale (ligikaudu 6,7 GB \u00fclekande kuludega) ja l\u00f5ime loogilise partitsiooni (Logical Volume, LV) s\u00fcsteemi jaoks 50 GB. Tavalistes oludes m\u00e4\u00e4raksime kogu \u00fclej\u00e4\u00e4nud ruumi MySQL partitsiooniks. Kuid meil oli vaja peenvaru, seega l\u00f5ime esmalt nn pooli, mille sees l\u00f5ime partitsiooni \/var\/lib\/mysql jaoks 3,5 TB (baseerudes prognoositavatel andmebaasi mahtudel):<\/p>\n<p><\/p>\n<pre><code class=\"bash\">lvcreate -l 100%FREE -T vga\/thin\nlvcreate -V 3.5T -T vga\/thin -n mysql<\/code><\/pre>\n<p><\/p>\n<p>Formateerisime partitsiooni ext4-formaadis, mountisime selle, kirjutasime koopia ja saime algse seista. Siis tegime API, mis peaks looma snapshots, t\u00f5stma MySQL andmebaasi koopia m\u00e4\u00e4ratud pordil ja kustutama loodud koopia. Kuna kasutatakse ainult s\u00fcsteemi kutseid, valisime skriptide kirjutamise keeleks tavalise bash'i ja API sidumiseks HTTP \u2192 bash rakendasime open source lahenduse. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/phonkee\/goexpose\">goexpose<\/a><\/noindex>, kirjutatud Go-s. <\/p>\n<p><\/p>\n<p>Kord me avaldame meie bash-skriptid open source'ina, kuid praegu kirjeldan lihtsalt p\u00f5hilist algoritmi:<\/p>\n<p><\/p>\n<p>P\u00f5hi snapshot'i loomine snapmain:<\/p>\n<p><\/p>\n<ol>\n<li>Peamine koopia peatatakse.<\/li>\n<li>Seame lukustuse snapshot'i snapmain operatsioonide jaoks.<\/li>\n<li>Loome uue snapshot'i snapmain.<\/li>\n<li>K\u00e4ivitame MySQL ja eemaldame lukustuse.<\/li>\n<\/ol>\n<p><\/p>\n<p>Andmebaasi loomine suvalisel pordil snapmain'ist:<\/p>\n<p><\/p>\n<ol>\n<li>Seame lukustuse konkreetsele andmebaasi koopia (port).<\/li>\n<li>Kontrollime, kas p\u00f5hikoopia snapshot'i loomisel on lukustus. Kui see on olemas, ootame ja kontrollime iga 5 sekundi j\u00e4rel.<\/li>\n<li>Kontrollime, kas on olemas vana LV-partitsioon koopia.<br \/>\n3.1 Kui see on olemas, peatame MySQL koopia kill -9 abil ja kustutame LV-partitsiooni.<\/li>\n<li>Loome snapmain'ist uue koopia.<\/li>\n<li>Valmistame ja mountime direktorid selle koopia jaoks.<\/li>\n<li>Eemaldame slave'i tunnused (failid) ja k\u00e4ivitame MySQL koopia.<\/li>\n<li>Teeme sellest meistri.<\/li>\n<li>Eemaldame lukustuse.<\/li>\n<\/ol>\n<p><\/p>\n<p>Andmebaasi kustutamine suvalisel pordil:<\/p>\n<p><\/p>\n<ol>\n<li>Seame lukustuse konkreetsele andmebaasi koopia (port).<\/li>\n<li>Tapan MySQL koopia kill -9 abil.<\/li>\n<li>Unmountime direktorid.<\/li>\n<li>Kustutame LV-partitsiooni ja eemaldame lukustuse.<\/li>\n<\/ol>\n<p><\/p>\n<p>N\u00e4ited uue andmebaasi koopia partitsioonide kloonimise k\u00e4skudest:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">lvcreate -n stage_3307 -s vga\/snapmain\nlvchange -ay -K vga\/stage_3307\nmount -o noatime,nodiratime,data=writeback \/dev\/mapper\/vga-stage_3307 \/mnt\/stage_3307<\/code><\/pre>\n<p><\/p>\n<p>N\u00fc\u00fcd r\u00e4\u00e4gime p\u00f5hiprobleemist, millega me kokku puutusime \u00f5hukese varundamise kasutamisel. Me pidime silmitsi seisma SSD-kettaste tulemuslikkusega. See juhtus Thin LVM erip\u00e4rade t\u00f5ttu: see t\u00f6\u00f6tab p\u00f5him\u00f5tteliselt madala taseme seadme plokkidega, mille vaikimisi suurus on 4 MB. Kuidas see v\u00e4lja n\u00e4gi:<\/p>\n<p><\/p>\n<ol>\n<li>Loome snapshots p\u00f5hiosast \/var\/lib\/mysql.<\/li>\n<li>K\u00e4ivitame replikatsiooni, et j\u00f5uda meistriga samasse punktisse.<\/li>\n<li>Igasugune muudatus replikatsiooni tabelites sunnib salvestama vanad, muutmata andmeplokid snapshot'i osas.<\/li>\n<li>Igasugune muudatus \u00fcles t\u00f5stetud testieksemplaris sunnib salvestama vanad, muutmata andmeplokid selle eksemplari kloonitud snapshot'i osas.<\/li>\n<li>Saame 100% sisend-v\u00e4ljund operatsioonide koormuse seadmel, aeglustades igasuguseid toiminguid ja viies replikatsiooni j\u00e4rk-j\u00e4rgult tagasi.<\/li>\n<li>T\u00f6\u00f6p\u00e4eva l\u00f5puks saame mitme tunni v\u00f5rra maha j\u00e4\u00e4nud keskkonna.<\/li>\n<\/ol>\n<p><\/p>\n<p>Kuidas me sellega v\u00f5itlesime, et saada m\u00f5istlikum tulemus (peamised punktid):<\/p>\n<p><\/p>\n<p>RAID-kontroller:<\/p>\n<p><\/p>\n<ul>\n<li>L\u00fclitasime v\u00e4lja k\u00f5ik vahem\u00e4lu t\u00fc\u00fcbid vaikimisi. <\/li>\n<li>Seadsime writeback (andmete j\u00f5udmine vahem\u00e4llu l\u00f5petab kirjutamise enne, kui tegelik salvestamine kettale toimub).<\/li>\n<\/ul>\n<p><\/p>\n<p>Failis\u00fcsteem:<\/p>\n<p><\/p>\n<ul>\n<li>Mountimispunktis \/var\/lib\/mysql m\u00e4\u00e4rasime <em>noatime,nodiratime,data=writeback<\/em><\/li>\n<li>L\u00fclitasime v\u00e4lja ext4 logimise tune2fs'i abil.<\/li>\n<\/ul>\n<p><\/p>\n<p>MySQL:<\/p>\n<p><\/p>\n<ul>\n<li>M\u00e4\u00e4rasime <em>innodb_flush_method = O_DSYNC<\/em> (suurendasime kirjutamiskiirust, v\u00e4hendades seel\u00e4bi usaldusv\u00e4\u00e4rsust).<\/li>\n<li>L\u00fclitasime v\u00e4lja logimise, logid pole meile vajalikud.<\/li>\n<li>M\u00e4\u00e4rasime <em>innodb_buffer_pool_size = 4G<\/em> (mida v\u00e4iksem on InnoDB puu suurus, seda kiiremini MySQL peatub, ja seda kiiremini saame snapshot'i luua).<\/li>\n<\/ul>\n<p><\/p>\n<p>See ei ole kaugeltki t\u00e4ielik nimekiri, eriti MySQL-i osas. Kuid \u00fclej\u00e4\u00e4nud muutused on v\u00e4hem t\u00e4htsad ja sageli ei ole need alati ja t\u00e4pselt rakendatavad. N\u00e4iteks, et kettaid koormust v\u00e4hendada, viisime isegi <em>innodb_parallel_doublewrite_path<\/em> kausta \/dev\/shm, mis s\u00e4\u00e4stis m\u00f5nes olukorras kuni 5 sekundit vale l\u00f5petamise j\u00e4rgselt.<\/p>\n<p><\/p>\n<p>Miks me peatame MySQL enne snapshot'i loomist? Me v\u00f5ime selle teha t\u00f6\u00f6tava replikatsiooni pealt. Jah, see on \u00f5ige, kuid uus andmebaasi eksemplar selle snapshot'i pealt loetakse vaikimisi rikutuks ja vajab k\u00e4ivitamisel t\u00e4ielikku skaneerimist. Replikatsiooni peatamine on kindlasti kiirem, ehkki see osutub kogu protsessi jooksul k\u00f5ige kestvAMAKS toiminguks.<\/p>\n<p><\/p>\n<p>Tulemuseks saime sobivamad ajad ja t\u00f6\u00f6korras oleva k\u00f5rvuti. Kuigi nagu n\u00e4htub peamisest replikatsioonist r\u00e4\u00e4kivast k\u00f5ige veenvamast graafikust, on olukord ikka veel kaugel ideaalist:<br \/>\n<img decoding=\"async\" alt=\"\u00d5huke Linuxi failis\u00fcsteemide varundamine. Kuidas luua kolme terabaidi suuruste MySQL andmebaaside t\u00f6\u00f6koopiaid 20 sekundi jooksul\" src=\"\/wp-content\/uploads\/2020\/03\/9bb7bb7d9abfea124a75616deec57f05.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Teistest puudustest tasub m\u00e4rkida peaaegu v\u00f5imatut Thin LVM-i aluse j\u00e4lgimist: peale s\u00fcsteemi standardsete iostat funktsioonide pole v\u00f5imalik m\u00e4\u00e4rata, n\u00e4iteks, milline aluse element hetkel esitab suurimat koormust failis\u00fcsteemile.<\/p>\n<p><\/p>\n<p>Eraldi tasub m\u00e4rkida \u00fchte suurt puudust, mis on seotud eespool kirja pandud optimeerimisega: saime YOLO-keskkonna. Umbes kord kuus v\u00f5i kahe kuu jooksul ext4 ei pidanud selliseid \u00fclekohut taluma ja purunes p\u00f6\u00f6rdumatult, n\u00f5udes \u00fcmberformaatimist ja replikatsiooni uuesti. Kiirusest v\u00f5itnud, h\u00e4vitasime lootusetult stabiilsuse.<\/p>\n<p><\/p>\n<p>Milliste m\u00f5\u00f5dikute j\u00e4rgi j\u00e4lgida Thin LVM-i kasutamise ajal:<\/p>\n<p><\/p>\n<ul>\n<li>Thin pool andmete %<\/li>\n<li>Thin pool metaandmete %<\/li>\n<\/ul>\n<p><\/p>\n<p>Kui meie keskkond suudab andmete l\u00f5ppemise \u00f6ver elada (piisab ketaste puhastamisest), siis metaandmete l\u00f5ppemine toob kaasa kogu aluse kokkuvarisemise ja vajaduse see nullist uuesti luua.<\/p>\n<p><\/p>\n<p>Failis\u00fcsteem all pool aja jooksul v\u00e4ga palju fragmenteerub. Soovitame igal p\u00e4eval k\u00e4ivitada krooniga k\u00e4su <em>fstrim -v \/var\/lib\/mysql<\/em>.<\/p>\n<p><\/p>\n<p>Vahekokkuv\u00f5tted:<\/p>\n<p><\/p>\n<ul>\n<li>Tehnoloogia rakendamine on lihtne, nagu ka LVM ise, ning ei n\u00f5ua insenerilt erilisi oskusi.<\/li>\n<li>See sobib h\u00e4sti v\u00e4ikeste andmebaaside ja mitte liiga koormatud s\u00fcsteemide jaoks. Mida v\u00e4iksem on andmebaas, seda v\u00e4hem t\u00fckke liigub failis\u00fcsteemis all pool ja seda madalam on koormus ketastele.<\/li>\n<li>Meie \u00fclesande jaoks hakkasime otsima teisi lahendusi, millest juttu tuleb j\u00e4rgmises jaotises.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"vtoroy-stend-tehnologiya-zfs\">Teine keskkond, tehnoloogia ZFS<\/h3>\n<p><\/p>\n<p>Kaua aega tagasi olin ma kokku puutunud ZFS-failis\u00fcsteemiga, kuid siis t\u00f6\u00f6tas ZFS oma koduoperatsioonis\u00fcsteemis Solaris t\u00f5eliselt h\u00e4sti. Eksisteeris FreeBSD-le portitud versioon, millel oli piisavalt hea rakendamine. Samuti oli olemas poolik port Linuxile, mida v\u00e4hesed kasutasid. Andmete salvestamise struktuuri t\u00f5ttu B-tree (t\u00f5si, sama salvestamisstruktuur on ka InnoDB MySQL-is) ei n\u00e4idanud ZFS end v\u00e4ga h\u00e4sti installatsioonides, kus oli tohutult faile. K\u00f5ik see koos vajadusega enne kasutamist materjal tundma \u00f5ppida oli p\u00f5hjus, miks see failis\u00fcsteem pikka aega minu praktikas k\u00f5rvale j\u00e4i. Ilmnesid ext4 ja xfs, mis muutusid standardiks. Kuid arvestades, et ZFS sobib meie \u00fclesande jaoks rohkem kui h\u00e4sti ja Linuxi versioon, nagu tagasisidet arvestades, on muutunud t\u00e4iesti korralikuks tooteks (kuigi mitte t\u00e4is toetusega, mist\u00f5ttu ZFS-ile s\u00fcsteemi paigaldamine algusest peale on v\u00f5imalik vaid erinevate trikkide abil), otsustasime seda proovida.<\/p>\n<p><\/p>\n<p>M\u00f5istetavatel p\u00f5hjustel valisime sarnase konfiguratsiooni (v\u00e4lja arvatud RAID-kontroller). Paigaldasime kaheksa 1920 GB SSD-d. Ei olnud soovi kirjutada oma v\u00f5rgu pilti, et installida server t\u00fchjale ZFS-ile, seet\u00f5ttu v\u00f5tsime igast kettast 50 GB ja tegime nendele MD RAID-10 s\u00fcsteemi jaoks. \u00dclej\u00e4\u00e4nud 1950 GB igal kettal \u00fchendasime ZFS analoog RAID-10-ga:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">zpool create zpool mirror \/dev\/sda2 \/dev\/sdb2 mirror \/dev\/sdc2 \/dev\/sdd2 mirror \/dev\/sde2 \/dev\/sdf2 mirror \/dev\/sdg2 \/dev\/sdh2<\/code><\/pre>\n<p><\/p>\n<p>Loomise jaoks l\u00f5ime osad MySQL-i jaoks:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">zfs create zpool\/mysql\nzfs set compression=gzip zpool\/mysql\nzfs set recordsize=128k zpool\/mysql\nzfs set atime=off zpool\/mysql\nzfs create zpool\/mysql\/data\nzfs set recordsize=16k zpool\/mysql\/data\nzfs set primarycache=metadata zpool\/mysql\/data\nzfs set mountpoint=\/var\/lib\/mysql zpool\/mysql\/data<\/code><\/pre>\n<p><\/p>\n<p>Pange t\u00e4hele, et oleme l\u00fclitanud sisse vaikimisi gzip-andmete kokkusurumise. Meil on serveris palju protsessoriv\u00f5imsust ja see ei ole t\u00e4ielikult kasutusel. Tulemuseks on see, et 3 TB meie andmebaasist muutus 1,6 TB-ks ja kuna n\u00f5rk l\u00fcli, nagu eelmisel korral, on maksimaalne ketta tootlikkus, siis mida v\u00e4hem andmeid, seda parem. Saame alguses ZFS-ilt suurep\u00e4rase boonuse! Tipptunnil full-loadi ajal kulub gzip\u2019i t\u00f6\u00f6tluseks kuni 4 tuuma, kuid meil ei ole seda kahju.<\/p>\n<p><\/p>\n<p>Edasi liikudes l\u00e4ks rakendamine kiiremini. Kopeerisime LVM-seisundist MySQL repliiki seaded. Pidi kulutama aega skriptide \u00fcmberkirjutamiseks ZFS-i k\u00e4skudeks, kuid \u00fcldiselt j\u00e4id algoritmid endiseks. N\u00e4ide j\u00e4\u00e4dvustamise loomisest:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">zfs set snapdir=visible zpool\/mysql\/data\nzfs create zpool\/stage_3307\nzfs clone zpool\/mysql\/data@snapmain zpool\/stage_3307\/data\nzfs set mountpoint=\/mnt\/stage_3307 zpool\/stage_3307\/data<\/code><\/pre>\n<p><\/p>\n<p>Lisaks t\u00e4iendavalt h\u00e4\u00e4lestamisest: t\u00f5stsime m\u00e4llu ZFS-i jaotised, kus on metaandmed ja logid l2arc ja zil. Meie \u00fclesande jaoks osutus see hiljem liigseks, kuid seni oleme selle optimeeringu s\u00e4ilitanud, seda on lihtne hiljem muuta. Negatiivsete m\u00f5jude seas on see, et p\u00e4rast serveri taask\u00e4ivitamist tuleb vastavad m\u00e4lu piirkonnad uuesti luua. Andmeid seejuures ei kaotata. V\u00e4ljav\u00f5te zpool status:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">logs\n      \/dev\/shm\/zil_slog.img  ONLINE       0     0     0\ncache\n      \/dev\/shm\/l2arc.img     ONLINE       0     0     0<\/code><\/pre>\n<p><\/p>\n<p>Sellises konfiguratsioonis hakkasime testima seadet ja saime suurep\u00e4raseid tulemusi: kahe samal ajal t\u00f6\u00f6tava andmebaasi eksemplari (ja aktiivse peamise replikaga) sn\u00e4p\u0161ottide peal saavutasime diskide koormuse 50-60%.<\/p>\n<p><\/p>\n<p>Oleme vabanenud oma peamisest probleemist, mida on n\u00e4ha replikatsiooni viivituse graafikult (v\u00f5rrelge eelmise graafikuga jaotises Thin LVM):<br \/>\n<img decoding=\"async\" alt=\"\u00d5huke Linuxi failis\u00fcsteemide varundamine. Kuidas luua kolme terabaidi suuruste MySQL andmebaaside t\u00f6\u00f6koopiaid 20 sekundi jooksul\" src=\"\/wp-content\/uploads\/2020\/03\/15df9283838a4662ff0f68accfde4089.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Lisaks ja t\u00e4nu sellele kiirenesime k\u00f5igis operatsioonides: t\u00e4ielik sn\u00e4p\u0161oti loomine replika peatamise ja k\u00e4ivitamisega kestab kuni 40 sekundit, sn\u00e4p\u0161otist uue MySQL eksemplari k\u00e4ivitamine kestab kuni 20 sekundit. See rahuldab rohkem kui meid ning meie tarkvarakoodi testid.<\/p>\n<p><\/p>\n<p>Vahekokkuv\u00f5tted:<\/p>\n<p><\/p>\n<ul>\n<li>Tulemused rahuldasid t\u00e4ielikult meie vajadust saada koopia tootmisandmebaasist koodi testimiseks.<\/li>\n<li>Tehnoloogia n\u00f5uab sissejuhatust: tuleb m\u00f5ista, mis on ZFS ja kuidas sellega t\u00f6\u00f6tada.<\/li>\n<li>Me ei ole kontrollinud ZFS-i praegust t\u00f6\u00f6olekut suure arvu (\u00fcle 1 miljoni) v\u00e4ikese faili korral. Kuid eeldame, et probleem p\u00fcsib, seega ei soovitaks ma seda failis\u00fcsteemi mingiks failide hoidmiseks.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"chto-dalshe\">Mis edasi?<\/h3>\n<p><\/p>\n<p>Standi raames ei teinud me rohkem midagi, tulemus meid rahuldab. Tulevikus v\u00f5ime lisada replikatsiooni seadmestikku tabelite erandeid, mis ei ole testimiseks vajalikud, see v\u00e4hendaks veelgi andmebaasi mahtu. Me ei ole testinud BTRFS s\u00fcsteemi ja selle rakendust \u00f5hukeste varundamisv\u00f5tete tehnoloogiale. Kuid sellist eesm\u00e4rki ei ole enam, kuna p\u00f5hieesm\u00e4rk on saavutatud. \u00dcldiselt tahaksime loomulikult sellel eelnevalt kirjeldatud l\u00e4henemisviisilt loobuda \u2014 teostada t\u00f6\u00f6alised andmebaasi migratsioonid testkeskkonda, luua eraldi testkontuur andmebaasile, tegeleda peamise andmebaasi shardimisega. Paljusid neist me juba ellu viime, millest kindlasti r\u00e4\u00e4gime tulevastes artiklites. <\/p>\n<p><\/p>\n<h3 id=\"itogi\">Summary<\/h3>\n<p><\/p>\n<p>Algne \u00fclesanne oli lahendatud, kuigi ebatavalisel viisil. Vaheanal\u00fc\u00fcsides on kirjeldatud iga rakendatud tehnoloogia plusse ja miinuseid, seega otsustame, millist tehnoloogiat ja millal kasutada:<\/p>\n<p><\/p>\n<ul>\n<li>Thin LVM \u2014 v\u00e4ikeste andmebaaside puhul ja kui ei soovi v\u00f5i ei ole aega ZFS-i uurimiseks.<\/li>\n<li>ZFS \u2014 kui on kogemusi selle kasutamisel v\u00f5i v\u00f5imalust kulutada aega uurimisele igas olukorras. <\/li>\n<\/ul>\n<p><\/p>\n<p>Kohandatud tasemel on see artikkel \u2014 mitte lihtsalt kahe failis\u00fcsteemi tehnoloogia v\u00f5rdlemine. Peamine idee, mida soovin edastada ja kinnitada, on see, et ei tohiks karta m\u00f5elda ebatraditsiooniliselt olukordades, mis on kriitilised \u00e4ri jaoks, ja v\u00f5tta ainult valmis retsepte. Kunagi v\u00f5isime kogu tehnilise osakonnaga pead raputada ja \u00f6elda, et kolm terabaiti andmebaasi koopia loomine v\u00e4hem kui minutiga on teostamatu ning me ei vaja riskantseid tehnoloogiaid, teeme, nagu peab. See oleks olnud v\u00f5imalik, kuid oleksime kaotanud umbes kuus kuud- aasta ja palju kliendireise (reisid on meie peamine \u00e4ritulemus) ilma testideta ja rakendamise ajal. Ebatraditsiooniliselt tegutsedes kaotasime rakendamisele mitte nii palju aega, saime kogemusi uute ja unustatud vanade tehnoloogiate kohta ning pakkusime testimise just siis, kui me seda v\u00e4ga vajasime. Ilmselgelt avaldas see positiivset m\u00f5ju k\u00f5ikidele meie n\u00e4itajatele. Valik on alati teie, ja meie j\u00e4tkame oma blogis huvitavate praeguste ja tulevaste saavutuste jagamist.<\/p>\n<p>Allikas: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/citymobil\/blog\/492172\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u042e\u0440\u0438\u0439, \u044f \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c \u0433\u0440\u0443\u043f\u043f\u044b \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0421\u0438\u0442\u0438\u043c\u043e\u0431\u0438\u043b. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u043e\u0434\u0435\u043b\u044e\u0441\u044c \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0435\u0439 \u0442\u043e\u043d\u043a\u043e\u0433\u043e \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (thin provisioning) \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c Linux \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a \u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0432 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 CI\/CD-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438. \u041c\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e, \u043a\u043e\u0433\u0434\u0430 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0435 \u0435\u0433\u043e \u0432 production \u043d\u0430\u043c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u043a\u043e\u043f\u0438\u0438 \u0411\u0414 MySQL, \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":74328,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-74327","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/tonkoe-rezervirovanie-fajlovyh-sistem-linux-kak-sozdavat-rabochie-kopii-trehterabajtnoj-subd-mysql-za-20-sekund\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0422\u043e\u043d\u043a\u043e\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c Linux. \u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043a\u043e\u043f\u0438\u0438 \u0442\u0440\u0435\u0445\u0442\u0435\u0440\u0430\u0431\u0430\u0439\u0442\u043d\u043e\u0439 \u0421\u0423\u0411\u0414 MySQL \u0437\u0430 20 \u0441\u0435\u043a\u0443\u043d\u0434 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/tonkoe-rezervirovanie-fajlovyh-sistem-linux-kak-sozdavat-rabochie-kopii-trehterabajtnoj-subd-mysql-za-20-sekund\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-03-16T05:42:33+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-16T05:42:33+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Peen varundamine Linuxi failis\u00fcsteemides. Kuidas luua 3 terabaiti suurusele MySQL andmebaasile varukoopia 20 sekundi jooksul | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/tonkoe-rezervirovanie-fajlovyh-sistem-linux-kak-sozdavat-rabochie-kopii-trehterabajtnoj-subd-mysql-za-20-sekund","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0422\u043e\u043d\u043a\u043e\u0435 \u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c Linux. \u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u043a\u043e\u043f\u0438\u0438 \u0442\u0440\u0435\u0445\u0442\u0435\u0440\u0430\u0431\u0430\u0439\u0442\u043d\u043e\u0439 \u0421\u0423\u0411\u0414 MySQL \u0437\u0430 20 \u0441\u0435\u043a\u0443\u043d\u0434 | ProHoster","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/tonkoe-rezervirovanie-fajlovyh-sistem-linux-kak-sozdavat-rabochie-kopii-trehterabajtnoj-subd-mysql-za-20-sekund","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-03-16T05:42:33+00:00","article:modified_time":"2020-03-16T05:42:33+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"74327","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:16:23","updated":"2022-10-01 23:42:57","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/74327","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=74327"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/74327\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/74328"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=74327"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=74327"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=74327"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}