shell (3)

冗余链路检查

 

在一个大的IP网上,冗余做得一般都很好,基本上避免了单点故障对网络的影响。例如当汇聚层至骨干层的一条中继出现故障、甚至一个骨干层设备出现故障时,通过动态路由的自动调整,网络实现自愈合,不会对用户造成影响。

但这又出现了另外一个问题:这就是我们怎么能够及时发现网络出现问题了呢?特别是那些由于冗余存在,无用户申告的故障;或者是冗余线路出现了问题等。

使用网管系统和日志服务器当然是一个好的解决办法,我这里利用shell脚本和expect程序,实现了检测全网IP设备的工作状态,对冗余链路进行检查。该程序的依据有如下几点:

1、  每个汇聚层设备都有多条中继和骨干层设备相连,一般是两条;

2、  如果一个汇聚层设备所有中继都断了,那就用不着我们这个程序来检测了――用户早就把热线电话打爆了^_^;

3、  如果汇聚层设备和骨干层设备的动态路由(我这里用的是OSPF)邻居关系建立完好,那么说明中继没有问题;

4、  如果动态路由的邻居关系没有建立起来,那就认为中继有问题;

5、  如果动态路由的邻居关系不是FULL状态,而是INIT等状态,那需要网管人员去检查了;

一、程序介绍和流程图

该程序的主程序是shell程序“network_detect.sh”,它将会调用expect程序“network_detect.exp”并使用参数文件“data/routerlist”。如图1所示,该程序的思路如下:

1、                 通过对所有骨干层设备进行信息采集,得到动态路由(我这里是OSPF)邻居建立关系的信息;

2、                 分析获得的信息,得到每个汇聚层设备的OSPF邻居关系信息;

3、                 判断每个汇聚层设备的OSPF邻居数目,如果建立有不少有两个邻居,则认为该汇聚层设备的中继均是好的;如果一个汇聚层设备只有一个OSPF邻居,则认为该汇聚层设备的冗余线路中断了;

 

l am sorry and can't upload the 流程图 !!!

 

 

二、shell程序“network_detect.sh

#!/bin/sh

#cpss 2004 4 22 编写

#如有问题可以发信到cpss@cpss.zz.ha.cn

#除了后期增加的中文注释,程序经过了严格测试

#由于所有汇聚层设备(6509)都是双上联,所以我编制本程序来得到所有骨干层设备的OSPF邻居信息

#并分析出哪些汇聚层设备由于故障或其他原因变成了单上联

#

#该程序需要调用expect程序network_detect.exp和使用参数文件data/routerlist

#

#

#程序开始

#删除旧的临时文件,以免影响运行结果

rm -f mylogfile 6509error mytmpfile* 6509output

#循环调用expect程序,来获得路由器上的信息

while read GSRNAME GSRADDR

do

./network_detect.exp $GSRNAME $GSRADDR router_user router_passwd

#我担心运行速度太快了,会影响expect程序写日志文件,让程序歇2秒再接着干

sleep  2

done <data/routerlist

#本程序只考察千兆中继,所以过滤一下

egrep "GigabitEthernet|#sh" mylogfile >mytmpfile1

#处理日志文件,获得OSPF邻居建立正常和不正常的列表

GSRNAME="NULL"

S6509IP="NULL"

while read LINE

do

        para1=`echo $LINE|awk '{print $1}'`

        para2=`echo $LINE|awk '{print $2}'`

        if [ $para2 = "ip" ]

         then

           GSRNAME=`echo $para1|awk -F# '{print $1}'`

         else

           S6509IP=$para1

           linkstate=`echo $LINE|awk '{print $3}'`

           linkstate=`echo $linkstate|awk -F/ '{print $1}'`

                    if [ $linkstate = "FULL" ]

                        then

                        printf "%b/t%b/n"  $S6509IP  $GSRNAME >>mytmpfile_output

                        else

                        printf "%b/t%b/t%b/n" $S6509IP  $GSRNAME $linkstate >>6509error

                         fi

      fi

done<mytmpfile1

sort mytmpfile_output>mytmpfile3

#检查是否有6509处于单上联状态

number=1

last_6509="6509_IP"

last_node="node_name"

while read para1 para2

do

if [ $para1 = $last_6509 ]

then

number=`expr $number + 1`

else

  if [ $number -eq 1 ]

    then

    printf "%b/t%b/n" $last_6509 $last_node >>6509_output

    fi

  last_6509=$para1

  last_node=$para2

  number=1

fi

done<mytmpfile3

#分析最后一条记录是否需要打印

if [ $number -eq 1 ]

then

printf "%b/t%b/n" $last_6509 $last_node >>6509_output

fi

rm -f mytmp*

cat 6509_output

 

三、expect程序“network_detect.exp

#!/usr/bin/expect

#cpss 2004 4 22 编写

#如有问题可以发信到cpss@cpss.zz.ha.cn

#除了后期增加的中文注释,程序经过了严格测试

#由于所有汇聚层设备(6509)都是双上联,所以我编制本程序来得到所有骨干层设备的OSPF邻居信息

#并分析出哪些汇聚层设备由于故障或其他原因变成了单上联

#

set GSRNAME [lindex $argv 0]

set GSRADDR [lindex $argv 1]

set username [lindex $argv 2]

set passwd1 [lindex $argv 3]

set timeout 10

set postbuffer ""

 

send_user "/n$GSRNAME/n"

        send_user "/n"

        spawn telnet $GSRADDR

        expect Username

        send "$username/r"

        expect "Password"

        send "$passwd1/r"

        expect {

                   "#" {

                       send "/r"

                  } Password {send_user "the password is wrong/n";exit

                   } timeout {send_user "can not connect to the router/n";exit

                   } eof {

                       send_user /

                           "connection to host failed: expect_out(buffer)"

                       exit

                   }

               }

#设置日志文件,记录OSPF邻居关系信息

                        log_file mylogfile

                        set debug_flag 1

 

#the blow is attahed by program

expect #

send "sh ip osp nei /r"

expect #

send " /r"

expect #

send "exit /r"

 

四、参数文件“data/routerlist

router1    192.168.1.1

router2    192.168.1.2

router3    192.168.1.3

router4    192.168.1.4 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值