コンパイルmasterでの負荷バランサの使用

Included in Puppet Enterprise 2017.2.

LEIでは、環境全体のキャパシティを高めるため、agentの要求をコンパイルmaster全体に分散させます。

シンプルなTCP負荷バランサを設定すれば、ポート8140におけるagentとmasterのトラフィックをルーティングすることができます。

負荷バランサインフラの具体的な設定方法についてはこのガイドでは解説しませんが、haproxyを負荷分散の目的で利用する方法については、HAプロキシモジュール文書で読むことができます。

負荷バランサを使う際の考慮事項

コンパイルmasterの負荷を分散することによって最大のパフォーマンスを得るには、さまざまな考慮事項があります。

オーケストレーション規模の負荷分散

Puppet通信プロトコル(PCP)ブローカはコンパイルmaster上で稼働し、ポート8142を介してPXP agentに接続します。 PCPブローカはWebSocket上に構築され、多数の持続的な接続を必要とします。 HTTPヘルスチェックを使用していない場合、ラウンドロビンまたはランダムの負荷分散アルゴリズムを使用して、PXP agentをPCPブローカに接続することを推奨します。これは、PCPブローカの動作がオーケストレータから独立していないので、接続が切れると孤立するためです。 /status/v1/simpleエンドポイントを使用して、接続にエラー状態がないかどうかをチェックすることができます。

また、負荷バランサを設定して、トラフィックがほとんどない長時間実行接続を終了しないようにする必要があります。 PCPブローカは活動のない接続を15分後に切断するので、HAプロキシモジュールで、 timeout tunnel15mに設定できます。

ヘルスチェックの使用

PuppetのREST APIが公開するステータスエンドポイントを負荷バランサのヘルスチェックに利用すると、問題のあるホストが負荷バランサからのagentの要求を受けとらないようにすることができます。

Puppet masterサービスは、 /status/v1/simpleに対して発行された認証されていないHTTP GET要求に応答します。 サービスに問題がない場合、APIはHTTP 200ステータスコードによる応答を返します。

負荷バランサがHTTPヘルスチェックをサポートしていない場合は、簡単な代替手法として、ホストがポート8140のTCP接続をリッスンしているかどうかをチェックする方法があります。 これにより、Puppet masterの到達不可能なインスタンスに要求が転送されないようにすることができます。ただし、ホストが正常でない場合や、ポート8140でリッスンしているサービスがPuppetに関連するサービスではない場合に、ホストをローテーションから外すことが保証されるわけではありません。

負荷分散の最適化

Puppet agentとPuppet master間のネットワーク通信は多様であるため、負荷分散アルゴリズムを導入し、開いている接続の数に応じてコンパイルmaster間のトラフィックを分散させることを推奨します。 負荷バランサでは、この戦略はしばしば「最小接続による分散」と表現されます。

Puppet agentインストールのためのpe_repoの設定

負荷分散したコンパイルmasterから新たなPuppet agentをインストールする場合、agentの設定では、負荷バランサそのものではなく、要求を処理するコンパイルが指定されます。 agentがmaster全体を活用できるようにするためには、この挙動をオーバーライドする必要があります。

コンパイルmasterのインストールのステップ4を参照

↑ Back to top