Hatena::ブログ(Diary)

labunix の ラボゆにっくす このページをアンテナに追加 RSSフィード Twitter

 
labunix の ラボゆにっくす
labunix の ラボUnix(はてなブログ)
 | 

2013/06/24 Wheezy/SqueezeでKeepalived+LVS(IPVS)構成(NAT)にする。 このエントリーを含むブックマーク このエントリーのブックマークコメント


■Wheezy/SqueezeでKeepalived+LVS(IPVS)構成(NAT)にする。

 Wheezy/Squeezeにkeepalivedを導入、VRRPで仮想IPにアクセス。
 http://d.hatena.ne.jp/labunix/20130618

 IPVSのみでWebサーバをラウンドロビン構成にする。
 http://labunix.hateblo.jp/entry/20130619/1371652385

■以下を確認。

$ sudo sysctl -p
net.ipv4.ip_forward = 1

■サンプルとコメントを参考に記述。

$ lv -s /usr/share/doc/keepalived/keepalived.conf.SYNOPSIS.gz | wc -l
407

■途中、「lvs_」と「lb_」で差が出るが、サンプルファイルのオプション名とした。

$ lv -s /usr/share/doc/keepalived/keepalived.conf.SYNOPSIS.gz | grep lvs
    lvs_sync_daemon_interface <STRING>  # Binding interface for lvs syncd
    lvs_sched rr|wrr|lc|wlc|lblc|sh|dh  # LVS scheduler used
    lvs_method NAT|DR|TUN               # LVS method used

$ grep lb_ /usr/share/doc/keepalived/samples/keepalived.conf.vrrp.lvs_syncd
    lb_algo rr
    lb_kind NAT

■上記の通り、keepalivedの設定ファイルでIPVSも設定できるが、
 便宜上、「keepalived用」と「IPVS用」にファイルを分けた。

 「keepalived用」には送信元メールと優先度以外に、
 MASTER/BACKUPの本質的な違いは無い。

$ sudo diff keepalived.conf /etc/keepalived/keepalived.conf
7c7
<    notification_email_from vrrp100@vmdebian1.test.local
---
>    notification_email_from vrrp200@vmdebian1.test.local
21c21
<     priority 100
---
>     priority 200
44c44
<     priority 200
---
>     priority 100


■keepalived用の設定

$ cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived

global_defs {
   notification_email {
     root@vmdebian1.test.local
   }
   notification_email_from vrrp200@vmdebian1.test.local
   smtp_server 192.168.164.11
   smtp_connect_timeout 30
   # router_id LVS_DEVEL
   enable_traps
}


vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    garp_master_delay 10
    smtp_alert
    virtual_router_id 52
    priority 200
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.164.16
        # 192.168.200.16
        # 192.168.200.17
        # 192.168.200.18

        # optional label. should be of the form "realdev:sometext" for
        # compatibility with ifconfig.
        # 192.168.200.18 label eth0:1
    }
}
vrrp_instance VI_2 {
    state BACKUP
    interface eth0
    garp_master_delay 10
    smtp_alert
    virtual_router_id 53
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.164.17
        # 192.168.200.16
        # 192.168.200.17
        # 192.168.200.18

        # optional label. should be of the form "realdev:sometext" for
        # compatibility with ifconfig.
        # 192.168.200.18 label eth0:1
    }
}

include /etc/keepalived/with_lvs.conf

■IPVS用の設定
 ※ここは2台とも同じでもよいし、IPの順序を反転してもよい。

$ cat /etc/keepalived/with_lvs.conf
virtual_server_group HTTP52 {
    192.168.164.16 80
}
virtual_server_group HTTP53 {
    192.168.164.17 80
}

virtual_server group HTTP52 {
    delay_loop 3
    lb_algo rr
    lb_kind DR
    # nat_mask 255.255.255.0
    #persistence_timeout 50
    protocol TCP
    sorry_server 192.168.164.1 80

    real_server 192.168.164.10 80 {
        weight 1
        inhibit_on_failure
        #TCP_CHECK {
        HTTP_GET {
            url {
                path /check.html
                status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.164.11 80 {
        weight 1
        inhibit_on_failure
        TCP_CHECK {
            connect_timeout 3
        }
    }
}
virtual_server group HTTP53 {
    delay_loop 3
    lb_algo rr
    lb_kind DR
    # nat_mask 255.255.255.0
    #persistence_timeout 50
    protocol TCP
    sorry_server 192.168.164.1 80

    real_server 192.168.164.11 80 {
        weight 1
        inhibit_on_failure
        #TCP_CHECK {
        HTTP_GET {
            url {
                path /check.html
                status_code 200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
    real_server 192.168.164.10 80 {
        weight 1
        inhibit_on_failure
        TCP_CHECK {
            connect_timeout 3
        }
    }
}

■コンテンツの確認
 面倒なので、両方のVIPをワンライナーで交互にチェックします。

$ while true ;do \
    echo -n "$n,";echo "$n" | awk '{print "w3m -dump -no-proxy http://192.168.164."($n%2)+16}' | `xargs` | head -1; \
    let n++; \
    sleep 1; \
  done
,vmdebian1
1,vmdebian1
2,vmdebian2
3,vmdebian2
4,vmdebian1
5,vmdebian1
6,vmdebian2
7,vmdebian2
8,vmdebian1
9,vmdebian1
10,vmdebian2
^C

■apache2のログの抑制

$ sudo cp /var/www/index.html /var/www/check.html 
$ grep nolog /etc/apache2/sites-available/default || \
  sudo sed -i s/"CustomLog.*"/'SetEnvIf Request_URI "check.html" nolog'"\n\t& "'env=!nolog'/ \
  /etc/apache2/sites-available/default

$ sudo /etc/init.d/apache2 restart
[ ok ] Restarting web server: apache2 ... waiting .

■おおよそ順序よく分散されていることがわかる。

$ sudo ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  192.168.164.16:80                   3       15       15     1506     2170
  -> 192.168.164.10:80                   1        5        5      502      722
  -> 192.168.164.11:80                   2       10       10     1004     1448
TCP  192.168.164.17:80                   2       10       10     1004     1446
  -> 192.168.164.10:80                   1        5        5      502      722
  -> 192.168.164.11:80                   1        5        5      502      724

$ sudo ipvsadm -Ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  192.168.164.16:80                   2       10       10     1004     1446
  -> 192.168.164.10:80                   1        5        5      502      722
  -> 192.168.164.11:80                   1        5        5      502      724
TCP  192.168.164.17:80                   3       15       15     1506     2168
  -> 192.168.164.10:80                   2       10       10     1004     1444
  -> 192.168.164.11:80                   1        5        5      502      724

 | 
labunix のラボゆにっくす <過去記事一覧> 閲覧回数:1474213
プロフィール

labunix

labunix

labunix の ラボゆにっくす

labunix のブックマーク

1. テリロジーは5連騰で青空圏走る、前日引け後の大量保有報告も株高思惑を助長 | 個別株 - 株探ニュース
2. 次世代AMF対応 「AMF Cloud」AMFコントローラー、AMFマスターライセンスをリリース - CNET Japan
3. 国内SDN市場はVMware/Cisco/NECが3強、IDC Japan調査から | IT Leaders
4. コンビーズメール:200誌まで作成できるPC向けメール配信サービス - TechRepublic Japan
5. パナソニック草津工場が見える化、BIダッシュボードを活用 - MONOist(モノイスト)
6. chshコマンドでシェルを変える方法 | ニコニコニュース
7. ハイパーレッジャーファブリックを基盤とした「メタコイン」、20日から事前販売を行う:時事ドットコム
8. 【 getfacl 】コマンド――ファイルのアクセス制御リスト(ACL)を表示する:Linux基本コマンドTips(233) - @IT
9. CSIRT小説「側線」 第6話:海にて(前編) (1/5) - ITmedia エンタープライズ
10. 【9/17】ICT教育ニュースとユーバーが共催「プログラミングを子どもに教えたい大人向け1日講座」 - ユーバー株式会社のプレスリリース
11. 「Internet Week 2018」11月27日〜30日に開催
12. サーバ安定運用のための更新管理術 更新プログラムの不具合にどう対処する? 連載:山市良のマイクロソフトEYE|ビジネス+IT
13. RenvaleCapitalグループ、「専門家の交流晩餐会」を開催 - 株式会社セトワークスのプレスリリース
14. セレスがシンクロライフと提携、トークン転換権付き株式を発行 - M&A Online
15. LINEの流出を防ぐ「鍵マーク」知ってる?付いていない人は要注意|ニフティニュース
16. 98346
17. 「Linux 4.18」リリース | Think IT(シンクイット)
18. 量子コンピューターで資産運用管理、NTTデータなど  :日本経済新聞
19. 【 getenforce 】コマンド/【 setenforce 】コマンド――SELinuxのモードを表示/一時的に変更する:Linux基本コマンドTips(232) - @IT
20. MS、8月のセキュリティ更新プログラムを公開--ゼロデイ脆弱性2件にも対処 - ZDNet Japan
Connection: close