0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ロードバランサーの概要について

0
Posted at

ロードバランサーとは

個人開発でECSを使おうと思ってますが、周辺のリソースも含めて、理解が薄かったりした概念について再度復習します。

この記事ではロードバランサーがらみについてちょっとまとめ。

ざっくりとした簡単な概念から

主にWebサーバーの処理を分散させる仕組みで、リクエストの処理を複数のサーバーに振り分けることを指します。

通常の構成リクエスト → Webサーバー

ロードバランサー導入後リクエスト → ロードバランサー → Webサーバー(2台以上)

メリット・デメリット

メリット

負荷軽減

  • 高負荷状態のシステムに対してサーバーを2台以上にすることで、1台あたりの負荷を軽減

可用性の向上

  • 1台のサーバーがダウンしても、他のサーバーが生きていればシステムが継続稼働
  • このような性質を可用性と呼ぶ

拡張性の向上

  • サーバーを増やすことでシステムの規模拡張が容易

デメリット

コスト増加

  • サーバー数分の費用とメンテナンス手数の増加

実装上の変更が必要

  • セッション保存をサーバーではなくDBで管理
  • 画像ファイルや動的生成ファイルを共通サーバーやS3などのクラウドサービスで管理
  • Git反映時の同時反映スクリプトの実装
  • 今はほとんどしませんが、サーバーにはいってデバックみたいな開発をしてたころとかは大変でした・・・

AWSのロードバランサー

ALB(Application Load Balancer)

HTTPやHTTPSなどのトラフィック負荷分散に特化したロードバランサー

ELB(Elastic Load Balancing)

AWSのロードバランサーの総称

本当はもっといろいろありますが・・・一旦は基本のロードバランサー=アプリケーションロードバランサーってことで。ELBはAWSのサービス名。

ELBの主要概念

リスナー

簡単にいうと窓口。80番のリクエストを受けるとかだと、とりあえずフロント部分に立つのがここになります。

  • ELBのフロント部分に位置
  • 外部からアクセスするプロトコルやポートの設定を行う
  • 具体的なトラフィックの監視を担当
  • 以下の情報を定義:
    • ポート
    • プロトコル(HTTP、TCPなど)
    • 紐づくロードバランサー
    • 転送先(ターゲットグループ)

リスナールール

窓口(リスナー)に来たリクエストをどのように振り分けるかのルール定義。

  • リスナーのルール設定
  • IPアドレスによって後述するアクションが決定される

アクション

リスナールールの種類。

  • 固定レスポンスを返す
  • リダイレクト
  • 他の部分への転送(フォーワード)・・・なんらかのアプリ
  • 認証処理

ターゲットグループ

後続の実際の処理(ターゲットの)窓口やヘルスチェックなど。

  • フォーワード先として、ターゲットを取りまとめたもの
  • リスナーから転送されたトラフィックの具体的な処理を担当
  • ECSサービスの窓口となることが多い
  • ヘルスチェックも定義(例:30秒ごとに特定のHTMLファイルを確認し、3回連続で200が返らないとエラー)

ターゲット

実際のリクエストが流れ着く先です。

  • ターゲットグループに所属
  • 具体的な処理を行うプロセス(EC2、Lambdaなど)

ECSとの連携

ECSの主要コンポーネント

クラスター

  • ECSの最大グループ
  • この中にサービスを入れて管理

サービス

  • 実際のタスクの管理人的な位置づけ
  • タスクのダウン時の復活などを管理
  • 以下を定義:
    • 紐づくロードバランサー(ターゲットグループ)← ロードバランサーはここに紐付けます。
    • タスク実行数
    • 実行コンテナの種類(EC2、Fargateなど)

タスク

  • コンテナが実際に起動される部分
  • JSON形式で以下を定義:
    • コンテナイメージ
    • ロール
    • ポート
    • ログ情報

実装例:Dockerを使用したロードバランサー

構成

.
├── balancer/
│   └── nginx.conf
├── docker/
│   ├── web1/
│   └── web2/
├── docker-compose.yml
├── web1/
│   └── index.html
└── web2/
    └── index.html

Nginxによる負荷分散設定例

events {
    worker_connections  16;
}
http {
    upstream balancer.local {
        server web1;
        server web2;
    }

    server {
        listen 80;
        location / {
            proxy_pass http://balancer.local;
        }
    }
}

参考リンク

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?