Keepalivedデュアルプライマリipvsクラスタバックエンドnginx負荷等化を実現
4909 ワード
Keepalivedデュアルプライマリipvsクラスタバックエンドnginx負荷等化を実現
実験の準備
初期設定(1)時間同期systemctl restart chronyd(2)SELinuxとファイアウォールを閉じる(3)相互間/etc/hostsファイル相手ホスト名を追加(4)インタフェースがマルチキャスト(マルチキャスト)をサポートしていることを確認し、基本的に新しいNICがサポートされている.
じっけんけいかく
ホスト:A B C D A B Keepalived+LVSクラスタC DバックエンドRS
じっけんステップ
RSホスト構成
C D 1 RSごとにnginxサービスをインストールし、テストホームページyum-y install nginx vim/usr/share/nginx/html/index/html RS 1 2 RSごとに2つのループバックアドレスvim sets.shを構成する
bash-x setrs.sh start ip aは、RSホストごとに2つのループバックアドレスが搭載されていることを示します.
Keepalived+lvsクラスタ構成
A B yum -y install ipvsadm yum -y install keepalived vim/etc/keepalived/keepalived.conf
Systemctl stop keepalived systemctl start keepalivedこの時点でA Bの2台のホストでipvsルールが表示されます
ip aは、仮想ipがそれぞれA Bホストポート上でfor i in{1..1.10}ドリフトしていることを見ることができる.do curl http://172.16.42.200;done for i in {1..10}; do curl http://172.16.42.199;doneが返す結果は、常に最初に一致したRSホストページA Bの1つのホスト上のKeepalivedサービスを停止した場合、スケジューリングは影響を受けず、フェイルオーバー後も、同じクライアントアクセスが以前にバインドされたRSに関連付けられる
実験の準備
初期設定(1)時間同期systemctl restart chronyd(2)SELinuxとファイアウォールを閉じる(3)相互間/etc/hostsファイル相手ホスト名を追加(4)インタフェースがマルチキャスト(マルチキャスト)をサポートしていることを確認し、基本的に新しいNICがサポートされている.
じっけんけいかく
ホスト:A B C D A B Keepalived+LVSクラスタC DバックエンドRS
じっけんステップ
RSホスト構成
C D 1 RSごとにnginxサービスをインストールし、テストホームページyum-y install nginx vim/usr/share/nginx/html/index/html RS 1 2 RSごとに2つのループバックアドレスvim sets.shを構成する
#!/bin/bash
vip1=172.16.42.199
vip2=172.16.42.200
mask=255.255.255.255
iface1="lo:0"
iface2="lo:1"
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig $iface1 $vip1 netmask $mask broadcast $vip1 up
ifconfig $iface2 $vip2 netmask $mask broadcast $vip2 up
route add -host $vip1 dev $iface1
route add -host $vip2 dev $iface2
;;
stop)
ifconfig $iface1 down
ifconfig $iface2 down
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
;;
*)
echo "Usage: $(basename $0) start|stop"
exit 1
;;
esac
bash-x setrs.sh start ip aは、RSホストごとに2つのループバックアドレスが搭載されていることを示します.
Keepalived+lvsクラスタ構成
A B yum -y install ipvsadm yum -y install keepalived vim/etc/keepalived/keepalived.conf
global_defs {
notification_email {
root@localhost
}
notification_email_from ka1@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 60
vrrp_mcast_group4 224.111.111.222 ##
}
####
vrrp_instance VI_1 { ## 1
state BACKUP ## B MASTER
interface eth1
virtual_router_id 191 ## ,
priority 95
advert_int 1
authentication {
auth_type PASS
auth_pass 0702f7ab ## ,
}
virtual_ipaddress {
172.16.42.199 ## ip ,
}
}
vrrp_instance VI_2 { ## 2
state MASTER ## B BACKUP
interface eth1
virtual_router_id 192
priority 100 ## B 95
advert_int 1
authentication {
auth_type PASS
auth_pass 85c9a27b
}
virtual_ipaddress {
172.16.42.200
}
}
#### ipvs
virtual_server 172.16.42.199 80 { ## 1 ipvs
delay_loop 3
lb_algo sh ##
lb_kind DR ## dr
protocol TCP
real_server 172.16.100.216 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
real_server 172.16.250.170 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
}
virtual_server 172.16.42.200 80 { ## 2 ipvs
delay_loop 3
lb_algo sh
lb_kind DR
protocol TCP
real_server 172.16.100.216 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
real_server 172.16.250.170 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
}
Systemctl stop keepalived systemctl start keepalivedこの時点でA Bの2台のホストでipvsルールが表示されます
[root@centos nginx]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.16.42.199:80 sh
-> 172.16.100.216:80 Route 1 0 0
-> 172.16.250.170:80 Route 1 0 0
TCP 172.16.42.200:80 sh
-> 172.16.100.216:80 Route 1 0 0
-> 172.16.250.170:80 Route 1 0 0
ip aは、仮想ipがそれぞれA Bホストポート上でfor i in{1..1.10}ドリフトしていることを見ることができる.do curl http://172.16.42.200;done for i in {1..10}; do curl http://172.16.42.199;doneが返す結果は、常に最初に一致したRSホストページA Bの1つのホスト上のKeepalivedサービスを停止した場合、スケジューリングは影響を受けず、フェイルオーバー後も、同じクライアントアクセスが以前にバインドされたRSに関連付けられる