高可用性を実現するためのKeepalived(冗長接続)とhaproxy(ロードバランサー)の組み合わせ

前回の記事では、ウェブサーバーの処理速度向上のために負荷分散を使用しました。Round robinアルゴリズムは、このウェブサーバーがダウンした場合に他のウェブサーバーを使用する冗長接続のように見えます。しかし、負荷分散の主な目的は依然としてウェブサーバーの安定性を確保することです。この記事では、ウェブサーバーのダウン時に他のサーバーを利用する冗長接続を設定します。

以下は冗長接続と負荷分散の設定方法です。

準備要件:

  • Web Server 1
    OS: CentOS 7 + Nginx + haproxy + keepalived
    IP web server: 192.168.1.129:8080
    IP haproxy: 192.168.1.129:80
  • Web Server 2
    OS: CentOS 6+ Nginx + haproxy + keepalived
    IP web server: 192.168.1.128:8080
    IP haproxy: 192.168.1.128:80

設定:

Keepalivedのインストールは両方のWebサーバーで次のコマンドを使用します: yum install keepalived

Keepalivedサービスは、仮想IPアドレスを作成し、サーバーに割り当てられたインターフェースのIP(あるDHCPサービスによって提供されるか、ユーザーが割り当てるIP)ではなく、Keepalivedによって定義されたIPを使用します。このためには、/etc/sysctl.conf ファイルに以下の行を追加または編集する必要があります: net.ipv4.ip_nonlocal_bind=1

Webサーバーの設定:: 

Webサーバー1:

Webサーバー1では /etc/keepalived/keepalived.conf ファイルを以下のように設定します:


global_defs {
router_id test1 #khai báo route_id của keepalived
}
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance VI_1 {
virtual_router_id 51
advert_int 1
priority 100
state MASTER
interface ens33 #thông tin tên interface của server, bạn dùng lệnh `ifconfig` để xem và điền cho đúng
virtual_ipaddress {
192.168.1.69 dev ens33 #Khai báo Virtual IP cho interface tương ứng
}
authentication {
auth_type PASS
auth_pass 123456 #Password này phải khai báo giống nhau giữa các server keepalived
}
track_script {
chk_haproxy
}
}

Webサーバー2:

Webサーバー2では /etc/keepalived/keepalived.conf ファイルを以下のように設定します:


global_defs {
router_id test2 #khai báo route_id của keepalived
}
vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance VI_1 {
virtual_router_id 51
advert_int 1
priority 99
state BACKUP
interface eth0 #thông tin tên interface của server, bạn dùng lệnh `ifconfig` để xem và điền cho đúng
virtual_ipaddress {
192.168.1.69 dev eth0 #Khai báo Virtual IP cho interface tương ứng
}
authentication {
auth_type PASS
auth_pass 123456 #Password này phải khai báo giống nhau giữa các server keepalived
}
track_script {
chk_haproxy
}
}

両方のテストサーバー(test1とtest2)のKeepalived設定ファイルには、トラックスクリプトが含まれています。これは、両方のサーバーが指定されたプロセスID(ここではhaproxyサービスの確認)の状態を監視するスクリプトを実行することを意味します。例えば、初期状態でpriority 100でMASTER状態で起動されたtest1のhaproxyサービスがなぜか動作しなくなった場合、Keepalivedはtest1の優先度を減少させます(100-2=98)。その結果、test1の優先度は98となり、初期設定で99と宣言されているtest2の優先度より低くなります。このため、Keepalivedはtest2の状態をBACKUPからMASTERに変更し、test2が宣言されているVIPを保持します。

Config haproxy Web Server 1:

global
daemon
maxconn 256

defaults
 mode http
 timeout connect 5000ms
 timeout client 50000ms
 timeout server 50000ms

 stats enable
 stats hide-version
 stats refresh 30s
 stats show-node
 stats auth admin:123456
 stats uri /haproxy?stats
frontend http-in
 bind *:80
 default_backend servers

backend static
 balance roundrobin
 server static 192.168.1.69:80

backend servers
 balance roundrobin
 server webserver1 192.168.1.128:8080 check
 server webserver2 192.168.1.129:8080 check

Config haproxy Web Server 2:

global
daemon
maxconn 256

defaults
 mode http
 timeout connect 5000ms
 timeout client 50000ms
 timeout server 50000ms

 stats enable
 stats hide-version
 stats refresh 30s
 stats show-node
 stats auth admin:123456
 stats uri /haproxy?stats
frontend http-in
 bind *:80
 default_backend servers

backend static
 balance roundrobin
 server static 192.168.1.69:80

backend servers
 balance roundrobin
 server webserver1 192.168.1.128:8080 check
 server webserver2 192.168.1.129:8080 check

CentOS 6では、service keepalived start コマンドを使用し、CentOS 7では、systemctl start keepalived コマンドを使用してKeepalivedを起動します。haproxyを順次シャットダウンして結果を確認してください。.

Bài viết liên quan