контроль nfs с monit

Почему не просто:

daemon --user mruser ${CONQ_DIR}/dgate -v

?

Править:

cd ${CONQ_DIR} && daemon --user mruser ./dgate -v &
5
задан 22 August 2011 в 19:19
6 ответов

Did you check the init scripts for nfs already? I'd suspect that they are creating a pid file and sticking it somewhere for future restart or stop operations. If not, it should be pretty simple to modify them to do so.

As far as checking the mount goes, take a look at section 4.3.1 at http://nfs.sourceforge.net/nfs-howto/ar01s04.html#mounting_remote_dirs . If you mount it with the 'soft' option you will get behavior that lets you monitor it, but this should not be used for the actual mount. Perhaps you want a second mount just for monitoring?

1
ответ дан 3 December 2019 в 01:41

Что касается «зависания» процесса Monit во время сбоев сервера NFS, это можно обойти двумя способами.

  1. Вы изменяете параметры монтирования NFS с жестко на мягко , что приводит к тому, что уровень NFS выдает ошибку ввода-вывода для обращающегося приложения после повторной передачи повторные попытки. Поскольку это может вызвать другие проблемы, связанные с целостностью данных (ваши пишущие приложения должны уметь справляться с ошибками ввода-вывода или, по крайней мере, выходить чисто, не повреждая записанный файл), вы также можете попробовать :
  2. асинхронизируйте ваш чек (распутывайте его) от Monit. Вы можете определить задание cron, которое будет регулярно проверять ваш смонтированный NFS файл и записывать другой «файл состояния NFS», например. в / tmp. Сюда, просто задание cron (а не ваш клиент Monit) зависнет, если сервер NFS отключится. Теперь ваша проверка Monit просто проверяет этот "файл состояния NFS" второго уровня И действительно ли он намного старше, чем частота задания cron (что указывает на такое зависание NFS).

Надеюсь, это поможет!

2
ответ дан 3 December 2019 в 01:41

Общий подход будет (при условии, что ни одно из встроенных правил Monit не применимо)

  1. Узнайте, как выполнять проверки вручную
  2. Запишите сценарии оболочки, выполняющие эти проверки, возвращающие 0 для «успеха» и 1 для «сбоя»
  3. Позвольте Monit протестировать эти сценарии (пример взят из официальной документации ):

     проверьте программу myscript по пути "/ usr / local /bin/myscript.sh "
     если status! = 0, то предупреждение
    

For the specific problem, this could mean

  • Server: It probably depends on your OS, linux distro, NFS 3 or 4 etc, but it should be easy to figure out. E.g. on Ubuntu 12.04, I would test whether NFS server is running via

    $ service portmap status
    $ service nfs-kernel-server status
    

    Create a shell script returning 0 if both commands return 'running'.

  • Client: To check whether a certain NFS share is currently mounted, I mostly use df -h. So the corresponding shell script would look like

    #! /bin/bash
    df -h | grep -q thesharename
    
2
ответ дан 3 December 2019 в 01:41

Я хотел ответить на claasz , но у меня нет достаточно очков репутации. Идея использования внешнего сценария очень хороша, потому что он обеспечивает гибкость, и предложение использовать portmap или rpcinfo для проверки доступности сервера nfs довольно разумно.

Я нашел сценарий на Github от Thibaut Madelaine ], который, я думаю, должен быть интересен многим, кто сталкивается с той же проблемой. Он использует rpcinfo, как это rpcinfo -u 123.456.789.12 nfs 3 , где 123.456.789.12 - это IP-адрес вашего nfs-сервера.

Если все в порядке, ответ будет примерно таким же, как программа 100003 версии 3 готова и ждет , а в случае сбоя 123.456.789.12: RPC: Программа не зарегистрирована . Конечно, ответ может отличаться в зависимости от вашей системы.

0
ответ дан 3 December 2019 в 01:41

Создайте сценарий под названием test-mount.sh для проверки монтирования. Я использую создание и удаление файлов, так как считаю ненадежным просто чтение файла.

set -e
/bin/touch /my-mounted-dir/test/mount.test
/bin/rm /my-mounted-dir/test/mount.test
exit 0
  1. set -e сообщает сценарию, что он должен остановить выполнение и вернуть ошибку, если таковая имеется. сбой команды.
  2. Используйте касание для создания файла.
  3. Удалите файл.
  4. exit 0 сообщит, что сценарий мониторинга выполнен успешно.

Создать тест в конфигурации мониторинга. Это запустит test-mount.sh, и в случае неудачи запустит remount-data.sh. Вы можете заменить его на все, что хотите сделать в случае неудачного монтирования.

    check program test-mount with path /root/test-mount.sh timeout 5 seconds 
      if status != 0 then exec "/root/remount-data.sh"
0
ответ дан 3 December 2019 в 01:41

Я напрямую использую тест df без специального скрипта:

check program nfs-var with path "/bin/df -t nfs4 /var"
        if status != 0 then alert
        if status = 1 then exec "/bin/mount /var"
1
ответ дан 10 April 2020 в 09:26

Теги

Похожие вопросы