多くの場合、ストレージネットワークでは、ポートのエラー数の増加や、sfpモジュールの信号減衰レベルの増加など、不快なことが発生します。 2つ以上の工場で構成されるSANインフラストラクチャの高レベルの信頼性を考慮すると、緊急事態の可能性はそれほど大きくありませんが、負の要因が課されると、データの損失やパフォーマンスの低下につながる可能性があります。 たとえば、工場の1つでFOSが更新され、すべてが2番目の工場で機能し、その上で、ディスクアレイが接続されているスイッチとサーバーが接続されているスイッチの間で、トランクポートの1つのCRCエラーが急速に増大し始めます。 さらに悪いことに、SFPモジュールの温度が上昇すると信号レベルが低下し、このチャネルの使用率が上昇したためにリンクが増加したため、リンクが消えます。 そのような場合、彼らは通常「よく知っている」または「100%信頼できるシステムが存在しない」などと言います。
有能なアーキテクチャ+適切な監視=耐障害性
そのため、問題が特定され、データストレージネットワークのフォールトトレランスを向上させるための一連の対策を開発する必要があります。2つの段階に分けることができます。
- SANのベストプラクティスにストレージアーキテクチャをもたらす
- 監視システムの展開
SANのベストプラクティスに関する多くの文献とトレーニングコースがあり、インテグレーターから優秀な専門家を招いて試験を実施できる場合、適切なSANネットワークモニタリングシステムを作成する正しい方法を選択するのは容易ではありません。 これは、緊密な結合によって説明できます。ソフトウェア開発者はスイッチのメーカーです。 もちろん、Cisco Fabric ManagerまたはBrocade Network Advisorが悪いとは言いたくありませんが、SANネットワークの回復力を高めるために私の意見で必要なすべてを行うことはできません。
どうする
そのため、タスクが設定され、解決策を見つける必要があり、多くの場合、これは今年の予算の不足や、適切なソフトウェアの存在に関するインテグレーターの無知によって複雑になる可能性がありますが、これは問題ではありません 必要なコンポーネントはすべて無料で利用でき、すべてを機能させる必要があります。
brocadeスイッチのSANポートでのCRCエラーの監視の実装を調べてみましょう;他のパラメーターのほとんどは同じ方法で監視できます。
ステップ1、データ収集プロトコル
CRCエラーの数に関する情報は、さまざまな方法(snmp、https、telnet、およびssh)でスイッチから取得できます。 telnetは安全ではないため、無効にすることをお勧めします。httpsは特定の値を抽出することが困難であり、snmpツリーは異なるスイッチ上と新しいFOSへの切り替え時の両方で大幅に変更される可能性があります。
ステップ2、データ収集方法
sshを使用する場合、Linuxはbash + expectと組み合わせて使用するのが最適です。この方法では、コマンドのダイアログ入力を使用してssh経由で接続できます。
ステップ3、保管場所
大した違いはありません。テキストファイルに保存できますが、mysqlの例を検討します。 すべての監視は、2つのスクリプトで実装されます。
porterrshow.sh-情報の収集とCRCエラー値の増分の検索
expect.tcl-SSH接続
および3つのtxtファイル:
temp.txt-データバッファー
switch.txt-各行にsanスイッチのリストをフォーマット名ログインパスワードで表示
crc.txt-見つかったCRCエラーのレポート
Select要求は、それぞれ1時間前に受信したデータと比較してCRCエラーの増加の増分を検索します。スクリプトは1時間に1回実行する必要があり、スクリプトは同じ時間に作業を開始および終了する必要があります。 この制限は、スクリプト起動のシリアル番号のフィールドに入力するか、パフォーマンスを失い、時間値を選択するためのより複雑な条件を設定することで簡単に回避できます。 パッケージが想定しているため、サーバーにmysqlおよびsshクライアントをインストールする必要があります。 ユーザーデータベースは、テーブル名テーブルに対する読み取りおよび書き込み権限を持つdbnameデータベースに存在する必要があります。 テーブルtablenameでは、スイッチ+日付と時刻でのporterrshowコマンドの出力に類似したデータを取得します。
porterrshow.sh
#!/bin/bash rm /var/scripts/temp.txt # temp.txt while read line # switches.txt do read sw user pass <<< $line # n=0 # while read line; # expect.tcl do array[n]="$line"; n=$[n+1]; # expect.tcl done < <(/var/scripts/expect.tcl $sw $user $pass porterrshow) # if echo ${array[4]} | grep -q '='; # then k=5; else k=4; fi; for i in `seq $k $[n-1]`; # do read a1 a2 a3 a4 a5 a6 a7 a8 a9 a10 a11 a12 a13 a14 a15 a16 a17 a18 a19 <<< ${array[i]}; # (echo $sw,${a1%:},`date +%F`,`date +%T`,$a2,$a3,$a4,$a5,$a6,$a7,$a8,$a9,$a10,$a11,$a12,$a13,$a14,$a15,$a16,$a17) >> temp.txt # done; done < /var/scripts/switches.txt # mysql -uuser -ppass dbname << EOF; LOAD DATA LOCAL INFILE "temp.txt" INTO TABLE tablename FIELDS TERMINATED BY ','; EOF # (mysql -uuser -ppass dbname << EOF select new.switch, new.port, new.crcerr-old.crcerr from tablename new, tablename old where new.switch=old.switch and new.port=old.port and new.date=old.date and new.crcerr!=old.crcerr and new.crcerr!=0 and new.date=curdate() and hour(new.time)=hour(now()) and hour(old.time)=hour(now())-1; EOF ) > /var/scripts/crc.txt # CRC if grep -q 'switch' /var/scripts/crc.txt then cat /var/scripts/crc.txt | mailx -r SAN_Switch_CRC_Tester -s "CRC errors is increased" sanadmin1@mywork.com fi #
expect.tcl
#!/usr/bin/expect # 10 set timeout 10 # if {$argc != 4} { puts "Usage $argv0 host user pass command" exit 1} # set host [lindex $argv 0] set user [lindex $argv 1] set pass [lindex $argv 2] set command [lindex $argv 3] # SSH spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no $user@$host $command expect *assword: send "$pass\r" expect eof