CentOS 6.6 x86_64でLVS+Keepalived+squidで超高速負荷分散Webサーバを設定

タックス

ある日、Webサーバが突発的なアクセスに見舞われて、サーバがダウンしたという経験のある方は結構いらっしゃると思います。
そんな時にはロードバランサーとキャッシュサーバという手があります。
リアルタイム性を問わない物であれば、お金をかけずに負荷分散システムを構築することができます。
今回はLVS+Keepalived+squidの設定をご紹介したいと思います。

    ■ 前準備

  • 前提条件

  • LVS+Keepalivedサーバ 2台(DSR構成)
    Webサーバ 2台
    キャッシュサーバ 2台(負荷分散用)

    まず、ロードバランサーは2台の冗長化構成となっており、片方がダウンしてももう片方で動作し続けます。
    また、ロードバランサーは違うIPアドレス帯も扱えるようにマルチホーミング設定し、共有することができます。
    なぜこのようにしたかというと、ロードバランサーは負荷が非常に低いため、たくさんのサイトを共有して利用できるため、このようにしてみました。

    キャッシュサーバは、Webサーバのキャッシュサーバとなっており、普段はこちらを見るようにしています。
    キャッシュサーバが2台あるのは負荷分散のためです。
    この構成を応用することで、超高速+冗長化構成なWebサーバを構築することができます。
    100.100.2.x分のWebサーバ及びキャッシュサーバの設定手順は省略します。

  • IPアドレス

  • 仮想 : 100.100.1.2 (LVSサーバで使用)
    Web : 100.100.1.3
    LVS(1台目): 100.100.1.9 100.100.2.9 (マルチホーミング)
    LVS(2台目): 100.100.1.10 100.100.2.10 (マルチホーミング)
    キャッシュ(1台目): 100.100.1.253
    キャッシュ(2台目): 100.100.1.254

    CentOS 6.6 x86_64でマルチホーミングを設定


    ■ LVS+Keepalivedで冗長化分散(DSR構成)

  • LVS(1台目)

  • # vi /etc/iproute2/rt_tables
    200     gateway1
    201 gateway2

    202 gateway3
    203 gateway4

    # vi /etc/sysctl.conf
    net.ipv4.ip_forward = 0

    net.ipv4.ip_forward = 1

    # vi /etc/sysconfig/network-scripts/route-eth0
    100.100.1.0/24 dev eth0 src 100.100.1.9 table gateway1
    default via 100.100.1.1 table gateway1

    100.100.1.0/24 dev eth0 src 100.100.1.2 table gateway3
    default via 100.100.1.1 table gateway3

    # vi /etc/sysconfig/network-scripts/route-eth1
    100.100.2.0/24 dev eth1 src 100.100.2.9 table gateway2
    default via 100.100.2.1 table gateway2

    100.100.2.0/24 dev eth1 src 100.100.2.2 table gateway4
    default via 100.100.2.1 table gateway4

    # vi /etc/sysconfig/network-scripts/rule-eth0
    from 100.100.1.9 table gateway1
    from 100.100.1.2 table gateway3

    # vi /etc/sysconfig/network-scripts/rule-eth1
    from 100.100.2.9 table gateway2
    from 100.100.2.2 table gateway4

    # vi /etc/sysconfig/network-scripts/ifcfg-eth0
    # vi /etc/sysconfig/network-scripts/ifcfg-eth1

    GATEWAY設定をコメントアウトするか削除してください。

    # vi /etc/sysconfig/network
    GATEWAY=100.100.1.1

    上記を追加

    # service network restart

    # vi /etc/sysconfig/iptables
    # HTTP
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

    # VRRP
    -A INPUT -m state --state NEW -p vrrp -j ACCEPT

    上記を追加

    # service iptables restart

    # yum -y install keepalived ipvsadm

    # vi /etc/keepalived/keepalived.conf
    ! IPVS

    vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    garp_master_delay 5
    virtual_router_id 51
    priority 100
    nopreempt
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass password
    }
    virtual_ipaddress {
    100.100.1.2 dev eth0
    }
    }

    virtual_server_group WEB_GROUP1 {
    100.100.1.2 80
    }

    virtual_server group WEB_GROUP1 {
    delay_loop 3
    lvs_sched rr
    lvs_method DR
    protocol TCP
    virtualhost hogehoge.jp

    real_server 100.100.1.253 80 {
    weight 1
    inhibit_on_failure
    HTTP_GET {
    url {
    path /index.html
    status_code 200
    }
    }
    connect_port 80
    connect_timeout 5
    }

    real_server 100.100.1.254 80 {
    weight 1
    inhibit_on_failure
    HTTP_GET {
    url {
    path /index.html
    status_code 200
    }
    }
    connect_port 80
    connect_timeout 5
    }
    }

    # chkconfig keepalived on

    # service keepalived start

  • LVS(2台目)

  • # vi /etc/iproute2/rt_tables
    200     gateway1
    201 gateway2

    202 gateway3
    203 gateway4

    # vi /etc/sysctl.conf
    net.ipv4.ip_forward = 0

    net.ipv4.ip_forward = 1

    # vi /etc/sysconfig/network-scripts/route-eth0
    100.100.1.0/24 dev eth0 src 100.100.1.10 table gateway1
    default via 100.100.1.1 table gateway1

    100.100.1.0/24 dev eth0 src 100.100.1.2 table gateway3
    default via 100.100.1.1 table gateway3

    # vi /etc/sysconfig/network-scripts/route-eth1
    100.100.2.0/24 dev eth1 src 100.100.2.10 table gateway2
    default via 100.100.2.1 table gateway2

    100.100.2.0/24 dev eth1 src 100.100.2.2 table gateway4
    default via 100.100.2.1 table gateway4

    # vi /etc/sysconfig/network-scripts/rule-eth0
    from 100.100.1.10 table gateway1
    from 100.100.1.2 table gateway4

    # vi /etc/sysconfig/network-scripts/rule-eth1
    from 100.100.2.10 table gateway2
    from 100.100.2.2 table gateway5

    # vi /etc/sysconfig/network-scripts/ifcfg-eth0
    # vi /etc/sysconfig/network-scripts/ifcfg-eth1

    GATEWAY設定をコメントアウトするか削除してください。

    # vi /etc/sysconfig/network
    GATEWAY=100.100.1.1

    上記を追加

    # service network restart


    # vi /etc/sysconfig/iptables
    # HTTP
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

    # VRRP
    -A INPUT -m state --state NEW -p vrrp -j ACCEPT

    上記を追加

    # service iptables restart

    # yum -y install keepalived ipvsadm

    # vi /etc/keepalived/keepalived.conf
    ! IPVS

    vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    garp_master_delay 5
    virtual_router_id 51
    priority 99
    nopreempt
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass password
    }
    virtual_ipaddress {
    100.100.1.2 dev eth0
    }
    }

    virtual_server_group WEB_GROUP1 {
    100.100.1.2 80
    }

    virtual_server group WEB_GROUP1 {
    delay_loop 3
    lvs_sched rr
    lvs_method DR
    protocol TCP
    virtualhost hogehoge.jp

    real_server 100.100.1.253 80 {
    weight 1
    inhibit_on_failure
    HTTP_GET {
    url {
    path /index.html
    status_code 200
    }
    }
    connect_port 80
    connect_timeout 5
    }

    real_server 100.100.1.254 80 {
    weight 1
    inhibit_on_failure
    HTTP_GET {
    url {
    path /index.html
    status_code 200
    }
    }
    connect_port 80
    connect_timeout 5
    }
    }

    # chkconfig keepalived on

    # service keepalived start


    ■ keepalived.confの書き方

  • lvs_sched

  • rr ラウンドロビン、順番にバックエンドに割り振っていく。weightは無視。
    wrr 重み(weight)を加味したラウンドロビン。weightが高いものほど多く振る。
    lc コネクション数がもっとも少ないサーバを選択する。
    wlc 重みとコネクション数によるサーバー選択をおこなう。

  • lvs_method

  • DR DSR構成
    NAT NAT構成

  • 仮想IPアドレスの確認

  • # ip addr list eth0


    ■ キャッシュサーバ

    # yum -y install squid

    # vi /etc/sysconfig/iptables
    # Generated by iptables-save v1.4.7 on Fri May 22 15:57:22 2015
    *nat
    :PREROUTING ACCEPT [0:0]
    :POSTROUTING ACCEPT [0:0]
    :OUTPUT ACCEPT [0:0]
    -A PREROUTING -d 100.100.1.2/32 -p tcp -j REDIRECT
    COMMIT

    先頭に追加

    # HTTP
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

    上記を追加

    # vi /etc/squid/squid.conf
    acl hogehoge dstdomain hogehoge.jp www.hogehoge.jp

    acl Safe_ports port 80
    http_access allow all
    http_access deny all

    http_port 80 accel vhost
    cache_peer 100.100.1.3 parent 80 0 no-query originserver name=hogehoge
    cache_peer_domain hogehoge hogehoge.jp www.hogehoge.jp

    cache_dir ufs /var/spool/squid 8000 32 512
    coredump_dir /var/spool/squid

    refresh_pattern . 1440 100% 1440 ignore-reload

    logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
    access_log /var/log/squid/access.log combined

    forwarded_for off
    visible_hostname unknown
    memory_pools off

    # chkconfig squid on

    # service squid start
    以下、参考リンクです。

    Wikipedia(Linux)
    Wikipedia(CentOS)
    マルチホーミング - IT用語辞典 e-Words
    キャッシュサーバ - IT用語辞典 e-Words
    ロードバランサ - IT用語辞典 e-Words


関連記事


FC2Blog Rankingblogram投票ボタンとれまが人気ブログランキングブログランキング・にほんブログ村へ
くる天 人気ブログランキングにほんブログ村 IT技術ブログ CentOSへ

テーマ : Linux
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

WING☆

Author:WING☆


カレンダー
05 | 2017/06 | 07
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 -
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
カウンター
お問い合わせ

名前:
メール:
件名:
本文:

WING☆からのお知らせ
  • CentOS 7設定集
  •    └wingリポジトリ(el7)

  • CentOS 6 x64設定集
  •    └wingリポジトリ(el6)

  • CentOS 5 x64設定集
  •    └wingリポジトリ(el5)



    My Yahoo!に追加

    FC2ブログランキング



    リンク
    ブロとも一覧
    Virtualization & Sever Maniax
    RSSリンクの表示
    QRコード
    QRコード
    ブロとも申請フォーム

    この人とブロともになる