實驗環(huán)境
VIP:172.16.80.201
VS1:172.16.80.101
VS2:172.16.80.103
RS1:172.16.80.100
RS2:172.16.80.102
操作系統(tǒng)CentOS龙助。
VS1和VS2之間通過keepalived實現(xiàn)高可用的ipvs集群葱椭。后端RS1和RS2運行Nginx服務(wù)顽聂。
VS1和VS2配置
一、通過keepalived實現(xiàn)高可用
1绷跑、安裝keepalived
[root@VS1 ~]#yum install keepalived ipvsadm -y
[root@VS2 ~]#yum install keepalived ipvsadm -y
2、配置VRRP實例,VS1為master坷备,VS2為backup。
VS1配置:
[root@VS1 ~]#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
root@localhost
}
notification_email_from keadmin@localhost
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id CentOS7A.luo.com
vrrp_mcast_group4 224.0.0.22
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 150
advert_int 1
authentication {
auth_type PASS
auth_pass haha
}
virtual_ipaddress {
172.16.80.201/16
}
}
VS2配置
[root@VS2 ~]#vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs { <==全局配置段開始
notification_email {
root@localhost <==故障郵件的收件人
}
notification_email_from keadmin@localhost <==故障郵件的發(fā)件人
smtp_server 127.0.0.1 <==故障郵件的發(fā)件服務(wù)器
smtp_connect_timeout 30
router_id CentOS7B.luo.com <==路由器ID
vrrp_mcast_group4 224.0.0.22 <==組播地址
} <==全局配置段結(jié)束
vrrp_instance VI_1 { <==實例名字為VI_1氧秘,備節(jié)點的實例名字要和主節(jié)點的相同
state BACKUP <==狀態(tài)為backup
interface ens33 <==通信的接口
virtual_router_id 51 <==實例ID
priority 100 <==優(yōu)先級
advert_int 1 <==通信檢查時間間隔
authentication {
auth_type PASS <==認(rèn)證類型
auth_pass haha <==認(rèn)證密碼
}
virtual_ipaddress {
172.16.80.201/16 <==虛擬IP
}
}
配置完后年鸳,啟動VS1和VS2的keepalived
這里我們關(guān)停VS1的keepalived服務(wù)器模仿VS1故障,此時就能看到VIP漂移到VS2去了:
二丸相、通過keepalived實現(xiàn)lvs調(diào)度
以上我們實現(xiàn)通過keepalived實現(xiàn)了ip漂移搔确,接下來我們可以通過keepalived配置lvs調(diào)度。當(dāng)客戶端訪問虛擬ip 172.16.80.201時灭忠,我們可以把客戶端的請求調(diào)度到后端的RS1和RS2去膳算。
在/etc/keepalived/keepalived.conf文件內(nèi),添加virtual_server模塊
[root@VS1 ~]#vim /etc/keepalived/keepalived.conf
virtual_server 172.16.80.201 80 { <==虛擬IP地址
delay_loop 3
lb_algo rr <==調(diào)度方法
lb_kind DR <==調(diào)度類型DR
protocol TCP
real_server 172.16.80.100 80 { <==RS1服務(wù)器
weight 1 <==權(quán)重
HTTP_GET { <==檢查后端服務(wù)狀態(tài)
url {
path /
status_code 200 <==如果后端RS服務(wù)器返回200狀態(tài)碼弛作,則表示正常
}
connect_timeout 1 <==連接超時時間
nb_get_retry 3
delay_before_retry 1
}
}
real_server 172.16.80.102 80 { <==RS2服務(wù)器
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 1
nb_get_retry 3
delay_before_retry 1
}
}
}
VS2配置與VS1的配置一樣涕蜂。保存配置后重啟VS1和VS2的keepalived服務(wù)。
可以看到映琳,調(diào)度配置已完成机隙。
RS1和RS2配置
1、安裝Nginx
[root@RS1 ~]#yum install nginx -y
[root@RS2 ~]#yum install nginx -y
2萨西、配置訪問頁面有鹿,并啟動RS1和RS2的Nginx服務(wù)
[root@RS1 ~]#vim /usr/share/nginx/html/index.html
RS1 172.16.80.100
[root@RS2 ~]#vim /usr/share/nginx/html/index.html
RS2 172.16.80.102
客戶端訪問RS1和RS2效果如下:
3、配置RS
編寫腳本lvs_dr.sh 谎脯,該腳本可以設(shè)置內(nèi)核參數(shù)以及vip信息葱跋。
[root@RS1 bin]#vim lvs_dr.sh
#!/bin/bash
vip=172.16.80.201
mask=255.255.255.255
iface="lo:0"
case $1 in
start)
ifconfig $iface $vip netmask $mask broadcast $vip up
route add -host $vip dev $iface
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
;;
stop)
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
ifconfig $iface down
;;
*)
echo "Usage:$(basename $0) start|stop"
exit 1
;;
esac
[root@RS1 bin]#chmod u+x lvs_dr.sh
[root@RS1 bin]#bash -x lvs_dr.sh start
+ vip=172.16.80.201
+ mask=255.255.255.255
+ iface=lo:0
+ case $1 in
+ ifconfig lo:0 172.16.80.201 netmask 255.255.255.255 broadcast 172.16.80.201 up
+ route add -host 172.16.80.201 dev lo:0
+ echo 1
+ echo 1
+ echo 2
+ echo 2
驗證
當(dāng)用戶訪問http://172.16.80.201時,VS服務(wù)器輪詢方式調(diào)度到后端的RS服務(wù)器穿肄。
當(dāng)VS其中一臺服務(wù)器宕機(jī)年局,另一臺VS可以迅速接管172.16.80.201的功能。從而實現(xiàn)了高可用咸产。