"ப்ரோ, ஆனால் கிளஸ்டர் அல்ல" அல்லது இறக்குமதி செய்யப்பட்ட DBMS ஐ எவ்வாறு மாற்றினோம்

"ப்ரோ, ஆனால் கிளஸ்டர் அல்ல" அல்லது இறக்குமதி செய்யப்பட்ட DBMS ஐ எவ்வாறு மாற்றினோம்
(ts) Yandex.Images

அனைத்து கதாபாத்திரங்களும் கற்பனையானவை, வர்த்தக முத்திரைகள் அவற்றின் உரிமையாளர்களுக்கு சொந்தமானது, ஏதேனும் ஒற்றுமைகள் சீரற்றவை மற்றும் பொதுவாக, இது எனது "அகநிலை மதிப்பு தீர்ப்பு, தயவுசெய்து கதவை உடைக்க வேண்டாம் ...".

ஒரு DBMS இலிருந்து மற்றொரு தரவுத்தளத்திற்கு தர்க்கத்துடன் தகவல் அமைப்புகளை மாற்றுவதில் எங்களுக்கு கணிசமான அனுபவம் உள்ளது. நவம்பர் 1236, 16.11.2016 இன் அரசாங்க ஆணை எண். XNUMX இன் சூழலில், இது பெரும்பாலும் ஆரக்கிளில் இருந்து Postgresql க்கு மாற்றப்படும். முடிந்தவரை திறமையாகவும் வலியின்றியும் செயல்முறையை எவ்வாறு ஒழுங்கமைப்பது என்பதை நாங்கள் தனித்தனியாகச் சொல்லலாம்; இன்று ஒரு கிளஸ்டரைப் பயன்படுத்துவதற்கான அம்சங்கள் மற்றும் நடைமுறைகள் மற்றும் செயல்பாடுகளில் சிக்கலான தர்க்கத்துடன் அதிக ஏற்றப்பட்ட விநியோகிக்கப்பட்ட அமைப்புகளை உருவாக்கும்போது என்ன சிக்கல்களை எதிர்கொள்ளலாம் என்பதைப் பற்றி பேசுவோம்.

ஸ்பாய்லர் - ஆம், தொப்பி, RAC மற்றும் pg மல்டிமாஸ்டர் மிகவும் மாறுபட்ட தீர்வுகள்.

நீங்கள் ஏற்கனவே அனைத்து தர்க்கங்களையும் plsql இலிருந்து pgsql க்கு மாற்றிவிட்டீர்கள் என்று வைத்துக்கொள்வோம். உங்கள் பின்னடைவு சோதனைகள் மிகவும் சரி, இப்போது நிச்சயமாக நீங்கள் அளவிடுதல் பற்றி யோசிக்கிறீர்கள், ஏனெனில்... சுமை சோதனைகள் உங்களை மிகவும் மகிழ்ச்சியடையச் செய்யவில்லை, குறிப்பாக திட்டத்தில் முதலில் சேர்க்கப்பட்ட வன்பொருளில், அந்த வித்தியாசமான டிபிஎம்எஸ். "மல்டிமாஸ்டர்" என்ற விருப்பத்துடன் "போஸ்ட்கிரெஸ் புரொஃபெஷனல்" என்ற உள்நாட்டு விற்பனையாளரிடமிருந்து நீங்கள் ஒரு தீர்வைக் கண்டுபிடித்தீர்கள் என்று வைத்துக்கொள்வோம், இது "போஸ்ட்கிரெஸ் ப்ரோ எண்டர்பிரைஸ்" இன் "அதிகபட்ச" பதிப்பில் மட்டுமே கிடைக்கிறது மற்றும் விளக்கத்தின் படி - இது மிகவும் ஒத்ததாக இருக்கிறது. உங்களுக்குத் தேவை, முதல் மேலோட்டமான ஆய்வின் மூலம் அது என் தலையில் வரும்: "ஓ! RACக்கு பதிலாக அதுதான்! எங்கள் தாயகத்தில் ஒரு தொழில்நுட்ப குழாய் இருந்தாலும் கூட! ”

ஆனால் மகிழ்ச்சியடைய அவசரப்பட வேண்டாம், மேலும் இந்த நுணுக்கங்களை நீங்கள் ஏன் தெரிந்து கொள்ள வேண்டும் என்பதை நாங்கள் விவரிப்போம், ஏனென்றால் ... தயாரிப்பு ஆவணங்களை முழுமையாகப் படித்த பிறகும் அவற்றைக் கணிப்பது கடினம். உற்பத்தி தளத்தில் நேரடியாக DBMS பதிப்புகளை அடிக்கடி புதுப்பிக்க நீங்கள் தயாரா என்பதை மதிப்பிடவும் சில குறைபாடுகள் தொழில்துறை பயன்பாட்டுடன் பொருந்தாது மற்றும் சோதனையின் போது கண்டறிவது கடினம்.
உற்பத்தியாளரின் இணையதளத்தில் "மல்டிமாஸ்டர்" - "வரம்புகள்" பகுதியை கவனமாகப் படிப்பதன் மூலம் தொடங்கவும்.

நீங்கள் சந்திக்கும் முதல் விஷயம், பரிவர்த்தனைகள் எவ்வாறு செயல்படுகின்றன என்பதன் தனித்தன்மைகள், என்று அழைக்கப்படும். "இரண்டு-கட்ட" பயன்முறை, சில சமயங்களில் உங்கள் செயல்முறையின் முழு தர்க்கத்தையும் மீண்டும் எழுதுவதைத் தவிர இதை சரிசெய்ய வழி இல்லை. இங்கே ஒரு எளிய உதாரணம்:

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;

ஒரு பிழை ஏற்படுகிறது:

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

பின்னர் நீங்கள் 10.5, 10.6 பதிப்புகளில் டெட் லாக் மூலம் நீண்ட நேரம் போராடலாம், மேலும் கிளஸ்டரின் முழு சாரத்தையும் கொல்லும் ஒரே அறியப்பட்ட தீர்வு கிளஸ்டரிலிருந்து "சிக்கல்" அட்டவணைகளை அகற்றுவதாகும், அதாவது. make_table_local செய்யுங்கள், ஆனால் இது குறைந்தபட்சம் அதைச் செயல்பட அனுமதிக்கும், மேலும் பரிவர்த்தனை செய்வதற்காக காத்திருப்பதால் எல்லாவற்றையும் நிறுத்தி வைக்காது. சரி, அல்லது பதிப்பு 11.2 க்கு புதுப்பிப்பை நிறுவவும், இது உதவ வேண்டும், ஆனால் ஒருவேளை இல்லை, சரிபார்க்க மறக்காதீர்கள்.

சில பதிப்புகளில் நீங்கள் இன்னும் மர்மமான பூட்டைப் பெறலாம்:

username= mtm и backend_type = background worker

இந்த சூழ்நிலையில், DBMS பதிப்பை 11.2 மற்றும் அதற்கு மேற்பட்டதாக புதுப்பிப்பது மட்டுமே உங்களுக்கு உதவும், அல்லது அது உதவாது.

குறியீடுகளுடன் கூடிய சில செயல்பாடுகள் பிழைகளுக்கு வழிவகுக்கலாம், இது இரு-திசை நகலெடுப்பில் சிக்கல் இருப்பதை தெளிவாகக் குறிக்கிறது; நீங்கள் MTM பதிவுகளில் BDR ஐ நேரடியாகக் காண்பீர்கள். இது உண்மையில் 2வது குவாட்ரன்ட்தானா? இல்லை... மல்டிமாஸ்டர் வாங்கினோம், அது ஒரு தற்செயல் நிகழ்வு, இது தொழில்நுட்பத்தின் பெயர்.

[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 

நீங்கள் தற்காலிக அட்டவணைகளைப் பயன்படுத்தினால், உத்தரவாதங்கள் இருந்தபோதிலும்: “மல்டிமாஸ்டர் நீட்டிப்பு முற்றிலும் தானியங்கி முறையில் தரவு நகலெடுக்கிறது. நீங்கள் ஒரே நேரத்தில் எழுதும் பரிவர்த்தனைகளைச் செய்யலாம் மற்றும் கிளஸ்டரில் உள்ள எந்த முனையிலும் தற்காலிக அட்டவணைகளுடன் வேலை செய்யலாம்.

நடைமுறையில் பயன்படுத்தப்படும் அனைத்து அட்டவணைகளிலும் பிரதிபலிப்பு வேலை செய்யாது என்பதை நீங்கள் பெறுவீர்கள், குறியீட்டில் ஒரு தற்காலிக அட்டவணை உருவாக்கம் இருந்தால், மேலும் multimaster.remote_functions ஐப் பயன்படுத்தினாலும் உதவாது, நீங்கள் உங்கள் தர்க்கத்தை புதுப்பிக்க வேண்டும் அல்லது மீண்டும் எழுத வேண்டும். செயல்முறை. Postgres Pro Enterprise v 10.5 க்குள் நீங்கள் மல்டிமாஸ்டர் மற்றும் pg_pathman ஆகிய இரண்டு நீட்டிப்புகளை ஒரே நேரத்தில் பயன்படுத்த வேண்டும் என்றால், இந்த எளிய உதாரணத்துடன் சரிபார்க்கவும்:

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

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

தொழில்நுட்ப ஆதரவில் இந்த பிழைகள் என்ன என்பதை நீங்கள் கண்டுபிடிக்கலாம், நீங்கள் அதை வாங்கியது வீண் அல்ல.

என்ன செய்ய? சரி! "Postgres Pro Enterprise" v 11.2 க்கு மேம்படுத்தவும்

தனித்தனியாக, வரிசையானது, பிரதி தரவுத்தளத்தின் பொருளாக இருப்பதால், க்ளஸ்டர் முழுவதும் ஒரு முடிவு-இறுதி மதிப்பு இல்லை என்பதை நீங்கள் அறிந்து கொள்ள வேண்டும், ஒவ்வொரு வரிசையும் ஒவ்வொரு முனைக்கும் உள்ளமைவாக இருக்கும், மேலும் உங்களிடம் தனிப்பட்ட கட்டுப்பாடுகள் மற்றும் பயன்பாட்டு வரிசையுடன் புலங்கள் இருந்தால், பின்னர் நீங்கள் கிளஸ்டரில் உள்ள முனை எண்ணுக்கு சமமான அதிகரிப்பை மட்டுமே செய்ய முடியும், ஏனெனில் முடிந்தவரை கிளஸ்டரில் உள்ள பல முனைகள், வரிசை மற்றும் எண்ணானது நீங்கள் எதிர்பார்த்ததை விட வேகமாக வளரும். தயாரிப்பில் வரிசையுடன் வேலை செய்வதை எளிதாக்க, நீங்கள் alter_sequences செயல்பாட்டைக் கூடக் காணலாம், இது அனைத்து முனைகளிலும் ஒவ்வொரு வரிசைக்கும் தேவையான அதிகரிப்புகளை உருவாக்கும், ஆனால் அனைத்து பதிப்புகளிலும் செயல்பாடு இயங்காது என்பதைத் தயாராக இருங்கள். நிச்சயமாக, கிதுப்பில் உள்ள குறியீட்டை அடிப்படையாகப் பயன்படுத்தி அல்லது டிபிஎம்எஸ்ஸில் நேரடியாகச் சரிசெய்து அதை நீங்களே எழுதலாம். இந்த வழக்கில், serialbigserial வகை கொண்ட புலங்கள் மிகவும் சரியாக வேலை செய்யும், ஆனால் அவற்றைப் பயன்படுத்த, பெரும்பாலும் நீங்கள் உங்கள் நடைமுறைகள் மற்றும் செயல்பாடுகளின் குறியீட்டை மீண்டும் எழுத வேண்டும். மோனோடோனிக்_சீக்வென்ஸ் செயல்பாட்டை யாராவது பயனுள்ளதாகக் காணலாம்.

Postgres Pro Enterprise இன் பதிப்பு 11.2 க்கு முன், தனிப்பட்ட முதன்மை விசைகள் இருந்தால் மட்டுமே பிரதிபலிப்பு வேலை செய்யும், இதை உருவாக்கும்போது கணக்கில் எடுத்துக்கொள்ளவும்.

தனித்தனியாக, ஒரு கிளஸ்டர் கரைசலில் npgsql எவ்வாறு செயல்படுகிறது என்பதற்கான தனித்தன்மையை நான் குறிப்பிட விரும்புகிறேன்; இந்த சிக்கல்கள் ஒரு முனையில் எழுவதில்லை, ஆனால் அவை மல்டிமாஸ்டரில் உள்ளன.
சில பதிப்புகளில் நீங்கள் பிழையை சந்திக்கலாம்:

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. 

என்ன செய்ய முடியும்? நீங்கள் சில பதிப்புகளைப் பயன்படுத்தக்கூடாது. நீங்கள் அவர்களை அறிந்து கொள்ள வேண்டும், ஏனென்றால் ... பிழை ஒன்றுக்கும் மேற்பட்ட பதிப்புகளில் தோன்றும், அதன் முதல் திருத்தத்திற்குப் பிறகும், நீங்கள் அதை பின்னர் சந்திக்கலாம். இதற்கும் நீங்கள் தயாராக இருக்க வேண்டும் மற்றும் உற்பத்தியாளரால் சரிசெய்யப்பட்ட அனைத்து அடையாளம் காணப்பட்ட DBMS குறைபாடுகளையும் தனித்தனி பின்னடைவு சோதனைகள் மூலம் மறைப்பது நல்லது. எனவே பேச, நம்புங்கள், ஆனால் சரிபார்க்கவும்.

பயன்பாடு npgsql ஐப் பயன்படுத்தினால், அவை அனைத்தும் ஒரே மாதிரியானவை என்று நினைத்து முனைகளுக்கு இடையில் மாறினால், நீங்கள் ஒரு பிழையைப் பெறலாம்:

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

பிணைப்பு நடந்து கொண்டிருப்பதால் இந்தப் பிழை ஏற்படும்

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

அனைத்து இணைப்புகளுக்கும் பயன்பாட்டு தொடக்கத்தில் கூட்டு வகைகள். இதன் விளைவாக, ஒரு முனையிலிருந்து ஒரு அடையாளங்காட்டியைப் பெறுகிறோம், மற்றொரு முனையில் கோரும்போது, ​​அது பொருந்தவில்லை, இதன் விளைவாக ஒரு பிழை திரும்பியது, அதாவது. ஒரு கிளஸ்டரில் கலப்பு வகைகளுடன் வெளிப்படையாக வேலை செய்வது சில பயன்பாடுகளுக்கு கூடுதல் பயன்பாட்டு பக்க மறுபதிப்புகள் இல்லாமல் (நீங்கள் அவ்வாறு செய்ய முடிந்தால்) சாத்தியமில்லை.

நாம் அனைவரும் அறிந்தபடி, செயல்பாட்டின் போது கண்டறிதல் மற்றும் செயல்பாட்டு நடவடிக்கைகளுக்கு கிளஸ்டரின் ஒட்டுமொத்த மதிப்பீடு மிகவும் முக்கியமானது, தயாரிப்பில் உங்கள் வாழ்க்கையை எளிதாக்கும் சில செயல்பாடுகளை நீங்கள் காணலாம், ஆனால் சில சமயங்களில் அவை முற்றிலும் மாறுபட்ட ஒன்றைக் கொடுக்கலாம். நீங்களும் உற்பத்தியாளரும் கூட அவர்களிடமிருந்து நீங்கள் எதிர்பார்க்கிறீர்கள்.

உதாரணமாக:

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

மல்டிமாஸ்டரின் செயல்பாட்டின் விளக்கத்தின்படி அது AllNodes=2 என்ற எண்ணுடன் ஒத்திருக்க வேண்டும் என்றாலும், LiveNodes புலத்தில் ஏன் எல்லா இடங்களிலும் எண் 3 உள்ளது? பதில்: நீங்கள் DBMS பதிப்பைப் புதுப்பிக்க வேண்டும்.

மேலும் அனைத்து முனைகளுக்கும் பதிவுகளை சேகரிக்க தயாராக இருங்கள், ஏனெனில்... வழக்கமாக நீங்கள் "பிழை மற்றொரு முனையின் பதிவில் உள்ளது" என்று பார்ப்பீர்கள். தொழில்நுட்ப ஆதரவு நீங்கள் கண்டறிந்த அனைத்து குறைபாடுகளையும் ஏற்றுக்கொண்டு, அடுத்த பதிப்பு தயாராக உள்ளது என்பதை உங்களுக்குத் தெரிவிக்கும், இது சில நேரங்களில் சேவையை நிறுத்தியவுடன் நிறுவப்பட வேண்டும், சில நேரங்களில் நீண்ட காலத்திற்கு (உங்கள் DBMS இன் அளவைப் பொறுத்து). செயல்பாட்டு சிக்கல்கள் விற்பனையாளரை பெரிதும் தொந்தரவு செய்யும் என்று நீங்கள் நம்பக்கூடாது, மேலும் அடையாளம் காணப்பட்ட குறைபாடுகள் காரணமாக புதுப்பித்தல் விற்பனையாளரின் பிரதிநிதிகளின் பங்கேற்புடன் மேற்கொள்ளப்படும், அல்லது விற்பனையாளரின் பிரதிநிதிகளை நீங்கள் ஈடுபடுத்த வேண்டிய அவசியமில்லை. காப்புப்பிரதி இல்லாமல் உற்பத்தியில் பிரித்தெடுக்கப்பட்ட கிளஸ்டருடன் நீங்கள் முடிவடையும்.

உண்மையில், வணிகத் தயாரிப்புக்கான உரிமத்தில், உற்பத்தியாளர் நேர்மையாக எச்சரிக்கிறார்: "இந்த மென்பொருள் "உள்ளது" அடிப்படையில் வழங்கப்படுகிறது மற்றும் பராமரிப்பு, ஆதரவு, புதுப்பிப்புகள், நீட்டிப்புகள் அல்லது மாற்றங்களை வழங்குவதற்கு Postgres Professional Limited Liability நிறுவனம் கடமைப்பட்டிருக்காது."

நாங்கள் எந்த தயாரிப்பைப் பற்றி பேசுகிறோம் என்பதை நீங்கள் இன்னும் யூகிக்கவில்லை என்றால், இந்த அனுபவம் அனைத்தும் Postgres Pro Enterprise தரவுத்தளத்தின் ஆண்டு கால செயல்பாட்டின் விளைவாக பெறப்பட்டது. நீங்கள் உங்கள் சொந்த முடிவை எடுக்கலாம், காளான்கள் வளரும் அளவுக்கு ஈரமாக இருக்கிறது.

ஆனால் இது சரியான நேரத்தில் செய்யப்பட்டு, வளர்ந்து வரும் சிக்கல்களை உடனடியாக அகற்றினால், இது மிகவும் மோசமாக இருக்காது.

ஆனால் இது துல்லியமாக நடக்கவில்லை. அடையாளம் காணப்பட்ட பிழைகளை உடனடியாக அகற்ற உற்பத்தியாளரிடம் போதுமான ஆதாரங்கள் இல்லை.

பதிவு செய்த பயனர்கள் மட்டுமே கணக்கெடுப்பில் பங்கேற்க முடியும். உள்நுழையவும், தயவு செய்து.

வெளிநாட்டு/தனியார் DBMS இலிருந்து இலவச/உள்நாட்டிற்கு மாறுவதில் உங்களுக்கு அனுபவம் உள்ளதா?

  • 21,3%ஆம், நேர்மறை 10

  • 10,6%ஆம், எதிர்மறை 5

  • 21,3%இல்லை, DBMS மாற்றப்படவில்லை10

  • 4,3%DBMS மாற்றப்பட்டது, ஆனால் எதுவும் மாறவில்லை2

  • 42,6%முடிவுகளைப் பார்க்கவும்20

47 பயனர்கள் வாக்களித்தனர். 12 பயனர்கள் வாக்களிக்கவில்லை.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்