{"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\/sl\/blog\/administrirovanie\/tonkoe-rezervirovanie-fajlovyh-sistem-linux-kak-sozdavat-rabochie-kopii-trehterabajtnoj-subd-mysql-za-20-sekund","title":{"rendered":"Tanek rezervni sistem datote\u010dnih sistemov Linux. Kako ustvariti delovne kopije tridimensionalne baze podatkov MySQL v 20 sekundah","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Tanek rezervni sistem datote\u010dnih sistemov Linux. Kako ustvariti delovne kopije tridimensionalne baze podatkov MySQL v 20 sekundah\" src=\"\/wp-content\/uploads\/2020\/03\/7502785a78bd6f069913e97829ff2f63.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Moje ime je Jurij, vodim tim za sistemsko administriranje u Sitimobilu. Danas \u0107u podijeliti iskustvo rada s tehnologijom tankog rezerviranja (thin provisioning) datote\u010dnih sustava Linux i objasniti kako se mo\u017ee primijeniti u tehnolo\u0161kim CI\/CD procesima tvrtke. Razgovarat \u0107emo o situaciji kada su nam za automatsko testiranje koda prilikom njegovog isporu\u010divanja u proizvodnju \u0161to br\u017ee potrebne kopije MySQL baza podataka, koje su \u0161to bli\u017ee '\u017eivoj' verziji, dostupne za \u010ditanje i pisanje.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3 id=\"vvedenie-zachem-davat-vrednye-sovety\">Uvod: za\u0161to davati \u0161tetne savjete?<\/h3>\n<p><\/p>\n<p>Logi\u010dno pitanje, jer postoje provjereni mehanizmi migracija shema baza podataka u testne okoline. Za\u0161to uop\u0107e dovoditi glavnu ne\u0161ardiranu DBMS do takvih volumena? Pa i za testiranje nisu potrebni svi podaci. Poku\u0161at \u0107u objasniti.<\/p>\n<p><\/p>\n<p>Prije otprilike godinu dana, u pozadini aktivnog rasta na\u0161eg agregatora taksija (tijekom 2018. godine smo pove\u0107ali broj zavr\u0161enih vo\u017enji otprilike 15 puta), pove\u0107ali su se volumeni podataka, optere\u0107enje na poslu\u017eiteljima i u\u010destalost isporuka. Na\u0161li smo se u sljede\u0107oj situaciji:<\/p>\n<p><\/p>\n<ul>\n<li>Glavna MySQL baza podataka rasla je na otprilike 1000 tablica ukupnog volumena od 2,5 TB i nastavila rasti.<\/li>\n<li>Nije bilo mogu\u0107nosti brzo se \u0161ardirati i razdvojiti bazu. Staromethoda \"pisanje u bazu \u0161to \u017eelim i kako \u017eelim\", hrpa JOIN-ova i unutarnjih ovisnosti tablica nije to dopu\u0161tala.<\/li>\n<li>Nije postojao mehanizam migracija shema baza podataka u testna okru\u017eenja.<\/li>\n<li>Nije bilo automatskog testiranja koda prilikom isporuke u proizvodnju.<\/li>\n<\/ul>\n<p><\/p>\n<p>Zadnji problem smo htjeli rije\u0161iti \u0161to br\u017ee. Ve\u0107 su pisani Postman testovi za provjeru glavnog PHP monolita, ali nedostajala je aktualna baza podataka. Tako\u0111er nismo mogli no\u0107u stvarati replikaciju, pretvarati je u majstor i davati je na ispitivanje tijekom dana: jako velika koli\u010dina isporuka i promjena, uklju\u010duju\u0107i i u podacima i shemi baze podataka, u\u010dinila bi da bi panel postao neoperativan ve\u0107 sredinom dana. A ograni\u010davanje isporuka samo na radni dan bilo bi neu\u010dinkovito. <\/p>\n<p><\/p>\n<p>Ipak, zadatak je bio ispunjen: prvi radni panel dobili smo ve\u0107 nakon dva tjedna. Tijekom pro\u0161le godine do\u017eivio je mnoge promjene i i dalje se koristi.<\/p>\n<p><\/p>\n<p>Sljede\u0107e \u0107u detaljno opisati sve korake i faze razvoja na\u0161eg rje\u0161enja. Uvjerit \u0107ete se da ova metoda zaslu\u017euje pravo na postojanje.<\/p>\n<p><\/p>\n<p><strong>\u0160to je \"tanko rezerviranje\"?<\/strong><br \/>\nTo je hardverska ili softverska tehnologija (tako\u0111e poznata kao sparse volumes), koja omogu\u0107ava alokaciju ve\u0107ih koli\u010dina potrebnog resursa nego \u0161to je dostupno. Pritom, alocirani volumen mora da zadovoljava kriterijume just-enough (onoliko koliko je potrebno) i just-in-time (u potrebnom vremenu). Uglavnom se tanko rezervisanje koristi u raznim SANS-ovima kako bi se obezbedilo diskovno prostor u potrebnim koli\u010dinama, koje prema\u0161uju fizi\u010dki dostupne. Tehnologiju podr\u017eavaju razli\u010diti fajl sistemi, kao \u0161to su LVM2, ZFS, BTRFS. \u0160iroko se koristi u hipervizorima virtuelizacije. Tanka rezervacija nam je omogu\u0107ila brzo kreiranje iz snapshotova glavne particije sa podacima onoliko kopija te particije koliko nam je potrebno (data direktorija SDB MySQL).<\/p>\n<p><\/p>\n<h3 id=\"pervyy-stend-tehnologiya-thin-lvm\">Prvi stand, tehnologija Thin LVM<\/h3>\n<p><\/p>\n<p>Ovu glavu mo\u017eemo nazvati \u201eKako napraviti najbr\u017ee snimke velikih koli\u010dina podataka koriste\u0107i <noindex><a rel=\"nofollow\" href=\"http:\/\/man7.org\/linux\/man-pages\/man7\/lvmthin.7.html\">Thin LVM<\/a><\/noindex>, smanjuju\u0107i stabilnost fajl sistema i SDB MySQL na nepristojne nivoe.\u201d <\/p>\n<p><\/p>\n<p>Po\u0161to smo ve\u0107 koristili LVM za izgradnju glavnih particija OS-a, odlu\u010dili smo da po\u010dnemo upravo od nje. Za po\u010detak nam je trebao poseban fizi\u010dki ra\u010dunar \u2014 replika na\u0161e glavne MySQL baze, na kojoj bismo mogli na zahtev kreirati snapshot replike i podi\u0107i ga pored odvojenim instance MySQL. Tokom testiranja dozvolili smo promene na ovoj instanci, a po zavr\u0161etku testova uspe\u0161no smo je uklonili. Konfiguracija servera je bila slede\u0107a:<\/p>\n<p><\/p>\n<ul>\n<li>2 x Intel Silver 4114 (10&#215;2,2 \u0413\u0413\u0446 HT)<\/li>\n<li>8 x 32 GB DDR4 <\/li>\n<li>8 x 1920 GB Intel SSD u RAID kontroleru Adaptec u RAID-10<\/li>\n<\/ul>\n<p><\/p>\n<p>O izboru izme\u0111u RAID kontrolera i softverskog RAID MD mo\u017ee se pisati poseban \u010dlanak. Re\u0107i \u0107u samo da su na na\u0161 izbor uticala dva faktora:<\/p>\n<p><\/p>\n<ul>\n<li>U vreme postavljanja zadatka, sve SDB-ove smo instalirali na RAID kontrolere, tako da se mo\u017ee re\u0107i da je to istorijski uslovljeno. <\/li>\n<li>Razlika u performansama na sinteti\u010dkim testovima fajl sistema i testovima sa raznim operacijama u MySQL-u bila je minimalna. <\/li>\n<\/ul>\n<p><\/p>\n<p>Razdelili smo nastali RAID-10: ustvarili smo enotno Volume Group (VG) za celoten obseg (z overheadom pribli\u017eno 6,7 GB) in ustvarili logi\u010dno particijo (Logical Volume, LV) za sistem s kapaciteto 50 GB. V obi\u010dajni situaciji bi ostali prostor namenili particiji za MySQL. A potrebovali smo tanko rezervacijo, zato smo najprej ustvarili tako imenovani pool, znotraj katerega smo ustvarili particijo za \/var\/lib\/mysql s kapaciteto 3,5 TB (na podlagi predvidenih obsegov DB):<\/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>Formatirali smo particijo v ext4, jo pripeli, zabele\u017eili replikat in dobili izvorno okolje. Nato smo ustvarili API, ki mora ustvarjati posnetke, zagnati instanco MySQL na dolo\u010denem vratu in odstraniti ustvarjeno instanco. Ker pri tem uporabljamo izklju\u010dno sistemske klice, smo izbrali navadni bash za pisanje skriptov, za povezavo API HTTP \u2192 bash pa smo uporabili odprtokodno re\u0161itev <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/phonkee\/goexpose\">goexpose<\/a><\/noindex>, napisano v Go. <\/p>\n<p><\/p>\n<p>Nekega dne bomo objavili na\u0161e bash skripte kot odprto kodo, za zdaj pa bom preprosto opisal glavni algoritem:<\/p>\n<p><\/p>\n<p>Ustvarjanje glavnega posnetka snapmain:<\/p>\n<p><\/p>\n<ol>\n<li>Ustavimo glavno repliko.<\/li>\n<li>Nalo\u017eimo blokado na operacije s posnetkom snapmain.<\/li>\n<li>Ustvarimo nov posnetek snapmain.<\/li>\n<li>Zagnamo MySQL in odstranimo blokado.<\/li>\n<\/ol>\n<p><\/p>\n<p>Ustvarjanje DB na poljubnem vratu iz snapmain:<\/p>\n<p><\/p>\n<ol>\n<li>Nalo\u017eimo blokado na dolo\u010deno instanco DB (vrat).<\/li>\n<li>Preverimo, ali obstaja blokada ustvarjanja glavnega posnetka. \u010ce obstaja, \u010dakamo in ponovno preverimo vsakih 5 sekund.<\/li>\n<li>Preverimo, ali obstaja stara LV-particija instance.<br \/>\n3.1 \u010ce obstaja, ustavimo instanco MySQL s pomo\u010djo kill -9 in izbri\u0161emo LV-particijo.<\/li>\n<li>Ustvarimo novo instanco iz snapmain.<\/li>\n<li>Pripravimo in montiramo imenike za to instanco.<\/li>\n<li>Odstranimo znake slava (datoteke) in za\u017eenemo instanco MySQL.<\/li>\n<li>Naredimo iz nje master.<\/li>\n<li>Odstranimo blokado.<\/li>\n<\/ol>\n<p><\/p>\n<p>Izbris DB na poljubnem vratu:<\/p>\n<p><\/p>\n<ol>\n<li>Nalo\u017eimo blokado na dolo\u010deno instanco DB (vrat).<\/li>\n<li>Ubijemo instanco MySQL s pomo\u010djo kill -9.<\/li>\n<li>Odmontiramo imenike.<\/li>\n<li>Izbri\u0161emo LV-particijo in odstranimo blokado.<\/li>\n<\/ol>\n<p><\/p>\n<p>Primer ukazov za kloniranje particij nove instance DB:<\/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>Zdaj se bom osredoto\u010dil na glavni problem, s katerim smo se sre\u010dali pri uporabi tanke rezerve. Zasledili smo te\u017eave z zmogljivostjo SSD-diskov. To je posledica zna\u010dilnosti Thin LVM: deluje na ravni naprave z nizkocenovnimi klifi, ki so po privzetku velike 4 MB. Kako je to izgledalo:<\/p>\n<p><\/p>\n<ol>\n<li>Ustvarimo posnetek glavnega razdelka \/var\/lib\/mysql.<\/li>\n<li>Za\u010dnemo replikacijo, da dohitevamo glavnega.<\/li>\n<li>Vsaka sprememba v tabelah replikacije prisili, da se stari, nespremenjeni klifi podatkov shranijo v razdelku posnetka.<\/li>\n<li>Vsaka sprememba v vzpostavljeni testni instanci prisili, da se stari, nespremenjeni klifi podatkov shranijo v razdelku kloniranega posnetka za to instanco.<\/li>\n<li>Dose\u017eemo obremenitev vhodno-izhodnih operacij na 100% na napravi, kar upo\u010dasni vse operacije in postopno zaostaja replikacijo.<\/li>\n<li>Do konca delovnega dne dobimo zaostalo instanco za ve\u010d ur.<\/li>\n<\/ol>\n<p><\/p>\n<p>Kako smo se s tem spopadli, da smo dobili bolj razumne rezultate (glavne to\u010dke):<\/p>\n<p><\/p>\n<p>RAID kontroler:<\/p>\n<p><\/p>\n<ul>\n<li>Izklopili smo vse vrste predpomnjenja. <\/li>\n<li>Nastavili smo writeback (ko podatki vstopijo v predpomnilnik, se zapis kon\u010da, preden se dejansko shrani na disk).<\/li>\n<\/ul>\n<p><\/p>\n<p>Datote\u010dni sistem:<\/p>\n<p><\/p>\n<ul>\n<li>Na to\u010dki monta\u017ee \/var\/lib\/mysql smo zapisali <em>noatime,nodiratime,data=writeback<\/em><\/li>\n<li>Izklopili smo journaling ext4 z uporabo tune2fs.<\/li>\n<\/ul>\n<p><\/p>\n<p>MySQL:<\/p>\n<p><\/p>\n<ul>\n<li>Zapisali smo <em>innodb_flush_method = O_DSYNC<\/em> (pove\u010dali smo hitrost zapisa, s \u010dimer smo zni\u017eali zanesljivost).<\/li>\n<li>Izklopili smo journaling, dnevniki nam niso potrebni.<\/li>\n<li>Zapisali smo <em>innodb_buffer_pool_size = 4G<\/em> (manj\u0161a velikost InnoDB bazena pomeni, da se bo MySQL hitreje zaustavil in hitreje bomo ustvarili posnetek).<\/li>\n<\/ul>\n<p><\/p>\n<p>To ni popoln seznam, \u0161e posebej glede MySQL. Vendar pa so ostale spremembe manj\u0161e in pogosto niso vedno ali natan\u010dno aplicirane. Na primer, da bi razbremenili diske, smo celo premaknili <em>innodb_parallel_doublewrite_path<\/em> v \/dev\/shm, kar je v nekaterih primerih pri zagonu nepopolne instance prihranilo do 5 sekund.<\/p>\n<p><\/p>\n<p>Zakaj ustavljamo MySQL, preden naredimo posnetek? Saj ga lahko naredimo z delujo\u010do replikacijo. Res je, a nova instanca Baze podatkov na tem posnetku bo privzeto \u0161tela za po\u0161kodovano in bo potrebovala celotno skeniranje ob zagonu. Ustaviti replikacijo je vsekakor hitreje, \u010deprav je to na koncu najdalj\u0161a operacija v celotnem procesu.<\/p>\n<p><\/p>\n<p>Z rezultatom smo dobili primerne \u010dasovne okvire in delujo\u010do postavitev. Vendar, kot je razvidno iz najbolj povedne analize zamud replikacije glavne replikacije, situacija \u0161e zdale\u010d ni idealna:<br \/>\n<img decoding=\"async\" alt=\"Tanek rezervni sistem datote\u010dnih sistemov Linux. Kako ustvariti delovne kopije tridimensionalne baze podatkov MySQL v 20 sekundah\" src=\"\/wp-content\/uploads\/2020\/03\/9bb7bb7d9abfea124a75616deec57f05.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Med drugimi pomanjkljivostmi izpostavljamo prakti\u010dno nemogo\u010de spremljanje Thin LVM bazena: poleg sistemskih standardnih funkcij iostat je nemogo\u010de ugotoviti, kateri element bazena trenutno povzro\u010da najve\u010dje obremenitve na datote\u010dnem sistemu.<\/p>\n<p><\/p>\n<p>\u0160e posebej je treba izpostaviti eno veliko pomanjkljivost, povezano z zgoraj opisano optimizacijo: dobili smo YOLO-stavbo. Pribli\u017eno enkrat na en do dva meseca ext4 ni zdr\u017eala tak\u0161nih zlorab in se nepovratno pokvarila, kar je zahtevalo ponovno formatiranje in ponovno nalaganje replik. S hitrostjo, ki smo jo pridobili, smo brezupno uni\u010dili stabilnost.<\/p>\n<p><\/p>\n<p>Na katerih metrih je treba spremljati med obratovanjem Thin LVM:<\/p>\n<p><\/p>\n<ul>\n<li>Thin pool data %<\/li>\n<li>Thin pool metadata %<\/li>\n<\/ul>\n<p><\/p>\n<p>\u010ce na\u0161 sistem z ve\u010d potrebami za podatke pre\u017eivi, dovolj je o\u010distiti diske, vendar bo kon\u010danje prostora za metapodatke privedlo do popolnega zru\u0161enja bazena in potrebe po njegovi ponovni ustvaritvi od za\u010detka.<\/p>\n<p><\/p>\n<p>Datote\u010dni sistem znotraj bazena se s\u010dasoma mo\u010dno fragmentira. Priporo\u010dam, da enkrat na dan za\u017eenete ukaz po cron: <em>fstrim -v \/var\/lib\/mysql<\/em>.<\/p>\n<p><\/p>\n<p>Vmesni zaklju\u010dki:<\/p>\n<p><\/p>\n<ul>\n<li>Tehnologija je enostavno uporabna, tako kot sam LVM, in ne zahteva posebne kvalifikacije in\u017eenirja.<\/li>\n<li>Dobro je primerna za manj\u0161e in ne preobremenjene baze podatkov. Manj\u0161a kot je baza, manj\u0161e je \u0161tevilo delov, ki se premikajo po datote\u010dnem sistemu znotraj bazena, in tako manj\u0161a je obremenitev diskov.<\/li>\n<li>Za na\u0161o nalogo smo za\u010deli iskati druge re\u0161itve, o \u010demer bomo govorili v naslednjem poglavju.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"vtoroy-stend-tehnologiya-zfs\">Druga postavitev, tehnologija ZFS<\/h3>\n<p><\/p>\n<p>Neko\u010d sem se ukvarjal s datote\u010dnim sistemom ZFS, vendar je takrat ZFS deloval dobro le v svojem mati\u010dnem sklopu operacijskih sistemov Solaris. Obstajala je razli\u010dica, prene\u0161ena na FreeBSD, ki je imela dovolj dobro raven izvedbe. Prav tako je bila nedokon\u010dana razli\u010dica za Linux, ki je zaprta v majhno rabo. Zaradi strukture shranjevanja podatkov B-tree (mimogrede, enaka struktura shranjevanja se uporablja tudi v InnoDB MySQL) se je ZFS slabo obnesel na namestitvah z zelo velikim \u0161tevilom datotek. Vse to skupaj z nujnostjo u\u010denja teoreti\u010dnega dela pred uporabo je ZFS dolgo izklju\u010dilo iz moje prakse. Pojavili so se ext4 in xfs, ki sta postala standard. Vendar, upo\u0161tevajo\u010d, da je ZFS ve\u010d kot primeren za na\u0161e naloge, in da je razli\u010dica za Linux, sode\u010d po mnenjih, zrasla v povsem normalen izdelek (\u010deprav ni v popolni podpori, kar pomeni, da je treba sistem na ZFS povsem od za\u010detka namestiti le z razli\u010dnimi ve\u0161\u010dinami), smo se odlo\u010dili, da jo preizkusimo.<\/p>\n<p><\/p>\n<p>Iz razumljivih razlogov smo izbrali stojalo enake konfiguracije (razen RAID-kontrolerja). Namestili smo osem SSD diskov po 1920 GB. Nismo \u017eeleli pisati lastne mre\u017ene podobe za nalaganje stre\u017enika na golo ZFS, zato smo na vseh diskih vzeli 50 GB in naredili MD RAID-10 za sistem. Preostalih 1950 GB na vsakem disku smo zdru\u017eili v ZFS-analog RAID-10:<\/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>Naredili smo particije za MySQL:<\/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>Upo\u0161tevajte, da smo vklju\u010dili privzeto stiskanje podatkov gzip. Na stre\u017eniku imamo veliko procesorskih virov, ki niso povsem izkori\u0161\u010deni. Rezultat je, da se je 3 TB na\u0161e baze podatkov spremenilo v 1,6 TB, in ker je \u0161ibka to\u010dka, tako kot prej\u0161nji\u010d, najve\u010dja zmogljivost diskov, manj\u0161e kot so podatki \u2014 bolj\u0161i smo \u017ee na za\u010detku pridobili odli\u010den bonus iz ZFS! V prometnih urah ob polni obremenitvi za vzdr\u017eevanje delovanja gzip porabi do 4 jedra, vendar nam to ne predstavlja te\u017eav.<\/p>\n<p><\/p>\n<p>Nato je implementacija potekala hitreje. Po kot leplenka smo preselili nastavitve MySQL replik v LVM stojalu. Porabili smo nekaj \u010dasa za prepisovanje skriptov v ukaze ZFS, vendar so v splo\u0161nem algoritmi ostali enaki. Primer ustvarjanja posnetka:<\/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>Iz dodatnega tuninga: preselili smo v pomnilnik ZFS-oddelke z metapodatki in logi l2arc in zil. Za na\u0161o nalogo, kot se je izkazalo pozneje, je to bilo odve\u010d, vendar to optimizacijo zaenkrat pu\u0161\u010damo, zlahka jo lahko spremenimo. Negativni u\u010dinki so ti, da je treba po ponovnem zagonu stre\u017enika znova ustvariti ustrezne pomnilni\u0161ke prostore. Izsek 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>V tej konfiguraciji smo za\u010deli testirati stojalo in dobili odli\u010dne rezultate: z dvema hkrati delujo\u010dima kopijama Baze podatkov (in aktivno glavno replikacijo) na posnetkih smo dosegli obremenitev diskov na 50-60%.<\/p>\n<p><\/p>\n<p>Znebili smo se na\u0161e glavne te\u017eave, kar je razvidno na grafu zaostanka replikacije (primerjajte s prej\u0161njim grafom v razdelku Thin LVM):<br \/>\n<img decoding=\"async\" alt=\"Tanek rezervni sistem datote\u010dnih sistemov Linux. Kako ustvariti delovne kopije tridimensionalne baze podatkov MySQL v 20 sekundah\" src=\"\/wp-content\/uploads\/2020\/03\/15df9283838a4662ff0f68accfde4089.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Poleg tega in zahvaljujo\u010d temu smo mo\u010dno pospe\u0161ili vse operacije: popolno ustvarjanje posnetka s zaustavitvijo in zagonoma replikacije traja do 40 sekund, izvajanje nove kopije MySQL iz posnetka pa traja do 20 sekund. To nas popolnoma zadostuje tako nam kot na\u0161im testom programske kode.<\/p>\n<p><\/p>\n<p>Vmesni zaklju\u010dki:<\/p>\n<p><\/p>\n<ul>\n<li>Rezultati so v celoti zadovoljili na\u0161e potrebe po pridobitvi kopije produkcijske Baze podatkov za testiranje kode.<\/li>\n<li>Tehnologija zahteva razumevanje: treba je razumeti, kaj ZFS je in kako delati z njim.<\/li>\n<li>Nismo preverjali trenutnega stanja delovanja ZFS z velikim \u0161tevilom (ve\u010d kot 1 milijon) majhnih datotek. Predpostavljamo pa, da te\u017eava ostaja, zato te datote\u010dne sisteme ne bi priporo\u010dal za kakr\u0161ne koli shrambe datotek.<\/li>\n<\/ul>\n<p><\/p>\n<h3 id=\"chto-dalshe\">Kaj zdaj?<\/h3>\n<p><\/p>\n<p>Na stojalu nedelamo ve\u010d ni\u010d, rezultati so zadovoljivi. Morda bomo v prihodnje dodali izklju\u010ditve tabel v nastavitev replikacije stojala, ki niso potrebne za testiranje, kar bo \u0161e dodatno zmanj\u0161alo obseg baze podatkov. Sistema BTRFS in njegove implementacije tehnologije tankega var\u010devanja \u0161e nismo preizkusili. Vendar pa to ni ve\u010d naloga, saj je bil glavni cilj dose\u017een. Na splo\u0161no pa bi \u017eeleli prekiniti opisani pristop \u2014 realizirati delujo\u010de migracije baz podatkov v testno okolje, ustvariti lo\u010den testni krog baze podatkov ter se ukvarjati s \u0161ardiranjem glavne baze. Mnoge od teh stvari \u017ee uresni\u010dujemo, o \u010demer bomo obvezno poro\u010dali v prihajajo\u010dih \u010dlankih. <\/p>\n<p><\/p>\n<h3 id=\"itogi\">Zaklju\u010dki<\/h3>\n<p><\/p>\n<p>Izvirni cilj je bil dose\u017een, \u010deprav na nenavaden na\u010din. V vmesnih izsledkih so bili opisani prednosti in slabosti vsake od uporabljenih tehnologij, zato se dogovorimo, katero tehnologijo in kdaj lahko uporabimo:<\/p>\n<p><\/p>\n<ul>\n<li>Thin LVM \u2014 za majhne baze podatkov in kadar ne \u017eelimo ali nimamo \u010dasa, da bi se u\u010dili ZFS.<\/li>\n<li>ZFS \u2014 \u010de imate izku\u0161nje z njo ali mo\u017enost, da si vzamete \u010das za u\u010denje v vseh situacijah. <\/li>\n<\/ul>\n<p><\/p>\n<p>Na vi\u0161ji ravni predstave je ta \u010dlanek ve\u010d kot le primerjava tehnologij obeh datote\u010dnih sistemov. Glavna ideja, ki jo \u017eelim prenesti in utrditi, je, da se ne smemo bali razmi\u0161ljati nekonvencionalno v kriti\u010dnih poslovnih situacijah in jemati le pripravljenih receptov. Neko\u010d bi lahko celoten tehni\u010dni oddelek odmahnil z roko in rekel, da je naloga izdelave tridimenzionalnih varnostnih kopij baze podatkov v manj kot eni minuti neuresni\u010dljiva, in da ne potrebujemo tveganih tehnologij, naredimo, kot je treba. To bi bilo mogo\u010de, vendar bi pribli\u017eno \u0161est mesecev do leta izgubili ter pri\u0161li do \u0161tevilnih potovanj strank (potovanja so na\u0161 glavni poslovni pokazatelj) brez testov in med uvajanjem. Z nekonvencionalnim pristopom smo porabili precej manj \u010dasa za uvedbo, dobili izku\u0161nje v novih in pozabljenih starej\u0161ih tehnologijah ter omogo\u010dili testiranje prav v tistem trenutku, ko smo ga zelo potrebovali. Nedvomno je to pozitivno vplivalo na vse na\u0161e kazalnike. Izbira je vedno va\u0161a, mi pa bomo na svoji strani \u0161e naprej poro\u010dali o zanimivih trenutnih in prihodnjih dose\u017ekih v na\u0161em blogu.<\/p>\n<p>Izvor: <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.4 - 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\/sl\/blog\/administrirovanie\/tonkoe-rezervirovanie-fajlovyh-sistem-linux-kak-sozdavat-rabochie-kopii-trehterabajtnoj-subd-mysql-za-20-sekund\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"sl_SI\" \/>\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\/sl\/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\udd47Tanka rezervacija datote\u010dnih sistemov Linux. Kako ustvarjati varnostne kopije tridvojterabajtne SGBD MySQL v 20 sekundah | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/sl\/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":"sl_SI","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\/sl\/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\/sl\/wp-json\/wp\/v2\/posts\/74327","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/comments?post=74327"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/posts\/74327\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media\/74328"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/media?parent=74327"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/categories?post=74327"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sl\/wp-json\/wp\/v2\/tags?post=74327"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}