Teknologian jakaminen

Tietokannan katastrofipalautus |. MySQL MGR:n ja Alibaba Cloud PolarDB-X Paxosin välinen perusteellinen vertailu

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Avoimen lähdekoodin ekosysteemi

Kuten me kaikki tiedämme, MySQL-ensisijainen ja toissijainen tietokanta (kaksi solmua) saavuttaa yleensä korkean tiedon saatavuuden asynkronisen replikoinnin ja puolisynkronisen replikoinnin (Semi-Sync) avulla ensisijaiset ja toissijaiset arkkitehtuurit kohtaavat vakavia ongelmia HA-vaihdon jälkeen. On todennäköistä, että tiedot ovat epäjohdonmukaisia ​​(viitataan nimellä RPO! = 0).Siksi niin kauan kuin liiketoimintatiedot ovat tärkeitä, sinun ei pitäisi valita tietokantatuotetta, jossa on ensisijainen ja toissijainen MySQL-arkkitehtuuri (kaksi solmua. On suositeltavaa valita monikopioarkkitehtuuri, jossa RPO=0).

MySQL-yhteisö, koskien monikopiotekniikan kehitystä RPO=0:lla:

  • MySQL on virallisesti avoimen lähdekoodin, ja se on julkaissut MySQL Group Replication (MGR) korkean käytettävyyden ratkaisun, joka perustuu ryhmäreplikointiin. Paxos-protokolla on sisäisesti kapseloitu XCOM:n kautta tietojen johdonmukaisuuden varmistamiseksi.
  • Ali Cloud PolarDB-X , joka on johdettu Alibaban sähköisen kaupankäynnin Double Elevenin liiketoiminnan hiomisesta ja todentamisesta sekä monitoimista eri paikoissa, se tulee avoimeen lähdekoodiin koko ytimessä lokakuussa 2021, ja se kattaa täysin MySQL avoimen lähdekoodin ekosysteemin. PolarDB-X on keskitetty ja hajautettu integroitu tietokanta. Sen datasolmu Data Node (DN) käyttää itse kehitettyä X-Paxos-protokollaa ja on erittäin yhteensopiva MySQL 5.7/8.0:n kanssa , mutta myös Sillä on erittäin skaalautuva tapahtumamoottori, joustava toiminta ja ylläpito katastrofipalautuksessa sekä edullinen tietojen tallennus.PolarDB-X Open Source |. Kolme kopiota Paxos-pohjaisesta MySQL:stä》。

PolarDB-X Keskitetyn ja hajautetun integraation käsite: tietosolmua DN voidaan käyttää itsenäisesti keskitettynä (vakioversiona) lomakkeena, joka on täysin yhteensopiva erillisen tietokantalomakkeen kanssa. Kun liiketoiminta kasvaa siihen pisteeseen, että tarvitaan hajautettua laajennusta, arkkitehtuuri päivitetään hajautettuun muotoon ja hajautetut komponentit yhdistetään saumattomasti alkuperäisiin tietosolmuihin. Sovelluspuolella ei tarvitse siirtää tietoja tai muokata , ja voit nauttia tämän kaavan tuomasta käytettävyydestä ja skaalautumisesta, arkkitehtuurin kuvaus:"Keskitetty hajautettu integraatio"

Sekä MySQL:n MGR että PolarDB-X:n standardiversio DN käyttävät Paxos-protokollaa alimmasta periaatteesta. Mitkä ovat siis erityiset suorituskyvyt ja erot todellisessa käytössä? Tässä artikkelissa käsitellään arkkitehtuurin vertailun näkökohtia, keskeisiä eroja ja testivertailua.

MGR/DN-lyhenteen kuvaus: MGR edustaa MySQL MGR:n teknistä muotoa ja DN edustaa PolarDB-X yksittäisen DN:n keskitettyä (vakioversio) teknistä muotoa.

TL;DR

Yksityiskohtainen vertaileva analyysi on suhteellisen pitkä, joten voit lukea yhteenvedon ja johtopäätöksen ensin.

MySQL MGR:ää ei suositella yleisille yrityksille ja yrityksille, koska se vaatii ammattimaista teknistä tietämystä sekä käyttö- ja huoltotiimiä. :

  • Dark Pit 1: MySQL MGR- ja XCOM-protokollat ​​ottavat käyttöön täyden muistin Näytä ja määritä parametri sen varmistamiseksi. Tällä hetkellä MGR:n suunnittelu ei voi saavuttaa sekä suorituskykyä että RPO:ta.
  • Sudenkuoppa 2: MySQL MGR:n suorituskyky on heikko, kun verkkoviive on olemassa. Artikkelissa testattiin 4 minuutin verkkoskenaarioiden vertailua (mukaan lukien kolme tietokonehuonetta samassa kaupungissa ja kolme keskustaa kahdessa paikassa). kaupungin suorituskykyparametrit, se on vain 1/5 samassa kaupungissa, jos RPO=0 on käytössä, suorituskyky on vielä huonompi.Siksi MySQL MGR soveltuu paremmin käytettäväksi samassa tietokonehuoneessa, mutta ei sovellu tietokoneiden väliseen katastrofipalautukseen.
  • Sudenkuoppa 3: MySQL MGR:n monikopioarkkitehtuurissa valmiussolmun vika aiheuttaa pääsolmun Leader-liikenteen putoamisen nollaan, mikä ei ole terveen järjen mukaista. Artikkeli keskittyy yrittämään ottaa käyttöön MGR:n yhden johtajan tila (verrattuna MySQL:n aiempaan isäntä-orja-replika-arkkitehtuuriin), simuloimalla orjareplikan kaksi toimintoa seisokkeja ja palautusta node (Leader) ilmestyi Liikenne putosi nollaan (kesto noin 10 sekuntia), ja yleinen käytettävyys ja ylläpidettävyys oli suhteellisen huono.Siksi MySQL MGR:llä on suhteellisen korkeat vaatimukset isäntäkäytölle ja ylläpidolle, ja se vaatii ammattitaitoisen DBA-tiimin.

Verrattuna MySQL MGR:ään, PolarDB-X Paxosissa ei ole MGR:n kaltaisia ​​sudenkuoppia tietojen johdonmukaisuuden, tietokoneiden välisen katastrofipalautuksen sekä solmun toiminnan ja ylläpidon suhteen. Sillä on kuitenkin myös joitain pieniä puutteita ja etuja katastrofipalautuksessa:

  • Saman tietokonehuoneen yksinkertaisessa skenaariossa vain luku -suorituskyky alhaisella samanaikaisuudella ja puhdas kirjoitussuorituskyky korkealla samanaikaisuudella ovat noin 5 % alhaisemmat kuin MySQL MGR. Useita kopioita lähetetään samanaikaisesti suorituskyvyssä on tilaa lisäoptimoinnille.
  • Edut: 100 % yhteensopiva MySQL 5.7/8.0:n ominaisuuksien kanssa. Samaan aikaan on tehty tehokkaampia optimointeja monikopioisen tietokannan replikointi- ja vikasietopoluissa -Minuutin katastrofipalautusskenaario alalla kaikki toimivat hyvin ja voivat korvata puolisynkronoinnin (puolisynkronoinnin), MGR:n jne.

1. Arkkitehtuurin vertailu

Sanasto

MGR/DN-lyhenteen kuvaus:

  1. MGR: MySQL MGR:n tekninen muoto, myöhemmän sisällön lyhenne: MGR
  2. DN: Alibaba Cloud PolarDB-X on keskitetty (vakioversio) tekninen lomake. Hajautettua datasolmua voidaan käyttää itsenäisesti (vakioversiona) Se on täysin yhteensopiva erillisten tietokantojen kanssa kuten: DN

MGR

MGR tukee yhden isäntä- ja monen isännän tiloja ja käyttää täysin uudelleen MySQL:n replikointijärjestelmää, mukaan lukien Event, Binlog & Relaylog, Apply, Binlog Apply Recovery ja GTID. Keskeinen ero DN:stä on se, että MGR-tapahtumalokin enemmistö pääsee yhteisymmärrykseen ennen kuin päätietokantatapahtuma on sitoutunut.

  • Johtaja:
    1. Ennen kuin tapahtuma on sitoutunut, kutsutaan ennen_commit-koukkufunktio group_replication_trans_before_commit syöttämään MGR:n enemmistöreplikaatio.
    2. MGR käyttää Paxos-protokollaa synkronoidakseen THD:llä välimuistissa olevat Binlog-tapahtumat kaikkiin online-solmuihin
    3. Saatuaan enemmistön vastauksen MGR päättää, että tapahtuma voidaan lähettää
    4. THD siirtyy tapahtumaryhmän lähetysprosessiin ja alkaa kirjoittaa paikallista Binlog-päivitystä Toista vastausasiakkaan OK -viesti
  • Seuraaja:
    1. MGR:n Paxos Engine jatkaa johtajan protokollaviestien kuuntelemista
    2. Täydellisen Paxos-konsensusprosessin jälkeen on vahvistettu, että tämä (erä)tapahtuma on saavuttanut enemmistön klusterissa
    3. Kirjoita vastaanotettu tapahtuma välityslokiin, IO Thread Apply Relay Log
    4. Välityslokisovellus käy läpi täydellisen ryhmälähetysprosessin, ja valmiustilatietokanta luo lopulta oman binlog-tiedostonsa.

Syy siihen, miksi MGR ottaa käyttöön yllä olevan prosessin, johtuu siitä, että MGR on oletuksena monipäätilassa ja jokainen solmu voi kirjoittaa. Siksi yhden Paxos-ryhmän seuraajasolmun on muunnettava vastaanotettu loki ensin RelayLogiksi ja sitten yhdistettävä. sen kirjoitustapahtuman kanssa, jonka se vastaanottaa lähettäjänä, tuotetaan Binlog-tiedosto, joka lähettää lopullisen tapahtuman kaksivaiheisessa ryhmälähetysprosessissa.

DN

DN käyttää uudelleen MySQL:n perustietorakennetta ja toimintotason koodia, mutta integroi lokin replikoinnin, lokien hallinnan, lokien toiston ja kaatumispalautuksen tiiviisti X-Paxos-protokollan kanssa muodostaen oman joukon enemmistöreplikointia ja tilakonemekanismia. Keskeinen ero MGR:stä on se, että DN-tapahtumalokin enemmistö pääsee yhteisymmärrykseen päätietokantatapahtuman lähetysprosessin aikana.

  • Johtaja:
    1. Siirry tapahtuman ryhmälähetysprosessiin Ryhmälähetyksen tyhjennysvaiheessa kunkin THD:n tapahtumat kirjoitetaan Binlog-tiedostoon, ja sitten loki lähetetään asynkronisesti kaikille seuraajille X-Paxosin kautta.
    2. Ryhmälähetyksen synkronointivaiheessa Binlog säilytetään ensin ja sitten päivitetään X-Paxosin pysyvyyssijainti.
    3. Ryhmälähetyksen Commit-vaiheessa sinun on ensin odotettava, että X-Paxos saa enemmistön vastauksen, lähetettävä sitten tapahtumaryhmä ja lopuksi vastataan asiakkaalta OK-viestillä.
  • Seuraaja:
    1. X-Paxos jatkaa johtajan protokollaviestien kuuntelemista
    2. Vastaanota (ryhmä)tapahtumat, kirjoita paikalliseen Binlogiin ja vastaa
    3. Vastaanotetaan seuraava viesti, joka kuljettaa sen aseman Commit-indeksin, jossa enemmistö on saavutettu.
    4. SQL-päivityssäie jatkaa vastaanotetun Binlog-lokin käyttöä taustalla ja käyttää sitä enintään vain enemmistön asemaan.

Syynä tähän suunnitteluun on se, että DN tukee tällä hetkellä vain yhden pääkäyttäjän tilaa, joten X-Paxos-protokollan loki on itse Binlog-seuraaja, joka jättää pois myös välityslokin ja sen pysyvän lokin ja johtajan lokin ovat samat kuin Sama hinta.

2. Keskeiset erot

2.1. Paxos-protokollan tehokkuus

MGR

  • MGR:n Paxos-protokolla on toteutettu Multi-Paxos-teoriaan kuuluvan Mencius-protokollan pohjalta. Erona on, että Mencius on tehnyt optimointiparannuksia pääsolmun kuormituksen vähentämisessä ja suorituskyvyn lisäämisessä.
  • MGR:n Paxos-protokolla on toteutettu XCOM-komponenteilla, ja se tukee usean pääkäyttäjän ja yhden pääkäyttäjän tilan käyttöönottoa tavallinen Multi-Paxos-prosessi.
  • Tyydyttääkseen suurimman osan tapahtumasta XCOM:n on käytävä läpi vähintään kolme viestivuorovaikutusta Accept+AckAccept+Learn, eliVähintään 1,5 RTT yläpuolella.Se vaatii enintään kolme viestivuorovaikutusta: Valmistele+AckPrepare+Accept+AckAccept+Learn.Eli yhteensä enintään 2,5 RTT:tä
  • Koska Paxos-protokolla valmistuu XCOM-moduulissa suurella koheesiolla, eikä se ole tietoinen MySQL-replikointijärjestelmästä, johtajan on odotettava koko Paxos-prosessin valmistumista ennen kuin se suorittaa tapahtuman paikallisesti, mukaan lukien Binlogin pysyvyys ja ryhmälähetys.
  • Kun seuraaja on suorittanut suurimman osan lähetyksestä, se säilyttää tapahtumat asynkronisesti välityslokiin, ja sitten SQL Thread -sovellus ja -ryhmä lähettää tuotantobinlogin.
  • Koska Paxosin synkronoima loki on Binlog, jota ei lajiteta ennen ryhmälähetysprosessiin siirtymistä, Binlog-tapahtumien järjestys Leaderissa ei välttämättä ole sama kuin seuraajasolmun välityslokin tapahtumien järjestys.

DN

  • DN:n Paxos-protokolla on toteutettu Raft-protokollan pohjalta ja se kuuluu myös Multi-Paoxs-teoriaan.
  • DN:n Paxos-protokolla täydentää X-Paoxs-komponenttia. Oletus on yhden pään tilassa, Leaderin Binlog lähettää atomilähetyksen seuraajasolmuun .
  • Tyydyttääkseen suurimman osan tapahtumasta X-Paoxsin tarvitsee vain käydä läpi kaksi viestivuorovaikutusta: Append+AckAppend, ja vain1 RTT yleiskustannukset
  • Kun Leader on lähettänyt lokin seuraajalle, niin kauan kuin enemmistö on tyytyväinen, se sitoutuu tapahtumaan odottamatta Commit Index -lähetystä toisessa vaiheessa.
  • Ennen kuin seuraaja voi suorittaa enemmistön lähettämisen, kaikki tapahtumalokit on säilytettävä. Tämä eroaa merkittävästi MGR:n XCOM-muistista.
  • Commit-indeksi tuodaan esiin myöhemmissä viesteissä ja sykeviesteissä, ja seuraaja suorittaa Apply-tapahtuman sen jälkeen, kun CommitIndex on nostettu ylös.
  • Leaderin ja Followerin Binlog-sisällöt ovat samassa järjestyksessä, Raft-lokeissa ei ole reikiä, ja Batching/Pipeline-mekanismia käytetään lisäämään lokin replikoinnin suorituskykyä.
  • MGR:ään verrattuna Leaderilla on aina vain yksi edestakainen viive, kun tapahtuma on sitoutunut., erittäin kriittinen viiveherkille hajautetuille sovelluksille

2.2. RPO

Teoriassa sekä Paxos että Raft voivat varmistaa tietojen johdonmukaisuuden ja kaatumispalautuksen jälkeen enemmistön saavuttaneet lokit eivät katoa, mutta yksittäisissä projekteissa on silti eroja.

MGR

XCOM kapseloi Paxos-protokollan kokonaan, ja kaikki sen protokollatiedot tallennetaan ensin välimuistiin. Oletuksena enemmistön saavuttaminen ei vaadi lokin pysyvyyttä. Siinä tapauksessa, että suurin osa piirakoista on alhaalla ja Leader epäonnistuu, syntyy vakava ongelma RPO != 0.Oletetaan äärimmäinen skenaario:

  1. MGR-klusteri koostuu kolmesta solmusta ABC, joista AB on itsenäinen tietokonehuone samassa kaupungissa ja C on kaupunkien välinen solmu. A on johtaja, BC on seuraajasolmu
  2. Aloita tapahtuma 001 Leader A -solmussa. Johtaja A lähettää tapahtumalokin 001 BC-solmulle, jos suurin osa on tyytyväinen Paxos-protokollan kautta, tapahtuma voidaan katsoa lähetetyksi. Osio AB muodosti enemmistön, eikä solmu C saanut tapahtumalokia 001 kaupunkien välisen verkon viiveen vuoksi.
  3. Seuraavalla hetkellä johtaja A lähettää tapahtuman 001 ja palauttaa Asiakkaan onnistumisen, mikä tarkoittaa, että tapahtuma 001 on lähetetty tietokantaan.
  4. Tällä hetkellä solmun B seuraajassa tapahtuman 001 loki on edelleen XCOM-välimuistissa, eikä sitä ole ehtinyt tyhjentää RelayLogiin tällä hetkellä, solmun C seuraaja ei ole vieläkään vastaanottanut tapahtumaa 001 loki solmun A johtajalta.
  5. Tällä hetkellä solmu AB ei toimi, solmu A epäonnistuu eikä sitä voida palauttaa pitkään aikaan, solmu B käynnistyy uudelleen ja palautuu nopeasti, ja solmut BC tarjoavat edelleen luku- ja kirjoituspalveluita.
  6. Koska tapahtumalokia 001 ei säilytetty solmun B RelayLogissa seisokkiajan aikana, eikä solmu C vastaanottanut sitä, joten tällä hetkellä BC-solmu on todella menettänyt tapahtuman 001 eikä voi hakea sitä.
  7. Tässä skenaariossa, jossa enemmistöpuolue on kaatunut, RPO!=0

Yhteisön oletusparametreilla suurin osa tapahtumista ei vaadi lokin pysyvyyttä eikä takaa RPO=0:a Tätä voidaan pitää kompromissina XCOM-projektin toteutuksessa. Varmistaaksesi absoluuttisen RPO = 0, sinun on määritettävä parametri group_replication_consistency, joka ohjaa luku- ja kirjoitusyhteensopivuutta kohtaan AFTER. Tässä tapauksessa tapahtuma vaatii kuitenkin 1,5 RTT-verkon ylimääräisen lisäkulun saavuttaakseen suurimman osan. ja suorituskyky tulee olemaan erittäin huono.

DN

PolarDB-X DN käyttää X-Paxosta hajautetun protokollan toteuttamiseen ja on syvästi sidottu MySQL:n ryhmäsitoumusprosessiin. Suurin osa levyn sijoittelusta viittaa tässä pääkirjaston Binlog-sijoitteluun. Valmiustilassa olevan kirjaston IO-säie vastaanottaa pääkirjaston lokin ja kirjoittaa sen omaan Binlogiin pysyvyyttä varten. Siksi, vaikka kaikki solmut epäonnistuvat äärimmäisissä skenaarioissa, tietoja ei menetetä ja RPO=0 voidaan taata.

2.3. RTO

RTO-aika liittyy läheisesti itse järjestelmän kylmäkäynnistykseen kuluvaan aikaan, mikä näkyy erityisissä perustoiminnoissa:Vian havaitsemismekanismi -> kaatumispalautusmekanismi -> päävalintamekanismi -> lokin tasapainotus

2.3.1 Vian havaitseminen

MGR

  • Jokainen solmu lähettää ajoittain sykepaketteja muille solmuille tarkistaakseen, ovatko muut solmut terveet. Sykejakso on kiinteä 1 sekuntia, eikä sitä voi säätää.
  • Jos nykyinen solmu havaitsee, että muut solmut eivät ole vastanneet group_replication_member_expel_timeout (oletus 5s) jälkeen, sitä pidetään epäonnistuneena solmuna ja se poistetaan klusterista.
  • Poikkeustapauksissa, kuten verkkokatkos tai epänormaali uudelleenkäynnistys, verkon palauttamisen jälkeen yksi epäonnistunut solmu yrittää automaattisesti liittyä klusteriin ja sitoa sitten lokin.

DN

  • Leader-solmu lähettää ajoittain sykepaketteja muille solmuille tarkistaakseen, ovatko muut solmut terveet. Sykejakso on 1/5 valinnan aikakatkaisusta. Valinnan aikakatkaisua ohjaa parametri consensus_election_timeout Oletusarvo on 5 s, joten johtosolmun sykejakson oletusarvo on 1 s.
  • Jos johtaja havaitsee, että muut solmut ovat offline-tilassa, se jatkaa ajoittain sykepakettien lähettämistä kaikille muille solmuille varmistaakseen, että muut solmut pääsevät käsiksi ajoissa kaatumisen ja palautumisen jälkeen.Leader-solmu ei kuitenkaan enää lähetä tapahtumalokeja offline-solmuun.
  • Ei-johtajasolmut eivät lähetä sydämenlyöntien tunnistuspaketteja, mutta jos ei-johtajasolmu havaitsee, että se ei ole vastaanottanut sykettä johtajasolmulta consensus_election_timeout jälkeen, uudelleenvalinta käynnistyy.
  • Poikkeustapauksissa, kuten verkkokatkos tai epänormaali uudelleenkäynnistys, viallinen solmu liittyy automaattisesti klusteriin verkon palauttamisen jälkeen.
  • Siksi DN tarjoaa vian havaitsemisen kannalta enemmän käyttö- ja ylläpitomääritysliittymiä, ja vikojen tunnistaminen kaupunkien välisissä käyttöönottoskenaarioissa on tarkempaa.

2.3.2 Kaatumisista palautuminen

MGR

    • XCOM:n toteuttama Paxos-protokolla on muistitilassa. Enemmistön saavuttaminen ei vaadi pysyvyyttä.Jos kaikki solmut katkaisevat puhelun, protokollaa ei voida palauttaa Kun klusteri on käynnistetty uudelleen, sen palauttaminen edellyttää manuaalista toimenpidettä.
    • Jos vain yksi solmu kaatuu ja se palautetaan, mutta seuraajasolmu jää jäljessä Leader-solmusta, jolla on enemmän tapahtumalokeja, ja Leaderin XCOM-välimuistissa olevat tapahtumalokit on tyhjennetty, ainoa vaihtoehto on käyttää Global Recovery- tai Clone -prosessia.
    • XCOM-välimuistin kokoa ohjaa group_replication_message_cache_size, oletusarvo on 1 Gt
    • Global Recovery tarkoittaa, että kun solmu liittyy uudelleen klusteriin, se palauttaa tiedot hankkimalla tarvittavat puuttuvat tapahtumalokit (binaariloki) muilta solmuilta.Tämä prosessi perustuu vähintään yhteen klusterin solmuun, joka säilyttää kaikki vaaditut tapahtumalokit
    • Clone luottaa Clone Pluginiin, jota käytetään palautukseen, kun tietomäärä on suuri tai monet lokit puuttuvat.Se toimii kopioimalla tilannekuvan koko tietokannasta kaatuneeseen solmuun, minkä jälkeen suoritetaan lopullinen synkronointi viimeisimmän tapahtumalokin kanssa.
    • Global Recovery- ja Clone-prosessit ovat yleensä automatisoituja, mutta joissain erikoistapauksissa, kuten verkkoongelmissa tai kahden muun solmun XCOM-välimuistin tyhjennyksenä, tarvitaan manuaalista toimenpiteitä.

DN

    • X-Paxos-protokolla käyttää Binlogin pysyvyyttä Kun kaatumisesta palautuu, lähetetyt tapahtumat palautetaan ensin. Odottavat tapahtumat odottavat, että XPaxos-protokollakerros pääsee sopimukseen master-backup-suhteen määrittämiseksi, ennen kuin sitoudut tai peruutat tapahtuman. Koko prosessi on täysin automatisoitu.Vaikka kaikki solmut ovat alhaalla, klusteri voi palautua automaattisesti uudelleenkäynnistyksen jälkeen.
    • Skenaarioissa, joissa seuraajasolmu on jäljessä Leader-solmun jälkeen monissa tapahtumalokeissa, niin kauan kuin Leaderin Binlog-tiedostoa ei poisteta, Seuraaja-solmu saavuttaa varmasti.
    • Siksi DN ei vaadi kaatumisen palauttamisen kannalta manuaalista puuttumista ollenkaan.

2.3.3 Johtajan valinta

Single-master-tilassa MGR:n XCOM ja DN X-Paxos, vahva johtajatila, noudattavat samaa perusperiaatetta johtajan valinnassa - klusterin sopimia lokeja ei voi peruuttaa. Mutta mitä tulee yksimielisyyteen, siinä on eroja

MGR

  • Leader-valinta kertoo enemmän siitä, mikä solmu toimii Leader-palveluna seuraavaksi.Tällä Leaderilla ei välttämättä ole viimeisintä konsensuslokia, kun se valitaan, joten sen on synkronoitava uusimmat lokit muista klusterin solmuista ja tarjottava luku- ja kirjoituspalveluita lokien sidottua.
  • Tämän etuna on, että itse Leaderin valinta on strateginen tuote, kuten paino ja järjestys. MGR ohjaa kunkin solmun painoa group_replication_member_weight -parametrin kautta
  • Haittapuolena on, että vastikään valitulla johtajalla itsellään voi olla suuri replikointiviive, ja sen on edelleen päästävä kiinni lokiin tai sillä voi olla suuri sovellusviive, ja sen on edelleen saatava kiinni lokisovellukseen, ennen kuin se voi tarjota luku- ja kirjoituspalvelut.Tämä johtaa pidemmän RTO-ajan

DN

  • Johtajan valinta on pöytäkirjan merkityksessä se, missä solmussa on kaikkien klusterin enemmistöpuolueiden lokit, voidaan valita johtajaksi, joten tämä solmu on voinut olla seuraaja tai kirjailija.
  • Loggeri ei voi tarjota luku- ja kirjoituspalveluita Synkronoituaan lokit muihin solmuihin, se luopuu aktiivisesti johtajan roolista.
  • Varmistaakseen, että nimetystä solmusta tulee johtaja, DN käyttää optimistista painostrategiaa + pakollista painostrategiaa rajoittaakseen johtajaksi tulemisen järjestystä ja käyttää strategista enemmistömekanismia varmistaakseen, että uusi isäntä voi välittömästi tarjota luku- ja kirjoitustoiminnot. palvelut ilman viivettä.
  • Siksi johtajan valinnassa DN ei vain tue samaa strategista valintaa kuin MGR, vaan tukee myös pakollisia painostrategioita.

2.3.4 Lokin sovitus

Lokin tasaus tarkoittaa, että lokeissa on lokien replikointiviive ensisijaisen ja toissijaisen tietokannan välillä, ja toissijaisen tietokannan on tasattava lokit. Uudelleenkäynnistetyille ja palautetuille solmuille palautus aloitetaan yleensä valmiustilatietokannasta, ja lokin replikointiviive on jo tapahtunut päätietokantaan verrattuna, ja lokit on saatava päätietokantaan. Niille solmuille, jotka ovat fyysisesti kaukana Leaderista, enemmistön saavuttamisella ei yleensä ole mitään tekemistä niiden kanssa. Niillä on aina replikointilokin viive ja ne saavuttavat aina lokin. Nämä tilanteet edellyttävät erityistä suunnittelutoteutusta lokin replikointiviiveiden oikea-aikaisen ratkaisemisen varmistamiseksi.

MGR

  • Tapahtumalokit ovat kaikki XCOM-välimuistissa, ja välimuisti on oletuksena vain 1G. Siksi välimuisti on helppo tyhjentää, kun seuraajasolmu on paljon jäljessä pyyntölokien kopioinnissa.
  • Tällä hetkellä jäljessä oleva seuraaja potkaistaan ​​automaattisesti ulos klusterista ja käyttää sitten yllä mainittua Global Recovery- tai Clone-prosessia kaatumisista palautumiseen ja liittyy sitten automaattisesti klusteriin, kun se on kiinni.Jos kohtaatEsimerkiksi verkko-ongelmat tai kahden muun solmun XCOM-välimuisti tyhjennetään, jolloin ongelman ratkaiseminen edellyttää manuaalista puuttumista.
  • Miksi meidän on poistettava klusteri ensin, koska viallinen solmu monikirjoitustilassa vaikuttaa suuresti suorituskykyyn, eikä Leaderin välimuistilla ole vaikutusta siihen. Se täytyy lisätä asynkronisen yhdistämisen jälkeen.
  • Miksi emme voi lukea suoraan Leaderin paikallista Binlog-tiedostoa Koska aiemmin mainittu XCOM-protokolla on täydessä muistissa, eikä Binlogissa ja välityslokissa ole protokollatietoja?

DN

  • Kaikki tiedot ovat Binlog-tiedostossa Niin kauan kuin Binlogia ei puhdisteta, ne voidaan lähettää pyynnöstä, eikä sitä ole mahdollista potkaista ulos klusterista.
  • Vähentääkseen IO-värinää, jonka aiheuttaa pääkirjasto, joka lukee vanhoja tapahtumalokeja Binlog-tiedostosta, DN antaa etusijalle viimeksi välimuistissa olevien tapahtumalokien lukemisen FIFO-välimuistista. FIFO-välimuistia ohjaa parametri consensus_log_cache_size ja oletusarvo on 64 miljoonaa
  • Jos päivitetty tapahtumaloki on poistanut vanhan tapahtumalokin FIFO-välimuistista, DN yrittää lukea aiemmin välimuistissa olevan tapahtumalokin Prefetch-välimuistista. Prefetch-välimuistia ohjaa parametri consensus_prefetch_cache_size, ja oletusarvo on 64M.
  • Jos esihaun välimuistissa ei ole vaadittua vanhaa tapahtumalokia, DN yrittää käynnistää asynkronisen IO-tehtävän, lukee useita peräkkäisiä lokeja ennen ja jälkeen määritettyä tapahtumalokia Binlog-tiedostosta erissä, sijoittaa ne Prefetch-välimuistiin ja odottaa. DN:n seuraavaa uudelleenlukemista varten
  • Siksi DN ei vaadi lainkaan manuaalista puuttumista lokin tasapainottamiseen.

2.4 Valmiustilan tietokannan toistoviive

Valmiustilatietokannan toistoviive on viive ajankohdan välillä, jolloin sama tapahtuma suoritetaan päätietokannassa, ja aika, jolloin tapahtuma otetaan käyttöön valmiustilatietokannassa. Tässä testataan valmiustilatietokannan Apply-lokin suorituskyky. Se vaikuttaa siihen, kuinka kauan valmiustilassa oleva tietokanta suorittaa tietosovelluksensa ja tarjoaa luku- ja kirjoituspalveluita poikkeuksen sattuessa.

MGR

  • MGR-valmiustietokanta vastaanottaa RelayLog-tiedoston päätietokannasta Kun sovellusta käytetään, sen täytyy lukea RelayLog uudelleen, käydä läpi täydellinen kaksivaiheinen ryhmälähetysprosessi ja tuottaa vastaavat tiedot ja Binlog-tiedostot.
  • Tapahtumasovelluksen tehokkuus tässä on sama kuin tapahtuman lähetyksen tehokkuus päätietokannassa. Oletusarvoinen double-one-kokoonpano (innodb_flush_log_at_trx_commit, sync_binlog) aiheuttaa sen, että valmiustilan tietokantasovelluksen resurssit ovat suuret.

DN

  • DN-varmuuskopiotietokanta vastaanottaa Binlog-tiedoston päätietokannasta Hakemuksen yhteydessä Binlog-tiedosto on luettava uudelleen. Sen tarvitsee vain käydä läpi yksivaiheinen ryhmälähetysprosessi ja tuottaa vastaavat tiedot.
  • Koska DN tukee täydellistä Crash Recover -toimintoa, valmiustilassa olevan tietokantasovelluksen ei tarvitse ottaa käyttöön innodb_flush_log_at_trx_commit=1, joten double-one-kokoonpano ei itse asiassa vaikuta siihen.
  • Siksi valmiustilatietokannan toistoviiveen suhteen DN-valmiustilatietokannan toistotehokkuus on paljon suurempi kuin MGR.

2.5 Suurten tapahtumien vaikutukset

Suuret tapahtumat eivät vaikuta vain tavallisten tapahtumien lähettämiseen, vaan vaikuttavat myös koko hajautetun protokollan vakauteen hajautetussa järjestelmässä.

MGR

  • MGR:ssä ei ole optimointia suurten tapahtumien tukemiseksi. Se vain lisää parametrin group_replication_transaction_size_limit suurten tapahtumien ylärajan hallitsemiseksi.
  • Kun tapahtumaloki ylittää suuren tapahtumarajan, virhe raportoidaan suoraan eikä tapahtumaa voida lähettää.

DN

  • Suurten tapahtumien aiheuttaman hajautettujen järjestelmien epävakausongelman ratkaisemiseksi DN ottaa käyttöön ratkaisun suurten tapahtumien jakamisesta + suuren objektin jakamisesta ongelman ratkaisemiseksi jakaa tapahtumalokin loogisesti + fyysisesti pieniä lohkoja, jokainen pieni tapahtumalokin lohko käyttää täyttä Paxos-sitoumustakuuta
  • Suurten tapahtumien jakamisen ratkaisun perusteella DN ei aseta rajoituksia suurten tapahtumien koolle. Käyttäjät voivat käyttää niitä halutessaan ja voivat myös varmistaa, että RPO = 0.
  • Katso tarkemmat ohjeet"PolarDB-X Storage Engine -ydintekniikka | Suuren tapahtuman optimointi"
  • Siksi DN voi hoitaa suuria asioita ilman, että suuret asiat vaikuttavat siihen.

2.6 Käyttöönottolomake

MGR

  • MGR tukee yhden isäntä- ja usean isännän käyttöönottotiloja Multi-master-tilassa jokaista solmua voidaan lukea ja kirjoittaa. vain.
  • Korkean käytettävyyden MGR-käyttöönotto vaatii vähintään kolme solmun käyttöönottoa, eli vähintään kolme kopiota tiedoista ja lokeista. Lokikopiointitilaa ei tueta.
  • MGR ei tue vain luku -solmujen laajentamista, mutta se tukee MGR + master-slave -replikointitilan yhdistelmää samanlaisen topologian laajennuksen saavuttamiseksi.

DN

  • DN tukee yhden pääkäyttäjän tilan käyttöönottoa. Yhden pääkäyttäjän tilassa päätietokanta voidaan lukea ja kirjoittaa, ja valmiustilatietokanta voi olla vain luku -tilassa.
  • DN:n korkean käytettävyyden käyttöönotto vaatii vähintään kolmea solmua, mutta tukee lokikopiointia, eli Leader ja Follower ovat täydellisiä kopioita Loggeriin verrattuna siinä on vain lokit eikä tietoja, eikä sillä ole oikeutta olla valittu. Tässä tapauksessa kolmen solmun korkean käytettävyyden käyttöönotto vaatii vain 2 datakopion + 3 lokikopion tallennuksen, mikä tekee siitä edullisen käyttöönoton.
  • DN tukee vain luku -solmun käyttöönottoa ja vain luku -kopiointia. Verrattuna täysimittaisiin kopioihin, sillä ei ole äänioikeuksia vain Learner-kopioiden kautta.

2.7 Ominaisuuden yhteenveto

MGR

DN

Protokollan tehokkuus

Tapahtuman toimitusaika

1,5-2,5 RTT

1 RTT

Enemmistön pysyvyys

XCOM-muistin tallennus

Binlogin pysyvyys

luotettavuus

RPO = 0

Ei ole taattu oletuksena

Täysin taattu

Vian havaitseminen

Kaikki solmut tarkistavat toisensa, verkon kuormitus on korkea

Sykejaksoa ei voi säätää

Pääsolmu tarkistaa säännöllisesti muut solmut

Sykejakson parametrit ovat säädettävissä

Enemmistön romahtaminen

manuaalinen interventio

Automaattinen palautus

Minority Crash Recovery

Automaattinen palautus useimmissa tapauksissa, manuaalinen puuttuminen erityisissä olosuhteissa

Automaattinen palautus

Valitse mestari

Määritä valintajärjestys vapaasti

Määritä valintajärjestys vapaasti

Hirsisolmio

Viivästyneet lokit eivät voi ylittää XCOM 1 Gt:n välimuistia

BInlog-tiedostoja ei poisteta

Valmiustilan tietokannan toistoviive

Kaksi vaihetta + tupla yksi, erittäin hidas

Yksi vaihe + tuplanolla, nopeammin

Iso yritys

Oletusraja on enintään 143 Mt

Ei kokorajoitusta

muodossa

Korkea saatavuuskustannukset

Täysin toimiva kolme kopiota, 3 kopiota tallennustilaa

Lokikopio, 2 kopiota tallennustilasta

vain luku -solmu

Toteutettu master-slave -replikaatiolla

Protokollassa on Leaner-vain luku -kopiototeutus

3. Testivertailu

MGR otettiin käyttöön MySQL 5.7.17:ssä, mutta enemmän MGR:ään liittyviä ominaisuuksia on saatavilla vain MySQL 8.0:ssa, ja MySQL 8.0.22:ssa ja uudemmissa versioissa yleinen suorituskyky on vakaampi ja luotettavampi. Siksi valitsimme molempien osapuolten uusimman version 8.0.32 vertailutestaukseen.

Ottaen huomioon, että PolarDB-X DN:n ja MySQL MGR:n vertailutestauksen aikana on eroja testiympäristöissä, käännösmenetelmissä, käyttöönottomenetelmissä, toimintaparametreissa ja testausmenetelmissä, mikä voi johtaa epätarkkoihin testivertailutietoihin, tässä artikkelissa keskitytään erilaisiin yksityiskohtiin. Toimi seuraavasti:

testin valmistelu

PolarDB-X DN

MySQL MGR[1]

Laitteistoympäristö

Käytä samaa fyysistä konetta 96C 754GB muistilla ja SSD-levyllä

käyttöjärjestelmä

Linux 4.9.168-019.ali3000.alios7.x86_64

Ytimen versio

Yhteisöversioon 8.0.32 perustuvan ytimen perustason käyttö

Kokoonpanomenetelmä

Kääntää samalla RelWithDebInfolla

Toimintaparametrit

Käytä samaa PolarDB-X:n virallista verkkosivustoa myydäksesi 32C128G:tä samoilla teknisillä ja parametreilla

Käyttöönottomenetelmä

Yksi master -tila

Huomautus:

  • MGR on oletuksena käytössä, kun taas PolarDB-X DN on oletuksena pois päältä.Siksi MGR:n group_replication_flow_control_mode konfiguroidaan erikseen, jotta MGR:n suorituskyky on paras.
  • MGR:llä on ilmeinen lukemisen pullonkaula luettelon aikana, joten MGR:n replication_optimize_for_static_plugin_config konfiguroidaan ja otetaan käyttöön erikseen, jotta MGR:n vain luku -suorituskyky on paras.

3.1 Suorituskyky

Suorituskykytestaus on ensimmäinen asia, johon jokainen kiinnittää huomiota tietokantaa valitessaan. Täällä käytämme virallista sysbench-työkalua rakentamaan 16 taulukkoa, joissa kussakin on 10 miljoonaa dataa, suorittamaan suorituskykytestauksia OLTP-skenaarioissa sekä testaamaan ja vertaamaan näiden kahden suorituskykyä eri samanaikaisissa olosuhteissa eri OLTP-skenaarioissa.Ottaen huomioon todellisen käyttöönoton eri tilanteet, simuloimme seuraavat neljä käyttöönottoskenaariota:

  1. Samassa tietokonehuoneessa on käytössä kolme solmua. Verkon viive on 0,1 ms, kun koneet pingaavat toisiaan.
  2. Kolme keskusa samassa kaupungissa ja kolme tietokonehuonetta samalla alueella käyttävät kolmea solmua Tietokonehuoneiden välisessä pingissä on 1 ms:n viive (esimerkiksi kolme tietokonehuonetta Shanghaissa).
  3. Kolme keskusta kahdessa paikassa, kolme solmua kolmessa tietokonehuoneessa kahdessa paikassa, 1 ms verkon ping saman kaupungin tietokonehuoneiden välillä, 30 ms verkon viive saman kaupungin ja toisen paikan välillä (esimerkiksi Shanghai/Shanghai/Shenzhen)
  4. Kolme keskusta kolmessa paikassa, kolme solmua kolmessa tietokonehuoneessa kolmessa paikassa (esimerkiksi: Shanghai/Hangzhou/Shenzhen), verkon viive Hangzhoun ja Shanghain välillä on noin 5ms ja kauimpana etäisyys Hangzhousta/Shanghaista Shenzheniin on 30ms. .

havainnollistaa:

a. Harkitse neljän käyttöönottoskenaarion suorituskyvyn horisontaalista vertailua. Kolme keskusa kahdessa paikassa ja kolme keskusa ottavat käyttöön 3 kopion käyttöönottotilan.

b. Ottaen huomioon tiukat rajoitukset RPO=0:lle käytettäessä korkean käytettävyyden tietokantatuotteita, MGR on määritetty oletuksena RPO<>0:lla. Tässä jatkamme vertailutestien lisäämistä MGR RPO<>0:n ja RPO=0:n välillä käyttöönoton skenaario.

  • MGR_0 edustaa dataa tapauksessa MGR RPO = 0
  • MGR_1 edustaa dataa tapaukselle MGR RPO <> 0
  • DN edustaa dataa tapauksessa DN RPO = 0

3.1.1 Sama tietokonehuone

1

4

16

64

256

oltp_read_only

MGR_1

688.42

2731.68

6920.54

11492.88

14561.71

MGR_0

699.27

2778.06

7989.45

11590.28

15038.34

DN

656.69

2612.58

7657.03

11328.72

14771.12

MGR_0 vs. MGR_1

1.58%

1.70%

15.45%

0.85%

3.27%

DN vs MGR_1

-4.61%

-4.36%

10.64%

-1.43%

1.44%

DN vs MGR_0

-6.09%

-5.96%

-4.16%

-2.26%

-1.78%

oltp_read_write

MGR_1

317.85

1322.89

3464.07

5052.58

6736.55

MGR_0

117.91

425.25

721.45

217.11

228.24

DN

360.27

1485.99

3741.36

5460.47

7536.16

MGR_0 vs. MGR_1

-62.90%

-67.85%

-79.17%

-95.70%

-96.61%

DN vs MGR_1

13.35%

12.33%

8.00%

8.07%

11.87%

DN vs MGR_0

205.55%

249.44%

418.59%

2415.07%

3201.86%

oltp_write_only

MGR_1

761.87

2924.1

7211.97

10374.15

16092.02

MGR_0

309.83

465.44

748.68

245.75

318.48

DN

1121.07

3787.64

7627.26

11684.37

15137.23

MGR_0 vs. MGR_1

-59.33%

-84.08%

-89.62%

-97.63%

-98.02%

DN vs MGR_1

47.15%

29.53%

5.76%

12.63%

-5.93%

DN vs MGR_0

261.83%

713.78%

918.76%

4654.58%

4652.96%

Se näkyy testituloksista:

  • Vain luku -skenaariossa, verrataanpa sitten MGR_1 (RPO<>0) tai MGR_0 (RPO=0), ero DN:n ja MGR:n välillä on vakaa välillä -5 % ja 10 %, jota voidaan pitää periaatteessa samana. Se, onko RPO yhtä suuri kuin 0, ei vaikuta vain luku -tapahtumiin
  • Sekaisessa luku-kirjoitus- ja vain kirjoitustapahtumissa DN:n (RPO=0) suorituskyky paranee 5 %:lla 47 %:iin verrattuna MGR_1:een (RPO<>0), ja DN:n suorituskykyetu on ilmeinen, kun Samanaikaisuus on alhainen, ja etu, kun samanaikaisuus on korkea Ei-ilmeisiä ominaisuuksia. Tämä johtuu siitä, että DN:n protokollatehokkuus on korkeampi, kun samanaikaisuus on alhainen, mutta DN:n ja MGR:n suorituskykypisteet korkean samanaikaisuuden aikana ovat kaikki puhdistuksessa.
  • Samassa lähtökohdassa RPO=0, luku-kirjoitus- ja vain kirjoitustapahtumissa, DN:n suorituskyky paranee 2 kertaa 46-kertaiseksi verrattuna MGR_0:aan, ja samanaikaisuuden kasvaessa DN:n suorituskykyetu paranee. Ei ihme, että MGR hylkää oletuksena myös RPO=0:n suorituskyvyn vuoksi.

3.1.2 Kolme keskustaa samassa kaupungissa

TPS vertailu

1

4

16

64

256

oltp_read_only

MGR_1

695.69

2697.91

7223.43

11699.29

14542.4

MGR_0

691.17

2708.6

7849.98

11636.94

14670.99

DN

645.11

2611.15

7628.39

11294.36

14647.22

MGR_0 vs. MGR_1

-0.65%

0.40%

8.67%

-0.53%

0.88%

DN vs MGR_1

-7.27%

-3.22%

5.61%

-3.46%

0.72%

DN vs MGR_0

-6.66%

-3.60%

-2.82%

-2.94%

-0.16%

oltp_read_write

MGR_1

171.37

677.77

2230

3872.87

6096.62

MGR_0

117.11

469.17

765.64

813.85

812.46

DN

257.35

1126.07

3296.49

5135.18

7010.37

MGR_0 vs. MGR_1

-31.66%

-30.78%

-65.67%

-78.99%

-86.67%

DN vs MGR_1

50.17%

66.14%

47.82%

32.59%

14.99%

DN vs MGR_0

119.75%

140.01%

330.55%

530.97%

762.86%

oltp_write_only

MGR_1

248.37

951.88

2791.07

5989.57

11666.16

MGR_0

162.92

603.72

791.27

828.16

866.65

DN

553.69

2173.18

5836.64

10588.9

13241.74

MGR_0 vs. MGR_1

-34.40%

-36.58%

-71.65%

-86.17%

-92.57%

DN vs MGR_1

122.93%

128.30%

109.12%

76.79%

13.51%

DN vs MGR_0

239.85%

259.96%

637.63%

1178.61%

1427.92%

Se näkyy testituloksista:

  • Vain luku -skenaariossa, verrataanpa sitten MGR_1 (RPO<>0) tai MGR_0 (RPO=0), ero DN:n ja MGR:n välillä on vakaa välillä -7 % ja 5 %, jota voidaan pitää periaatteessa samana. Se, onko RPO yhtä suuri kuin 0, ei vaikuta vain luku -tapahtumiin
  • Sekaisessa luku-kirjoitus- ja vain kirjoitustapahtumien skenaariossa DN:n (RPO=0) suorituskyky paranee 30–120 % verrattuna MGR_1:een (RPO<>0), ja DN:n suorituskykyetu on ilmeinen samanaikaisesti on alhainen, ja kun samanaikaisuus on korkea, suorituskyky on parempi Ei-ilmeisiä ominaisuuksia. Tämä johtuu siitä, että DN:n protokollatehokkuus on korkeampi, kun samanaikaisuus on alhainen, mutta DN:n ja MGR:n suorituskykypisteet korkean samanaikaisuuden aikana ovat kaikki puhdistuksessa.
  • Samassa lähtökohdassa RPO=0, luku-kirjoitus- ja vain kirjoitustapahtumissa, DN:n suorituskyky paranee 1-14 kertaa verrattuna MGR_0:aan, ja samanaikaisuuden kasvaessa DN:n suorituskykyetu paranee. Ei ihme, että MGR hylkää oletuksena myös RPO=0:n suorituskyvyn vuoksi.

3.1.3 Kaksi paikkaa ja kolme keskustaa

TPS vertailu

1

4

16

64

256

oltp_read_only

MGR_1

687.76

2703.5

7030.37

11580.36

14674.7

MGR_0

687.17

2744.41

7908.44

11535.35

14656

DN

657.06

2610.58

7591.21

11174.94

14545.45

MGR_0 vs. MGR_1

-0.09%

1.51%

12.49%

-0.39%

-0.13%

DN vs MGR_1

-4.46%

-3.44%

7.98%

-3.50%

-0.88%

DN vs MGR_0

-4.38%

-4.88%

-4.01%

-3.12%

-0.75%

oltp_read_write

MGR_1

29.13

118.64

572.25

997.92

2253.19

MGR_0

26.94

90.8

313.64

419.17

426.7

DN

254.87

1146.57

3339.83

5307.85

7171.95

MGR_0 vs. MGR_1

-7.52%

-23.47%

-45.19%

-58.00%

-81.06%

DN vs MGR_1

774.94%

866.43%

483.63%

431.89%

218.30%

DN vs MGR_0

846.07%

1162.74%

964.86%

1166.28%

1580.79%

oltp_write_only

MGR_1

30.81

145.54

576.61

1387.64

3705.51

MGR_0

28.68

108.86

387.48

470.5

476.4

DN

550.11

2171.64

5866.41

10381.72

14478.38

MGR_0 vs. MGR_1

-6.91%

-25.20%

-32.80%

-66.09%

-87.14%

DN vs MGR_1

1685.49%

1392.13%

917.40%

648.16%

290.73%

DN vs MGR_0

1818.10%

1894.89%

1413.99%

2106.53%

2939.12%

Se näkyy testituloksista:

  • Vain luku -skenaariossa, verrataanpa sitten MGR_1 (RPO<>0) tai MGR_0 (RPO=0), ero DN:n ja MGR:n välillä on vakaa välillä -4 % ja 7 %, jota voidaan pitää periaatteessa samana. Se, onko RPO yhtä suuri kuin 0, ei vaikuta vain luku -tapahtumiin
  • Sekaisessa luku-kirjoitus- ja vain kirjoitustapahtumien skenaariossa DN:n (RPO=0) suorituskyky paranee 2-16-kertaiseksi verrattuna MGR_1:een (RPO<>0), ja DN:n suorituskykyetu on ilmeinen samanaikaisissa on alhainen, ja etu samanaikaisuuden ollessa korkea Ei-ilmeisiä ominaisuuksia. Tämä johtuu siitä, että DN:n protokollatehokkuus on korkeampi, kun samanaikaisuus on alhainen, mutta DN:n ja MGR:n suorituskykypisteet korkean samanaikaisuuden aikana ovat kaikki puhdistuksessa.
  • Samassa lähtökohdassa RPO=0, luku-kirjoitus- ja vain kirjoitustapahtumissa, DN:n suorituskyky paranee 8 kertaa 29-kertaiseksi verrattuna MGR_0:aan, ja samanaikaisuuden kasvaessa DN:n suorituskykyetu paranee. Ei ihme, että MGR hylkää oletuksena myös RPO=0:n suorituskyvyn vuoksi.

3.1.4 Kolme paikkaa ja kolme keskusta

TPS vertailu

1

4

16

64

256

oltp_read_only

MGR_1

688.49

2747.69

7853.91

11722.71

15292.73

MGR_0

687.66

2756.3

8005.11

11567.89

15055.69

DN

656.06

2600.35

7657.85

11227.56

14562.86

MGR_0 vs. MGR_1

-0.12%

0.31%

1.93%

-1.32%

-1.55%

DN vs MGR_1

-4.71%

-5.36%

-2.50%

-4.22%

-4.77%

DN vs MGR_0

-4.60%

-5.66%

-4.34%

-2.94%

-3.27%

oltp_read_write

MGR_1

26.01

113.98

334.95

693.34

2030.6

MGR_0

23.93

110.17

475.68

497.92

511.99

DN

122.06

525.88

1885.7

3314.9

5889.79

MGR_0 vs. MGR_1

-8.00%

-3.34%

42.02%

-28.19%

-74.79%

DN vs MGR_1

369.28%

361.38%

462.98%

378.11%

190.05%

DN vs MGR_0

410.07%

377.34%

296.42%

565.75%

1050.37%

oltp_write_only

MGR_1

27.5

141.64

344.05

982.47

2889.85

MGR_0

25.52

155.43

393.35

470.92

504.68

DN

171.74

535.83

1774.58

4328.44

9429.24

MGR_0 vs. MGR_1

-7.20%

9.74%

14.33%

-52.07%

-82.54%

DN vs MGR_1

524.51%

278.30%

415.79%

340.57%

226.29%

DN vs MGR_0

572.96%

244.74%

351.15%

819.15%

1768.36%

Se näkyy testituloksista:

  • Vain luku -skenaariossa, verrataanpa sitten MGR_1 (RPO<>0) tai MGR_0 (RPO=0), ero DN:n ja MGR:n välillä on vakaa välillä -5 % ja 0 %, jota voidaan pitää periaatteessa samana. Se, onko RPO yhtä suuri kuin 0, ei vaikuta vain luku -tapahtumiin
  • Sekoitettu luku-kirjoitus- ja vain kirjoitustapahtumien skenaariossa DN:n (RPO=0) suorituskyky paranee 2-5-kertaiseksi verrattuna MGR_1:een (RPO<>0), ja DN:n suorituskykyetu on ilmeinen samanaikaisuudessa. on alhainen, ja etu samanaikaisuuden ollessa korkea Ei-ilmeisiä ominaisuuksia. Tämä johtuu siitä, että DN:n protokollatehokkuus on korkeampi, kun samanaikaisuus on alhainen, mutta DN:n ja MGR:n suorituskykypisteet korkean samanaikaisuuden aikana ovat kaikki puhdistuksessa.
  • Samassa lähtökohdassa RPO=0, luku-kirjoitus- ja vain kirjoitustapahtumissa, DN:n suorituskyky paranee 2 kertaa 17-kertaiseksi verrattuna MGR_0:aan, ja samanaikaisuuden kasvaessa DN:n suorituskykyetu paranee. Ei ihme, että MGR hylkää oletuksena myös RPO=0:n suorituskyvyn vuoksi.

3.1.5 Käyttöönoton vertailu

Vertaaksemme selkeästi suorituskyvyn muutoksia eri käyttöönottomenetelmissä, valitsimme yllä olevassa testissä MGR:n ja DN:n TPS-tiedot eri käyttöönottomenetelmien oltp_write_only 256 -skenaariossa vertaili eri käyttöönottomenetelmien TPS-tietoja perusarvoon havaitakseen eron suorituskyvyn muutoksissa kaupunkien välisen käyttöönoton aikana

MGR_1 (256 samanaikaista)

DN (256 samanaikaisesti)

DN:n suorituskykyedut MGR:ään verrattuna

Sama tietokonehuone

16092.02

15137.23

-5.93%

Kolme keskustaa samassa kaupungissa

11666.16 (72.50%)

13241.74 (87.48%

+13.50%

Kaksi paikkaa ja kolme keskustaa

3705.51 (23.03%)

14478.38 (95.64%)

+290.72%

Kolme paikkaa ja kolme keskustaa

2889.85 (17.96%)

9429.24 (62.29%)

+226.28%

Se näkyy testituloksista:

  • Käyttöönottomenetelmän laajentamisen myötä MGR_1:n TPS (RPO<>0) laski merkittävästi verrattuna samaan tietokonehuoneeseen, tietokoneiden välisen käyttöönoton suorituskyky samassa kaupungissa laski 27,5 % kaupunkien välisen käytön (kolme keskusta kahdessa paikassa, kolme keskusta kolmessa paikassa) käyttöönotto Lasku 77 % ~ 82 %, mikä johtuu RT:n käytön lisääntymisestä eri kaupunkien välillä.
  • DN (RTO=0) on suhteellisen vakaa Verrattuna samaan tietokonehuoneeseen, tietokoneiden välisten huoneiden käyttöönoton suorituskyky samassa kaupungissa ja kolmen keskuksen käyttöönotossa kahdessa paikassa laski 4 %:lla 12 %:iin. Kolmen keskuksen käyttöönoton tehokkuus laski 37 % korkean verkkoviiveen vuoksi.DN:n Batch&Pipeline-mekanismin ansiosta kaupunkien väliset vaikutukset voidaan kuitenkin ratkaista lisäämällä samanaikaisuutta. Esimerkiksi kolmen paikan ja kolmen keskuksen arkkitehtuurissa >=512 samanaikaisuuden suoritustehoa samassa kaupungissa ja kahdessa. paikat ja kolme keskustaa voidaan periaatteessa kohdistaa.
  • Voidaan nähdä, että kaupunkien välisellä käyttöönotolla on suuri vaikutus MGR_1:een (RPO<>0)

3.1.6 Suorituskyky Jitter

Varsinaisessa käytössä emme kiinnitä huomiota vain suorituskykytietoihin, vaan meidän on kiinnitettävä huomiota myös suorituskyvyn tärinään. Loppujen lopuksi, jos värinä on kuin vuoristorata, todellinen käyttökokemus on erittäin huono. Tarkkailemme ja näytämme TPS:n reaaliaikaisia ​​lähtötietoja Koska sysbenc-työkalu ei itse tue suorituskyvyn värinän tulosseurantatietoja, käytämme matemaattista variaatiokerrointa vertailuindikaattorina:

  • Variaatiokerroin (CV): Variaatiokerroin on keskihajonna jaettuna keskiarvolla. Sitä käytetään yleensä eri tietojoukkojen vaihteluiden vertaamiseen, varsinkin kun keskimääräiset erot ovat suuria. Mitä suurempi CV, sitä suurempi on datan vaihtelu suhteessa keskiarvoon.

Ottamalla 256 samanaikaisen oltp_read_write -skenaarion esimerkkinä analysoimme tilastollisesti MGR_1 (RPO<>0) ja DN (RPO=0) TPS:t samassa tietokonehuoneessa, kolmessa keskustassa samassa kaupungissa, kolmessa keskustassa kahdessa paikassa ja kolme keskustaa kolmessa paikassa. Varsinainen värinäkaavio on seuraava, ja kunkin skenaarion varsinaiset värinäindikaattoritiedot ovat seuraavat:

CV

Sama tietokonehuone

Kolme keskustaa samassa kaupungissa

Kaksi paikkaa ja kolme keskustaa

Kolme paikkaa ja kolme keskustaa

MGR_1

10.04%

8.96%

6.02%

8.63%

DN

3.68%

3.78%

2.55%

4.05%

MGR_1/DN

272.83%

237.04%

236.08%

213.09%

Se näkyy testituloksista:

  • MGR:n TPS on epävakaassa tilassa oltp_read_write-skenaariossa, ja se putoaa äkillisesti ilman syytä. Tämä ilmiö on havaittu useissa testeissä useissa käyttöönottoskenaarioissa. Vertailun vuoksi DN on erittäin vakaa.
  • Variaatiokertoimen CV:tä laskettaessa MGR:n CV on erittäin suuri, 6 % - 10 % ja saavuttaa jopa maksimiarvon 10 %, kun viive samassa tietokonehuoneessa on minimaalinen, kun taas DN:n CV on suhteellisen vakaa, 2 % - 4 %, ja DN:n suorituskyky on vakaampi kuin MGR:n Sex on periaatteessa kaksi kertaa korkeampi
  • Voidaan nähdä, että MGR_1:n (RPO<>0) suorituskykyvärinä on suhteellisen suuri

3.2. RTO

Hajautetun tietokannan ydinominaisuus on korkea käytettävyys. Klusterin minkään solmun vika ei vaikuta yleiseen saatavuuteen. Tyypillisessä käyttöönottomuodossa, jossa on kolme solmua, joissa on yksi isäntä ja kaksi varmuuskopiota samassa tietokonehuoneessa, yritimme suorittaa käytettävyystestejä seuraavissa kolmessa skenaariossa:

  • Keskeytä päätietokanta, käynnistä se sitten uudelleen ja tarkkaile RTO-aikaa, jonka kuluessa klusteri palauttaa saatavuuden prosessin aikana.
  • Keskeytä mikä tahansa valmiustilassa oleva tietokanta ja käynnistä se sitten uudelleen tarkkaillaksesi ensisijaisen tietokannan käytettävyyttä prosessin aikana.

3.2.1 Päätietokannan seisokki + uudelleenkäynnistys

Kun kuormaa ei ole, lopeta johtaja ja seuraa klusterin jokaisen solmun tilamuutoksia ja sitä, onko se kirjoitettava.

MGR

DN

Aloittaa normaalisti

0

0

tappaa johtaja

0

0

Epänormaali solmuaika löydetty

5

5

Aika vähentää 3 solmua 2 solmuun

23

8

MGR

DN

Aloittaa normaalisti

0

0

tappaa johtaja, vetää automaattisesti ylös

0

0

Epänormaali solmuaika löydetty

5

5

Aika vähentää 3 solmua 2 solmuun

23

8

2 solmun palautus 3 solmun aika

37

15

Testituloksista voidaan nähdä, että ilman paineita:

  • DN:n RTO on 8-15 s, kestää 8 sekuntia pienentää 2 solmuun ja 15 sekuntia palauttaa 3 solmua;
  • MGR:n RTO on 23–37 sekuntia, jotta se laskee 2 solmuun ja 37 sekuntia palauttaa 3 solmua.
  • RTO-suorituskyky DN on kaiken kaikkiaan parempi kuin MGR

3.2.2 Standby-tietokannan seisokki + uudelleenkäynnistys

Käytä sysbenchiä suorittaaksesi samanaikaisen 16 säikeen stressitestin oltp_read_write-skenaariossa. Tapa kuvan 10. sekunti manuaalisesti valmiustilasolmu ja tarkkaile sysbenchin reaaliaikaisia ​​TPS-tietoja.

Se näkyy testitulostaulukosta:

  • Valmiustilatietokannan keskeytymisen jälkeen MGR:n päätietokannan TPS putosi merkittävästi ja kesti noin 20 sekuntia ennen kuin palautui normaalille tasolle. Lokianalyysin mukaan tässä on kaksi prosessia: viallisen solmun havaitseminen ja viallisen solmun poistaminen MGR-klusterista. Tämä testi vahvisti virheen, joka on kiertänyt MGR-yhteisössä pitkään, vaikka vain yksi solmu 3:sta ei olisi käytettävissä.Koko klusteri koki voimakasta värinää jonkin aikaa, eikä se ollut käytettävissä.
  • Ratkaisekseen ongelman, jossa yhden pään MGR:ssä on yksi solmuvirhe ja koko ilmentymä ei ole käytettävissä, yhteisö otti käyttöön MGR paxos single leader -toiminnon versiosta 8.0.27 ongelman ratkaisemiseksi, mutta se on oletuksena pois päältä. Tässä otamme käyttöön group_replication_paxos_single_leader-toiminnon ja jatkamme varmistusta, kun tällä kertaa keskeytettiin päätietokannan suorituskyky ja se on hieman parantunut.
  • DN:lle valmiustilan tietokannan keskeytymisen jälkeen päätietokanta TPS kasvoi välittömästi noin 20 % ja pysyi sitten vakaana, ja klusteri oli aina käytettävissä.Tämä on päinvastoin kuin MGR. Syynä on, että valmiustilatietokannan keskeyttämisen jälkeen päätietokannan tarvitsee lähettää vain lokit jäljellä olevaan valmiustilatietokantaan, ja verkkopakettien lähetys- ja vastaanottoprosessi on tehokkaampi.

Jatkamme testiä, käynnistämme uudelleen ja palautamme valmiustilatietokannan ja tarkkailemme muutoksia päätietokannan TPS-tiedoissa.

Se näkyy testitulostaulukosta:

  • MGR palautui 2 solmusta 3 solmuun 5 sekunnissa.Mutta on myös tilanne, jossa pääkirjasto ei ole käytettävissä, mikä kestää noin 12 sekuntia.Vaikka valmiussolmu vihdoin liittyi klusteriin, MEMBER_STATE-tila on aina ollut PALAUTTAA, mikä osoittaa, että tietoja jaetaan tällä hetkellä.
  • Skenaariossa, kun group_replication_paxos_single_leader on otettu käyttöön, myös valmiustilan tietokannan uudelleenkäynnistys varmistetaan. Tämän seurauksena MGR palautuu 2 solmusta 3 solmuun 10 sekunnissa.Mutta vielä oli noin 7 sekuntia käyttämätön aika.Näyttää siltä, ​​​​että tämä parametri ei voi täysin ratkaista ongelmaa, jossa yhden pään MGR:ssä on yksi solmuvirhe ja koko ilmentymä ei ole käytettävissä.
  • DN:ssä valmiustilassa oleva tietokanta palautuu 2 solmusta 3 solmuun 10 sekunnissa, ja ensisijainen tietokanta pysyy käytettävissä. TPS:ssä tulee olemaan lyhytaikaisia ​​vaihteluita. Tämä johtuu siitä, että uudelleenkäynnistetyn valmiustilatietokannan lokin replikointiviive on jäljessä, ja viivästyneet lokit on poistettava päätietokannasta päätietokanta Lokin tarkastelun jälkeen kokonaissuorituskyky on vakaa.

3.3. RPO

MGR-enemmistövika RPO<>0 -skenaarion rakentamiseksi käytämme yhteisön omaa MTR Case -menetelmää virheen injektiotestien suorittamiseen MGR:ssä. Suunniteltu tapaus on seuraava:

  1. --echo
  2. --echo ############################################################
  3. --echo # 1. Deploy a 3 members group in single primary mode.
  4. --source include/have_debug.inc
  5. --source include/have_group_replication_plugin.inc
  6. --let $group_replication_group_name= aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa
  7. --let $rpl_group_replication_single_primary_mode=1
  8. --let $rpl_skip_group_replication_start= 1
  9. --let $rpl_server_count= 3
  10. --source include/group_replication.inc
  11. --let $rpl_connection_name= server1
  12. --source include/rpl_connection.inc
  13. --let $server1_uuid= `SELECT @@server_uuid`
  14. --source include/start_and_bootstrap_group_replication.inc
  15. --let $rpl_connection_name= server2
  16. --source include/rpl_connection.inc
  17. --source include/start_group_replication.inc
  18. --let $rpl_connection_name= server3
  19. --source include/rpl_connection.inc
  20. --source include/start_group_replication.inc
  21. --echo
  22. --echo ############################################################
  23. --echo # 2. Init data
  24. --let $rpl_connection_name = server1
  25. --source include/rpl_connection.inc
  26. CREATE TABLE t1 (c1 INT PRIMARY KEY);
  27. INSERT INTO t1 VALUES(1);
  28. --source include/rpl_sync.inc
  29. SELECT * FROM t1;
  30. --let $rpl_connection_name = server2
  31. --source include/rpl_connection.inc
  32. SELECT * FROM t1;
  33. --let $rpl_connection_name = server3
  34. --source include/rpl_connection.inc
  35. SELECT * FROM t1;
  36. --echo
  37. --echo ############################################################
  38. --echo # 3. Mock crash majority members
  39. --echo # server 2 wait before write relay log
  40. --let $rpl_connection_name = server2
  41. --source include/rpl_connection.inc
  42. SET GLOBAL debug = '+d,wait_in_the_middle_of_trx';
  43. --echo # server 3 wait before write relay log
  44. --let $rpl_connection_name = server3
  45. --source include/rpl_connection.inc
  46. SET GLOBAL debug = '+d,wait_in_the_middle_of_trx';
  47. --echo # server 1 commit new transaction
  48. --let $rpl_connection_name = server1
  49. --source include/rpl_connection.inc
  50. INSERT INTO t1 VALUES(2);
  51. # server 1 commit t1(c1=2) record
  52. SELECT * FROM t1;
  53. select CHANNEL_NAME,MEMBER_HOST,MEMBER_PORT,MEMBER_STATE,MEMBER_ROLE,MEMBER_VERSION,MEMBER_COMMUNICATION_STACK from performance_schema.replication_group_members order by MEMBER_PORT;
  54. --echo # server 1 crash
  55. --source include/kill_mysqld.inc
  56. --echo # sleep enough time for electing new leader
  57. sleep 60;
  58. --echo
  59. --echo # server 3 check
  60. --let $rpl_connection_name = server3
  61. --source include/rpl_connection.inc
  62. SELECT * FROM t1;
  63. select CHANNEL_NAME,MEMBER_HOST,MEMBER_PORT,MEMBER_STATE,MEMBER_ROLE,MEMBER_VERSION,MEMBER_COMMUNICATION_STACK from performance_schema.replication_group_members order by MEMBER_PORT;
  64. --echo # server 3 crash and restart
  65. --source include/kill_and_restart_mysqld.inc
  66. --echo # sleep enough time for electing new leader
  67. sleep 60;
  68. --echo
  69. --echo # server 2 check
  70. --let $rpl_connection_name = server2
  71. --source include/rpl_connection.inc
  72. SELECT * FROM t1;
  73. select CHANNEL_NAME,MEMBER_HOST,MEMBER_PORT,MEMBER_STATE,MEMBER_ROLE,MEMBER_VERSION,MEMBER_COMMUNICATION_STACK from performance_schema.replication_group_members order by MEMBER_PORT;
  74. --echo # server 2 crash and restart
  75. --source include/kill_and_restart_mysqld.inc
  76. --echo # sleep enough time for electing new leader
  77. sleep 60;
  78. --echo
  79. --echo ############################################################
  80. --echo # 4. Check alive members, lost t1(c1=2) record
  81. --echo # server 3 check
  82. --let $rpl_connection_name= server3
  83. --source include/rpl_connection.inc
  84. select CHANNEL_NAME,MEMBER_HOST,MEMBER_PORT,MEMBER_STATE,MEMBER_ROLE,MEMBER_VERSION,MEMBER_COMMUNICATION_STACK from performance_schema.replication_group_members order by MEMBER_PORT;
  85. --echo # server 3 lost t1(c1=2) record
  86. SELECT * FROM t1;
  87. --echo
  88. --echo # server 2 check
  89. --let $rpl_connection_name = server2
  90. --source include/rpl_connection.inc
  91. select CHANNEL_NAME,MEMBER_HOST,MEMBER_PORT,MEMBER_STATE,MEMBER_ROLE,MEMBER_VERSION,MEMBER_COMMUNICATION_STACK from performance_schema.replication_group_members order by MEMBER_PORT;
  92. --echo # server 2 lost t1(c1=2) record
  93. SELECT * FROM t1;
  1. !include ../my.cnf
  2. [mysqld.1]
  3. loose-group_replication_member_weight=100
  4. [mysqld.2]
  5. loose-group_replication_member_weight=90
  6. [mysqld.3]
  7. loose-group_replication_member_weight=80
  8. [ENV]
  9. SERVER_MYPORT_3= @mysqld.3.port
  10. SERVER_MYSOCK_3= @mysqld.3.socket

Asian käsittelyn tulokset ovat seuraavat:

  1. ############################################################
  2. # 1. Deploy a 3 members group in single primary mode.
  3. include/group_replication.inc [rpl_server_count=3]
  4. Warnings:
  5. Note #### Sending passwords in plain text without SSL/TLS is extremely insecure.
  6. Note #### Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information.
  7. [connection server1]
  8. [connection server1]
  9. include/start_and_bootstrap_group_replication.inc
  10. [connection server2]
  11. include/start_group_replication.inc
  12. [connection server3]
  13. include/start_group_replication.inc
  14. ############################################################
  15. # 2. Init data
  16. [connection server1]
  17. CREATE TABLE t1 (c1 INT PRIMARY KEY);
  18. INSERT INTO t1 VALUES(1);
  19. include/rpl_sync.inc
  20. SELECT * FROM t1;
  21. c1
  22. 1
  23. [connection server2]
  24. SELECT * FROM t1;
  25. c1
  26. 1
  27. [connection server3]
  28. SELECT * FROM t1;
  29. c1
  30. 1
  31. ############################################################
  32. # 3. Mock crash majority members
  33. # server 2 wait before write relay log
  34. [connection server2]
  35. SET GLOBAL debug = '+d,wait_in_the_middle_of_trx';
  36. # server 3 wait before write relay log
  37. [connection server3]
  38. SET GLOBAL debug = '+d,wait_in_the_middle_of_trx';
  39. # server 1 commit new transaction
  40. [connection server1]
  41. INSERT INTO t1 VALUES(2);
  42. SELECT * FROM t1;
  43. c1
  44. 1
  45. 2
  46. select CHANNEL_NAME,MEMBER_HOST,MEMBER_PORT,MEMBER_STATE,MEMBER_ROLE,MEMBER_VERSION,MEMBER_COMMUNICATION_STACK from performance_schema.replication_group_members order by MEMBER_PORT;
  47. CHANNEL_NAME MEMBER_HOST MEMBER_PORT MEMBER_STATE MEMBER_ROLE MEMBER_VERSION MEMBER_COMMUNICATION_STACK
  48. group_replication_applier 127.0.0.1 13000 ONLINE PRIMARY 8.0.32 XCom
  49. group_replication_applier 127.0.0.1 13002 ONLINE SECONDARY 8.0.32 XCom
  50. group_replication_applier 127.0.0.1 13004 ONLINE SECONDARY 8.0.32 XCom
  51. # server 1 crash
  52. # Kill the server
  53. # sleep enough time for electing new leader
  54. # server 3 check
  55. [connection server3]
  56. SELECT * FROM t1;
  57. c1
  58. 1
  59. select CHANNEL_NAME,MEMBER_HOST,MEMBER_PORT,MEMBER_STATE,MEMBER_ROLE,MEMBER_VERSION,MEMBER_COMMUNICATION_STACK from performance_schema.replication_group_members order by MEMBER_PORT;
  60. CHANNEL_NAME MEMBER_HOST MEMBER_PORT MEMBER_STATE MEMBER_ROLE MEMBER_VERSION MEMBER_COMMUNICATION_STACK
  61. group_replication_applier 127.0.0.1 13002 ONLINE PRIMARY 8.0.32 XCom
  62. group_replication_applier 127.0.0.1 13004 ONLINE SECONDARY 8.0.32 XCom
  63. # server 3 crash and restart
  64. # Kill and restart
  65. # sleep enough time for electing new leader
  66. # server 2 check
  67. [connection server2]
  68. SELECT * FROM t1;
  69. c1
  70. 1
  71. select CHANNEL_NAME,MEMBER_HOST,MEMBER_PORT,MEMBER_STATE,MEMBER_ROLE,MEMBER_VERSION,MEMBER_COMMUNICATION_STACK from performance_schema.replication_group_members order by MEMBER_PORT;
  72. CHANNEL_NAME MEMBER_HOST MEMBER_PORT MEMBER_STATE MEMBER_ROLE MEMBER_VERSION MEMBER_COMMUNICATION_STACK
  73. group_replication_applier 127.0.0.1 13002 ONLINE PRIMARY 8.0.32 XCom
  74. group_replication_applier 127.0.0.1 13004 UNREACHABLE SECONDARY 8.0.32 XCom
  75. # server 2 crash and restart
  76. # Kill and restart
  77. # sleep enough time for electing new leader
  78. ############################################################
  79. # 4. Check alive members, lost t1(c1=2) record
  80. # server 3 check
  81. [connection server3]
  82. select CHANNEL_NAME,MEMBER_HOST,MEMBER_PORT,MEMBER_STATE,MEMBER_ROLE,MEMBER_VERSION,MEMBER_COMMUNICATION_STACK from performance_schema.replication_group_members order by MEMBER_PORT;
  83. CHANNEL_NAME MEMBER_HOST MEMBER_PORT MEMBER_STATE MEMBER_ROLE MEMBER_VERSION MEMBER_COMMUNICATION_STACK
  84. group_replication_applier NULL OFFLINE
  85. # server 3 lost t1(c1=2) record
  86. SELECT * FROM t1;
  87. c1
  88. 1
  89. # server 2 check
  90. [connection server2]
  91. select CHANNEL_NAME,MEMBER_HOST,MEMBER_PORT,MEMBER_STATE,MEMBER_ROLE,MEMBER_VERSION,MEMBER_COMMUNICATION_STACK from performance_schema.replication_group_members order by MEMBER_PORT;
  92. CHANNEL_NAME MEMBER_HOST MEMBER_PORT MEMBER_STATE MEMBER_ROLE MEMBER_VERSION MEMBER_COMMUNICATION_STACK
  93. group_replication_applier NULL OFFLINE
  94. # server 2 lost t1(c1=2) record
  95. SELECT * FROM t1;
  96. c1
  97. 1

Puuttuvat numerot toistavan tapauksen likimääräinen logiikka on seuraava:

  1. MGR koostuu 3 solmusta yhden pääkäyttäjän tilassa, palvelin 1/2/3, jossa palvelin 1 on päätietokanta ja alustaa 1 tietueen c1=1
  2. Vikailmoitus Palvelin 2/3 jumittuu, kun kirjoitetaan välityslokia
  3. Yhdistetty palvelin 1 -solmuun, kirjoitti tietueen c1=2, ja myös tapahtumasitoumus palautti onnistumisen.
  4. Sitten Mock server1 kaatuu epänormaalisti (konevika, sitä ei voida palauttaa, eikä sitä voida käyttää Tällä hetkellä palvelin 2/3 on jätetty muodostamaan enemmistö).
  5. Käynnistä palvelin 2/3 uudelleen normaalisti (nopea palautus), mutta palvelin 2/3 ei voi palauttaa klusteria käyttökelpoiseen tilaan.
  6. Muodosta yhteys palvelin 2/3 -solmuun ja tee kysely tietokannan tietueista Vain tietue c1=1 näkyy (palvelin 2/3 on menettänyt c1=2).

Yllä olevan tapauksen mukaan MGR:n tapauksessa, kun suurin osa palvelimista on poissa käytöstä ja päätietokanta ei ole käytettävissä, valmiustilan tietokanta on palautettu, tiedot menetetään RPO<>0 ja onnistuneen toimituksen tietue. alun perin palautettu asiakkaalle on kadonnut.

DN:lle enemmistön saavuttaminen edellyttää, että lokit säilyvät enemmistössä, joten edes yllä olevassa skenaariossa tietoja ei menetetä ja RPO=0 voidaan taata.

3.4 Valmiustilan tietokannan toistoviive

Perinteisessä MySQL:n aktiivisessa valmiustilassa valmiustilatietokanta sisältää yleensä IO-säikeitä ja Apply-säikeitä Paxos-protokollan käyttöönoton jälkeen IO-säie synkronoi pääasiassa valmiustilatietokannan replikointiviiveen riippuu valmiustilatietokannan Apply playbackin kulusta, tässä meistä tulee valmiustilatietokannan toistoviive.

Testaamme sysbenchin avulla oltp_write_only-skenaariota ja valmiustilatietokannan toiston viiveen kestoa alle 100 samanaikaisuuden ja erilaisten tapahtumien lukumäärän.Valmiustilatietokannan toiston viiveaika voidaan määrittää tarkkailemalla performance_schema.replication_applier_status_by_worker-taulukon APPLYING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP-saraketta nähdäkseen, työskentelevätkö jokainen työntekijä reaaliajassa, jotta voidaan määrittää, onko toisinnus päättynyt.
 

Se näkyy testitulostaulukosta:

  • Samalla määrällä kirjoitettua dataa DN:n valmiustilatietokannan kaikkien lokien toiston valmistumisaika on paljon parempi kuin MGR:n ajankulutus on vain 3–4 % MGR:stä. Tämä on kriittistä aktiivisen/valmiustilan vaihtamisen oikea-aikaisuuden kannalta.
  • Kun kirjoitusten määrä kasvaa, DN:n valmiustilan tietokannan toistolatenssietu MGR:ään verrattuna säilyy edelleen ja on erittäin vakaa.
  • Analysoimalla valmiustilatietokannan toistoviiveen syitä MGR:n valmiustilatietokannan toistostrategia ottaa käyttöön group_replication_consistency-arvon EVENTUAL-oletusarvon kanssa, eli RO- ja RW-tapahtumat eivät odota aikaisempien tapahtumien soveltamista ennen suorittamista. Tämä voi varmistaa päätietokannan maksimaalisen kirjoitussuorituskyvyn, mutta valmiustilan tietokannan viive on suhteellisen suuri (uhraamalla valmiustilan tietokannan viive ja RPO=0 vastineeksi päätietokannan tehokkaasta kirjoitussuorituskyvystä, kytkemällä päälle nykyinen rajoittava toiminto MGR voi tasapainottaa suorituskykyä ja valmiustilatietokanta viivästyy, mutta päätietokannan suorituskyky vaarantuu)

3.5 Testin yhteenveto

MGR

DN

esitys

Lue kauppa

tasainen

tasainen

kirjoittaa kauppa

Suorituskyky ei ole yhtä hyvä kuin DN, kun RPO<>0

Kun RPO = 0, suorituskyky on paljon huonompi kuin DN

Kaupunkien välisen käyttöönoton suorituskyky heikkeni vakavasti 27–82 %

Kirjoitustapahtuman suorituskyky on paljon korkeampi kuin MGR

Kaupunkien välisen käyttöönoton suorituskyky laskee 4 %:lla 37 %:iin.

Jitter

Suorituskyvyn värinää on voimakasta, tärinän vaihteluväli on 6–10 %

Suhteellisen vakaa 3 %:ssa, vain puolet MGR:stä

RTO

Päätietokanta on poissa käytöstä

Poikkeavuus havaittiin 5 sekunnissa ja väheni kahteen solmuun 23 sekunnissa.

Poikkeavuus havaittiin 5 sekunnissa ja väheni kahteen solmuun 8 sekunnissa.

Käynnistä pääkirjasto uudelleen

Poikkeavuus havaittiin 5 sekunnissa, ja kolme solmua palautettiin 37 sekunnissa.

Poikkeavuus havaitaan 5 sekunnissa ja kolme solmua palautuu 15 sekunnissa.

Varmuuskopioi tietokannan seisokki

Päätietokannan liikenne putosi nollaan 20 sekunniksi.

Sitä voidaan lievittää ottamalla käyttöön ryhmä_replication_paxos_single_leader.

Päätietokannan jatkuva korkea saatavuus

Valmiustilassa tietokanta käynnistyy uudelleen

Päätietokannan liikenne putosi nollaan 10 sekunniksi.

Group_replication_paxos_single_leader-toiminnon eksplisiittisellä käyttöönotolla ei myöskään ole vaikutusta.

Päätietokannan jatkuva korkea saatavuus

RPO

Tapauksen toistuminen

RPO<>0, kun enemmistöpuolue kaatuu

Suorituskyky ja RPO=0 eivät voi sisältää molempia.

RPO = 0

Valmiustilan tietokannan viive

Varmuuskopioi tietokannan toistoaika

Viive aktiivisen ja valmiustilan välillä on erittäin suuri.

Suorituskykyä ja ensisijaisen varmuuskopion viivettä ei voida saavuttaa samanaikaisesti.

Valmiustilatietokannan toistoon käytetty kokonaisaika on 4 % MGR:stä, mikä on 25 kertaa MGR:ää.

parametri

avainparametri

  • group_replication_flow_control_mode vuonohjaus on oletusarvoisesti käytössä, ja se on määritettävä poistamaan se käytöstä suorituskyvyn parantamiseksi.
  • replication_optimize_for_static_plugin_config Staattisen laajennuksen optimointi on oletuksena pois päältä ja se on otettava käyttöön suorituskyvyn parantamiseksi
  • group_replication_paxos_single_leader on oletuksena pois päältä, ja se on otettava käyttöön päätietokannan vakauden parantamiseksi, kun valmiustilatietokanta ei ole käytössä.
  • group_replication_consistency on oletuksena pois päältä, eikä se takaa RPO=0:a. Jos RPO=0 vaaditaan, AFTER on määritettävä.
  • Oletusarvoinen group_replication_transaction_size_limit on 143M, jota on lisättävä, kun tapahtuu suuria tapahtumia.
  • binlog_transaction_dependency_tracking oletusarvo on COMMIT_ORDER, MGR on säädettävä arvoon WRITESET valmiustilan tietokannan toiston tehokkuuden parantamiseksi.

Oletuskokoonpano, ammattilaisten ei tarvitse mukauttaa kokoonpanoa

4. Yhteenveto

Perusteellisen teknisen analyysin ja suorituskyvyn vertailun jälkeenPolarDB-X Itse kehittämällä X-Paxos-protokollalla ja useilla optimoiduilla malleilla DN on osoittanut monia etuja MySQL MGR:ään verrattuna suorituskyvyn, oikeellisuuden, käytettävyyden ja resurssien suhteen. MGR on kuitenkin myös tärkeässä asemassa MySQL-ekosysteemissä , on otettava huomioon erilaiset tilanteet, kuten valmiustilan tietokannan katkokset, konehuoneiden väliset katastrofipalautussuorituskyvyn vaihtelut ja vakaus. Siksi, jos haluat hyödyntää MGR:ää hyvin, sinun on oltava varustettu ammattitaitoisella teknisellä sekä käyttö- ja huoltotiimällä tuki.

Kun PolarDB-X-tallennusmoottorilla on suuria, korkean samanaikaisuuden ja korkean käytettävyyden vaatimuksia, sillä on ainutlaatuisia teknisiä etuja ja erinomainen suorituskyky MGR:ään verrattuna.PolarDB-XDN-pohjaisessa keskitetyssä (vakioversiossa) on hyvä tasapaino toimintojen ja suorituskyvyn välillä, mikä tekee siitä erittäin kilpailukykyisen tietokantaratkaisun.