BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース サービスのロードバランシングオプションが改善されたDocker 1.12.0

サービスのロードバランシングオプションが改善されたDocker 1.12.0

原文(投稿日:2016/08/22)へのリンク

1.12.0リリースでDockerは,サービスがSwarmクラスタ内で起動した場合に,DNSとIPVS(IP Virtual Server)を使用してサービスのロードバランシングを行なうオプションを新たに導入した。

Dockerには,起動時に--net-aliasオプションを使ってエイリアスをコンテナのIPアドレスにマップすることが可能な,DNSサーバが組み込まれている。この機能は1.10から使用できるようになった。さらに1.11リリース以降では,ラウンドロビンDNSベースのロードバランシングもサポートされている。

DNSベースのロードバランシングでは,サービス名(エイリアス)が複数のIPアドレスにマップされる。この状態において,それらのIPアドレスは,サービスが実行されているコンテナを示している。DNS解決クエリが実行されると,DNSサーバは複数のIPアドレスを返す。応答されるIPアドレスの順序はシャッフルされているので,異なるクライアントからの要求は異なるIPにヒットする。このラウンドロビンロードバランシングを実現するための,エイリアスを複数のコンテナIPアドレスにマップする作業は,これまでは手動で行なわなくてはならなかった。

1.12.0リリースで,Dockerは,IPVSと呼ばれるLinux機能を使ったサービスのロードバランシングに関する組込みサポートを追加した。DockerのSwarmクラスタリングエンジンを使えば,サービスに必要なレプリカ(コンテナ)の数をコマンドライン上で宣言することが可能になる。サービスのエイリアスを手作業で指定する必要はない。内部的には,そのサービスのDNS名が,IPVSでその機能が結び付けられている仮想IP(VIP)にマップされていて,DNSのルックアップに対してそのVIPを返す。

IPVSは,レイヤ4(トランスポート層)のTCP/UDPトラフィックを,バックエンドサーバにフォワーディングするLinuxカーネル機能である。ベースとなっているNetFilterモジュールは,Linuxカーネルにおいて,パケットフィルタリングやネットワークアドレス変換の実装上の基礎をなすものだ。

サービス要求がVIPに到達すると,サービスをホストするバックエンドコンテナのいずれかに転送される。この処理は,トラフィックがコンテナ間で均等に分配されるように行われる。このサービスのロードバランシング方法は,サービスディスカバリソフトウェアであるConsulが行なう方法に近い。Consulも同じように,ルックアップの実行に対して複数のIPアドレスを返すことの可能なDNSサーバを提供している。

 
 

この記事を評価

関連性
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

BT