Как работает fence алгоритм в RHEV?

Что есть Fence механизм? Я не нашел вменяемого русского аналога этого понятия. Мне не понятно, как оно может быть переведено на русский язык. Переводчик предлагает как вариант - ограждать. Вообще, это вполне отражает суть того,  что делает fence механизм.

Что же такое Fencing?
Те, кто работал с Linux кластером, наверняка помнят, что это такое. Однако попробую объяснить. Fencing - это контрмера, применяемая кластерным ПО для избежания повреждения данных в момент, когда одна из нод вышла из строя по тем или иным причинам. Фактически это означает, что кластерное ПО гарантирует, что вышедшая из строя нода не сможет изменить данные на разделяемом устройстве и не сможет оказывать сервис клиентам. Очень важным требованием к механизму является требование надежности. Механизм должен гарантировать отключение неисправной ноды. 

Что не является fencing?
Первая ассоциация, возникающая при слове fencing - отключение питания (power cycling). Это неверная ассоциация, так как отключение ноды от разделяемого хранилища данных может быть осуществлено и с использованием fibre channel zoning. В этом случае рабочая нода отключает нерабочую от общего хранилища, используя FC свитч, не отключая электричество. 

Для чего это нужно в RHEV?
Представим себе гипотетическую ситуацию, есть два сервера, где запускаются наши виртуальные машины. Есть разделяемое хранилище - на нем мы храним образы наших машин. И есть система управления всей инфраструктурой. Система управления сделана так, что не обрабатывает должным образом поломку ноды1. В результате произойдет следующая цепочка событий:

node1: Запускаю VM1
node1: Поломка
Mgmt: node1 - мертва
node2: Запуск VM1
node2: Запись данных
node1: Очнулась и продолжила работу
node1: Образ машины и данные внутри неё испорчены

Что произойдет, если добавить механизм fencing:

node1: Запускаю VM1
node1: поломка
Mgmt: node1 - мертва. Выполнить fencing ноды1
node2: Fencing node1
node2: Запуск VM1
node2: Запись данных
node1: Очнулась и продолжила работу
node1: Ошибка записи, путь до I/O устройства недоступен. В варианте перезагрузки, система восстанавливает свою работоспособность.

Как видите, используя fence устройство мы получаем гарантию сохранности и целостности данных на разделяемом хранилище. 
На данный момент RHEV поддерживает только power fencing, что означает, что хосты могут быть только перезагружены. Однако возможно появление других методов. Полный список поддерживаемых методов можно найти в статье 30003 в базе знаний redhat.com

3006

Комментарии

 Важный нюанс - фенсинг вызывается RHEV-M-ом, но сам он его не выполняет, а назначает для этого один из хостов, как fence-proxy.

это означает что решение о фенсе принимается на -М, но вот сам fence_X запускается на одном из хостов. а значит при наличии только одного хоста в кластере, фенсинг невозможен, нужно как минимум два.

vokod1ak аватар

 Спасибо! Весьма ценное замечание. Это очевидно не следует из статьи.