現象
2つのアベイラビリティゾーンにまたがるNLBがバランシングしてくれない。
常に片側のアベイラビリティゾーンに建てられたEC2インスタンスにしか接続ができない。
NLBのDNS名をdigコマンドでチェックすると名前解決が1つしかできていない(IPアドレスが1つしか返ってこない)。
原因
NLBに複数のターゲットグループを割り当てていて、そのうち1つのターゲットグループにだけEC2インスタンスを追加していた。
経緯
- まずアベイラビリティゾーンAにEC2インスタンス(EC2-A)を1つだけ作成して、ポートの異なる複数のターゲットグループに追加
- すべてのターゲットグループをNLBのリスナーに追加
- アベイラリティゾーンAのEC2インスタンスに接続できることを確認
- アベイラビリティゾーンCにEC2インスタンス(EC2-C)を作成
- めんどくさがって1つのターゲットグループのみにEC2-Cを追加
- 結果、追加したターゲットグループのポートに対してリクエストを送ってもEC2-Aにしかリクエストが届かない
- digでNLBのDNS名を調べるとIPアドレスが1つしか返ってこない
解決方法
すべてのターゲットグループに正常なターゲットを追加
感想
繋がるターゲットグループに対して良しなにリクエストを送ってくれるわけではないんだなぁ。
備考
確認はしていないが、ターゲットグループを使うのでALBでも同様の動作をするかもしれない。