Cumulus Linux の Prescriptive Topology Manager で配線を検証する

Cumulus Linux では Prescriptive Topology Manager という機能が提供されている。

Prescriptive Topology Manager - PTM - Cumulus Linux 3.7 - Cumulus Networks

これは LLDP の情報を使用して配線情報を検証してくれるというもの。

実際に Cumulus VX と GNS3 で検証してみる。 目的のトポロジはこんな感じ。

f:id:dos1506:20190329225952p:plain  

まず、正しい配線情報を/etc/ptmd/topology.dotに記述する。

graph G {
        "spine-1":"swp3" -- "leaf-1":"swp1"
        "spine-1":"swp4" -- "leaf-2":"swp1"
        "spine-1":"swp5" -- "leaf-3":"swp1"
        "spine-2":"swp3" -- "leaf-1":"swp2"
        "spine-2":"swp4" -- "leaf-2":"swp2"
        "spine-2":"swp5" -- "leaf-3":"swp2"
}

ptmdを再起動する。これは設定ファイルを書き換えるたび必要になる。

systemctl restart ptmd

これで準備は整ったので、あとは配線をしていく。

まず1本目をつないでみる。spine-1 の swp3 と leaf-1 の swp1 を結線。

f:id:dos1506:20190329234259p:plain

つないだらptmctlで検証結果を確認。

cumulus@spine-1:~$ ptmctl
-----------------------------------------
port  cbl     BFD     BFD   BFD    BFD
      status  status  peer  local  type
-----------------------------------------
swp3  pass    N/A     N/A   N/A    N/A
swp4  N/A     N/A     N/A   N/A    N/A
swp5  N/A     N/A     N/A   N/A    N/A

topology.dot に定義した内容と LLDP の情報が合致しているため、passと出ている。

では間違った配線をするとどうなるかを見てみる。 spine-1 の swp4 に leaf-2 の swp2 を接続する。(正しい接続は spine-1:swp4 <-> leaf-2:swp1) f:id:dos1506:20190329234807p:plain

ptmctlを実行。

cumulus@spine-1:~$ ptmctl
-----------------------------------------
port  cbl     BFD     BFD   BFD    BFD
      status  status  peer  local  type
-----------------------------------------
swp3  pass    N/A     N/A   N/A    N/A
swp4  fail    N/A     N/A   N/A    N/A
swp5  N/A     N/A     N/A   N/A    N/A

swp4 において fail と表示されている。これは LLDP 情報が topology.dot と一致しないため。

ちなみに /var/log/ptmd.log にもいろいろ出てたりする。 接続が正しいとき

2019-03-29T14:42:45.645249+00:00 spine-1 ptmd[2647]: Port swp3 correctly matched  with remote leaf-1.swp1

接続が誤っているとき

2019-03-29T14:47:45.831388+00:00 spine-1 ptmd[2647]: Port swp4 NOT matched with remote - Expected [leaf-2.swp1] != [leaf-2.swp2]

全部つないだところでのテストは以下の通り。topology.dotはすべてのホストで同じファイルが使い回せるのでいちいち書き換える必要はない。 それぞれのホストは自分のホスト名が存在するテスト項目のみ検証を行っていく。

spine-1

cumulus@spine-1:~$ ptmctl
-----------------------------------------
port  cbl     BFD     BFD   BFD    BFD
      status  status  peer  local  type
-----------------------------------------
swp3  pass    N/A     N/A   N/A    N/A
swp4  pass    N/A     N/A   N/A    N/A
swp5  pass    N/A     N/A   N/A    N/A

spine-2

cumulus@spine-2:~$ ptmctl
-----------------------------------------
port  cbl     BFD     BFD   BFD    BFD
      status  status  peer  local  type
-----------------------------------------
swp3  pass    N/A     N/A   N/A    N/A
swp4  pass    N/A     N/A   N/A    N/A
swp5  pass    N/A     N/A   N/A    N/A

leaf-1

cumulus@leaf-1:~$ ptmctl
-----------------------------------------
port  cbl     BFD     BFD   BFD    BFD
      status  status  peer  local  type
-----------------------------------------
swp1  pass    N/A     N/A   N/A    N/A
swp2  pass    N/A     N/A   N/A    N/A

leaf-2

cumulus@leaf-2:~$ ptmctl
-----------------------------------------
port  cbl     BFD     BFD   BFD    BFD
      status  status  peer  local  type
-----------------------------------------
swp1  pass    N/A     N/A   N/A    N/A
swp2  pass    N/A     N/A   N/A    N/A

leaf-3

cumulus@leaf-3:~$ ptmctl
-----------------------------------------
port  cbl     BFD     BFD   BFD    BFD
      status  status  peer  local  type
-----------------------------------------
swp1  pass    N/A     N/A   N/A    N/A
swp2  pass    N/A     N/A   N/A    N/A

実際にどんな場面で使うのか?

結線して LLDP 情報を受け取ったら即テストが走って配線情報を検証してくれるので、構築時などには役立つと思う。

ESXiのvmnic番号と物理ポートのマッピングとか間違えやすいし...

ちなみにESXiはvCenterがないと標準スイッチでCDPしかしゃべれないけど、Cumulus Linuxで使用している lldpd は CDP にも対応しているので大丈夫(だと思う...)。