skillup

技術ブログ

サーバー・ネットワーク

ロードバランサーの構築(dockerを例に)

投稿日:

以前から興味のあったロードバランサーをdockerで構築。

ロードバランサーとは?

定義

主にwebサーバーの処理を分散させる仕組みで、そのために処理を振り分けることをさします。

通常は リクエスト→webサーバーという流れですが、

ロードバランサーを入れると リクエスト→ロードバランサー→webサーバー(通常は2台以上のことが多いです。)

のようになります。

メリット

負荷軽減

一般的には高負荷状態のシステムに対して組まれることが多く、サーバーを2台以上にすることで1台1台の負荷を軽減することができます。

可用性の向上

1台のサーバーがダウンしても、他のサーバーが生きていれば、システムが継続して稼働できるようになります。このような性質のことを可用性と呼びます。

拡張性の向上

サーバーを増やしたりすることでシステムの規模を拡張させることが容易になります。

デメリット

コスト増加

当たり前ですが、サーバーの数だけ、サーバー費用がかかります。またメンテナンスの手数も増えることになります。

実装上の変更が必要

複数のサーバーからアクセスすることになるので、特定のサーバーにしかないリソースへのアクセスをしている実装は変更する必要があります。

具体的にはセッションの保存に関してサーバーではなく、DBで保存するようにしましょう。また画像ファイルやその他、動的に生成させるファイルなどもサーバーにおかず、共通のサーバーかあるいはS3のようなクラウドサービスで管理する必要があります。

またGitで反映するときにも同時に反映できるようにスクリプトを組んだりする必要があります。

参考リンク

わわわIT用語辞典 ロードバランサ (load balancer)

実装

例えばテストで実際にAWSやVPCを立てるのは面倒なので、dockerを使うのが一番お手軽だと思います。

https://github.com/umanari145/load_balancer

docker-compose.yml

balancer/nginx.conf

実際に処理を振り分けるnginxの処理を記述します。

上記のような書き方だと処理が交互に分散されますが、2:1で振り分けるなど等分ではない振り分け方などもあります。

docker/web1/Dockerfile(web2も同様)

docker/web1/default.conf(web2も同様)

web1/index.html
(web2も同様ですが、テストでは均等にアクセスしているかを検証するために違う文字を入れるのもありです。)

Docker でロードバランサ・アプリケーションサーバ・DBサーバの環境構築

Nginxのロードバランシング機能を使ってみよう!

実践編ーDockerを使ってnginxでリバースプロキシを立ててみる
(ロードバランサーではなくリバースプロキシですが、参考になりました。)

-サーバー・ネットワーク
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

nginxまとめ

10~11月はデータベースをちょっと勉強しておりましたが、12,1ぐらいはサーバーインフラ系の強化月間としようかと思います。 しばらくはnginxについてです。 Contents1 nginxの概要2 …

no image

docker-compose(CentOS7系やMySQLのオプションなど)

以前、docker-composeを使った記事は使ったのですが、 実際にCentOS7やMySQLを扱った時につまづいたことなどを。 Contents1 CentOS7系のメモ1.1 docker-c …

no image

clamAV

ウイルスソフトclamAVのインストールと使用法について Contents1 インストール1.1 CentOS61.2 CentOS72 スキャン実行の設定に関して インストール CentOS6 [c …

no image

docker上でミニサービスを起動させるまで

dockerで何とかホストOS上でサービスを起動させるところまでは終了。 Contents1 やったこと2 苦戦したこと やったこと CentOSのイメージを取得 [crayon-63d3b1d6dd …

no image

vueの環境構築に関して(モジュールバンドラの比較やvue-cliコマンドなど)

vueをビルドする場合、一般的にはwebpackなどのモジュールバンドラを使うかと思います。少しまとめて置こうかと思います。 Contents1 モジュールバンドラ1.1 webpack1.2 lar …

アーカイブ