Surewing the Lifecycle of Tombstones in Apache Cassandra

This post is the first part of a series of blog posts about the lifecycle and management of tombstones.

Cassandran tietojen poistaminen ja päättyminen on asia, joka kannattaa suunnitella huolella. Varsinkin, jos olet aikeissa poistaa valtavan määrän dataa kerralla. Ilman asianmukaista suunnittelua tämä voi tuoda ongelmia klusteriin, kuten lukuviiveen ja levynkäytön jalanjäljen lisääntymisen. Koko tämä viesti, aion kuvata tapa puuttua tähän ja sen varoitukset.

käydään ensin perusasiat läpi. Cassandrassa levyllä olevat tiedostot (SSTables) ovat muuttumattomia tiedostoja. Kun poistamme jotain Cassandrasta, luodaan uusi SSTable, joka sisältää Tussin. Tämä merkki osoittaa, mikä osio, rivi tai solu on poistettu sekä kyseisen poiston aikaleima. Tätä poistomerkkiä kutsutaan hautakiveksi.

poistetut tiedot ja hautakivi voivat olla levyllä rinnakkain gc_grace_seconds-nimisen jakson ajan, joka on oletuksena 10 päivää. Tänä aikana, vaikka tiedot voivat edelleen olla kiintolevyllä, niitä ei palauteta asiakkaalle, jos niitä kysytään. Mikä tarkoittaa, että asiakkaan näkökulmasta tiedot poistetaan heti, kun suoritat delete statement. Operatiivisesta näkökulmasta sekä data että hautakivi voivat kuitenkin edelleen olla olemassa ja viedä tilaa levyllä. Tätä levyllä edelleen olevaa poistettua dataa kutsutaan ” shadowed dataksi.”

Huom.: Edellisessä kappaleessa sanon, että tiedot ja hautakivet ”voivat edelleen olla rinnakkain levyllä” (painotetaan ”voi”), koska jos tapahtuu tiivistymistä, joka sisältää tiedot ja hautakivet, niin tiedot häädetään. Mutta hautakivi pysyy, jos gc_grace_seconds ei ole kulunut.

Gc_grace_seconds on turvamekanismi, jolla varmistetaan, että hautakivi ehtii monistua kaikkiin solmuihin, joilla on jäljitelmä varjostetusta datasta. Jotta tämä turvamekanismi onnistuisi, sinun on pystyttävä korjaamaan klusteri joka gc_grace_seconds. Tämä tarkoittaa, että jos käytät oletuksena 10 päivää gc_grace_seconds, korjaus on aloitettava ja valmis joka 10 päivää. Korjauksen tarkoituksena on estää zombidataa klusterissa. En mene yksityiskohtiin, miten tämä voi tapahtua, mutta periaatteessa, zombie data tapahtuu, kun poistat tietoja, mutta se palaa joskus myöhemmin.

kun gc_grace_seconds on kulunut, tiedot ja hautakivi voidaan lopulta häätää levyltä, jolloin niiden aiemmin käyttämä levytila saadaan takaisin (kuva 1). ETA vapauttaa levytilaa on yksi ensimmäisistä kohdista, jotka haluan selventää tässä viestissä. Cassandraa käytettäessä monet pitävät tätä mekanismia yllättävänä, eli sitä, että datan poistamisen jälkeen tieto on edelleen levyllä. Tämä sekaannus selviää yleensä nopeasti heti, kun ihmiset saavat tietää hautakivistä ja gc_grace_sekunneista. Näyttää kuitenkin siltä, että operaattoreilla on taipumus ajatella, että tiedot ja hautakivet häädetään heti, kun gc_grace_seconds on valmis. Itse asiassa, se on tärkeää olla tietoinen siitä, että tämä ei ehkä (ja yleensä ei) olla totta. Yleensä, se kestää kauemmin kuin gc_grace_seconds tämän häätö tapahtua ja levytilaa talteen.

Kuva 1-varjostetun tiedon tiivistäminen vanhentuneiden ja vanhentumattomien hautakivien kanssa

edellä mainittu häätö tapahtuu, kun tapahtuu tiivistys, jossa on mukana varjostetut Tiedot ja hautakivi. Vasta sitten, tiedot poistetaan tehokkaasti,ja levytilaa talteen. On tärkeää huomata, että vaikka gc_grace_seconds on kulunut ja SSTable kanssa varjostettu data on tiivistetty toisen SSTable, joka ei ole hautakivi, niin shadowed data ei puhdisteta. Sama asia tapahtuu hautakiven markkereita, eli jos SSTable kanssa hautakivi ei ole tiivistetty kaikki SSTables, jotka vielä on tietoja, jotka on poistettu, niin hautakivi ei häädetty levyltä. Syy tähän on se, että tiivistymisen aikana Cassandra ei tiedä, mitä tiivistymiseen osallistumattomissa SST-levyissä on. Joten se ei voi tietää, että se voi hylätä tiedot, koska se ei voi nähdä hautakivi. Voit nähdä tämän kuvassa 2, Jossa, vaikka gc_grace_seconds on kulunut molemmat hautakivet, mitään ei häädetä jälkeen tiivistys.

kuva 2-varjostettujen tietojen ja niiden hautakivien tiivistäminen erikseen

datan ja hautakivimerkin levykäytön vuoksi hautakivien kasautuminen voi vaikuttaa lukuviiveeseen, koska Cassandran on luettava paljon hautakiviä ennen live-tietojen palauttamista.

tietojen poistaminen ei yleensä ole ongelma, jos poistot ovat pieniä ja harvassa. Koska luonnollisen tiivistymisen elinkaaren aikana Cassandra lopulta saa levytilan ja puhdistetut hautakivet takaisin. Jos kuitenkin poistat suuren määrän dataa kerralla, se luo monia hautakiviä ja voi nopeasti vaikuttaa lukuviiveeseen.

jos haluat poistaa suuren määrän tietoja tapauskohtaisesti, seuraavassa blogikirjoituksessa on joitakin toimenpiteitä riskien vähentämiseksi.

Sähköposti

tekijä

  • Pedro Gordo

Kiinnostaako työskentely Pedron kanssa? Järjestä tekninen puhelu.

Vastaa

Sähköpostiosoitettasi ei julkaista.