LINUX.ORG.RU
решено ФорумAdmin

lvmlockd LV locked by other host, узнать кто занял LV

 , ,


0

3

Добрался до использования lvmlockd

Всё настроил, всё работает, но вот не хочу бегать по хостам и гадать кто же активировал LV у себя.
Но и не могу найти в man какую либо инфу как это сделать.

Краткое описание тестового стенда:

  • 3 VM с 4 общими дисками между ними
  • debian 12
  • apt install lvm2 lvm2-lockd sanlock
  • Настройка
    • # nano /etc/lvm/lvm.conf global/use_lvmlockd = 1
    • # nano /etc/lvm/lvmlocal.conf local/host_id = $uniq_number
    • # systemctl enable --now lvmlockd wdmd sanlock
    • # vgcreate --shared shared /dev/vdb1 /dev/vdc1 /dev/vdd1 /dev/vde1
    • # lvcreate -L 3G -n test shared

После всего этого иду на соседний узел, делаю
# lvchange -ay /dev/shared/test
И получаю выхлоп:

  LV locked by other host: shared/test_new
  Failed to lock logical volume shared/test_new.

Я пробовал # lvmlockctl -i и # lvmlockctl -d и grep оттуда по имени хоста или по host_id указанном в lvmlocal.conf, но увы ничего.

★★★

Если я правильно понял, то ты уже активировал lv в режиме exclusive, а надо shared mode

вместо lvchange -ay надо везде делать lvchange -asy

futurama ★★★★★
()
Последнее исправление: futurama (всего исправлений: 1)
Ответ на: комментарий от futurama

Мне не надо активировать ещё раз. Мне надо знать кто активировал не бегая по хостам.

Т.е. я хочу чтобы при LV locked by other host: shared/test_new
я мог что-то ещё выполнить и сразу с текущего узла узнать кто выполнил блокировку

Flotsky ★★★
() автор топика
Последнее исправление: Flotsky (всего исправлений: 1)
Ответ на: комментарий от bigbit

Не информативно или не так использую

На любом из узлов

# vgs -o lock_args
  VLockArgs    
  1.0.0:lvmlock

Второй вариант аналогично

# vgs -o+locktype,lockargs
  VG     #PV #LV #SN Attr   VSize   VFree  LockType VLockArgs    
  shared   3   3   0 wz--ns <14,99g <6,74g sanlock  1.0.0:lvmlock
Flotsky ★★★
() автор топика
Последнее исправление: Flotsky (всего исправлений: 1)
Ответ на: комментарий от bigbit

Увы, не вижу таких аргументов. Пробовал lvs -o lv_all но ничего про lock там нет

Хотя мне кажется, что lvs мучать не имеет смысла. В документации явно сказано The 'lvs' command does not report any remote state, because lvmlockd is unable to passively check the remote active or lock state of an LV.

Может надо мучать sanlock status или lvmlockctl -d, но я пока не понимаю как

Flotsky ★★★
() автор топика
Ответ на: комментарий от Flotsky

Попробовал «в лоб» # cat /dev/mapper/shared-lvmlock | strings | less. Это основное хранилище всех блокировок, если записи и есть, они будут там.

Упоминания моих узлов есть, но это скорее логи создания.

Также раскопал что # sanlock status выдаёт список локальных ресурсов в данном файле. И локально активированные LV в нём указываются по lv_uuid и смещению в файле.
Возможно нет данных о том кто заблокировал, а только флаг блокировки.

Если точно знать смещение, то можно силами # sanlock client read -r $$$ и вместо $$$ подставив данные из # sanlock status другого узла «проверить» наличие блокировки, если блокировки нет, то оно ругнётся read error -22
Но это «магические цифры», хотя как-то же сам узел должен их находить для проверки возможности использования ресурса…

Flotsky ★★★
() автор топика

не сталкивался, но гугль предлагает 2 варианта

  • lvmlockd с ключом –test or –foreground
  • crm status full (если используется pacemaker)
router ★★★★★
()
Ответ на: комментарий от router

гугль предлагает 2 варианта

случаем не ИИ?

pacemaker у меня нет, не могу проверить.

запуск lvmlockd руками не имеет смысла, оно уже работает как сервис и при остановке вся работа с shared lvm ломается.

Нет, ну у меня тестовый стенд, я посмотрел на ключики и вместо предложенного поправил сервис включив debug.
Но по итогу тот-же выхлоп уже можно получить силами lvmlockctl -d. Ничего нового.

Flotsky ★★★
() автор топика
Ответ на: комментарий от Flotsky

Эти блокировки - это сущность lvmlockd, или они превращаются в SCSI-3 блокировки на LUN-ах? Если второе, то их можно было бы посмотреть помощью утилит из пакета sg3_utils.

bigbit ★★★★★
()
Ответ на: комментарий от bigbit

SCSI-3 блокировки на LUN-ах

Увы в упор не понимаю как lvm тома могут блокировать физические устройства.
Но у меня и нет LUN, смотреть на это я всёравно не смогу

На тестовом стенде просто 3 VM с «общими» дисками вида

<disk type="block" device="disk">
  <driver name="qemu" type="raw" cache="none" io="native" discard="unmap"/>
  <source dev="/dev/homevg0/shared_disk_1" index="5"/>
  <backingStore/>
  <target dev="vdb" bus="virtio"/>
  <shareable/>
  <alias name="virtio-disk1"/>
  <address type="pci" domain="0x0000" bus="0x06" slot="0x00" function="0x0"/>
</disk>

На конечном оборудовании 3 сервера подключенные к одной jbod дисковой полке sas контроллерами.

Смотреть кроме lvmlockd и sanlock не на что.

Flotsky ★★★
() автор топика

Увы мне кажется тупик.

Не могу найти ничего кроме

Также раскопал что # sanlock status выдаёт список локальных ресурсов в данном файле. И локально активированные LV в нём указываются по lv_uuid и смещению в файле. Возможно нет данных о том кто заблокировал, а только флаг блокировки.

Полагаю там и правда хранится только факт блокировки.

Может быть раскопав код lvmlockd/sanlock я и пойму как они ориентируются в общем хранилище и как ищут наличие блокировок. Но я вижу задачу не по мне, которая врятли ответит на изначальный вопрос.

Пока сдаюсь. Проблема не такая уж и критичная, как-то потом можно будет скостылить скрипт чтобы по ssh оббегал узлы.

Flotsky ★★★
() автор топика

Ну если у тебя санлок (а у тебя вроде бы он) то у тебя в локспейсе будут «как то» записаны IDы клиентов. Думаю вряд ли ты оттуда что то ещё достанешь.

no-dashi-v2 ★★★★
()

А сам санлок работает через CompareAndWrite если мне память не изменяет и до scsi локов не опускается

no-dashi-v2 ★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.