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

簡易サーバー(http-serverなど)

一般的にwebアプリを構築する際にはApacheやnginxといったwebサーバーを立てることが多いのですが、ローカルの開発環境で入れるのが面倒で、もっと簡易的にサクッと入れられる仕組みが欲しかったり …

no image

MariaDBインストール

CentOS7からはyumでmysqlをインストールするとMariaDBがディフォルトになるようです。 せっかくなので、これを機にMariaDBを使ってみました。といってもMySQLとほとんど一緒でし …

no image

SELinuxによるファイル制限+MySQLアクセスエラー

新サーバーにApacheをいれて特定のファイルにアクセスしようとしたところ、 以下のようなエラーがでてしまいました。

ただPermis …

no image

duコマンドについて

ディスク容量を計るコマンドduについて。 ポツポツ使ってきましたが整理していなかったので、ここで使い方を整理したいと思います。 Contents1 超基本的な使い方1.1 頻出オプション1.2 組み合 …

no image

docker-composeに関して

dockerで環境構築する場合は基本的に下記のような流れをとると思います。 それぞれの出来合いのイメージをpull イメージに様々なライブラリをインストール それらをコンテナとして起動&連携 …