2019年3月23日土曜日

Ubuntu で LVS 入門

概要

LVS (Linux Virtual Server) は大抵の Linux ディストリビューションで使える負荷分散のためのソフトウェアです
L4ロードバランサになります
keepalived が LVS のラッパーで大抵は keepalived と組み合わせてロードバランサの冗長化構成などを実現します
今回は入門なので簡単な HTTP のロードバランサをしてみました

環境

  • Ubuntu 16.04
  • LVS (ipvsadm) 1.28
  • keepalived 1.2.24

インストール

  • sudo apt -y install ipvsadm keepalived

keepalived.conf の作成

Ubuntu でインストールすると設定ファイルのサンプルがあるのでそれをベースに設定すると簡単です

  • sudo cp /usr/share/doc/keepalived/samples/keepalived.conf.sample /etc/keepalived/keepalived.conf
  • sudo vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id LVS_DEVEL
}

vrrp_instance VI_1 {
    interface enp0s9
    virtual_router_id 50
    nopreempt
    priority 100
    advert_int 2
    virtual_ipaddress {
        192.168.99.220
    }
}

virtual_server 192.168.99.220 1080 {
    delay_loop 6
    lb_algo rr 
    lb_kind NAT
    persistence_timeout 50
    protocol TCP

    real_server 192.168.99.200 80 {
        weight 1
        HTTP_GET {
            url { 
              path /
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

解説

ポイントとなる項目ごとに説明していきます

global_defs

今回はほぼ使っていません
router_id で識別子を設定しているだけです
メールなどを送信する設定をすると router_id の値を参照してメールに記載してくれるようです

vrrp_instance

VRRP (Virtual Router Redundancy Protocol) の設定をします
ルータとして動作しかつ冗長化するための virtual_ipaddress を設定するのがポイントです
この virtual_ipaddress が仮想 IP として interface に指定したインタフェースに自動的に振られます
DHCP では払い出されない範囲の IP などを指定しましょう

そしてこの IP にアクセスすることで配下にぶら下がっている実サーバ (real_server) にアクセスすることができます
virtual_router_id は仮想ルータの識別子です
他に vrrp_instance を定義する場合は ID が被らないようにしましょう

virtual_server

配下にぶら下げるサーバやロードバランシングの方式を設定します
delay_loop はヘルスチェックの間隔です
lb_algo, lb_kind がバランシングの方式です
今回は 上記を使っていますが現在は lvs_schedlvs_method に項目名が置き換えられています
persistence_timeout はセッションの保持時間です

virtual_server 192.168.99.200 1080 の 1080 の部分は fwmark と呼ばれています
LISTEN するポートではないのでご注意ください

real_server

実際にぶら下げるサーバを指定します
複数のサーバをぶら下げる場合は real_server の項目を追加します
アクセスするパスやメソッドを指定します
connect_timeout, nb_get_retry, delay_before_retry はそれぞれタイムアウト、リトライする回数、リトライするまでにどれだけウェイトするかになります

プロセス起動

設定ファイルの準備ができたらプロセスを起動しましょう

  • sudo systemctl start ipvsadm
  • sudo systemctl start keepalived

keepalived を起動すると virtual_server に設定した IP が interface enp0s9 に振られます

動作確認

適当に nginx でも立てておきます
そして virtual_server に指定した IP にアクセスすると nginx の画面が確認できると思います
今回であれば real_server の IP にアクセスしても nginx の画面が確認できます

参考サイト

0 件のコメント:

コメントを投稿