Hacks amin'ny fiasana amin'ny rakitra kely marobe

Ny hevitra momba ny lahatsoratra dia teraka ho azy avy amin'ny fifanakalozan-kevitra ao amin'ny fanehoan-kevitra amin'ny lahatsoratra "Zavatra momba ny inode".

Hacks amin'ny fiasana amin'ny rakitra kely marobe

Ny zava-misy dia ny maha-tokana ny serivisy ataonay dia ny fitehirizana rakitra kely marobe. Amin'izao fotoana izao dia manana terabytes an-jatony eo ho eo amin'ny angona toy izany isika. Ary nahita rakes miharihary sy tsy dia mazava loatra izahay ary nahomby tamin'ny fandehanana azy ireo.

Noho izany dia mizara ny traikefantsika aho, angamba mety hahasoa olona iray.

Olana voalohany: "Tsy misy toerana tavela amin'ny fitaovana"

Araka ny voalaza ao amin'ny lahatsoratra voalaza etsy ambony, ny olana dia misy sakana maimaim-poana amin'ny rafitra fichier, saingy lany ny inode.

Azonao atao ny manamarina ny isan'ny inodes ampiasaina sy maimaim-poana miaraka amin'ny baiko df -ih:

Hacks amin'ny fiasana amin'ny rakitra kely marobe

Tsy haveriko ilay lahatsoratra; raha fintinina, ny kapila dia misy sakana ho an'ny angona sy sakana ho an'ny meta-information, fantatra amin'ny anarana hoe inodes (node ​​index). Ny laharan'izy ireo dia napetraka rehefa manomboka ny rafitra fichier (miresaka momba ny ext2 sy ny mpandimby azy isika) ary tsy miova intsony. Ny fifandanjana amin'ny bloc data sy inodes dia kajy avy amin'ny angon-drakitra statistika antonony, fa amin'ny tranga misy antsika, rehefa misy rakitra kely maro dia tokony hifindra mankany amin'ny isan'ny inodes ny fifandanjana - tokony ho betsaka kokoa izy ireo.

Linux dia efa manome safidy amin'ny fifandanjana samy hafa, ary ao amin'ny rakitra avokoa ireo fikajiana efa nomanina mialoha /etc/mke2fs.conf.
Noho izany, mandritra ny fanombohana voalohany ny rafi-drakitra amin'ny alàlan'ny mke2fs, azonao atao ny mamaritra ny mombamomba tianao.

Ireto misy ohatra vitsivitsy avy amin'ny rakitra:

    small = {
        blocksize = 1024
        inode_size = 128
        inode_ratio = 4096
    }

    big = {
        inode_ratio = 32768
    }

    largefile = {
        inode_ratio = 1048576
        blocksize = -1
    }

Azonao atao ny misafidy ny tranga fampiasana tianao amin'ny alàlan'ny safidy "-T" rehefa miantso mke2fs. Azonao atao ihany koa ny mametraka ny mari-pamantarana ilaina raha tsy misy vahaolana vonona.

Ny antsipiriany bebe kokoa dia voalaza ao amin'ny torolàlana momba ny mke2fs.conf и mke2fs.

Ny endri-javatra iray tsy voakitika amin'ny lahatsoratra voalaza etsy ambony dia ny ahafahanao mametraka ny haben'ny sakana data. Mazava ho azy, ho an'ny rakitra lehibe dia misy dikany ny manana haben'ny sakana lehibe kokoa, ho an'ny rakitra kely dia misy dikany ny manana iray kely kokoa.

Na izany aza, ilaina ny mandinika ny endri-javatra mahaliana toy ny processeur architecture.
Nieritreritra aho indray mandeha fa ho an'ny rakitra sary lehibe dia mila habe sakana lehibe kokoa aho. Tao an-trano no nitrangan'izany, tao amin'ny fivarotana rakitra an-trano antsoina hoe WD amin'ny maritrano ARM. Tsy misy fisalasalana, napetrako ho 8k na 16k ny haben'ny sakana fa tsy ny 4k mahazatra, izay efa norefesiny teo aloha ny tahiry. Ary tsara ny zava-drehetra mandra-pahatongan'ny fitahirizana tsy nahomby, ary mbola velona ilay kapila. Rehefa nametraka ny kapila tao amin'ny solosaina mahazatra miaraka amin'ny processeur Intel mahazatra aho, dia nahagaga ahy: habe tsy tohanana. Tonga izahay. Ny angon-drakitra dia ao, tsara ny zava-drehetra, saingy tsy azo vakiana. i386 sy ireo processeur mitovy aminy dia tsy afaka miasa amin'ny haben'ny sakana izay tsy mifanaraka amin'ny haben'ny pejy fahatsiarovana, izay 4k marina. Amin'ny ankapobeny, niafara tamin'ny fampiasana fitaovana avy amin'ny habaka mpampiasa ny raharaha, miadana sy mampalahelo ny zava-drehetra, saingy voavonjy ny angon-drakitra. Raha misy liana dia google ny anaran'ny utility fuseext2. Fitondran-tena: na mieritreritra mialoha ny tranga rehetra, na aza mody ho superhero ary mampiasa lamina mahazatra ho an'ny vehivavy mpikarakara tokantrano.

UPD. Araka ny hevitry ny mpampiasa berez Tiako ny manazava fa ho an'ny i386 ny haben'ny sakana dia tsy tokony hihoatra ny 4k, fa tsy voatery ho 4k marina izany, izany hoe. 1k sy 2k dia azo ekena.

Ahoana àry no namaha ny olana?

Voalohany, sendra olana izahay rehefa feno angon-drakitra ny kapila multi-terabyte, ary tsy afaka nanova ny rafitry ny rafi-drakitra izahay.

Faharoa, nilana vahaolana maika.

Vokatr'izany dia tonga tamin'ny fanatsoahan-kevitra izahay fa mila manova ny fifandanjana amin'ny fampihenana ny isan'ny rakitra.
Mba hampihenana ny isan'ny rakitra dia nanapa-kevitra ny hametraka ireo rakitra ao anaty tahiry iombonana iray. Raha raisinay ny mombamomba anay, dia apetrakay ao anatin'ny arisiva iray ny rakitra rehetra mandritra ny fe-potoana iray, ary nanatanteraka arsiva amin'ny alalan'ny asa cron isan'alina.

Voafantina zip archive. Ao amin'ny fanehoan-kevitra tao amin'ny lahatsoratra teo aloha dia nisy soso-kevitra ny tar, saingy misy fahasarotana iray: tsy misy lisitry ny atiny, ary ny rakitra ao anatiny dia voatahiry ao anaty renirano (tsy hoe "tar" fotsiny no fanafohezana. ho an'ny "Tape Archive", ny lovan'ny kasety), izany hoe. raha mila mamaky rakitra iray amin'ny faran'ny arisiva ianao dia mila mamaky ny arsiva manontolo, satria tsy misy offset ho an'ny rakitra tsirairay mifandraika amin'ny fiandohan'ny arsiva. Ary noho izany dia asa maharitra. Tsara kokoa ny zava-drehetra amin'ny zip: mitovy ny lisitry ny atiny sy ny fanonerana ny rakitra ao anatin'ny arisiva, ary ny fotoana fidirana amin'ny rakitra tsirairay dia tsy miankina amin'ny toerana misy azy. Eny, amin'ny tranga misy antsika dia azo atao ny mametraka ny safidy compression amin'ny "0", satria ny rakitra rehetra dia efa voatsindry ao amin'ny gzip mialoha.

Ny mpanjifa dia maka rakitra amin'ny alàlan'ny nginx, ary araka ny API taloha, ny anaran'ny rakitra ihany no voalaza, ohatra:

http://www.server.com/hydra/20170416/0453/3bd24ae7-1df4-4d76-9d28-5b7fcb7fd8e5

Mba hamahana ny rakitra amin'ny lalitra dia hitanay sy nampifandray ny module nginx-unzip-module (https://github.com/youzee/nginx-unzip-module) ary manangana roa ambony.

Ny vokatr'izany dia izao manaraka izao:

Hacks amin'ny fiasana amin'ny rakitra kely marobe

Ireo mpampiantrano roa ao amin'ny toe-javatra dia toa izao:

server {
  listen *:8081;

  location / {
    root      /home/filestorage;
  }
}

server {
  listen *:8082;

  location ~ ^/hydra/(d+)/(d+)/(.*)$ {
    root      /home/filestorage;
    file_in_unzip_archivefile "/home/filestorage/hydra/$1/$2.zip";
    file_in_unzip_extract "$2/$3";
    file_in_unzip;
  }
}

Ary ny configuration upstream amin'ny upstream nginx:

upstream storage {
  server server.com:8081;
  server server.com:8082;
}

Ahoana ny fandehany:

  • Ny mpanjifa dia mankany amin'ny nginx eo anoloana
  • Front nginx dia manandrana manolotra ny rakitra avy amin'ny voalohany ambony, i.e. mivantana avy amin'ny rafitra fichier
  • Raha tsy misy rakitra dia manandrana mandefa avy any ambony faharoa, izay manandrana mitady ilay rakitra ao anaty arisiva.

Olana roa: indray "Tsy misy toerana tavela amin'ny fitaovana"

Ity no olana faharoa sendra anay rehefa misy rakitra maro ao anaty lahatahiry iray.
Miezaka mamorona rakitra izahay, mitaraina ny rafitra fa tsy misy toerana. Ovainay ny anaran'ny rakitra ary manandrana mamorona azy indray.

Hita izany.

Toa toy izao izany:

Hacks amin'ny fiasana amin'ny rakitra kely marobe

Ny fanamarinana ny inodes dia tsy nanome na inona na inona - maro ireo maimaim-poana.
Ny fanamarinana ny toerana dia mitovy.
Nihevitra izahay fa mety ho be loatra ny rakitra ao amin'ny lahatahiry, ary misy fetrany izany, saingy tsia indray: Isan'ny rakitra ambony indrindra isaky ny lahatahiry: ~1.3 × 10^20

Eny, ary afaka mamorona rakitra ianao raha manova ny anarana.
Fehiny - ny olana dia ao amin'ny anaran'ny rakitra.

Ny fikarohana fanampiny dia naneho fa ny olana dia ao amin'ny algorithm hashing rehefa manangana ny mari-pamantarana lahatahiry; miaraka amin'ny rakitra marobe, ny fifandonana dia voamarika miaraka amin'ny vokatra manaraka. Afaka mamaky antsipiriany bebe kokoa ianao eto: https://ext4.wiki.kernel.org/index.php/Ext4_Disk_Layout#Hash_Tree_Directories

Azonao atao ny manafoana an'io safidy io, fa ... ny fitadiavana rakitra amin'ny anarana dia mety ho lasa lava be rehefa mikaroka ny rakitra rehetra.

 tune2fs -O "^dir_index" /dev/sdb3

Amin'ny ankapobeny, vahaolana vonjimaika mety hahomby io.

Ara-moraly: ny rakitra be dia be ao anaty lahatahiry dia zavatra ratsy. Tsy ilaina ny manao izany.

Matetika amin'ny tranga toy izany, ny lahatahiry nested dia noforonina amin'ny litera voalohany amin'ny anaran'ny rakitra na amin'ny marika hafa, ohatra, amin'ny daty, amin'ny ankamaroan'ny tranga dia mamonjy ny andro izany.
Saingy ny fitambaran'ny rakitra kely dia mbola ratsy, na dia mizara ho lahatahiry aza - dia jereo ny olana voalohany.

Olana telo: ny fomba hijerena ny lisitry ny rakitra raha maro amin'izy ireo

Amin'ny toe-javatra misy anay, rehefa manana rakitra be dia be izahay, na ahoana na ahoana, dia niatrika olana momba ny fomba fijerena ny votoatin'ny lahatahiry izahay.

Vahaolana mahazatra - baiko ls.
Ok, andeha hojerentsika izay mitranga amin'ny rakitra 4772098:


$ time ls /home/app/express.repository/offercache/ >/dev/null

real	0m30.203s
user	0m28.327s
sys	0m1.876s

30 segondra... ho be loatra. Ambonin'izany, ny ankamaroan'ny fotoana dia lany amin'ny fanodinana rakitra amin'ny habaka mpampiasa, fa tsy amin'ny fampandehanana ny kernel.

Misy vahaolana anefa:


$ time find /home/app/express.repository/offercache/ >/dev/null

real	0m3.714s
user	0m1.998s
sys	0m1.717s

3 segondra. 10 heny haingana kokoa.
Hooray!

UPD.

Vahaolana haingana kokoa avy amin'ny mpampiasa berez - esory ny fanasokajiana ls


time ls -U /home/app/express.repository/offercache/ >/dev/null
real	0m2.985s
user	0m1.377s
sys	0m1.608s

Olana efatra: LA lehibe rehefa miasa amin'ny rakitra

Indraindray misy toe-javatra mitranga rehefa mila mandika andian-drakitra avy amin'ny milina iray mankany amin'ny iray hafa ianao. Mandritra izany fotoana izany, ny LA matetika dia mitombo tsy misy dikany, satria ny zava-drehetra dia miankina amin'ny fahombiazan'ny kapila.

Ny zavatra manan-tsaina indrindra tianao hatao dia ny mampiasa SSD. Tena milay. Ny hany fanontaniana dia ny vidin'ny SSD multi-terabyte.

Fa raha ny kapila dia tsotra, dia mila mandika antontan-taratasy, ary izany ihany koa ny rafitra famokarana, izay ny overload dia mitarika ho amin'ny tsy afa-po exclamations avy amin'ny mpanjifa? Misy fitaovana mahasoa roa farafahakeliny: nice и ionice.

nice - mampihena ny laharam-pahamehana amin'ny dingana, araka izany ny mpandrindra dia mizara fizarana fotoana bebe kokoa amin'ny dingana hafa laharam-pahamehana.
Amin'ny fomba fanaonay dia nanampy tamin'ny fametrahana tsara ny ambony indrindra (19 no laharam-pahamehana kely indrindra, -20 (minus 20) no ambony indrindra).

ionice - manitsy ny fandaharam-potoana I/O mifanaraka amin'izany

Raha mampiasa RAID ianao ary mila ampiarahina tampoka (aorian'ny reboot tsy nahomby na mila mamerina ny array RAID aorian'ny fanoloana disk), dia amin'ny toe-javatra sasany dia misy dikany ny fampihenana ny hafainganam-pandehan'ny synchronization mba hahafahan'ny dingana hafa miasa bebe kokoa. na tsy ampy. Ity baiko manaraka ity dia hanampy amin'izany:


echo 1000 > /proc/sys/dev/raid/speed_limit_max

Olana dimy: Ahoana ny fampifanarahana ny rakitra amin'ny fotoana tena izy

Mbola manana rakitra be dia be isika izay mila averina averina amin'ny servera faharoa mba hialana amin'ny ... Ny rakitra dia nosoratana tsy tapaka, ka raha te hanana fatiantoka faran'izay kely ianao dia mila manao kopia haingana araka izay tratra.

Vahaolana mahazatra: Rsync amin'ny SSH.

Safidy tsara ity raha tsy hoe mila manao izany isaky ny segondra vitsy ianao. Ary misy rakitra be dia be. Na dia tsy mandika azy ireo aza ianao, dia mbola mila mahatakatra ny zavatra niova ianao, ary ny fampitahana rakitra an-tapitrisany maro dia mitaky fotoana sy entana ao amin'ny kapila.

Ireo. mila mahafantatra avy hatrany izay tokony adika isika, tsy misy fampitahana isaky ny mandeha.

Ny famonjena- lsyncd. Lsyncd - Live Sync (fitaratra) Daemon. Izy io koa dia miasa amin'ny alàlan'ny rsync, fa manara-maso ny rafitra fichier ho an'ny fanovana amin'ny fampiasana inotify sy fsevents ary manomboka mandika ireo rakitra niseho na niova ihany.

Olana enina: ahoana no ahafantarana hoe iza no mametraka ny kapila

Mety ho fantatry ny rehetra izany, saingy na izany aza, mba hamenoana ny sary: ​​misy baiko manara-maso ny subsystem kapila iotop - tahaka top, fa mampiseho ny dingana izay tena mavitrika mampiasa disks.

Hacks amin'ny fiasana amin'ny rakitra kely marobe

Teny an-dalana, ny tsara antitra ambony ihany koa dia mamela anao hahatakatra na misy olana amin'ny kapila na tsia. Misy safidy roa mety indrindra amin'izany: Load Average и IOwait.

Hacks amin'ny fiasana amin'ny rakitra kely marobe

Ny voalohany dia mampiseho hoe firy ny dingana ao amin'ny filaharana ho an'ny serivisy, matetika mihoatra ny 2 - misy zavatra tsy mandeha. Rehefa manao kopia mavitrika amin'ny mpizara backup isika dia avelantsika hatramin'ny 6-8, aorian'izay dia heverina ho tsy ara-dalàna ny toe-javatra.

Ny faharoa dia ny fahasahiranan'ny processeur amin'ny fampandehanana kapila. IOwait> 10% dia mampanahy, na dia eo amin'ny mpizara misy mombamomba entana manokana aza dia 40-50% izany, ary izany no mahazatra.

Hamaranako eto, na dia mety ho maro aza ny teboka tsy mbola nodinihinay, dia ho faly aho miandry ny fanehoan-kevitra sy ny famaritana ireo tranga tena mahaliana.

Source: www.habr.com

Add a comment