試してみる作成日:2016/12/21更新日:2018/07/10技術ブログインフラサーバインフラこんにちは。社内でミドルウェアのチューニングやシステム基盤の設計等を担当しています。試した話を紹介します。ビルドして配布するケースが多いです。複数のマシン上でコンテナを並列に実行させて負荷分散構成が取れるメリットがあります。利用してみて感じたことは、クラスタ上のコンテナに対してリバースプロキシを使いバランシングしようとすると、動的にスケールアウトさせたり縮退させる数に制限が出来てしまうという困った部分がある事に気が付きました。していることが根本的な問題ですが、リバースプロキシの特性としてダイナミックポートを指定することができないため、クラスタの難しさを感じました。本稿では問題を解決するために取り組んたことや個人の見解を記載します。/sbin/initスタティックポートで転送するリバースプロキシの制限についてリバースプロキシの転送先変更は、設定ファイルの修正を必要とするためサービスの停止を伴います。このため動的にスケールアウトをするには、予めスケールアウトするコンテナの上限数を決めて設定を定義するなどの工夫が必要となります。利点である瞬時に起動させて気軽に環境を捨てられる俊敏性を損なうことになるため避けたいところです。いう負荷分散ソフトウェアがあることを知りました。対応しており、目的にはピッタリそうです。Gopher君が、手信号で飛行機を誘導するマーシャラーに扮したデザインでプロダクトの直感的なイメージを伝えています。dynamically.”Træfɪkは、マイクロサービスを容易に展開できるように作られたモダンなHTTPリバースプロキシ・ロードバランサです。...)をサポートしています。以外の利用も想定された製品でありなかなか良さそうな印象です。Store(以降KVS)をサービスレジストリとして動的に設定を保持し、サービスの追加、削除、更新されるたびにKVSを介して検知し、動的に構成を変化させることができます。モダンと謳っていることもあり、機能はリバースプロキシとして必要な機能は揃っているだけでなく新しい技術もサポートされています。1.1.1からは、セッション・アフィニティ機能も入りより使いやすくなった様です。定義として、ロード・バランサー・グループを使用して、メンバーシップ、メンバーの重み、およびセッション・アフィニティーに関する構成データを動的に変更できる機能を提供することにより、ワークロードをさらに効率的にアプリケーション・サーバー全体に分散させる機能を持つものを指す様です。3つのゾーンにグループやメンバーシップを定義し、メンバーの重みや転送先の設定などを定義することができます。使ったシンプルなGUIを装備しています。登録されたリダイレクト可能なサービスの一覧が表示されます。コンフィグレーションシンプルなヘルスチェック画面により、発生しているエラー継続時間をリアルタイムに確認することができます。氏を中心としてオープンな体制で開発されています。GitHubやSlack通して議論が行われ、ときおり新しい機能がコミュニティを通して取り込まれています。Containous社は、最新のデータセンター用のインフラストラクチャソフトウェアをオープンソースで開発することをポリシーに掲げており、追加されるプロダクトにも注目して行きたいところです。自動ディスカバリや動的ロード算出によるロードバランス機能で言えば、Consul-template+HAproxyで出来ることに近い印象をうけます。Traefikがほかのツールと違うのは、まず非常にシンプルに構成できるという点です。Traefikは一つのバイナリを置き、いくつかのコマンドを実行するだけで構成することが可能です。設定をファイルに持たせずKVSへ持たせて連携することが可能であり、イベントを継起に動的な設定変更を行えることは大きな特徴だと言えます。概要や機能の説明が中心でした。使って動きを確認してみたいと思います。連携させて動作させてみたいと思います。VagrantのBoxイメージが公開されているので、こちらを使いたいと思います。バイナリをインストールしてデーモン化させて使います。Store)機能をもっています。設定を保持させて動的にコンテナの追加と削除を実行したいと思います。必要となるため組み合わせて動作させます。検証環境の構成は以下とします。本検証にて導入したプロダクトについては以下となります。traefik_linux-amd64検証の流れ検証は以下の流れで進める。Linux版バイナリのダウンロードとインストールバイナリはダウンロード用のページ(https://github.com/containous/traefik/releases)から取得できます。現在のバージョン1.1.2(2016年12月時点)では、Linuxのほか、MacOSX、Windowsに対応しています。リスト1はスクリプトによるインストール例です。Traefikは頻繁にバージョンアップしていますので、最新版の取得更新はこのスクリプトを使うことで対応することができます。(図7)リリースノートなど確認する際はダウンロードページを確認ください。version”と入力することでバージョンが表示されます。設定ファイルは、toml形式の設定ファイルを作成します。設定ファイルを記述するための小さな言語となっており、Traefikではこの形式で設定ファイルを作成します。ログの出力先やダッシュボード接続用のポートなど変更しない設計値などは、このtomlファイルに定義することが望ましいです。以下スクリプトは、toml形式の設定ファイルをジェネレートします。":8888"EOFConsulとの連携設定リバースプロキシ設定を動的に変化させるためにConsulと連携するための設定を追加します。手順の簡略化も兼ねてConsulサーバもDockerで動作させてみたいと思います。Consulサーバは、DockerHubでGliderLabsが公開しているイメージを利用します。DockerHubで公開されているイメージをpullします。奇数ノードでの運用が推奨されています。1ノードがリーダーとなる必要があるため、ここでリーダーとして起動させます。$JOIN_IPConsulクラスタ状態確認クラスタにメンバーが追加されていることが確認できる。