所以我面临的问题是:我有一个Ceph集群正在进行平衡,但偶尔我会从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
有人请确认这是否有效
您可以使用围绕脚本的循环无限地运行它
我在检查之间添加了2秒钟的睡眠,以避免使用这个脚本时CPU占用率过高(否则可能会显著增加集群负载)。您可能需要根据您的需要进行调整(我建议不要低于2秒)
相关问题 更多 >
编程相关推荐