前回の記事では、ウェブサーバーの処理速度向上のために負荷分散を使用しました。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
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
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を順次シャットダウンして結果を確認してください。.