„Pro, aga mitte klaster“ vĂ”i kuidas me andmebaasi sĂŒsteeme impordime

„Pro, aga mitte klaster“ vĂ”i kuidas me andmebaasi sĂŒsteeme impordime
(c) Yandex.Pildid

KĂ”ik tegelased on fiktiivsed, kaubamĂ€rgid kuuluvad nende omanikele, igasugused kokkusattumised on juhuslikud ja ĂŒldiselt on see minu „subjektiivne hinnang, palun Ă€rge lĂ”hkege ust...”.

Meil on suur kogemus infotehnoloogiliste sĂŒsteemide tĂ”lkimisel, kus andmebaasiloogika toimub ĂŒhest andmebaasihaldussĂŒsteemist (SÜB) teise. Vastavalt valitsuse mÀÀrusele nr 1236 16.11.2016, on see sageli ĂŒleminek Oracle'ilt PostgreSQL'ile. Kuidas korraldada protsess vĂ”imalikult tĂ”husalt ja valutult - saame rÀÀkida eraldi, tĂ€na rÀÀgime klastrite kasutamise eripĂ€radest ja milliste probleemidega vĂ”ib kokku puutuda kĂ”rgelt koormatud jaotatud sĂŒsteemide ĂŒlesehitamisel, kus on keeruline loogika protseduurides ja funktsioonides.

Spoiler – jah, kappa, RAC ja pg multimaster on vĂ€ga erinevad lahendused.

Oletame, et olete juba kogu loogika plsql-ilt pgsql-ile ĂŒle viinud. Ja teie regressioonitestid on tĂ€iesti korras, nĂŒĂŒd mĂ”tlete loomulikult skaaleerimisele, kuna koormustestid ei anna just rÔÔmu, eriti arvestades seda riistvara, mis algselt projekti eeldati, seoses selle teise andmebaasisĂŒsteemiga. Oletame, et leidsite kohaliku tarnija "Postgres Professional" lahenduse multimasteri valikuga, mis on saadaval ainult "Postgres Pro Enterprise" maksimaalses versioonis ja mille kirjeldus tundub teie vajadustele vĂ€ga sarnane. Esmase pinnapealse uurimise jĂ€rel tuleb pĂ€he mĂ”te: "Oh! See on just see, mida me vajame, asemel RAC! Ja veel kodumaise tehnilise toe toetusega!"

Kuid Ă€rge kiirustage rÔÔmustama, ning allpool selgitame, miks neid nĂŒansse on oluline teada, kuna neid on keeruline ette nĂ€ha, isegi hĂ€sti toote dokumentatsiooni lugedes. Hinnake, kas olete valmis tihti andmebaasi versioone otse tootmisplatsil uuendama, kuna mĂ”ned vead ei ole tootmisolukorraga ĂŒhilduvad ning neid on keeruline testimise kĂ€igus tuvastada.
Alustage tootja veebisaidilt jaotise "multimaster" – "piirang" tĂ€helepaneliku lugemisega.

Esimene asi, millega vĂ”ib kokku puutuda, on tehingute töö eripĂ€ra nn "kahe faasi" reĆŸiimis, ja mĂ”nikord ei paranda muud kui kogu teie protseduuri loogika ĂŒmberkirjutamine olukorda. Siin on lihtne nĂ€ide:

create table test1 (id integer, id1 integer);
insert into test1 values (1, 1),(1, 2);
 
ALTER TABLE test1 ADD CONSTRAINT test1_uk UNIQUE (id,id1) DEFERRABLE INITIALLY DEFERRED;
 
update test1
           set id1 =
               case id1
                 when 1
                 then 2
                 else id1 - sign(2 - 1)
               end
         where id1 between 1 and 2;

Tekkib viga:

VIGA:  [MTM] Tehing MTM-1-2435-10-605783555137701 (10654) on katkenud sÔlmes 3. Kontrollige selle logi, et nÀha veadetailsid.

Edasi vĂ”ite pikka aega tegeleda dead lock'iga versioonides 10.5, 10.6 ja ainus tuntud pÀÀste, mis tapab kogu klastrite mĂ”tte – see on 'probleemsete' tabelite vĂ€ljavĂ”tmine klastrist, st teha make_table_local, kuid see vĂ€hemalt vĂ”imaldab töötada ja ei pane kĂ”ike kinni ootele, kuna tehingute fikseerimise ootused on ripakil. VĂ”i siis uuendada versioonile 11.2, mis peaks aitama, aga vĂ”ib-olla ei aita, Ă€rge unustage kontrollida.

Teatud versioonides vÔite saada veelgi mÔistatuslikuma lukustuse:

username= mtm ja backend_type = background worker

Ja selles olukorras aitab teid ainult andmebaasi versiooni uuendamine 11.2-le ja kÔrgemale, aga vÔib-olla ei aita ka.

MÔned indekseerimise operatsioonid vÔivad pÔhjustada vigu, kus selgelt mÀrgitakse, et probleem on Bi-Directional Replicationis, logides MTM nÀete BDRi. Kas tÔesti 2ndQuadrant? Ei
 me ostsime multimasteri, see on lihtsalt kokkusattumus, see on tehnoloogia nimi.

[MTM] bdr ei toeta indeksi uuesti kontrollimist
[MTM] 12124: REMOTE begin abort transaction 4083
[MTM] 12124: saata ABORT teade tehingu (5467) kohaliku xid=4083 koordinaatorile 3
[MTM] VastuvÔetud ABORT_PREPARED loogiline sÔnum tehingu MTM-3-25030-83-605694076627780 kohta sÔlmelt 3
[MTM] Looge purustatud tehing MTM-3-25030-83-605694076627780 olekuga InProgress sÔlmelt 3 originId=3
[MTM] MtmLogAbortLogicalMessage node=3 transaction=MTM-3-25030-83-605694076627780 lsn=9fff448 

Kui kasutate ajutisi tabeleid, vaatamata kinnitustele: „Multimasteri laiendus viib andmete replikatsioon lĂ€bi tĂ€ielikult automaatsel viisil. Saate samaaegselt teostada kirjutavaid tehinguid ja töötada ajutiste tabelitega igas klastris olekus.”

Seega saate tegelikult lĂ”puks teada, et replikatsioon ei toimi kĂ”igi tabelite osas, mida protseduuris kasutatakse, kui koodis on ajutise tabeli loomine, ja isegi multimaster.remote_functions kasutamine ei aita. Peate oma loogikat protseduuris vĂ€rskendama vĂ”i ĂŒmber kirjutama. Kui peate samaaegselt kasutama kahte laiendust multimaster ja pg_pathman Postgres Pro Enterprise v 10.5 piires, kontrollige, et sellise lihtsa nĂ€ite korral:

CREATE TABLE measurement (
    city_id         int not null,
    logdate         date not null,
    peaktemp        int,
    unitsales       int
) PARTITION BY RANGE (logdate);

CREATE TABLE measurement_y2019m06 PARTITION OF measurement FOR VALUES FROM ('2019-06-01') TO ('2019-07-01');
insert into measurement values (1, to_date('27.06.2019', 'dd.mm.yyyy'), 1, 1);
insert into measurement values (2, to_date('28.06.2019', 'dd.mm.yyyy'), 1, 1);
insert into measurement values (3, to_date('29.06.2019', 'dd.mm.yyyy'), 1, 1);
insert into measurement values (4, to_date('30.06.2019', 'dd.mm.yyyy'), 1, 1);

Andmebaasi sÔlmedes hakkavad ilmuma sellised veateated:



 PATHMAN_CONFIG ei sisalda suhet 23245
> find_in_dynamic_libpath: proovib "/opt/
/ent-10/lib/pg_pathman"
> find_in_dynamic_libpath: proovib "/opt//
/ent-10/lib/pg_pathman.so"
> DEPUR >:  find_in_dynamic_libpath: proovib "/opt/
/ent-10/lib/pg_pathman"
> find_in_dynamic_libpath: proovib "/opt/
/ent-10/lib/pg_pathman.so"
> PrepareTransaction(1) nimi: ilma nimeeta; ploki olek: PREPARE; olek: INPROGR, xid/subid/cid: 6919/1/40
> StartTransaction(1) nimi: ilma nimeeta; ploki olek: DEFAULT; olek: INPROGR, xid/subid/cid: 0/1/0
> lĂŒlitatud ajalool 1, kehtiv kuni 0/0


Tehing MTM-1-13604-7-612438856339841 (6919) on katkenud sĂ”lmes 2. Kontrollige selle logi, et nĂ€ha tĂ”rke ĂŒksikasju.
...
[MTM] 28295: KAUGLÜLI algab tehingu katkestamine 7017


[MTM] 28295: saadab ABORT teate tehingu (6919) kohalik xid=7017 koordinaatorile 1

Mis need vead on, saate teada tehnilisest toetusest, te ei ole ju seda niisama ostnud.

Mida teha? Õige! Uuendada «Postgres Pro Enterprise» versioonile 11.2

Oluline on teada, et sequence, olles replitseerimise andmebaasi objekt, ei oma ĂŒhtset vÀÀrtust kogu klastris. Iga sequence on kohalik iga sĂ”lme jaoks. Kui teil on unikaalsed piirangud kasutavad vĂ€ljad ja kasutate sequence, siis saate teha ainult inkremendi, mis on vĂ”rdne sĂ”lme numbriga klastris, kuna mida rohkem sĂ”lmi klastris, seda kiiremini teie sequence kasvab. Jah, int saab kiiremini otsa kui olete planeerinud. Toote kasutamise lihtsustamiseks leiate isegi funktsiooni alter_sequences, mis teostab vajalikud inkremendid iga sequence'i jaoks kĂ”igis sĂ”lmedes, kuid olge valmis, et funktsioon ei pruugi kĂ”ikides versioonides toimida. Loomulikult saate selle ise kirjutada, vĂ”ttes aluseks koodi GitHubist vĂ”i muutes seda otse SÜB-d. Samuti töötavad serial ja bigserial tĂŒĂŒpi vĂ€ljad tĂ€psemalt, kuid selle kasutamiseks peate tĂ”enĂ€oliselt ĂŒmber kirjutama oma protseduuride ja funktsioonide koodi. VĂ”ib-olla on kasulik funktsioon monotonic_sequences.

Enne versiooni 11.2 „Postgres Pro Enterprise“ töötab replikatsioon ainult unikaalsete pĂ”hivĂ”tmete olemasolu korral, pidage seda arendamisel meeles.

Eraldi tasub mainida npgsql töö eripĂ€ra klastrilahendustes; need probleemid ei esine ĂŒhel noodil, kuid mitme sĂ”lme puhul on need tĂ€iesti olemas.
MÔnedes versioonides vÔib esineda viga:

Exception Details: Npgsql.PostgresException: 25001: kÀsk SET TRANSACTION ISOLATION LEVEL 
Description: KÀesoleva veebipÀringu tÀitmisel tekkis kÀsitlemata erand. Palun vaadake virna jÀlge, et saada lisainfot vea ja selle koodi kohta, kust see pÀrineb. 

Mida saab teha? Lihtsalt ei tohi kasutada mĂ”ningaid versioone. Tuleb neid teada, kuna viga ei esine ainult ĂŒhes versioonis, ja isegi pĂ€rast selle esimest parandamist vĂ”ite sellega hiljem uuesti kokku puutuda. Olge selleks valmis ja katke kĂ”ik tootja parandatud andmebaasi defektid eraldi regressioonitestidega. Usaldage, kuid kontrollige.

Kui rakendus kasutab npgsql-i ja vahetab sÔlmede vahel, arvates, et need on kÔik tÀiesti identsed, vÔib teil tekkida viga:

EXCEPTION: Npgsql.PostgresException (0x80004005): XX000: vahemĂ€lu otsing ebaĂ”nnestus tĂŒĂŒbile ...

See viga tekib seetÔttu, et toimub sidumine

(NpgsqlConnection.GlobalTypeMapper.MapComposite<SomeType>("some_composite_type");) 

komposiit tĂŒĂŒpidel rakenduse kĂ€ivitamise ajal kĂ”ikide ĂŒhenduste jaoks. Tulemuseks on identifikaator mĂ”ne ĂŒhe sĂ”lme jaoks, ja kui pĂ€ring tehakse teisel sĂ”lmel, ei lange see kokku, mistĂ”ttu tagastatakse viga, st lĂ€bipaistvalt töötamine komposiit tĂŒĂŒpidega klastris mĂ”nede rakenduste jaoks on vĂ”imatu lisal isti ĂŒleskirjutusteta rakenduse poolel (kui teil Ă”nnestub seda teha).

Kuidas me kĂ”ik teame, on klastrite ĂŒldise seisundi hindamine vĂ€ga oluline diagnostikaks ja operatiivseteks meetmeteks, et töötada, tootes leiate mĂ”ned funktsioonid, mis peaksid teie elu lihtsamaks tegema, kuid mĂ”nikord vĂ”ivad need anda tĂ€iesti erinevaid tulemusi, kui te ja isegi tootja sellelt ootab.

NĂ€iteks:

select mtm.collect_cluster_info();
iga sÔlmel annab sama tulemuse:
(1,Online,0,0,0,2,3,0,0,0,1,0,0,1,1,3,7,0,0,0,"2018-10-31 05:33:06")
(2,Online,0,0,0,2,3,0,0,0,1,0,0,1,1,3,7,0,0,0,"2018-10-31 05:33:06")
(3,Online,0,0,0,2,3,0,0,0,1,0,0,1,1,3,7,0,0,0,"2018-10-31 05:33:09")

Aga miks on LiveNodes vÀljal igal pool number 2, kuigi mitme meistritevahelise töö kirjeldus peaks vastama AllNodes=3 arvule? Vastus: DB versioon tuleb uuendada.

Ja olge valmis koguma logisid kÔikidel sÔlmedel, kuna tavaliselt nÀete teateid "viga on teise sÔlme logis". Tehniline tugi aktsepteerib kÔik teie avastatud vead ja teavitab teid jÀrgmise versiooni valmidusest, mille paigaldamine vÔib mÔnikord vajada teenuse peatamist vÔi kesta kauem (sÔltub teie andmebaasi mahust). Ei tasu loota, et kasutusprobleemid hÀirivad tootjat, ning vÀrskendus seoses avastatud vigadega toimub koos tootja esindajate osavÔtuta, tÀpsemalt ei tasu kaasata tootja esindajaid, kuna lÔpuks vÔib teil olla tootmises lahku lÀinud klaster ilma varukoopiateta.

Tegelikult hoiatab tootja kommertsprodukte litsentsis ausalt: "See tarkvara on ette nĂ€htud riigi „nagu on“ alusel ja OÜ „Postgres Professionaalne“ ei ole kohustatud pakkuma teenindust, tuge, vĂ€rskendusi, laiendusi vĂ”i muudatusi."

Kui te pole veel mÔistnud, millist toodet silmas peetakse, siis kogu see kogemus on saadud Postgres Pro Enterprise andmebaasi aastase kasutamise tulemusena. JÀrelduse vÔite teha ise, selline niiskus, et seened kasvavad.

Aga see oleks veel pool hÀda, kui probleemid lahendataks Ôigeaegselt ja efektiivselt.

Aga seda just ei toimu. Tundub, et tootjal pole piisavalt ressursse, et avastatud vigu kiiresti kÔrvaldada.

Ainult registreeritud kasutajad saavad kĂŒsitluses osaleda. Logige sisse, palun.

Kas teil on kogemusi vÔÔr- vĂ”i autoriĂ”igusega andmebaasi haldustarkvara ĂŒleminekuga vabale vĂ”i kohalikele lahendustele?

  • 21,3%Jah, positiivne10

  • 10,6%Jah, negatiivne5

  • 21,3%Ei, andmebaasi ei ole vahetatud10

  • 4,3%Andmebaasi on vahetatud, kuid midagi ei ole muutunud2

  • 42,6%Vaata tulemusi20

HÀÀletas 47 kasutajat. Erakuks jÀi 12 kasutajat.

Allikas: habr.com

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