有没有办法按延迟对 IP 进行排序?

有没有办法按延迟对 IP 进行排序?

给定一个 IP 列表,如何对其进行排序,以便“最近”或最低延迟排在顶部,“最远”或最长延迟排在最后?

答案1

这是我的解决方案,特定于 NIS,用 bash 编写:

yplist=( $( ypcat ypservers|xargs -n1 host|sed -n '/has.address/s/.*[[:space:]]//p'|sort -u ) )
nearest=( $( for pp in ${yplist[@]}; do ping -q -n -c 5 -i 0.3 $pp|awk -F/ '/^rtt/{printf "%d:",($5*1000)}'; echo $pp; done|sort -n -t: -k1|cut -d: -f2 ) )
printf "ypserver %s\n" ${nearest[@]} >/etc/yp.conf

这是一个在讲述过程中不断增长的管道,所以这里是:

  • $yplist是一个主机数组,用作我的源列表
  • $nearest依次获取$yplist和sping
  • 的输出ping被缩小为awk仅匹配摘要行
  • 轻微 hack:使用/作为分隔符,avg以 ms 为单位的往返时间乘以 1000,得到以 μs 为单位的整数值
  • 后续echo $pp只是将有问题的 IP 粘贴到该行的末尾
  • 整个for循环在字段 #1 上按数字排序 - 较短的响应时间平均值将浮到顶部
  • 第一个字段被剪掉,只留下 IP
  • 然后将此 IP 列表分配到$nearest数组中

这是 IP 的结果列表,最短的延迟位于顶部。

(最后一行只是为 NIS 配置printf写出一个新的前缀,为每个 IP 添加“ypserver”前缀。)/etc/yp.conf

我考虑过将最小延迟添加到偏差因素(输出mdevping)中,以暴露潜在的不可靠主机。然而,只有当ping每个主机运行了几个小时甚至几天时,这个统计数据才有用。因素是什么?看起来 10 到 100 之间的某个值大约是正确的,但这必须进行调整以适应不可靠性的容忍度。为了将结果净化大约 5%,这似乎需要做大量的工作。

相关内容