約10ヶ月の開発ののち、遂に Pgpool-II 3.6 が2016年11月21日に正式リリースされました。
Pgpool-II 3.6では様々な改良が行われていますが、今日はその中から主なものを取り上げて解説します。
フェイルオーバ時のセッション切断の軽減
フェイルオーバが発生すると、セッションに対応したすべてのプロセスが再起動されるため、これまではPgpool-IIに接続したすべてのセッションが一旦切断されていました。
Pgpool-II 3.6では、これを可能な限り減らすようにしています。具体的には、ストリミーングレプリケーションモードにおいて、フェイルオーバが起きた時に、ダウンしたスタンバイノードを負荷分散ノードとして使用していたセッションだけが切断され、それ以外のスタンバイノードを使用するセッションはそのまま継続できるようになりました。
具体例を示します。
たとえば、1台のプライマリサーバと1台のスタンバイサーバからなるストリミーングレプリケーション構成のシステムでは、デフォルトではスタンバイサーバを負荷分散ノードとして使用する確率は1/2です。今、100のセッションがPgpool-IIに接続していたとすると、フェイルオーバの際にはおおよそ半分、つまり50のセッションが切断され、50のセッションは生き残ることになります。もしスタンバイサーバが1台ではなくて2台ならば、約34のセッションが切断され、66のセッションは生き残ります。つまり、スタンバイサーバが多いほど、セッションが切断される確率が減り、ユーザにとって快適になるわけですね。
この機能は pcp_detach_node で計画停止を行う際にも適用されます。pcp_dettach_nodeでは、「ソフト」モードを指定すると、すべてのセッションが終了するまで待つので、安全に計画停止を実施できるのですが、一方いつまでたってもクライアントが接続を終了してくれないと、結局Pgpool-IIを再起動せざるを得ないこともありました。今回の改良により、その際に「勝手にセッションが切断された」という苦情をいくらか減らすことができるかもしれません:-)
そうなると、気になるのは自分のセッションがフェイルオーバの際に果たして切断されるのかどうです。このために SHOW POOL_STATUS コマンドに新たにカラムが追加され、どのノードを負荷分散ノードとして使用しているわかるようになりました。これについてはすでに別のブログ で説明しているので、そちらをご覧いただければと思います。
なお、残念ながらこの機能は、プライマリサーバがダウンした結果フェイルオーバする場合には適用されません。また、ストリミーングレプリケーションモード以外の動作モードも対象になりません。
ちょっと長くなってしまったので、他の機能については次回で説明します。