keepalived で 複数のポートを対象とする設定を書くときの手の抜き方

昨日の日記、smtpkeepalived で分散する話だが、それだけでなく ftp や rsh も同様に冗長化してほしいとなった。keepalived ではポートのレンジ指定とか書けないんじゃないかな。だからたくさんのポートを使うやつは無理とまでは言わないけど面倒だなあ。1ポートにつき1設定。rsh は 514 と 1022 だっけ? ftp はコントロールの 21 のほうはいいとして、データのほうどうするよ。PASSIVE だと毎回ポート変わるし使用されそうなレンジのポートを conf ファイルに全部登録とかやってられるかー!と思って keepalived ではなく、呼び出す先の ipvsadm のマニュアル見てたら、Port 指定を 0 にしろと。なるほど。

virtual_server_group MySystem1 {
  192.168.0.10 0
}
virtual_server group MySystem1 {
  lvs_sched rr
  lvs_method DR
  protocol TCP
  persistence_timeout 50
  ~その他オプションいろいろ~
  sorry_server 192.168.0.9 0
  real_server  192.168.0.1 0 {
    ~オプションいろいろ~
  }
  real_server  192.168.0.2 0 {
    ~オプションいろいろ~
  }
  real_server  192.168.0.3 0 {
    ~オプションいろいろ~
  }
}

こんな設定で、virtual の IP (上記例では 192.168.0.10) に接続に来たものは、80 だろうか 25 だろうがなんだろうがポート問わず全部 real_server (上記例では 192.168.0.1~3) に投げると。こいつは便利だ。ヘルスチェックがほんのり面倒だけど。チェック先のポートを connect_port 80 などとして明示しとかないと次々と死んでるステータスになるので注意。また、Port 0 の設定をするときは persistence_timeout の指定も必須。これが無いとカーネルのログにエラーが出まくり、うまく繋がらなくなる。

しかし実際のところ、いまどき rsh や ftp は無いわー、という話である。閉じた環境のシステムだと旧来の手法がいまだに生き残っていたりするよね。でもこれから新規に作るなら ssh や scp を使うよね。これだと Port 22 だけ明示的に設定すればいいから快適だよね。