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

scpコマンドを使ったサーバー間のファイルのやり取り

あるサーバーのファイルを別サーバーにコピーするとき、大昔はFTPを使っていましたが、現在FTPサーバー自体を立てることがあまりないため、SSHを使ったSCPコマンドでのファイル点を使いました。 Con …

no image

pythonのアップグレードに関して

pythonのアップグレードに関して。 python2.6だとpipがインストールされていないのですが、入れようとしてハマったのでメモ。 一般的なインストール方法ですが、下記のようになります。 [cr …

no image

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

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

no image

Linuxでのパス

以前、composerを入れるときに、こちらの記事を書いたのですが、自分が使っているVPSではこの方法で入りませんでした。 調べるとみるとPATHが[crayon-63368bb13efaa93861 …

no image

ロードバランサーについて

ロードバランサーについてのメモなどを。 Contents1 ALBとELBの違いなど2 ELBの用語2.1 リスナー2.2 リスナールール2.3 アクション2.4 ターゲットグループ2.5 ターゲット …

アーカイブ