LVS+Keepalivedデュアルプライマリモデルの実装
9068 ワード
トポロジー:
Client
LVS1
LVS2
RS1
RS2
192.168.2.1
DIP 192.168.2.128 VIP 192.168.2.198
DIP 192.168.2.129 VIP 192.168.2.199
192.168.2.130
192.168.2.131
デュアルプライマリモデルを実装するには、2つの仮想ルータグループを構成する必要があります.つまり、ホストごとに2つのvrrp_を構成する必要があります.Instance,各仮想インタフェースは仮想IPを構成し,LVS 1とLVS 2の同じグループvirtual_router_id内は互いに主備であり、ここでVRRPの実現原理を見ることができるか、あるいは後で構成情報を見ることができるかが分からない場合、RS 1とRS 2はデュアルプライマリモードで2組のルーティングを構成する必要があり、VIP 1からの要求を受け取ってlo:0のNIC処理に渡し、VIP 2からの要求を受け取ってlo:1のNIC処理に渡す
上の設定:
ここでLVS+keepalivedの二重主モデルは完成し,試験により,LVS 1とLVS 2に異常がない場合に同時に正常に動作するDNSホイールループを得ることができる.2、LVS 1或いはいずれかのダウンタイムの時、フローティングIPは別のホストに漂って、2つのVIPはすべて依然として正常に動作する3、NGINXのいずれかのTCP 80ポートの4層が正常でないことを検出する時、keepalivedは自動的にそれを規則から削除して、逆に自動的に4を追加して、NGINXが同時にすべてダウンタイムする時、keepalivedは一時的にsorry server 5を提供して、vipが変更されるとkeepalivedは管理者に自動的にメールを送信します
set_lvs_rs.shスクリプトの内容:
notify.shスクリプトの内容:
Client
LVS1
LVS2
RS1
RS2
192.168.2.1
DIP 192.168.2.128 VIP 192.168.2.198
DIP 192.168.2.129 VIP 192.168.2.199
192.168.2.130
192.168.2.131
デュアルプライマリモデルを実装するには、2つの仮想ルータグループを構成する必要があります.つまり、ホストごとに2つのvrrp_を構成する必要があります.Instance,各仮想インタフェースは仮想IPを構成し,LVS 1とLVS 2の同じグループvirtual_router_id内は互いに主備であり、ここでVRRPの実現原理を見ることができるか、あるいは後で構成情報を見ることができるかが分からない場合、RS 1とRS 2はデュアルプライマリモードで2組のルーティングを構成する必要があり、VIP 1からの要求を受け取ってlo:0のNIC処理に渡し、VIP 2からの要求を受け取ってlo:1のNIC処理に渡す
上の設定:
########################### LVS1 #########################
yum install nginx -y
echo " , ..' > /usr/share/nginx/html/index.html
systemctl start nginx
! Configuration File for keepalived
global_defs { ## , , , keepalive zabbix
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node1 ## ,
vrrp_mcast_group4 224.0.0.112 ##
}
### IP
vrrp_instance VI_1 {
state MASTER # MASTER | BACKUP
interface eno16777736 ## ip
virtual_router_id 31 ## id,
priority 100 ##
advert_int 1 ## , 1s
# nopreempt ##
authentication {
auth_type PASS
auth_pass f1GDsVH6 ##VRRP , vip
}
virtual_ipaddress {
192.168.2.198/24 dev eno16777736 label eno16777736:1 ## vip
}
notify_master "/etc/keepalived/scripts/notify.sh master" ## master
notify_backup "/etc/keepalived/scripts/notify.sh backup" ## backup
notify_fault "/etc/keepalived/scripts/notify.sh fault" ##
}
vrrp_instance VI_2 {
state BACKUP
interface eno16777736
virtual_router_id 32
priority 98
advert_int 1
# nopreempt
authentication {
auth_type PASS
auth_pass f1GDsV78
}
virtual_ipaddress {
192.168.2.199/24 dev eno16777736 label eno16777736:2
}
notify_master "/etc/keepalived/scripts/notify.sh master" ## master
notify_backup "/etc/keepalived/scripts/notify.sh backup" ## backup
notify_fault "/etc/keepalived/scripts/notify.sh fault" ##
}
### LVS
## , VIP , LVS2 ,LVS2 IP , LVS1 192.168.2.199 , LVS2 192.168.2.198
virtual_server 192.168.2.198 80 {
delay_loop 1
lb_algo wlc
lb_kind DR
# persistence_timeout 300
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.2.130 80{
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 1
nb_get_retry 2
delay_before_retry 1
}
}
real_server 192.168.2.131 80{
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 1
nb_get_retry 2
delay_before_retry 1
}
}
}
virtual_server 192.168.2.199 80 {
delay_loop 1
lb_algo wlc
lb_kind DR
# persistence_timeout 300
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.2.130 80{
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 1
nb_get_retry 2
delay_before_retry 1
}
}
real_server 192.168.2.131 80{
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 1
nb_get_retry 2
delay_before_retry 1
}
}
}
########################### LVS2 #########################
yum install nginx -y
echo " , ..' > /usr/share/nginx/html/index.html
systemctl start nginx
! Configuration File for keepalived
global_defs { ## , , , keepalive zabbix
notification_email {
root@localhost
}
notification_email_from keepalived@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id node2 ## ,
vrrp_mcast_group4 224.0.0.112 ##
}
vrrp_instance VI_1 {
state BACKUP # MASTER | BACKUP
interface eno16777736 ## ip
virtual_router_id 31 ## id,
priority 98 ##
advert_int 1 ## , 1s
# nopreempt ##
authentication {
auth_type PASS
auth_pass f1GDsVH6 ##VRRP , vip
}
virtual_ipaddress {
192.168.2.198/24 dev eno16777736 label eno16777736:1 ## vip
}
notify_master "/etc/keepalived/scripts/notify.sh master" ## master
notify_backup "/etc/keepalived/scripts/notify.sh backup" ## backup
notify_fault "/etc/keepalived/scripts/notify.sh fault" ##
}
vrrp_instance VI_2 {
state MASTER
interface eno16777736
virtual_router_id 32
priority 100
advert_int 1
# nopreempt
authentication {
auth_type PASS
auth_pass f1GDsV78
}
virtual_ipaddress {
192.168.2.199/24 dev eno16777736 label eno16777736:2
}
notify_master "/etc/keepalived/scripts/notify.sh master" ## master
notify_backup "/etc/keepalived/scripts/notify.sh backup" ## backup
notify_fault "/etc/keepalived/scripts/notify.sh fault" ##
}
virtual_server 192.168.2.198 80 {
delay_loop 1
lb_algo wlc
lb_kind DR
# persistence_timeout 300
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.2.130 80{
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 1
nb_get_retry 2
delay_before_retry 1
}
}
real_server 192.168.2.131 80{
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 1
nb_get_retry 2
delay_before_retry 1
}
}
}
virtual_server 192.168.2.199 80 {
delay_loop 1
lb_algo wlc
lb_kind DR
# persistence_timeout 300
protocol TCP
sorry_server 127.0.0.1 80
real_server 192.168.2.130 80{
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 1
nb_get_retry 2
delay_before_retry 1
}
}
real_server 192.168.2.131 80{
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 1
nb_get_retry 2
delay_before_retry 1
}
}
}
######################## RS1 ########################
yum install nginx -y
echo "192.168.2.130' > /usr/share/nginx/html/index.html
systemctl start nginx
## set_lvs_rs.sh
bash set_lvs_rs.sh start
######################## RS2 ########################
yum install nginx -y
echo "192.168.2.131' > /usr/share/nginx/html/index.html
systemctl start nginx
## set_lvs_rs.sh
bash set_lvs_rs.sh start
ここでLVS+keepalivedの二重主モデルは完成し,試験により,LVS 1とLVS 2に異常がない場合に同時に正常に動作するDNSホイールループを得ることができる.2、LVS 1或いはいずれかのダウンタイムの時、フローティングIPは別のホストに漂って、2つのVIPはすべて依然として正常に動作する3、NGINXのいずれかのTCP 80ポートの4層が正常でないことを検出する時、keepalivedは自動的にそれを規則から削除して、逆に自動的に4を追加して、NGINXが同時にすべてダウンタイムする時、keepalivedは一時的にsorry server 5を提供して、vipが変更されるとkeepalivedは管理者に自動的にメールを送信します
set_lvs_rs.shスクリプトの内容:
#!/bin/bash
#
vip1='192.168.2.198'
vip2='192.168.2.199'
mask='255.255.255.255'
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 lo:0 $vip1 netmask $mask broadcast $vip1 up
ifconfig lo:1 $vip2 netmask $mask broadcast $vip2 up
route add -host $vip1 dev lo:0
route add -host $vip2 dev lo:1
;;
stop)
ifconfig lo:0 down
ifconfig lo:1 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
notify.shスクリプトの内容:
[root@node2 scripts]# cat notify.sh
#!/bin/bash
#
contact='root@localhost'
notify() {
local mailsubject="$(hostname) to be $1, vip floating"
local mailbody="$(date +'%F %T'): vrrp transition, $(hostname) changed to be $1"
echo "$mailbody" | mail -s "$mailsubject" $contact
}
case $1 in
master)
notify master
;;
backup)
notify backup
;;
fault)
notify fault
;;
*)
echo "Usage: $(basename $0) {master|backup|fault}"
exit 1
;;
esac