Palju vabast RAM-i, NVMe Intel P4500 ja kĂ”ik tĂ”rgub — lugu ebaĂ”nnestunud vahetusruumi lisamisest.

Selles artiklis rÀÀgin olukorrast, mis hiljuti juhtus ĂŒhe meie VPS pilveserveriga, jĂ€ttes mind paariks tunniks segadusse. Olen umbes 15 aastat tegelenud Linuxi serverite konfigureerimise ja tĂ”rkeotsinguga, kuid see juhtum ei mahu absoluutselt minu praktikasse — tegin mitmeid valejĂ€reldusi ja olin veidi meeleheitel, enne kui suutsin probleemi pĂ”hjuse Ă”igesti tuvastada ja lahendada.

EelÔigus

Kasutame keskmise suurusega pilve, mille ehitame tĂŒĂŒpilistel serveritel, millel on jĂ€rgmine konfiguratsioon — 32 tuuma, 256 GB RAM ja PCI-E Intel P4500 NVMe ketas mahuga 4TB. Meile meeldib see konfiguratsioon, kuna see ei lase IO puuduses muretseda, tagades Ă”iged piirangud VM (virtuaalmasinate) instantside tasemel. Kuna NVMe Intel P4500 omab muljetavaldavat jĂ”udlust, saame samal ajal tagada nii tĂ€is IOPS-i pakkumise masinatele kui ka andmete varundamise null IOWAIT-iga varukoopiaserveril.

Me oleme nagu need vanamoodsad, kes ei kasuta hĂŒperkonvergeeruvaid SDN-e ega muid stiilseid, moekaid ja noortele suunatud lahendusi VM-i mahtude hoidmiseks, uskudes, et mida lihtsam on sĂŒsteem, seda lihtsam on seda tĂ”rkeotsida tingimustes "peamine guru sĂ”itis mĂ€gedesse". SeetĂ”ttu hoiame VM mahtusid QCOW2 formaadis XFS-is vĂ”i EXT4-s, mis on paigaldatud LVM2 peale.

QCOW2 kasutamine on meil sunnitud ka toote poolt, mida me kasutame orkestreerimiseks — Apache CloudStack.

Varundamise tegemiseks vĂ”tame tĂ€ieliku mahupiiri pildi LVM2 snapshot'ina (jah, me teame, et LVM2 snapshot'id on aeglased, aga Intel P4500 aitab meil ka siin). Me teeme lvmcreate -s .. ja kasutame dd saadame varukoopia kaugserverisse ZFS-hoidlas. Siin oleme siiski natukene progressiivsed — ZFS oskab ikkagi andmeid kompressitud kujul hoida ja me saame neid kiiresti taastada kasutades D vĂ”i kĂ€tte saada eraldi VM-mahtusid kasutades mount -o loop ....

TĂ”epoolest, vĂ”ime teha ka mitte tĂ€ielikku LVM2 pildi, vaid monteerida failisĂŒsteemi RO ja ja kopeerida QCOW2 pilte, kuid oleme kokku puutunud olukordadega, kus XFS muutus sellest halvaks, ja mitte kohe, vaid ettearvamatult. Me ei armasta, kui hĂŒperviisori hostid "kinni jÀÀvad" Ă€kki nĂ€dalavahetustel, öösel vĂ”i pĂŒhade ajal vigade tĂ”ttu, mis vĂ”ivad juhtuda teadmata ajal. SeetĂ”ttu ei kasuta me XFS-i puhul jÀÀkide mountimist. RO kogu LVM2 mahuti kopeerimise asemel.

Varundamise kiirus varuserveril sĂ”ltub meie puhul varuserveri töötlusvĂ”imest, mis on umbes 600-800 MB/s mittekompressitavate andmete jaoks, jĂ€rgmine piiraja on 10Gbit/s kanal, millega varuserver on ĂŒhendatud klastriga.

Samas laadivad ĂŒhe varuserveri peale varukoopiad 8 serverite hĂŒperviisorit. Seega, varuserveri kettasĂŒsteem ja vĂ”rgu sĂŒsteem, olles aeglasemad, ei lase ĂŒle koormata hĂŒperviisorite kettasĂŒsteeme, kuna nad lihtsalt ei suuda töödelda, ĂŒtleme, 8 GB/s, mida hĂŒperviisorid vĂ”ivad rahulikult anda.

Ülaltoodud kopeerimisprotsess on jutustamise jaoks ÀÀrmiselt oluline, sealhulgas detailide osas — Intel P4500 kiire mĂ€luseadmestiku kasutamine, NFS kasutamine ja tĂ”enĂ€oliselt ZFS kasutamine.

Varundamise lugu

Igas hĂŒperviisori sĂ”lmes on meil vĂ€ike 8 GB SWAP partitsioon, ja ise hĂŒperviisori "ĂŒlevaatamine" toimub D standardpildist. Serverite sĂŒsteemipartitsiooniks kasutame 2xSATA SSD RAID1 vĂ”i 2xSAS HDD RAID1 LSI vĂ”i HP riistvarakontrolleril. Tegelikult ei oma me mingit tĂ€htsust selle sisu suhtes, kuna meie sĂŒsteemipartitsioon töötab "peaaegu readonly" reĆŸiimis, vĂ€lja arvatud SWAP. Kuna meil on serveris vĂ€ga palju RAM-i ja see on 30-40% vabana, ei mĂ”tle me SWAP-ile.

Varundamise loomise protsess. See ĂŒlesanne nĂ€eb vĂ€lja umbes nii:

#!/bin/bash

mkdir -p /mnt/backups/volumes

DIR=/mnt/images-snap
VOL=images/volume
DATE=$(date "+%d")
HOSTNAME=$(hostname)

lvcreate -s -n $VOL-snap -l100%FREE $VOL
ionice -c3 dd iflag=direct if=/dev/$VOL-snap bs=1M of=/mnt/backups/volumes/$HOSTNAME-$DATE.raw
lvremove -f $VOL-snap

Pange tÀhele ionice -c3, tegelikult on see NVMe seadmete jaoks tÀiesti kasutud, kuna nende I/O-sihik on seadistatud nagu:

cat /sys/block/nvme0n1/queue/scheduler
[none] 

Kuid meil on rida pĂ€randisĂ”lmi tavaliste SSD RAID-idega, mille jaoks see on asjakohane, ja seetĂ”ttu AS IS. ÜhesĂ”naga, see on lihtsalt huvitav koodilĂ”ik, mis selgitab selle konfiguratsiooni tĂŒhisust. ionice sellises konfiguratsioonis.

Pange tÀhele lippu iflag=direct kuna D. Kasutame otse IO-d vahemÀlu kaudu, et vÀltida liigseid IO-vahemÀlu asendusi lugemise ajal. Siiski, oflag=direct me ei tee seda, kuna oleme tÀheldanud ZFS-i jÔudluse probleeme selle kasutamisel.

Seda skeemi oleme edukalt kasutanud juba mitu aastat ilma probleemideta.

Ja siis see algas
 Avastasin, et ĂŒhe sĂ”lme varukoopia ei toimi, samas kui eelmine tehti tohutu IOWAITiga peaaegu 50%. PĂŒĂŒdes mĂ”ista, miks ei toimu varukoopiat, sattusime nĂ€htuse otsa:

Mahtgrupp "images" ei leitud

KĂ€isime mĂ”tlema "Intel P4500 lĂ”pp on kĂ€es", kuid enne serveri vĂ€ljalĂŒlitamist ketta asendamiseks oli siiski vajalik varukoopia teha. LVM2 taastati LVM2 varukoopiast metainformatsiooni taastamise abil:

vgcfgrestore images

KÀivitame varukoopia ja nÀeme sellist pilti:
Palju vabast RAM-i, NVMe Intel P4500 ja kĂ”ik tĂ”rgub — lugu ebaĂ”nnestunud vahetusruumi lisamisest.

Taaskord muutusime vĂ€ga kurvaks — oli selge, et nii elada ei saa, kuna kĂ”ik VPS-id kannatavad, mis tĂ€hendab, et kannatame ka meie. Mis toimus, jÀÀb tĂ€iesti arusaamatuks — iostat nĂ€itas hĂ€id IOPS-e ja kĂ”rgeimat IOWAIT-d. Ainus idee oli "kasutada NVMe"; Ă”nneks tuli Ă”ige mĂ”te Ă”igel ajal.

Situatsiooni analĂŒĂŒs samm-sammult

Ajalooline ajakiri. MÔni pÀev tagasi oli sel serveril vaja luua suur VPS, millel on 128 GB RAM. MÀlu tundus piisav, kuid igaks juhuks eraldati veel 32 GB vahetusfaili jaoks. VPS loodi, tÀitis oma eesmÀrki ja insident unustati, kuid SWAP-i osa jÀi alles.

Konfiguratsiooni eripÀra. KÔikide pilveservere puhul oli parameeter vm.swappiness seadistatud vaikimisi vÀÀrtusele 60. Ja SWAP loodi SAS HDD RAID1-l.

Mis juhtus (ajakiri arvab). Varundamise ajal D pakkus palju kirjutamisandmeid, mis paigutati RAM-i puhvrisse enne NFS-i kirjutamist. SĂŒsteemi sĂŒdamik, jĂ€rgides poliitikat swappiness, liikus palju VPS-i mĂ€lu lehti vahetusfaili alasse, mis asus aeglasel HDD RAID1 mahul. See pĂ”hjustas IOWAIT-i dramaatilise tĂ”usu, kuid mitte NVMe IO arvelt, vaid HDD RAID1 IO arvelt.

Kuidas probleem lahendati. 32GB vahetusruum eemaldati. Selleks kulus 16 tundi; kuidas ja miks vahetusruum nii aeglaselt vĂ€lja lĂŒlitatakse, saate lugeda eraldi. Parameetreid muudeti. swappiness vÀÀrtuseks 5 kogu pilves.

Kuidas see oleks saanud juhtuda. Esiteks, kui vahetusruum oleks SSD RAID-i vĂ”i NVMe seadmes; teiseks, kui NVMe seadet ei oleks ja oleks aeglasem seade, mis ei suudaks sellist andmehulka vĂ€lja anda — iroonia on, et probleem tekkis just sellest, et NVMe on liiga kiire.

PĂ€rast seda hakkas kĂ”ik töötama nagu varem — null IOWAIT-iga.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster