Oracle Cluster Time Synchronization Service (ctss)

 Общи  Коментарите са изключени за Oracle Cluster Time Synchronization Service (ctss)
Сеп. 072009
 

ctss е нов полезен инструмент, част от клъстерния стек на Oracle от версия 11.2. Той се грижи да няма голяма разлика между часовниците на всички нодове в един клъстер.

Какъв е проблема с часовниците?

За да работи правилно един клъстер, особено в active-avtive режим, между всички нодове постоянно прескачат съобщения „Жив ли си?“ – „Жив съм“. Така при отпадането на един нод, другите знаят, че трябва да поемат неговата работа. Ако някой нод не отговори достатъчно бързо на запитването „Жив ли си?“, другите го обявяват за мъртъв, поемат неговата работа, и за да не стане беля, го изритват от клъстера (за по-сигурно). Процеса на изритване се нарича node eviction и вече съм споменавал за него. Самото изритване на практика представлява възможно най-бърз и брутален рестарт на „губещия“, при който на windows се вижда един приятно син екран. Между другото, до сега се разчиташе на някакво съдействие от изритания нод, за да подейства изритването, но в 11.2 има опит да се използва management процесора, ако има такъв и ако отговаря на стандарта IPMI версия 1.5.

Както и да е. Понякога с тези въпроси кой е жив възниква проблем. Представете си следната ситуация:
1. Даден нод изпраща запитване до някой друг „жив ли си“.
2. 4 милисекунди след това ntpd на същия нод се събужда и сверява часовника, който е изостанал с 2 минути.
3. Още 2 милисекунди по-късно нашият нод решава, че другият не му отговаря вече над 2 минути и го изритва.
Естествено, това е прекалено опростено. Всъщност ntpd се опитва да не прескача по много време (само по 128 ms), но въпреки това понякога го прави. Практиката показва, че такива неща се случват.

Има и други проблеми със стандартните методи за синхронизация на времето. Примерно, когато се опитваме да видим защо дадена заявка е бавна и преглеждаме wait events, може (в случай като горния) да видим, че прочитането на един единствен блок от диска е отнело 2 минути вместо десетина милисекунди. Или обратно – може да излезе отрицателно време. Всичко това се дължи на „подскачането“ на часовника при сверяване.

Oracle Cluster Time Synchronization Service Daemon (octssd)

За това в 11.2 Oracle въвеждат нов процес в clusterware стека, който да отговаря специално за сверяването на часовника. За сега този демон първо се оглежда дали има работещ ntpd. Ако има, влиза в т.нар. observer mode, за да не развали хубавата конфигурация, която е направил системния администратор. (Всъщност имам подозрение, че се опитва да си хортува с ntpd – да му набута опция -x – но това не е описано в документацията).

Ако няма работещ ntpd, octssd влиза в active mode и започва да сверява часовниците на всички нодове. Според документацията, ги сверява спрямо часовника на един „референтен“ нод. На база на някои съобщения в логовете аз мисля, че използва статистически методи: изчислява „средното“ време между всичките и сверява всички часовници с него. От където и да взема времето, сверяването се прави плавно, със забавяне или забързване на часовника на съответния нод, за да се намалят до минимум гореописаните проблеми.

Къде е мотиката?

Проблема е, че ако има твърде голяма разлика между часовниците на нодовете, ctss отказва да се стартира (аналогично би постъпил и ntpd) и в резултат целият clusterware не тръгва. Това в общи линии е добре – това е индикация за реален проблем – но може да бъде доста стряскащо за някой, който не знае за тази особеност. Още повече, че има някои леко объркващи съобщения в alert log-а на клъстеруеъра. За това човек трябва да гледа не само последния ред, а и малко преди него:

[root@ghost ghost]# date
Mon Sep  7 11:06:24 EEST 2009
[root@ghost ghost]# date -s "7 SEP 2008 11:06:40"
Sun Sep  7 11:06:40 EEST 2008
[root@ghost ghost]# /ora_crs/grid/bin/crsctl start crs
CRS-4123: Oracle High Availability Services has been started.
[root@ghost ghost]# tail alertghost.log
2008-09-07 11:07:52.872
[crsd(21173)]CRS-1013:The OCR location in an ASM disk group is inaccessible. Details in /ora_crs/grid/log/ghost/crsd/crsd.log.
2008-09-07 11:07:53.813
[ohasd(20591)]CRS-2765:Resource 'ora.crsd' has failed on server 'ghost'.
2008-09-07 11:07:54.893
[crsd(21187)]CRS-1013:The OCR location in an ASM disk group is inaccessible. Details in /ora_crs/grid/log/ghost/crsd/crsd.log.
2008-09-07 11:07:55.838
[ohasd(20591)]CRS-2765:Resource 'ora.crsd' has failed on server 'ghost'.
2008-09-07 11:07:55.838
[ohasd(20591)]CRS-2771:Maximum restart attempts reached for resource 'ora.crsd'; will not restart.

[root@ghost ghost]# /ora_crs/grid/bin/crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4535: Cannot communicate with Cluster Ready Services
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
[root@ghost ghost]# /ora_crs/grid/bin/crs_stat -t
CRS-0184: Cannot communicate with the CRS daemon.

Тук съобщението „The OCR location in an ASM disk group is inaccessible“ е малко стряскащо и много подвеждащо. От файла /ora_crs/grid/log/ghost/crsd/crsd.log също изскачат стряскащи и подвеждащи съобщения:

2008-09-07 11:07:54.891: [  OCRASM][3670413808]proprasmo: Error in open/create file in dg [DATA01]
[  OCRASM][3670413808]SLOS : SLOS: cat=7, opn=kgfoAl06, dep=15077, loc=kgfokge
ORA-15077: could not locate ASM instance serving a required diskgroup

2008-09-07 11:07:54.893: [  OCRASM][3670413808]proprasmo: kgfoCheckMount returned [7]
2008-09-07 11:07:54.893: [  OCRASM][3670413808]proprasmo: The ASM instance is down
2008-09-07 11:07:54.893: [  OCRRAW][3670413808]proprioo: Failed to open [+DATA01]. Returned proprasmo() with [26]. Marking location as UNAVAILABLE.
2008-09-07 11:07:54.893: [  OCRRAW][3670413808]proprioo: No OCR/OLR devices are usable
2008-09-07 11:07:54.893: [  OCRASM][3670413808]proprasmcl: asmhandle is NULL
2008-09-07 11:07:54.893: [  OCRRAW][3670413808]proprinit: Could not open raw device
2008-09-07 11:07:54.893: [  OCRASM][3670413808]proprasmcl: asmhandle is NULL
2008-09-07 11:07:54.893: [  OCRAPI][3670413808]a_init:16!: Backend init unsuccessful : [26]
2008-09-07 11:07:54.894: [  CRSOCR][3670413808] OCR context init failure.  Error: PROC-26: Error while accessing the physical storage ASM error [SLOS: cat=7, opn=kgfoAl06, dep=15077, loc=kgfokge
ORA-15077: could not locate ASM instance serving a required diskgroup
] [7]
2008-09-07 11:07:54.894: [    CRSD][3670413808][PANIC] CRSD exiting: Could not init OCR, code: 26
2008-09-07 11:07:54.894: [    CRSD][3670413808] Done.

Нищо му няма на OCR файла, нито има проблем с пътя до него. Проблема е, че върнах часовника с една година назад и ctss отказва да отлепи . Това си го пише в /ora_crs/grid/log/ghost/ctssd/octssd.log:

2008-09-07 11:07:34.674: [  clsdmt][1160481088]Creating PID [21073] file for home /ora_crs/grid host ghost bin ctss to /ora_crs/grid/ctss/init/
2008-09-07 11:07:34.674: [  clsdmt][1160481088]Writing PID [21073] to the file [/ora_crs/grid/ctss/init/ghost.pid]
2008-09-07 11:07:34.674: [    CTSS][1149991232]ctsselect_mmg8: Host [spectre] Node num [1] is the master
2008-09-07 11:07:34.675: [    CTSS][1149991232]ctsselect_sm2: Node [1] is the CTSS master
2008-09-07 11:07:34.675: [    CTSS][1149991232]ctssslave_meh1: Master private node name [spectre]
2008-09-07 11:07:34.675: [    CTSS][1149991232]ctssslave_msh: Connect String is (ADDRESS=(PROTOCOL=tcp)(HOST=spectre)(PORT=16569))
2008-09-07 11:07:34.676: [    CTSS][1149991232]ctssslave_msh: Forming connection with CTSS master node [1]
2008-09-07 11:07:34.677: [    CTSS][1149991232]ctssslave_msh: Successfully connected to master [1]
2008-09-07 11:07:34.677: [    CTSS][1149991232]ctssslave_swm: The magnitude [31536002073184 usec] of the offset [-31536002073184 usec] is larger than [86400000000 usec] sec which is the CTSS limit.
2008-09-07 11:07:34.677: [    CTSS][1149991232]ctsselect_mmg9_3: Failed in clsctsselect_select_mode [12]: Time offset is too much to be corrected
2008-09-07 11:07:35.610: [    CTSS][1160481088]ctss_checkcb: clsdm requested check alive. Returns [40000050]
2008-09-07 11:07:35.610: [    CTSS][3009136672]ctss_init: Spawn completed. Waiting for threads to join
2008-09-07 11:07:35.610: [    CTSS][1149991232]ctsselect_mmg: CTSS daemon exiting [12].
2008-09-07 11:07:35.611: [    CTSS][1149991232]CTSS daemon aborting

Пише го и в alert log-а на клъстера, но е няколко десетки реда преди края на файла:

2008-09-07 11:07:22.547
[ctssd(21042)]CRS-2401:The Cluster Time Synchronization Service started on host ghost.
2008-09-07 11:07:34.675
[ctssd(21073)]CRS-2407:The new Cluster Time Synchronization Service reference node is host spectre.
2008-09-07 11:07:34.677
[ctssd(21073)]CRS-2404:The Cluster Time Synchronization Service detects that the local time is significantly different from the mean cluster time. Details in /ora_crs/grid/log/ghost/ctssd/octssd.log.

Оправията, естествено, е да се свери долу-горе времето, за да може ctss да запали.

[root@ghost ghost]# date -s "7 SEP 2009 11:26:40"
Mon Sep  7 11:26:40 EEST 2009
[root@ghost ghost]# /ora_crs/grid/bin/crsctl stop crs
CRS-2796: The command may not proceed when Cluster Ready Services is not running
CRS-4687: Shutdown command has completed with error(s).
CRS-4000: Command Stop failed, or completed with errors.

[root@ghost ghost]# /ora_crs/grid/bin/crsctl stop crs -f
CRS-2791: Starting shutdown of Oracle High Availability Services-managed resources on 'ghost'
. . .
CRS-2793: Shutdown of Oracle High Availability Services-managed resources on 'ghost' has completed
CRS-4133: Oracle High Availability Services has been stopped.

[root@ghost ghost]# /ora_crs/grid/bin/crsctl start crs
CRS-4123: Oracle High Availability Services has been started.

[root@ghost ghost]# tail -n 10 alertghost.log
2009-09-07 11:29:48.718
[ctssd(25311)]CRS-2408:The clock on host ghost has been updated by the Cluster Time Synchronization Service to be synchronous with the mean cluster time.
2009-09-07 11:29:49.653
[ctssd(25311)]CRS-2401:The Cluster Time Synchronization Service started on host ghost.
[client(25508)]CRS-10001:ACFS-9327: Verifying ADVM/ACFS devices.
[client(25527)]CRS-10001:ACFS-9322: done.
2009-09-07 11:30:00.087
[crsd(25726)]CRS-1012:The OCR service started on node ghost.
2009-09-07 11:30:01.503
[crsd(25726)]CRS-1201:CRSD started on node ghost.

Къде е по-дебелата мотика?

Същият този проблем възниква със страшна сила по време на инсталацията на Grid infrastructure. В самият край на инсталацията, при стартирането на root.sh на последния нод, octssd гръмва и прекратява изпълнението на скрипта. В резултат работата остава недовършена – най-малкото, което забелязах е, че на този нод не му се случва VIP. Което е особено тъжно предвид факта, че в 11.2 няма vipca и VIP се прави ръчно, чрез srvctl.

Така че преди инсталация (или ъпгрейд) гледайте часовниците на всичките нодове да са горе-долу в синхрон. Надявам се, че от следващата версия тази проверка ще се прави и от самия инсталатор.

 Posted by at 12:31
Сеп. 072009
 

В събота се случи нещо много тъжно. 15 невинни българи загинаха по нелеп начин в охридското езеро. Мир на душите им.

В неделя пловдивският митрополит, „дядо“ Николай, вместо да изпълни една от основните функции на църквата – да успокои опечалените близки на загиналите – загатна, че това е божие наказание за концерта на Мадона. Концерта, срещу който същият този Николай възропта.

Висшият клир на българската православна църква отдавна е твърде далеч от своите миряни. Не мога да кажа дали е близо до бога, но всичките техни ежби и ламтене за имоти ме карат да мисля, че за тях църквата е просто начин да живеят в охолство. Пълно е със самозабравили се и самодоволни старци, чиято единствена реална връзка с бога е това, че главите им по цял ден витаят в облаците. Витаят в облаците и не виждат какво става на земята. Ето от къде се пръкна този Николай, тази еманация на всичко псевдо-духовно и не-смирено, който не се опита да даде мир на душите на загиналите, не се опита да успокои близките, а каза „Не, това е божие наказание“. Това е наказание от неговият не-всеупрощаващ и не-милостив бог. „Аз ви предупредих, ама не ме слушате!“

А всъщност колко ли от хората, пострадали или оцелели от трагедията, са били на този небогоугоден концерт? Замислили се изобщо Николай какво се опитва да насади сред черната отрова на това нещастие? Дали пък някой от тези хора не е бил набожен човек, редовно посещавал църквата? Дали дядо Николай, този борец за пречистване на душата на българите, се е допитал до свещениците в Антон за техните енориаши?

Това е поредната неадекватна постъпка на нашата „църква“. Не че няма добри и отдадени на бога духовници, но са по-скоро изключение, колкото по-нагоре в йерархията погледнеш. И това не е от ден или два, няма и да мине за ден или два. Държавата ни може и да се оправи, ама църквата… дай боже. България и българите имат нужда от нашата православна църква. Църква, която да напътства. Да дава надежда, да бъде опора в тежките дни.

Но тази църква я няма.

 Posted by at 8:39