Sanlock – это демон и пользовательский инструмент, который используется для управления санкционными блокировками (lease management) на уровне разделяемых дисковых устройств в высокодоступной кластерной среде. Основная функция sanlock заключается в предотвращении одновременного доступа к разделяемому ресурсу (например, к диску или тому) разными узлами в кластере, что необходимо для поддержания целостности данных.
Sanlock использует дисковые метки и блокировки для обеспечения эксклюзивного доступа к разделяемым ресурсам. Системы, где используется sanlock, включают различные решения виртуализации и системы управления хранилищем, такие как Red Hat Virtualization (RHV), oVirt, GFS2 (Global File System 2), и LVM (Logical Volume Manager).
К примеру, если у вас есть кластер, использующий разделяемое хранилище, и вы хотите гарантировать, что только один узел кластера может записывать данные на логический том (LV) в определенный момент времени, вы используете sanlock для блокировки этого тома. Когда том заблокирован для использования одной нодой, другие ноды кластера не могут начать использовать этот же том, пока не будет установлено, что том свободен (освобождение или переназначение блокировки).
Ваши вопросы подразумевают два аспекта управления доступом: логическое управление доступом и физическое управление дисками. Sanlock управляет логическим доступом, помогая координировать действия между нодами и предотвращая конфликты. Однако sanlock не может предотвратить физические действия, такие как удаление тома непосредственно через интерфейс управления хранилищем или глобальная файловая система.
Пример использования sanlock:
Предположим, что у вас есть кластер с двумя узлами, NodeA и NodeB, которые используют общее хранилище. На обоих узлах работает sanlock. Вы хотите убедиться, что когда NodeA записывает данные на LV, NodeB не сможет записывать данные на тот же LV, чтобы избежать конфликтов и потенциального повреждения данных.
1. NodeA запрашивает блокировку LV с помощью sanlock.
2. Sanlock предоставляет блокировку LV для NodeA.
3. NodeA теперь выполняет операции записи на LV.
4. NodeB пытается получить блокировку для того же LV.
5. Sanlock отклоняет запрос NodeB, т. к. блокировка уже предоставлена NodeA.
6. По окончанию работы NodeA освобождает блокировку LV через sanlock.
7. Теперь NodeB или любая другая нода может запросить блокировку LV и выполнять операции, если это необходимо.
Это гарантирует, что в определенный момент времени только одна нода взаимодействует с LV, что обеспечивает согласованность данных.
Тем не менее, как было отмечено в вашем вопросе, sanlock не может предотвратить непосредственное удаление LV через средства управ