HAProxy+keepalived でwebサーバを負荷分散

HAProxy とは

前回、LVS + keepalived で負荷分散構成を作成したが、LVS は「Layer 4:トランスポート層」で動作するのに対して
HAProxy は「Layer 7:アプリケーション層」もしくは「Layer 4:トランスポート層」で動作させることができる。

※構築がメインのため、説明はしない。以下参照。
1.2. haproxy Red Hat Enterprise Linux 7 | Red Hat Customer Portal

構成

以下、画像の構成で構築する。
f:id:Tryota:20201203212155p:plain

  • 踏み台サーバ

 OS:CentOS8

  • ロードバランサ

 OS:CentOS8
 冗長化keepalived
 負荷分散:HAProxy

  • webサーバ

 OS:CentOS8
 ソフトウェア:Apache

※踏み台サーバ・webサーバは構築済みとする。

ロードバランサ の構築

keepalived の設定

インストール

[root@haproxy01 ~]# dnf install -y keepalived

設定

[root@haproxy01 ~]# cd /etc/keepalived/
[root@haproxy01 keepalived]# mv keepalived.conf keepalived.conf.orig
[root@haproxy01 keepalived]# vim keepalived.conf
! Configuration File for keepalived

global_defs {
   router_id HAProxy_server
}

vrrp_instance VI_1 {
    state MASTER
 # VRRPパケットを受信・送信するインタフェース
    interface enp0s8
    virtual_router_id 100
 #1号機と2号機で数値を変える(activeにしたい方を大きくする)
    priority 100    
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass password
    }
    virtual_ipaddress {
        192.168.0.200 dev enp0s8
        172.16.0.200 dev enp0s9
    }
}

サービスの起動

[root@haproxy01 ~]# systemctl start keepalived.service
[root@haproxy01 ~]# systemctl enable keepalived.service

HAProxy の設定

インストール

[root@haproxy01 ~]# dnf install -y haproxy

設定

[root@haproxy01 ~]# cd /etc/haproxy/
[root@haproxy01 haproxy]# mv haproxy.cfg haproxy.cfg.orig
[root@haproxy01 haproxy]# vim haproxy.cfg
#---------------------------------------------------------------------
# main frontend which proxys to the backends
#---------------------------------------------------------------------
frontend http-in
        #80/tcp ポートで受け付ける
        bind *:80
        #バックエンドを定義
        default_backend backend_server
        #X-Forwarded-For ヘッダーを渡す
        option          forwardfor
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
#---------------------------------------------------------------------
backend backend_server
        #ラウンドロビン方式で負荷分散
        balance roundrobin
        #バックエンドサーバを定義
        server  node1   172.16.0.11:80  check    #[check]オプションにより、バックエンドサーバの死活監視を行う
        server  node2   172.16.0.12:80  check

サービスの起動

[root@haproxy01 ~]# systemctl start haproxy.service
[root@haproxy01 ~]# systemctl enable haproxy.service

firewalld の無効化

[root@haproxy01 haproxy]# systemctl stop firewalld.service
[root@haproxy01 haproxy]# systemctl disable firewalld.service

負荷分散の検証

踏み台サーバからロードバランサのVIPへHTTPリクエストを送信

[root@bastion ~]# curl 192.168.0.200
 test_web01
[root@bastion ~]# curl 192.168.0.200
test_web02

負荷分散されていた。