Ограждение (Fencing)
Перевод статьи Fencing
опубликованной 26 October 2015, at 20:45
Содержание
- Ограждение (Fencing)
- Введение
- Настройка узлов на немедленную загрузку и непременную после цикла выключения- включения
- Разрешения ограждения на всех узлах
- Общее руководство по изменению
cluster.conf
- Перечень поддерживаемых устройств ограждения
- Множественные методы для одного узла
- Дублированный путь, избыточное электропитание
- Тестирование ограждения
Для обеспечения целостности данных виртуальная машина может работать только на одном узле или любой другой службе кластера в
одно и то же время. Применение в конфигурации оборудования выключателей электропитания дает узлу возможность выполнять цикл выключения- включения
питания другого узла до перезапуска служб высокой доступности этого узла во время процесса отказов. Это предотвращает от одновременного доступа
двух узлов к одним и тем же данным и к их разрушению. Ограждающие (fence
)
устройства используются для обеспечения гарантии целостности данных
при сбоях в любых условиях. {Прим. пер.: Альтернативное название технологии в мире SUSE:
STONITH, Shoot The Other Node In The Head
.}
Для хорошего и легкого ознакомления концепциями устройств ограждения высокой доступности отсылаем вас к http://www.clusterlabs.org/doc/crm_fencing.html или к http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Configuration_Example_-_Fence_Devices/index.html, понятно, останавливаясь на наиболее общих и вводных частях этих документов, поскольку сами документы описывают другое программное обеспечение высокой доступности, не PVE.
{Прим. пер.: Согласно первому документу ("Fencing and Stonith", Dejan Muhamedagic)
существует два вида ограждения: уровня ресурса и уровня узла.
Применение ограждения кластера на Ограждение Ограждение Устройства ограждения могут быть классифицированы на пять категорий: Источники бесперебойного питания (UPS) Блоки распределения питания(PDU) Устройства управления питанием блейд- серверов Автоматизирующие (lights-out) устройства: IBM RSA, HP iLO, Dell DRAC и т.п. {Возможно, в какой-то степени, включая IPMI} Устройства тестирования, используемые исключительно на этапе отладки
уровне ресурса
может
гарантировать, что узел не сможет получить доступ к одному или большему числу ресурсов. Одним из наиболее типичных примеров является SAN,
в котором операция ограждения изменяет правила в коммутаторе SAN запрещая доступ с узла.уровня ресурса
может быть достигнуто обычными
средствами, зависящими от того, на каком ресурсе мы хотим выполнять защиту. Такой ресурс просто будет отвергнут на данном узле и
поэтому зависящие от него ресурсы также не будут работать на этом узле.уровня узла
гарантирует, что узел не будет
вообще запускать никакие ресурсы. Это обычно делается очень простым, но брутальным способом: узел просто выключается с применением
коммутатора электропитания. Это может оказаться необходимым, поскольку узел вообще не сможет отзываться.
Проверьте настройки вашего встроенного программного обеспечения (bios, firmware) и убедитесь, что оно работает. Просто выньте кабель питания и проверьте, что сервер загрузится после повторного подсоединения кабеля.
Если вы применяете интегрированные устройства огораживания, вы должны настроить ACPI (Advanced Configuration and Power Interface) чтобы убедиться в немедленном и полном ограждении - здесь существуют различные параметры:
-
убедитесь, что вы не установили демон acpid (удалите выполнив:
aptitude remove acpid
) -
запретите ACPI отключение питания программным способом во встроенном ПО
-
запретите через acpi=off в командной строке загрузки ядра
В любом случае вам нужно быть уверенным, что узел будет выключен
немедленно при выполнении ограждения
. Если вы будете иметь здесь задержки, ресурсы высокой доступности не
могут быть перемещены.
Чтобы сделать процедуру ограждения активной, вам также придется присоединить каждый узел в домен ограждения. Выполните следующие действия на всех узлах вашего кластера.
-
Разрешите ограждение в
/etc/default/redhat-cluster-pve
(просто уберите комментарий в последней строчке, см. ниже):#nano /etc/default/redhat-cluster-pve FENCE_JOIN="yes"
-
перезапустите службу
cman
:#/etc/init.d/cman restart
-
присоединитесь к домену с:
#fence_tool join
Чтобы проверить состояние просто выполните (этот пример показывает все 3 уже присоединенные узла):
#fence_tool ls fence domain member count 3 victim count 0 victim now 0 master nodeid 1 wait state none members 1 2 3
Замечание | |
---|---|
Если кластер теряет синхронизацию после завершения присоединения и перезапускает службу #service pve-cluster restart |
Вначале сделайте копию текущего cluster.conf
, выполните необходимые изменения, увеличьте номер
config_version.conf
, проверьте синтаксис и, если все готово, активируйте новые настройки при помощи
графического интерфейса. Вот эти шаги:
#cp /etc/pve/cluster.conf /etc/pve/cluster.conf.new #nano /etc/pve/cluster.conf.new
Если вы изменяли данный файл с применением интерфейса командной строки, вы должны ВСЕГДА увеличивать номер "config_version". Это будет гарантировать, что все ваши узлы применят новые установки.
Вы должны валидировать ваши настройки следующей командой:
ccs_config_validate -v -f /etc/pve/cluster.conf.new
Чтобы применить эту новую конфигурацию вам необходимо войти в веб- интерфейс (Datacenter | HA
). Вы можете ознакомиться с выполненными изменениями и если синтаксис правильный,
вы можете принять эти изменения через графический интерфейс для всех узлов. После выполнения этого все узлы получат информацию о новых настройках и применят
их автоматически.
Т.е. AP7921
, вот пример использования в нашей тестовой лаборатории:
Я просто настроил нового пользователя через "Outlet User Management"
-
user name: hpapc
-
password: 12345678
Убедитесь, что вы сделали доступными "Outlet User Management" и SSH и, наиболее важная часть, убедитесь что вы подключили физический сервер в правильному источнику питания.
Вот пример применения блока распределения питания APC в качестве устройства ограждения (убедитесь, что вы разрешили SSH в вашем APC). Кроме того, для службы высокой доступности и тестирования отказов применяется простой "TestIP".
#cp /etc/pve/cluster.conf /etc/pve/cluster.conf.new #nano /etc/pve/cluster.conf.new <?xml version="1.0"?> <cluster name="hpcluster765" config_version="28"> <cman keyfile="/var/lib/pve-cluster/corosync.authkey"> </cman> <fencedevices> <fencedevice agent="fence_apc" ipaddr="192.168.2.30" login="hpapc" name="apc" passwd="12345678" power_wait="10"/> </fencedevices> <clusternodes> <clusternode name="hp4" votes="1" nodeid="1"> <fence> <method name="power"> <device name="apc" port="4" secure="on"/> </method> </fence> </clusternode> <clusternode name="hp1" votes="1" nodeid="2"> <fence> <method name="power"> <device name="apc" port="1" secure="on"/> </method> </fence> </clusternode> <clusternode name="hp3" votes="1" nodeid="3"> <fence> <method name="power"> <device name="apc" port="3" secure="on"/> </method> </fence> </clusternode> <clusternode name="hp2" votes="1" nodeid="4"> <fence> <method name="power"> <device name="apc" port="2" secure="on"/> </method> </fence> </clusternode> </clusternodes> <rm> <service autostart="1" exclusive="0" name="TestIP" recovery="relocate"> <ip address="192.168.7.180"/> </service> </rm> </cluster>
Замечание | |
---|---|
Если вы делаете изменения через интерфейс командной строки, вы должны ВСЕГДА увеличивать число "config_version". Это будет гарантировать, что все ваши узлы применят новые установки. Вы должны валидировать ваши настройки следующей командой: #ccs_config_validate -v -f /etc/pve/cluster.conf.new Чтобы применить эту новую конфигурацию вам необходимо войти в веб- интерфейс ( Параметр |
Плата iDRAC
может применяться в качестве устройства ограждения.
-
Создайте учетную запись
fencing_user
в каждомiDRAC
с полномочиями 'Operator'. -
Хотя обычно сеть
iDRAC
находится в частной, безопасной сетевой среде, для каждой машины может быть введен уникальный пароль в приводимых ниже настройках.-
Настройте вашего пользователя процесса ограждения в
iDRAC User Authentication
и добавьте состояние Operator дляiDRAC
,LAN
иSerial Port
. -
Установите полномочия
IPMI User
для Operator и убедитесь в том, чтоSerial Over LAN
разрешен.
-
-
Вашим хостам Proxmox необходим доступ в сеть через SSH к вашим платам
iDRAC
. -
Ознакомьтесь с Testing Dell iDRAC для проверки вашего синтаксиса.
Вот настройки, проверенные с платами DRAC V7
Ознакомьтесь с Общим руководством по изменению для выполнения шагов редактирования/ активации.
#nano /etc/pve/cluster.conf.new <?xml version="1.0"?> <cluster name="peR620" config_version="28"> <cman keyfile="/var/lib/pve-cluster/corosync.authkey"> </cman> <fencedevices> <fencedevice agent="fence_drac5" cmd_prompt="admin1->" ipaddr="X.X.X.X" login="fencing_user" name="node1-drac" passwd="XXXX" secure="1"/> <fencedevice agent="fence_drac5" cmd_prompt="admin1->" ipaddr="X.X.X.X" login="fencing_user" name="node2-drac" passwd="XXXX" secure="1"/> <fencedevice agent="fence_drac5" cmd_prompt="admin1->" ipaddr="X.X.X.X" login="fencing_user" name="node3-drac" passwd="XXXX" secure="1"/> </fencedevices> <clusternodes> <clusternode name="node1" nodeid="1" votes="1"> <fence> <method name="1"> <device name="node1-drac"/> </method> </fence> </clusternode> <clusternode name="node2" nodeid="2" votes="1"> <fence> <method name="1"> <device name="node2-drac"/> </method> </fence> </clusternode> <clusternode name="node3" nodeid="3" votes="1"> <fence> <method name="1"> <device name="node3-drac"/> </method> </fence> </clusternode> </clusternodes> </cluster>
Для плат Dell DRAC7
Cards вы в основном можете применять те же настройки, что и для
DRAC7
, однако вы должны изменить команды fencedevice
на:
<fencedevices> <fencedevice agent="fence_drac5" ipaddr="X.X.X.X" login="fencing_user" name="node1-drac" passwd="XXXX" secure="1"/> <fencedevice agent="fence_drac5" ipaddr="X.X.X.X" login="fencing_user" name="node2-drac" passwd="XXXX" secure="1"/> <fencedevice agent="fence_drac5" ipaddr="X.X.X.X" login="fencing_user" name="node3-drac" passwd="XXXX" secure="1"/> </fencedevices>
PowerEdge M1000e
контроллер управления шасси
(CMC, Chassis Management Controller
), выступает в качестве
одной из разновидностей переключателей питания управляемых через сетевую среду. Можно настроить один IP-адрес для CMC и подключиться к этому
IP для управления. Индивидуальные блейд- лезвия могут включаться или выключаться по мере необходимости.
Замечание | |
---|---|
На момент написания данной статьи {26 октября 2015} существует ошибка, которая не позволяет CMC запитывать вновь лезвия после их
ограждения. Чтобы восстановиться после простоя вызванного процессом ограждения, включите лезвие вручную (или соединитесь с CMC и
выполните команду |
Замечание | |
---|---|
В настоящее время не поддерживается применение индивидуальных |
Чтобы настроить ваши узлы на ограждение DRAC CMC
:
-
Введите адрес DRAC CMC IP для
CMC IP Address
. -
Введите особенное для лезвия
Module Name
, например,server-1
для лезвия 1, иserver-4
для лезвия 4.Пример:
<?xml version="1.0"?> <cluster name="hpcluster765" config_version="28"> <cman keyfile="/var/lib/pve-cluster/corosync.authkey"> </cman> <fencedevices> <fencedevice agent="fence_drac5" module_name="server-1" ipaddr="CMC IP Address (X.X.X.X)" login="root" secure="1" name="drac-cmc-blade1" passwd="drac_password"/> <fencedevice agent="fence_drac5" module_name="server-2" ipaddr="CMC IP Address (X.X.X.X)" login="root" secure="1" name="drac-cmc-blade2" passwd="drac_password"/> <fencedevice agent="fence_drac5" module_name="server-2" ipaddr="CMC IP Address (X.X.X.X)" login="root" secure="1" name="drac-cmc-blade3" passwd="drac_password"/> </fencedevices> <clusternodes> <clusternode name="node1" nodeid="1" votes="1"> <fence> <method name="1"> <device name="drac-cmc-blade1"/> </method> </fence> </clusternode> <clusternode name="node2" nodeid="2" votes="1"> <fence> <method name="1"> <device name="drac-cmc-blade2"/> </method> </fence> </clusternode> <clusternode name="node3" nodeid="3" votes="1"> <fence> <method name="1"> <device name="drac-cmc-blade3"/> </method> </fence> </clusternode> </clusternodes> <rm> <service autostart="1" exclusive="0" name="TestIP" recovery="relocate"> <ip address="192.168.7.180"/> </service> </rm> </cluster>
Это типичный метод для IPMI.
он необходим на всех узлах 2013-07-02. См. замечания в конце раздела.
aptitude install ipmitool <?xml version="1.0"?> <cluster name="clustername" config_version="6"> <cman keyfile="/var/lib/pve-cluster/corosync.authkey"> </cman> <fencedevices> <fencedevice agent="fence_ipmilan" name="ipmi1" lanplus="1" ipaddr="X.X.X.X" login="ipmiusername" passwd="ipmipassword" power_wait="5"/> <fencedevice agent="fence_ipmilan" name="ipmi2" lanplus="1" ipaddr="X.X.X.X" login="ipmiusername" passwd="ipmipassword" power_wait="5"/> <fencedevice agent="fence_ipmilan" name="ipmi3" lanplus="1" ipaddr="X.X.X.X" login="ipmiusername" passwd="ipmipassword" power_wait="5"/> </fencedevices> <clusternodes> <clusternode name="host1" votes="1" nodeid="1"> <fence> <method name="1"> <device name="ipmi1"/> </method> </fence> </clusternode> <clusternode name="host2" votes="1" nodeid="2"> <fence> <method name="1"> <device name="ipmi2"/> </method> </fence> </clusternode> <clusternode name="host3" votes="1" nodeid="3"> <fence> <method name="1"> <device name="ipmi3"/> </method> </fence> </clusternode> </clusternodes> <rm> <service autostart="1" exclusive="0" name="ha_test_ip" recovery="relocate"> <ip address="192.168.7.180"/> </service> </rm> </cluster>
После установки IPMI in cluster.conf
я выполнил тест и получил вот это:
fbc3 ~ # fence_node fbc240 -vv fence fbc240 dev 0.0 agent fence_ipmilan result: error from agent agent args: nodename=fbc240 agent=fence_ipmilan lanplus=1 ipaddr=10.1.10.173 login=**** passwd=****** power_wait=5 fence fbc240 failed
что было решено с:
aptitude install ipmitool
и затем:
fbc3 ~ # fence_node fbc240 -vv fence fbc240 dev 0.0 agent fence_ipmilan result: success agent args: nodename=fbc240 agent=fence_ipmilan lanplus=1 ipaddr=10.1.10.173 login=***** passwd=*** power_wait=5 fence fbc240 success
Приведенный выше тест выполнялся на системе SuperMicro
.
Некоторые APC PDU
не поддерживают SSH и не работают с
fence_apc
. Эти более старые устройства работают с SNMP, делая возможной работу агента
fence_apc_snmp
.
<?xml version="1.0"?> <cluster name="hpcluster765" config_version="28"> <cman keyfile="/var/lib/pve-cluster/corosync.authkey"> </cman> <fencedevices> <fencedevice agent="fence_apc_snmp" ipaddr="192.168.2.30" name="apc" community="12345678" power_wait="10"/> </fencedevices> <clusternodes> <clusternode name="hp4" votes="1" nodeid="1"> <fence> <method name="power"> <device name="apc" port="4" /> </method> </fence> </clusternode> <clusternode name="hp1" votes="1" nodeid="2"> <fence> <method name="power"> <device name="apc" port="1" /> </method> </fence> </clusternode> <clusternode name="hp3" votes="1" nodeid="3"> <fence> <method name="power"> <device name="apc" port="3" /> </method> </fence> </clusternode> <clusternode name="hp2" votes="1" nodeid="4"> <fence> <method name="power"> <device name="apc" port="2" /> </method> </fence> </clusternode> </clusternodes> <rm> <service autostart="1" exclusive="0" name="TestIP" recovery="relocate"> <ip address="192.168.7.180"/> </service> </rm> </cluster>
Необходимые условия
:
-
Управляемый коммутатор с поддержкой SNMP.
-
Доступ на запись в коммутатор с применением SNMP.
Идея этого метода заключается в изоляции всего узла или в изоляции узла от общего хранилища. Способ выполнения этого состоит в вызове коммутатора с применением соответствующей команды для отключения одного или более порта(-ов) в коммутаторе с целью эффективного исключения запуска на узле виртуальной машины или контейнера с совместно используемого хранилища, поскольку от узла не будет существовать маршрута к общему хранилищу.
Восстановление доступа к совместно используемому хранилищу потребует вмешательства оператора на коммутаторе или выполнение команды огораживания с параметром для повторного открытия порта(-ов). Если узлы применяют связывание соединений, вам необходимо отключить агрегирование мост в коммутаторе, а не отдельные порты, являющиеся участниками агрегации моста.
Показанный здесь пример использует SNMPv2c
без пароля, но
настройки ACL
на коммутаторе настраивать группы ограждения только
участникам, имеющим доступ к виртуальной локальной сети кластера. Fence_agent
поддерживает
порядковый номер или имя для портов.
Просмотреть список известных интерфейсов коммутатора
:
fence_ifmib -o list -c <community> -a <IP> -n switch
Запретить определенный интерфейс в коммутаторе
:
fence_ifmib --action=off -c <community> -a <IP> -n <index|name>
Разрешить определенный интерфейс в коммутаторе
:
fence_ifmib --action=on -c <community> -a <IP> -n <index|name>
Пример:
<?xml version="1.0"?> <cluster config_version="74" name="proxmox"> <cman expected_votes="3" keyfile="/var/lib/pve-cluster/corosync.authkey"/> <quorumd allow_kill="0" interval="3" label="proxmox1_qdisk" tko="10" votes="1"> <heuristic interval="3" program="ping $GATEWAY -c1 -w1" score="1" tko="4"/> <heuristic interval="3" program="ip addr | grep eth1 | grep -q UP" score="2" tko="3"/> </quorumd> <totem token="54000"/> <fencedevices> <fencedevice agent="fence_ifmib" community="fencing" ipaddr="172.16.3.254" name="hp1910" snmp_version="2c"/> </fencedevices> <clusternodes> <clusternode name="esx1" nodeid="1" votes="1"> <fence> <method name="fence"> <device action="off" name="hp1910" port="Bridge-Aggregation2"/> </method> </fence> </clusternode> <clusternode name="esx2" nodeid="2" votes="1"> <fence> <method name="fence"> <device action="off" name="hp1910" port="Bridge-Aggregation3"/> </method> </fence> </clusternode> </clusternodes> <rm> <failoverdomains> <failoverdomain name="webfailover" ordered="0" restricted="1"> <failoverdomainnode name="esx1"/> <failoverdomainnode name="esx2"/> </failoverdomain> </failoverdomains> <resources> <ip address="172.16.3.7" monitor_link="5"/> </resources> <service autostart="1" domain="webfailover" name="web" recovery="relocate"> <ip ref="172.16.3.7"/> </service> <pvevm autostart="1" vmid="109"/> </rm> </cluster>
Замечание | |
---|---|
См. также |
В более сложных конфигурациях для узла могут быть определено несколько методов ограждения. Если не удается ограждение с помощью первого метода, процесс ограждения будет пробовать следующий способ, и продолжит в цикле по методам, пока не достигнет успеха.
<clusternode name="node1" nodeid="1"> <fence> <method name="1"> <device name="myswitch" foo="x"/> </method> <method name="2"> <device name="another" bar="123"/> </method> </fence> </clusternode> <fencedevices> <fencedevice name="myswitch" agent="..." something="..."/> <fencedevice name="another" agent="..."/> </fencedevices>
Замечание | |
---|---|
См. также |
Иногда ограждение узла требует отключения питания двух портов электропитания или двух путей ввода/вывода. Это делается путем указания двух или более устройств в пределах одного метода. Огражденный узел будет запускать агент для устройства два раза, один раз для каждой строки устройства, и оба должны быть успешными в ограждении, чтобы весь процесс считался успешным.
<clusternode name="node1" nodeid="1"> <fence> <method name="1"> <device name="sanswitch1" port="11"/> <device name="sanswitch2" port="11"/> </method> </fence> </clusternode>
При использовании коммутаторов электропитания для ограждения узлов с двумя источниками питания, агенты должны быть проинформированы о необходимости отключения обоих портов питания до восстановления запитывания либого из портов. Поведение выключения- включения агента, заданное по умолчанию, может привести к тому, что электропитание никогда не будет полностью отключаться от узла.
<clusternode name="node1" nodeid="1"> <fence> <method name="1"> <device name="nps1" port="11" action="off"/> <device name="nps2" port="11" action="off"/> <device name="nps1" port="11" action="on"/> <device name="nps2" port="11" action="on"/> </method> </fence> </clusternode>
Перед применением устройства ограждения убедитесь, что оно работает надлежащим образом.
Отобразите внутреннее состояние ограждения:.
#fence_tool ls fence domain member count 3 victim count 0 victim now 0 master nodeid 3 wait state none members 2 3 4
Проверьте ограждение с fence_node
:
#fence_node NODENAME -vv
Где NODENAME
берется из строки определения узла:
<clusternode name="NODENAME" nodeid="1" votes="1">
Вы должны получить здесь "успех" и ваша машина отключится.
Повторите команду и электропитание машины включится.
В моем примере AP7921
использует IP 192.168.2.30
Опросите состояние источников питания:
#fence_apc -x -l hpapc -p 12345678 -a 192.168.2.30 -o status -n 1 -v
Перезагрузите сервер при помощи fence_apc
:
#fence_apc -x -l hpapc -p 12345678 -a 192.168.2.30 -o reboot -n 1 -v
Проверьте ограждение с fence_node
:
#fence_node NODENAME -vv
Здесь вы должны получить"успех".
iDRAC[5,6,7]
применяют
fence_drac5
, как было уже отмечено выше в установках Dell.
Проверьте в командной строке использование другого сервера:
#fence_drac5 --ip="10.1.1.2" --username="prox-b-drac" --password="****" --ssh --verbose --debug-file="/tmp/foo" --command-prompt="admin1->" --action="off"
Проверьте файл /tmp/foo
на предмет регистрационных записей:
-
У вас есть ssh доступ к
iDRAC
с применением заданных имени пользователя/ пароля? -
ssh разрешен в процессе управления
iDRAC
? (Overview > iDRAC preferences > iDRAC Settings > Network > Services > ssh)#nc -zv [ipOf_iDRAC] 22
-
Вы попытались соединиться с портом управления
iDRAC
или IP адресом Proxmox?
Смотрите также...
Более рафинированная реализация технологии ограждения может быть ассоциирована с термином STONITH
(Shoot The Other Node In The Head, Сделайте оставшемуся
узлу контрольный в голову), подробнее см. Глава 5. Настройка существенных параметров кластера в книге Построение кластеров высокой доступности Linux для профи..