Итак, вот проблема, с которой я столкнулся: у меня есть кластер Ceph, который подвергается балансировке, но иногда я получаю сообщение Slow Requests из вывода ceph -s. У меня есть два терминала, открытых для кластера ceph. Один терминал настроен на активное наблюдение за медленными запросами с помощью следующей команды:
watch "ceph -s | grep -i 'slow'"
В результате я вижу два результата. Один вывод выглядит так:
Every 2.0s: ceph -s | grep -i 'slow' Sun Jul 12 02:17:49 2020
107 slow requests are blocked > 32 sec. Implicated osds 17
,27,37,51,58,81,118,122,124,137,153,160,181,197,205,217,236,259,267,28
3,309,318,323,328,343
На этом этапе, если я вижу, что появляются медленные запросы, мне нужно немедленно установить кластер на следующее:
rbarrett@osd001:~$ sudo ceph osd set norecover
norecover is set
После чего медленные запросы в конечном итоге исчезнут, и вам придется настроить кластер для продолжения восстановления.
Every 2.0s: ceph -s | grep -i 'slow' Sun Jul 12 02:20:07 2020
После исчезновения slow requests
я должен отключить опцию norecover
rbarrett@osd001:~$ sudo ceph osd unset norecover
norecover is unset
Итак, вот мой вопрос: как я могу написать сценарий в bash для запуска в качестве процесса или службы, чтобы сделать это за меня?
Моя первая мысль была бы использовать переменную для этой команды watch, но тогда как я могу настроить запуск скрипта и следить за кластером?
Я не против использовать python, но предпочел бы bash скрипт.
Я подумал использовать что-то подобное, но я не знаю, будет ли он работать постоянно.
#!/bin/bash
check=$(ceph -s | grep -i "slow requests")
echo $check
if [[ -n $check ]];then
echo "setting norecover flag"
sudo ceph osd set norecover
else
echo "no slow requests"
sudo ceph osd unset norecover
fi
Кто-нибудь, пожалуйста, подтвердите, будет ли это работать?