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

Sambaインストール

オフィスでサーバーをたてていますが、普段使っているメインのPCとのファイルのやりとりをSFTPクライアントなどでするのが面倒くさいので、同期させるためにSambaをインストールしました。 環境ですが、 …

no image

laravel+vessel

現場のリーダー的な方に進められてVesselというDockerのインストールなどをサポートするツールを触ってみました。 特にlaravelのインストールなどに向いていますが、laravelでなくとも使 …

no image

Python+cgiでwebアプリを動かすまで

PythonでRESTAPI的なプログラムを作った時のメモ。 あまりCGIで実行する人がいないようで、情報がそこまでありませんでしたが、Perlでやった経験もあり、動かせました。 Contents1 …

no image

inotifyによる検知

以前、pynotifyというpythonの検知プログラムを書きましたが、元々はinotifyというLinux上のパッケージのライブラリが元になっています。 以前調べたリンク 監視検知処理に関して 実務 …

no image

nginxでの設定について

何回かやったnginxの設定について。 特にサブディレクトリなどに設定したいなどの時に悩みますね・・・ Contents1 locationディレクティブ2 try_filesディレクティブ3 fas …

アーカイブ