ISC Kea の 1.4で冗長化のための設定が増えました。
しかし、主要なディストリビューションでは、パッケージマネージャによりインストールされるKeaのバージョンは1.1です。
そこで、そもそもKeaではバックエンドにRDBMSが指定できるので、冗長化しなくても何となく冗長化できるのではないか?と試してみました。
具体的には、Kea を2台たてて、別にMySQLを用意し、2台のKeaがともに同じMySQLを見に行くように設定します。
ルータ等では、DHCPのRelay先として2台のKeaを両方とも指定します。
こうしておくと
クライアントからのDISCOVERは2台のKeaに届き、2台のKeaからOFFERがクライアントに送られますが、
クライアント側では早く届いたほうのOFFERに反応し、REQUESTを送信します。
REQUESTは2台のKeaに届きますが、REQUESTにはサーバ指定が入っているので、片方のKeaのみがACKを返します。
またACKを返す際にしかMySQLには書き込まれないので、結果、Lease情報にはちゃんとクライアント1台につき1つのエントリしか作成されません。
負荷分散されるわけではありませんので、処理能力は1台分ですが、ひとまず、片方が倒れてもクライアント側でIPアドレスが取得できない、という事態にはならずに済みそうです。
Kea のバックエンドをRDBMSにする注意点として、RDBMSとの接続が切れると、再接続をするのではなく、そのままKeaがエラーにより終了してしまいます。
ですので、エラーにより終了した際は、自動で再起動するような対処をしておかないと辛いことになります。
これを書いた後でレポートを見つけてしまった。