“Pro, ach chan e brabhsair” no mar a chuir sinn an àite DBMS a chaidh a thoirt a-steach

“Pro, ach chan e brabhsair” no mar a chuir sinn an àite DBMS a chaidh a thoirt a-steach
(ts) Yandex.Ìomhaighean

Tha na caractaran uile ficseanail, buinidh na comharran-malairt dha na sealbhadairean fa leth aca, tha coltas sam bith dìreach co-thuiteamas agus, san fharsaingeachd, is e seo mo “bhreithneachadh luach pearsanta, na bris sìos an doras…”.

Tha eòlas farsaing againn air siostaman fiosrachaidh le loidsig stòr-dàta a ghluasad bho aon DBMS gu fear eile. A rèir Rùn an Riaghaltais Àir. 1236 air 16 Samhain, 2016, bidh seo gu tric a’ toirt a-steach gluasad bho Oracle gu PostgreSQL. Is urrainn dhuinn beachdachadh air mar a chuireas sinn am pròiseas seo air dòigh cho èifeachdach agus cho furasta ‘s a ghabhas air leth. An-diugh, bruidhnidh sinn air mion-fhiosrachadh cleachdadh cruinneachadh agus na dùbhlain a dh’ fhaodadh tu a bhith an aghaidh nuair a bhios tu a’ togail shiostaman sgaoilte àrd-luchd le loidsig iom-fhillte ann an modhan-obrach agus gnìomhan.

Spoiler: tha, tha cap, RAC agus pg multimaster nan fuasglaidhean gu math eadar-dhealaichte.

Abair gu bheil thu air do loidsig gu lèir a ghluasad bho plsql gu pgsql mu thràth. Agus tha na deuchainnean ath-tharraing agad gu tur ceart gu leòr. A-nis tha thu gu nàdarrach a’ smaoineachadh mu bhith a’ sgèileadh, leis nach eil deuchainnean luchdan na chùis mhòr, gu sònraichte air a’ bhathar-chruaidh a chaidh a dhealbhadh an toiseach airson an DBMS eile sin. Abair gu bheil thu air fuasgladh fhaighinn bho sholaraiche dachaigheil, Postgres Professional, le feart ris an canar “multimaster,” nach eil ri fhaighinn ach anns an dreach “deireannach”, Postgres Pro Enterprise. A’ breithneachadh bhon tuairisgeul, tha e glè choltach ris na dh’ fheumas tu, agus air a’ chiad sealladh, is dòcha gum bi thu a’ smaoineachadh, “O! Dìreach an rud an àite RAC! Agus le taic theicnigeach dachaigheil cuideachd!”

Ach na bi ro thoilichte. Mìnichidh sinn carson a dh’fheumas tu a bhith mothachail air na diofaran beaga seo, oir tha iad duilich an ro-innse, eadhon an dèidh dhut sgrìobhainnean an toraidh a leughadh gu faiceallach. Beachdaich a bheil thu deiseil airson dreachan DBMS ùrachadh gu tric gu dìreach air an làrach riochdachaidh, oir chan eil cuid de lochdan co-chòrdail ri cleachdadh riochdachaidh agus tha iad duilich an lorg rè deuchainnean.
Tòisich le bhith a’ leughadh gu faiceallach an earrann “multimaster” - “cuingealachadh” air làrach-lìn an neach-dèanamh.

Is e a’ chiad rud a dh’ fhaodadh tu a thighinn tarsainn air na rudan sònraichte a tha an lùib mar a bhios gnothaichean ag obair anns a’ mhodh ris an canar “dà-ìre”, agus uaireannan chan eil dòigh ann air seo a chàradh ach ath-sgrìobhadh loidsig iomlan do mhodh-obrach. Seo eisimpleir sìmplidh:

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;

Thachair mearachd:

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

Faodaidh tu leantainn air adhart a’ strì le bacaidhean ann an dreachan 10.5 agus 10.6 airson ùine mhòr, agus is e an aon fhuasgladh aithnichte, a sgriosas puing iomlan cruinneachadh gu tur, na clàran “duilgheadais” a thoirt air falbh bhon chruinneachadh, i.e., a’ ruith make_table_local. Ach leigidh seo le rudan obrachadh co-dhiù, seach a bhith a’ tuiteam a h-uile càil air sgàth feitheamh ri gnothaichean a dhèanamh. No faodaidh tu ùrachadh gu dreach 11.2, a bu chòir cuideachadh, ach is dòcha nach cuidich - bi cinnteach gun dèan thu sgrùdadh.

Ann an cuid de dhreachan, is dòcha gum faigh thu glas eadhon nas dÏomhaire:

username= mtm и backend_type = background worker

Agus san t-suidheachadh seo, cha chuidich Úrachadh an dreach DBMS gu 11.2 no nas àirde thu, ach is dòcha nach cuidich e.

Faodaidh cuid de ghnìomhachd clàr-amais mearachdan adhbhrachadh a tha a’ nochdadh gu soilleir gur e Ath-riochdachadh Dà-shligheach a th’ ann; chì thu BDRan anns na logaichean MTM. An e 2naCeathramh a th’ ann? Chan eil... cheannaich sinn multimaster, chan eil ann ach co-thuiteamas; is e sin ainm na teicneòlais.

[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 

Ma tha thu a’ cleachdadh chlàran sealach, a dh’aindeoin nan geallaidhean: “Bidh an leudachadh ioma-mhaighstir a’ dèanamh ath-riochdachadh dàta gu tur fèin-ghluasadach. Faodaidh tu gnothaichean sgrìobhaidh a ruith aig an aon àm agus obrachadh le clàran sealach air nód cruinneachaidh sam bith."

Gu dearbh, thig crìoch air an ath-riochdachadh nach obraich thar gach clàr a thathar a’ cleachdadh sa mhodh-obrach ma chruthaicheas an còd clàr sealach, agus cha chuidich eadhon cleachdadh multimaster.remote_functions. Feumaidh tu an loidsig agad ùrachadh no ath-sgrìobhadh sa mhodh-obrach. Ma dh’ fheumas tu an dà leudachan multimaster agus pg_pathman a chleachdadh aig an aon àm ann am Postgres Pro Enterprise v10.5, dèan cinnteach gu bheil an eisimpleir shìmplidh seo ag obair:

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

Bidh na mearachdan a leanas a’ tòiseachadh a’ nochdadh anns na logaichean air na nódan DBMS:

…
 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

Gheibh thu a-mach dè na mearachdan seo le bhith a’ cur fios gu taic theicnigeach; cha b’ ann gun adhbhar a cheannaich thu e.

Dè bu chòir dhomh a dhèanamh? Tha sin ceart! Ùraich gu Postgres Pro Enterprise (v11.2).

Tha e cudromach a thoirt fa-near nach eil luach cunbhalach aig sreath, leis gur e nì stòr-dàta ath-riochdaichte a th’ ann, air feadh a’ chruinneachaidh gu lèir. Tha gach sreath ionadail do gach nód. Ma tha raointean agad le cuingealachaidhean sònraichte a bhios a’ cleachdadh sreath, chan urrainn dhut ach àrdachadh leis an àireamh nód cruinneachaidh. Tha seo a’ ciallachadh, mar as motha de nódan anns a’ chruinneachadh, ’s ann as luaithe a dh’fhàsas an sreath agad, agus ruithidh an dà chuid sreath agus int a-mach nas luaithe na bha dùil. Gus obair le sreathan a dhèanamh nas sìmplidhe, tha gnìomh alter_sequences anns an toradh eadhon, a nì na h-àrdachaidhean riatanach airson gach sreath air na nódan uile. Ach, bi mothachail nach obraich an gnìomh seo anns a h-uile dreach. Gu dearbh, faodaidh tu a sgrìobhadh thu fhèin, a’ cleachdadh a’ chòd bho GitHub no ga atharrachadh gu dìreach anns an DBMS. Bidh raointean Serialbigserial ag obair nas ceart, ach is dòcha gum feum thu na modhan-obrach agus na gnìomhan agad ath-sgrìobhadh ma chleachdas tu iad. Is dòcha gum bi an gnìomh monotonic_sequences feumail do chuideigin.

Ro Postgres Pro Enterprise 11.2, cha bhith ath-riochdachadh ag obair ach ma tha prìomh iuchraichean sònraichte ann, mar sin cumaibh seo san amharc nuair a bhios sibh a’ dealbhadh.

Bu mhath leam cuideachd iomradh a thoirt air mion-fhiosrachadh obrachadh npgsql ann am fuasgladh cruinneachaidh. Chan eil na duilgheadasan seo ag èirigh air aon nód, ach tha iad gu math follaiseach ann am fuasgladh ioma-mhaighstir.
Ann an cuid de dhreachan dh’ fhaodadh tu mearachd fhaighinn:

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. 

Dè a ghabhas dèanamh? Seachain dìreach dreachan sònraichte a chleachdadh. Tha e cudromach fios a bhith agad orra, oir tha am biast a’ nochdadh ann am barrachd air aon dreach, agus eadhon an dèidh a chàradh tùsail, is dòcha gun tig thu tarsainn air nas fhaide air adhart. Bu chòir dhut a bhith deiseil airson seo cuideachd, agus tha e nas fheàrr a h-uile locht DBMS a chaidh a chomharrachadh a bhios an neach-reic a’ càradh a chòmhdach le deuchainnean ath-tharraing fa leth. Earbsa, ach dearbhaich, mar gum biodh.

Ma chleachdas an aplacaid agad npgsql agus ma bhios e ag atharrachadh eadar nódan, a’ smaoineachadh gu bheil iad uile mar an ceudna, is dòcha gun tig thu tarsainn air a’ mhearachd a leanas:

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

Tachair am mearachd seo leis gu bheil an ceangal a’ dol air adhart.

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

Bithear a’ cleachdadh seòrsachan co-dhèanta aig àm tòiseachaidh an aplacaid airson a h-uile ceangal. Mar thoradh air an sin, chan eil comharraiche a gheibhear bho aon nód a’ freagairt nuair a thèid iarraidh air nód eile, agus mar thoradh air sin bidh mearachd ann. Tha seo a’ ciallachadh gum bi e do-dhèanta obrachadh gu follaiseach le seòrsachan co-dhèanta ann an cruinneachadh airson cuid de dh’aplacaidean às aonais ath-sgrìobhaidhean a bharrachd air taobh an aplacaid (ma tha e comasach dhut sin a dhèanamh).

Mar a tha fios againn uile, tha measadh iomlan air slàinte a’ chnuic deatamach airson breithneachadh agus eadar-theachdan obrachaidh. Tha cuid de fheartan anns an toradh a bu chòir do bheatha a dhèanamh nas fhasa, ach uaireannan is dòcha nach toir iad seachad na tha thusa, no eadhon an neach-dèanamh, an dùil.

Mar eisimpleir:

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

Ach carson a tha an àireamh 2 an-còmhnaidh air a shealltainn san raon LiveNodes, eadhon ged a tha tuairisgeul an multimaster ag ràdh AllNodes = 3? Freagairt: Feumaidh tu an dreach DBMS agad Úrachadh.

Bi deiseil airson logaichean a chruinneachadh airson gach nód, oir mar as trice chì thu “mearachd suidhichte ann an loga nód eile.” Gabhaidh taic theicnigeach ris na h-uireasbhaidhean uile a chomharraich thu agus cuiridh iad fios thugad nuair a bhios an ath dhreach deiseil, a dh’ fheumas ùine downt uaireannan, uaireannan eadhon airson ùine mhòr (a rèir meud an DBMS agad). Na bi an dùil gum bi cùisean obrachaidh ro dhragh don neach-reic, agus thèid ùrachadh mar thoradh air uireasbhaidhean a chaidh a lorg a dhèanamh le com-pàirteachadh riochdairean an neach-reic. Gu dearbh, cha bu chòir dhut eadhon riochdairean an neach-reic a thoirt a-steach, oir dh’ fhaodadh tu crìochnachadh le cruinneachadh air a dhì-chruinneachadh ann an cinneasachadh gun chùl-taic.

Gu dearbh, anns a’ chead toraidh malairteach, tha an neach-dèanamh a’ toirt rabhadh soilleir: “Tha am bathar-bog seo air a thoirt seachad air stèidh ‘mar a tha’, agus chan eil Postgres Professional Limited Liability Company fo dhleastanas sam bith cumail suas, taic, ùrachaidhean, leudachadh no atharrachaidhean a thoirt seachad."

Mura h-eil thu air tomhas dè an toradh a tha sinn a’ bruidhinn mu dheidhinn fhathast, fhuaireadh an t-eòlas seo uile bho bhliadhna de bhith a’ cleachdadh stòr-dàta Postgres Pro Enterprise. Faodaidh tu do cho-dhùnadh fhèin a tharraing: tha e cho tais is gu bheil e a’ fàs mar bhusan-buachair.

Ach cha bhiodh seo cho dona nan deidheadh ​​a dhèanamh ann an deagh àm agus nan deidheadh ​​fuasgladh fhaighinn air duilgheadasan sam bith a dh’èireas gu sgiobalta.

Ach is e sin dìreach nach eil a’ tachairt. A rèir choltais, chan eil na goireasan aig an neach-dèanamh gus biastagan sam bith a lorgar a chàradh gu sgiobalta.

Chan fhaod ach luchd-cleachdaidh clĂ raichte pĂ irt a ghabhail san sgrĂšdadh. Soidhnig a-steach, mas e do thoil e.

A bheil eòlas agad air gluasad bho DBMS cèin/dÏlseanaich gu fear an-asgaidh/dachaigheil?

  • 21,3%'S e, deimhinneach10

  • 10,6%'S e, Ă icheil5

  • 21,3%Chan eil, cha deach an DBMS atharrachadh.

  • 4,3%Chaidh an DBMS atharrachadh, ach cha deach dad atharrachadh.

  • 42,6%Seall toraidhean20

Bhòt 47 neach-cleachdaidh. Sheall 12 neach-cleachdaidh.

Source: www.habr.com

Ceannaich aoigheachd earbsach airson làraich le dìon DDoS, frithealaichean VPS VDS 🔥 Ceannaich aoigheachd làrach-lìn earbsach le dìon DDoS, frithealaichean VPS VDS | ProHoster