Voting Disk, что это?

Voting Disk что это, для чего нужно?В Oracle RAC (Real Application Cluster) процессы CSSD (Chronix Synchronization Daemon) контролируют работоспособность узлов RAC с использованием двух различных сигнальных систем: сигналов сети и сигналов диска. Здоровые узлы будут иметь непрерывные сетевые и дисковые сигналы, которыми обмениваются узлы. Перерыв в посылке сигналов указывает на возможность появления ошибок. Возможны несколько сценариев при отсутствии посылаемых сигналов:

  • Сигнал сети есть, но сигнал диска отсутствует.
  • Сигнал Диск есть, но сигнала сети нет.
  • Оба сигнала и диска, и сети отсутствуют.


Кроме того, в конфигурации с множественными узлами существуют и другие возможные сценарии. Несколько возможных сценариев:

  • Узлы разделены на N наборов узлов, обмениваясь данными внутри набора, но не с элементами в другом наборе.
  • Только один узел поврежден.

Узлы с кворумом будут поддерживать активное членство в кластере, а другие узлы (ы) будут ограждены / перезагружены.

Я не могу обсуждать все возможные сценарии в записи в блоге, поэтому мы обсудим здесь двухнодовый кластер с одним Voting Disk  (голосующим диском).
Voting Disk (голосующие диски) используются для контроля сигналов от диска. Предпочтительно иметь как минимум 3 голосующих диска или нечетное количество голосующих дисков, большее или равное 3.

 

Процесс CSSD и Voting Disk

Voting Disk (голосующие диски) разделяются между узлами и должны быть видимыми со всех узлов, это очевидно. Процесс CSSD - это многопоточный процесс, и поток процесса CSSD контролирует сигналы с диска. Сигнал с диска HB (Heart Beat) запланирован примерно каждую секунду, и этот поток проверяет сигналы с диска со всех активных узлов в кластере. Кроме того, другой поток CSSD отслеживает сигналы сети. Команда Pstack (Solaris) будет показывать потоки процесса CSSD.

 

Voting Disk при записи

Процесс CSSD в каждом узле RAC поддерживает его сигналы (ритм) в блоке, размер которого равен одному блоку в конкретной операционной системе. В виртуальной машине Solaris, которую я тестировал, размер блока ОС составляет 512 байт (в этом случае мы обсудим только Solaris). В дополнение к контролю своего собственного диска, процессы CSSD также контролируют блоки дисков, поддерживаемые процессами CSSD, запущенными в других узлах кластера.

Процесс CSSD записывает блок 512 на Voting Disk с определенным смещением. В записанном блоке есть область заголовка с именем узла. Например, в вызове pwrite ниже в примере кода имя узла solrac1 находится в первых нескольких байтах блока. Третья строка, напечатанная ниже, отслеживает счетчик сигналов. Этот счетчик сигнала похож на механизм SCN, «0F 9D02» - порядковый номер для первой записи.

Также обратите внимание, что смещение для вызова pwrite 0 × 04002400. узла solrac1 записывает 512-байтовый блок, начинающийся со смещения 0 × 04002400.

"/14:	pwrite(256, 0x019F4A00, 512, 0x04002400)	= 512"
"/14:	   e t o V02\ 0\ 0\ 00104\ v02\ 0\ 0\ 0\ 0 s o l r a c 1\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0 c JD2\ n 0F9D02 \ 003\ 0\ 0\ 0"  <-- Counter
"/14:	  \ 00303\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  F0 xBE L e01EC\ 0 e ;\ 0\ 0\ 0\ 0\ 0\ 003\ 0\ 0\ 0 { =BE L1C87A8 L\ 0\ 001\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"

Следующий вызов записи из процесса CSSD локального узла  показывает увеличение счетчика. Значение этого счетчика в строке 3 увеличилось с «0F 9D02» на  «10 9D02». Я удаляю несколько строк, напечатанных для улучшения удобочитаемости. Таким образом, счетчик увеличивается для каждого сигнала.

"/14:	pwrite(256, 0x019F4A00, 512, 0x04002400)	= 512"
"/14:	   e t o V02\ 0\ 0\ 00104\ v02\ 0\ 0\ 0\ 0 s o l r a c 1\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0 c JD2\ n109D02\ 003\ 0\ 0\ 0" <-- counter
"/14:	  \ 00303\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
...
"/14:	  F1 xBE L N05EC\ 0 f ;\ 0\ 0\ 0\ 0\ 0\ 003\ 0\ 0\ 0 { =BE L1C87A8 L\ 0\ 001\ 0"
...
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"

 

Voting Disk при чтении

После успешной записи процесс CSSD также считывает блоки, поддерживаемые процессами CSSD, из других узлов. Например, на выходе pread ниже процесс CSSD в узле solrac1 считывает блок, поддерживаемый узлом CSSD @ solrac2, используя предварительный вызов. Третья строка в приведенном ниже листинге имеет значение последовательности «FB 9702» для узла solrac2. Каждому узлу используется другой порядковый номер.

Кроме того, обратите внимание, что смещение для предварительного запроса составляет 0 × 04002200, и это смещение отличается в запросах pread и pwrite. По сути, Node solrac2 записывает свой сигнал, начиная со смещения 0 × 04002200, а solrac1 записывает свой сигнал со смещением 0 × 04002400. Разница между этими двумя значениями смещения составляет ровно 0 × 200, что составляет 512 байт.

"/14:	pread(256, 0x019F5000, 512, 0x04002200)		= 512"
"/14:	   e t o V01\ 0\ 0\ 00104\ v02\ 0\ 0\ 0\ 0 s o l r a c 2\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0 c JD2\ nFB9702\ 003\ 0\ 0\ 0" <-- counter
"/14:	  \ 00303\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  F0 xBE L KD6E9\ 0 /\ t\ 0\ 0\ 0\ 0\ 0\ 003\ 0\ 0\ 0 m oBE L1C87A8 L\ 0\ 001\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"

Следующее считывание со смещения 0 × 04002200 показывает, что solrac2 также увеличил счетчик с «FB 9702» до «FC 9702».

"/14:	pread(256, 0x019F5000, 512, 0x04002200)		= 512"
"/14:	   e t o V01\ 0\ 0\ 00104\ v02\ 0\ 0\ 0\ 0 s o l r a c 2\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0 c JD2\ nFC9702\ 003\ 0\ 0\ 0" <-- counter
"/14:	  \ 00303\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"
...
"/14:	  F1 xBE L 5DAE9\ 0 0\ t\ 0\ 0\ 0\ 0\ 0\ 003\ 0\ 0\ 0 m oBE L1C87A8 L\ 0\ 001\ 0"
...
"/14:	  \ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0\ 0"

 Voting Disk устройство. назначение и использование

 

Заключение

По сути, поступающие сигналы с дисков сохраняются на Voting Disk (диске для голосования) с помощью процессов CSSD. Если блок диска не обновляется в течение короткого периода ожидания, этот узел считается нездоровым и может быть перезагружен в зависимости от кворума этого узла (или "отстрелян" вовсе во избежание возможных проблем).

Итак, Voting Disk не содержит никаких полезных данных. Итак, если у Вас "вылетел" диски для голосования, вы можете просто добавить его обратно (новый диск), не теряя при этом никаких данных. Но, конечно, суета с заменой  Voting Disk может привести к перезагрузке узла. Если вы потеряете все диски для голосования, вам придется оставить демонов CRS, тогда только вы можете добавить новые Voting-диски.

Также резонен вопрос о производительности. Сколько вызовов ввода-вывода выполняется для этих дисков для голосования? По мере увеличения количества узлов увеличивается и увеличение кол-во операций ввода-вывода (чтения-записи). Для 2-х узлов RAC есть 2 чтения (CSSD также читает другой блок, не уверен, почему) и 2 записи в секунду. С 6 узлами в кластере он будет составлять 35 чтений и 6 записей в секунду. Начиная с версии Oracle RAC 11g, вы можете управлять Voting Disk в ASM.

Вас заинтересует / Intresting for you:

Исследование причин вибраций д...
Исследование причин вибраций д... 2105 просмотров Александров Попков Fri, 09 Aug 2019, 16:39:12
Redis или Memcached, что лучше...
Redis или Memcached, что лучше... 18578 просмотров Андрей Васенин Tue, 21 Nov 2017, 13:17:28
Обзор Grado GT220: превосходны...
Обзор Grado GT220: превосходны... 1449 просмотров Sergey Fri, 04 Feb 2022, 16:24:14
Как понять, что блогер (канал,...
Как понять, что блогер (канал,... 666 просмотров Андрей Васенин Thu, 23 Mar 2023, 09:35:32
Войдите чтобы комментировать

apv аватар
apv ответил в теме #8616 6 года 7 мес. назад
я бы лучше использовал перевод "Сигнальный диск" для Voting Disk. Так более ясно на русском языке ;-)