"Pro, men se pa yon gwoup" oswa ki jan nou ranplase DBMS enpòte

"Pro, men se pa yon gwoup" oswa ki jan nou ranplase DBMS enpòte
(ts) Yandex.Images

Tout karaktè yo se fiktif, mak fè pati mèt yo, nenpòt resanblans yo o aza ak an jeneral, sa a se "jijman valè subjectif mwen an, tanpri pa kraze pòt la ...".

Nou gen anpil eksperyans nan transfere sistèm enfòmasyon ak lojik nan yon baz done soti nan yon DBMS nan yon lòt. Nan kontèks dekrè gouvènman No 1236 nan 16.11.2016 Novanm XNUMX, sa a se souvan yon transfè soti nan Oracle nan Postgresql. Nou ka di ou separeman ki jan yo òganize pwosesis la pi efikas ak san doulè ke posib; jodi a nou pral pale sou karakteristik yo ki nan itilize yon gwoup ak ki pwoblèm yo ka rankontre lè yo bati sistèm distribiye trè chaje ak lojik konplèks nan pwosedi ak fonksyon.

Spoiler - wi, bouchon, RAC ak pg multimaster yo se solisyon trè diferan.

Ann di ou te deja transfere tout lojik la soti nan plsql nan pgsql. Ak tès regresyon ou yo byen OK, kounye a nan kou w ap panse sou dekale, paske ... tès chaj pa fè ou trè kontan, espesyalman sou pyès ki nan konpitè ki te orijinèlman enkli nan pwojè a, pou sa DBMS trè diferan. Ann di ou jwenn yon solisyon nan men vandè domestik "Postgres Pwofesyonèl" ak yon opsyon ki rele "multimaster", ki disponib sèlman nan vèsyon "maksimòm" "Postgres Pro Enterprise" ak dapre deskripsyon an - li trè menm jan ak sa. ou bezwen, epi ak premye etid la supèrfisyèl li pral vini panse a te vin nan tèt mwen: "Oh! Sa se li olye de RAC! E menm ak yon tiyo teknik nan peyi nou an!”

Men, pa prese kontan, epi pi lwen nou pral dekri poukisa ou bezwen konnen nuans sa yo, paske... yo difisil pou predi, menm apre yo fin byen li dokimantasyon pwodwi a. Evalye si w pare pou w souvan mete ajou vèsyon DBMS dirèkteman sou sit pwodiksyon an, paske Gen kèk domaj ki pa konpatib ak itilizasyon endistriyèl epi yo difisil pou detekte pandan tès la.
Kòmanse pa li ak anpil atansyon seksyon "multimaster" - "limitasyon" sou sit entènèt manifakti a.

Premye bagay ou ta ka rankontre se sengularite ki jan tranzaksyon yo travay, nan sa yo rele. "de-faz" mòd, epi pafwa pa gen okenn fason yo ranje sa a eksepte pa reekri lojik la tout antye nan pwosedi ou a. Men yon egzanp senp:

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;

Yon erè rive:

ОШИБКА:  [MTM] Transaction MTM-1-2435-10-605783555137701 (10654) is aborted on node 3. Check its log to see error details.

Lè sa a, ou ka goumen pou yon tan long ak dead lock nan vèsyon 10.5, 10.6, ak solisyon an sèlman li te ye ki touye tout sans nan gwoup la se retire tab "pwoblèm" nan gwoup la, i.e. fè make_table_local, men sa a pral omwen pèmèt li travay, epi li pa pral mete tout bagay sou kenbe paske nan pandye tann pou komèt tranzaksyon yo. Oke, oswa enstale yon aktyalizasyon nan vèsyon 11.2, ki ta dwe ede, men petèt pa, pa bliye tcheke.

Nan kèk vèsyon ou ka jwenn yon fèmen menm plis misterye:

username= mtm и backend_type = background worker

Ak nan sitiyasyon sa a, sèlman mete ajou vèsyon an DBMS nan 11.2 ak pi wo pral ede w, oswa petèt li pa pral ede.

Gen kèk operasyon ak endèks ki ka mennen nan erè, ki endike klèman ke pwoblèm nan se nan Replikasyon Bi-Direksyon; ou pral dirèkteman wè BDR nan mòso bwa MTM yo. Èske li vrèman 2ndQuadrant? Non... nou te achte yon multimaster, se jis yon konyensidans, se non teknoloji a.

[MTM] bdr doesn't support index rechecks
[MTM] 12124: REMOTE begin abort transaction 4083
[MTM] 12124: send ABORT notification for transaction  (5467) local xid=4083 to coordinator 3
[MTM] Receive ABORT_PREPARED logical message for transaction MTM-3-25030-83-605694076627780 from node 3
[MTM] Abort prepared transaction MTM-3-25030-83-605694076627780 status InProgress from node 3 originId=3
[MTM] MtmLogAbortLogicalMessage node=3 transaction=MTM-3-25030-83-605694076627780 lsn=9fff448 

Si w ap itilize tab tanporè, malgre asirans yo: "Extansyon multimaster la fè replikasyon done nan yon fason konplètman otomatik. Ou ka an menm tan fè tranzaksyon ekri epi travay avèk tab tanporè sou nenpòt nœud nan gwoup la.

Lè sa a, an reyalite, ou pral jwenn ke replikasyon pa travay nan tout tab yo itilize nan pwosedi a, si kòd la gen kreyasyon an yon tab tanporè, e menm lè l sèvi avèk multimaster.remote_functions pa pral ede, w ap oblije mete ajou oswa reekri lojik ou nan. pwosedi a. Si ou bezwen sèvi ak de ekstansyon multimaster ak pg_pathman ansanm nan Postgres Pro Enterprise v 10.5, Lè sa a, tcheke sa ak egzanp senp sa a:

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);

Erè sa yo kòmanse parèt nan mòso bwa yo sou nœuds DBMS yo:

…
 PATHMAN_CONFIG doesn't contain relation 23245
> find_in_dynamic_libpath: trying "/opt/…/ent-10/lib/pg_pathman"
> find_in_dynamic_libpath: trying "/opt//…/ent-10/lib/pg_pathman.so"
> ОТЛАДКА:  find_in_dynamic_libpath: trying "/opt/…/ent-10/lib/pg_pathman"
> find_in_dynamic_libpath: trying "/opt/…/ent-10/lib/pg_pathman.so"
> PrepareTransaction(1) name: unnamed; blockState: PREPARE; state: INPROGR, xid/subid/cid: 6919/1/40
> StartTransaction(1) name: unnamed; blockState: DEFAULT; state: INPROGR, xid/subid/cid: 0/1/0
> switched to timeline 1 valid until 0/0
…
Transaction MTM-1-13604-7-612438856339841 (6919) is aborted on node 2. Check its log to see error details.
...
[MTM] 28295: REMOTE begin abort transaction 7017
…
[MTM] 28295: send ABORT notification for transaction  (6919) local xid=7017 to coordinator 1

Ou ka chèche konnen ki erè sa yo ye nan sipò teknik, se pa pou gremesi ou te achte l.

Kisa pou fe? Dwa! Upgrade nan "Postgres Pro Enterprise" v 11.2

Separeman, ou bezwen konnen sekans sa a, kòm yon objè nan yon baz done replike, pa gen yon valè fen-a-fen nan tout gwoup la, chak sekans se lokal pou chak ne epi si ou gen jaden ki gen restriksyon inik epi sèvi ak sekans, Lè sa a, ou ka sèlman fè yon enkreman ekivalan a nimewo a ne nan grap, paske Kòm anpil nœuds nan gwoup la ke posib, sekans ak int ap grandi pi vit pase ou te espere. Pou senplifye travay ak sekans nan pwodwi a ou pral menm jwenn fonksyon alter_sequences, ki pral fè ogmantasyon ki nesesè pou chak sekans sou tout nœuds, men ou dwe prepare ke fonksyon an pa pral travay nan tout vèsyon. Natirèlman, ou ka ekri li tèt ou, lè l sèvi avèk kòd ki soti nan github kòm yon baz oswa korije li tèt ou dirèkteman nan DBMS la. Nan ka sa a, jaden ki gen kalite serialbigserial ap travay pi kòrèkteman, men pou itilize yo, gen plis chans w ap bezwen reekri kòd pwosedi ak fonksyon ou yo. Petèt yon moun ap jwenn fonksyon monotonic_sequences itil.

Anvan vèsyon 11.2 nan Postgres Pro Enterprise, replikasyon ap travay sèlman si gen kle prensipal inik, pran sa an kont lè w ap devlope.

Separeman, mwen ta renmen mansyone sengularite ki jan npgsql travay nan yon solisyon gwoup; pwoblèm sa yo pa leve sou yon sèl ne, men yo byen prezan nan yon multimaster.
Nan kèk vèsyon ou ka rankontre yon erè:

Exception Details: Npgsql.PostgresException: 25001: команда SET TRANSACTION ISOLATION LEVEL 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Kisa ki ka fè? Ou jis oblije pa sèvi ak kèk vèsyon. Ou bezwen konnen yo, paske... Erè a parèt nan plis pase yon vèsyon, e menm apre premye ranje li, ou ka rankontre li pita. Ou bezwen tou prepare pou sa a epi li pi bon pou kouvri tout domaj DBMS idantifye ke manifakti a korije ak tès regresyon separe. Se konsa, fè konfyans, men verifye.

Si aplikasyon an sèvi ak npgsql ak chanje ant nœuds panse ke yo tout se menm bagay la, Lè sa a, ou ka jwenn yon erè:

EXCEPTION:Npgsql.PostgresException (0x80004005): XX000: cache lookup failed for type ...

Erè sa a pral rive paske obligatwa a ap fèt

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

kalite konpoze nan demaraj aplikasyon pou tout koneksyon. Kòm yon rezilta, nou jwenn yon idantifyan ki soti nan yon ne, epi lè w mande sou yon lòt ne, li pa matche ak, kòm yon rezilta yo retounen yon erè, i.e. Travay transparan ak kalite konpoze nan yon gwoup pa pral posib pou kèk aplikasyon san yo pa reekri adisyonèl bò aplikasyon (si ou jere fè sa).

Kòm nou tout konnen, yon evalyasyon jeneral nan eta a nan gwoup la trè enpòtan pou dyagnostik ak mezi operasyonèl pandan operasyon an, nan pwodwi a ou ka jwenn kèk fonksyon ki ta dwe fè lavi ou pi fasil, men pafwa yo ka bay yon bagay konplètman diferan de sa. ou menm ak menm manifakti a tèt yo espere nan men yo ou ap tann.

Pou egzanp:

select mtm.collect_cluster_info();
на каждой ноде выдает одинаковый результат:
(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")

Men, poukisa jaden an LiveNodes genyen nimewo 2 toupatou, byenke dapre deskripsyon operasyon multimaster a li ta dwe koresponn ak nimewo AllNodes=3? Repons: ou bezwen mete ajou vèsyon an DBMS.

Epi prepare w pou kolekte mòso bwa pou tout nœuds, paske... anjeneral ou pral wè "erè a se nan boutèy la nan yon lòt ne." Sipò teknik pral aksepte tout defo ou idantifye yo epi fè w konnen pwochen vèsyon an pare, ki pral pafwa bezwen enstale ak sèvis la sispann, pafwa pou yon tan long (depann gwosè a nan DBMS ou). Ou pa ta dwe espere ke pwoblèm operasyon yo pral anpil deranje vandè a, ak aktyalizasyon a akòz defo idantifye yo pral fèt ak patisipasyon nan reprezantan vandè a, oswa olye, ou pa menm bezwen enplike reprezantan vandè a, depi nan la. fini ou ka fini ak yon gwoup demonte nan pwodiksyon san backup.

Aktyèlman, nan lisans pou yon pwodwi komèsyal, manifakti a onètman avèti: "Yo bay lojisyèl sa a sou yon baz "jan li ye" epi Postgres Professional Limited Liability Company pa oblije bay antretyen, sipò, mizajou, ekstansyon oswa chanjman."

Si ou poko devine de ki pwodwi nou ap pale, Lè sa a, tout eksperyans sa a te vin jwenn kòm yon rezilta operasyon yon ane nan baz done Postgres Pro Enterprise la. Ou ka tire pwòp konklizyon ou a, li tèlman mouye ke dyondyon grandi.

Men, sa a pa ta tèlman mal si li te fè nan yon fason apwopriye ak san pèdi tan elimine pwoblèm émergentes.

Men, sa a se jisteman sa ki pa rive. Aparamman manifakti a pa gen ase resous yo san pèdi tan elimine pinèz yo idantifye.

Se sèlman itilizatè ki anrejistre ki ka patisipe nan sondaj la. Enskri, tanpri.

Èske w gen eksperyans nan chanje soti nan yon DBMS etranje/pwopriyetè a yon sèl gratis/domestik?

  • 21,3%Wi, pozitif10

  • 10,6%Wi, negatif 5

  • 21,3%Non, DBMS a pa te chanje10

  • 4,3%DBMS a te chanje, men anyen pa chanje2

  • 42,6%Gade rezilta20

47 itilizatè yo te vote. 12 itilizatè te absteni.

Sous: www.habr.com

Add nouvo kòmantè