web-dev-qa-db-ja.com

Linux /マルチパスはすべてのパスを使用しておらず、キューの長さのpath_selectorを使用しませんか?

私は次のハードウェアを持っています:

  • 2x SuperMicroサーバー(128GB RAM、2x 8コアAMD)
  • 2x /サーバーLSISAS2008 PCIe MPT-Fusion2 HBA(2 SASポート/カード)
  • 1x LSI CTS2600 DAS、24x W.D. 15.7k RPM 600GB SASドライブ。

サーバーはOpenSuSE11.4を実行しており、アップストリームからビルドされたマルチパスツールのカスタムビルドとOpenSuSE11.3パッチセットが組み込まれています。各サーバーの4つのSASポートはすべてDASに接続され、2つは各DASRAIDコントローラーに接続されます。

DASは、RAID10、128kストライプの22台のドライブでセットアップされます。アレイ上に単一の500GBボリュームグループを作成し、それをサーバーの1つにエクスポートしました。

マルチパスは、サーバーにエクスポートされた500GBLUNへのマルチパスI/Oに設定されています。 multipath.confファイルは次のとおりです。

defaults {
    path_checker            "directio"
    path_selector           "queue-length 0"
    path_grouping_policy    "multibus"
    prio                    "random"
    features                "1 queue_if_no_path" #queue IO if all paths are lost
}

multipath -l出力:

pg (360080e50001b658a000005104df8c650) dm-0 LSI,INF-01-00
size=500G features='3 queue_if_no_path pg_init_retries 50' hwhandler='1 rdac' wp=rw
|-+- policy='round-robin 0' prio=0 status=active
| |- 4:0:0:1 sda 8:0   active undef running
| `- 5:0:0:1 sde 8:64  active undef running
`-+- policy='round-robin 0' prio=0 status=enabled
  |- 4:0:1:1 sdc 8:32  active undef running
  `- 5:0:1:1 sdg 8:96  active undef running

パスの2番目のセットでは、最初の2つは「status = active」ではなく、「status = enabled」であることに注意してください。ここで、iostatを見ると、実際には最初の2つのパスのみを使用していることがわかります。

Linux 2.6.37.6-0.5-default (slipdb01-primary)   07/07/2011      _x86_64_        (16 CPU)                                                       

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util                                      
sda               0.00     0.00    1.18  441.70    30.44  4748.62    21.58     0.79    1.79   0.24  10.60                                      
sdb               0.00     0.00    0.00    0.00     0.00     0.00    14.22     0.00   83.56  82.92   0.00                                      
sdc               0.00     0.00    0.00    0.00     0.00     0.00     8.06     0.00  334.53 331.73   0.02                                      
sdd               0.00     0.00    0.00    0.00     0.00     0.00    16.99     0.00   98.73  95.76   0.00                                      
sde               0.00     0.00    1.18  441.70    30.43  4747.77    21.58     0.79    1.79   0.24  10.60                                      
sdf               0.00     0.00    0.00    0.00     0.00     0.00    14.43     0.00   77.17  76.66   0.00                                      
sdg               0.00     0.00    0.00    0.00     0.00     0.00     8.06     0.00  301.72 297.05   0.02                                      
sdh               0.00     0.00    0.00    0.00     0.00     0.00    14.29     0.00   83.12  82.69   0.00                                      
sdi               0.00     0.00    0.08    0.48     8.73    35.82   159.00     0.06   99.95   1.08   0.06                                      
sdj               0.00  2311.06    0.00  340.49     0.01 10606.18    62.30     0.04    0.12   0.08   2.83                                      
dm-0              0.02  1353.74    2.36  883.40    60.86  9496.39    21.58     0.95    1.08   0.13  11.20                                      
dm-2              0.00     0.00    2.38 2237.14    60.86  9496.39     8.54     1.90    0.84   0.05  11.20

私が理解しているように、path_grouping_policyを「multibus」に設定すると、すべてのパスでIOのバランスを取る必要があるため、4つのアクティブなパスが表示されます。path_grouping_policyを「failover」に変更すると、同じ2が表示されます。アクティブパス。

さらに、path_selectorを「queue-length0」に設定しているにもかかわらず、「multipath -l」の出力は、ラウンドロビンを使用していることを明確に示していることに注意してください。

Multipath-toolsが4つのパスすべてを使用しない理由、およびパス選択アルゴリズムの選択を無視する理由について、誰かが何か考えを持っていますか?

どうもありがとう...

3
Kendall

まあ、アレイは私が思ったようにアクティブ/アクティブではないようです..そして私が思った方法は一般的な定義でした。 CTS2600は、コントローラーAのLUN1とコントローラーBのLUN2をサーバーできるが、コントローラーA、BのLUN1はサーバーできないという点でアクティブ/アクティブアレイです。したがって、4つのパスすべてを1つのLUNに送ることができないようです。

ただし、両方のコントローラー間でIOの負荷分散が可能であることがわかりました。これは、CTS2600アレイに22ドライブのRAID10ボリュームグループを作成し、2つのボリュームを作成し、優先パスを設定することで実現しました。ボリュームAの場合はコントローラーAに、コントローラーBの場合はボリュームBに、サーバーにエクスポートします。次に、/ dev/mapper /の下の名前を使用して、LVM2物理ボリュームとして初期化しました。次に、両方の物理ボリュームを含むLVM2ボリュームグループを作成しました。ボリューム。2つのLUNがあるため、「lvcreate」を実行するときにオプション「--stripes 2」を追加しました。その後、通常どおりデバイスをフォーマット、マウント、および使用しました。「iostat」とSANtricityの組み込みパフォーマンスモニターの両方を監視します。予想通り、IOが両方のコントローラーに分散していることは明らかでした。

これを実現するために--stripesオプションについて頭を上げてくれた#postgresの親切な紳士に感謝します(特にLSIが助けたくない、または助けられなかったため)。

2
Kendall

これは「デュアルアクティブ」と呼ばれることもあり、真のアクティブ/アクティブFCではありませんSANエンジニアは慣れています。ベンダーは、SASベースの製品。この記事 すべてのモードについて説明しています 非常によくできています。

1
ppetraki

さらに、queue-lengthビットとpath_selectorビットの詳細を省略しました。私が使用しているストレージデバイスはすでにマルチパスデータベースにあるため、queue-lengthやpath_selectorなどの特定のデフォルトが設定されています。 /etc/multipath.confに「devices {device {」セクションがありませんでした。ここで、デフォルトのオプションをオーバーライドできます。その変更を行った後、queue-lengthとpath_selectorを変更できる(そしてマルチパスが使用する)ことを確認できました。 /etc/multipath.confに追加した部分:

   devices {
     device {
     vendor  "LSI"
     product "INF-01-00"
     no_path_retry   fail
     features        0
     #path_grouping_policy   "multibus"
     }
   }

これが誰かに役立つことを願っています。

1
Kendall