LVS DR配置和keepalived+LVS
準備工作
群集的虛擬VIP:192.168.1.222
dir分發器:192.168.1.220
rs1:192.168.1.223
rs2:192.168.1.234
rs1和rs2安裝需要的web服務
[root@localhost src]# yum install -y nginx
在dir上安裝ipvsadm,並配置路由轉發和ipvsadm轉發
#! /bin/bash echo 1 > /proc/sys/net/ipv4/ip_forward ipv=/usr/sbin/ipvsadm vip=192.168.1.222 rs1=192.168.1.234 rs2=192.168.1.223 ifdown ens33 ifup ens33 ? ? #重啟網卡是為了清除原有的配置信息 #將虛擬ip配置到ens33的虛擬網口上,並指定vip的數據網關 ifconfig ens33:2 $vip broadcast $vip netmask 255.255.255.255 up route add -host $vip dev ens33:2 #清除ipvsadm原有的配置,配置對應的群集web主機的ip和端口.rs配置一個主機ip對應群集的vip(虛擬ip) $ipv -C $ipv -A -t $vip:80 -s wrr $ipv -a -t $vip:80 -r $rs1:80 -g -w 1 $ipv -a -t $vip:80 -r $rs2:80 -g -w 1
為了讓處理完的數據直接通過群集的vip返回給客戶端,不再經過dir分發器,減少了分發器的處理壓力。rs1和rs2上也需要配置群集vip,並開啟路由轉發,數據通過lo:0的虛擬VIP直接響應客戶端的數據請求
#!/bin/bash vip=192.168.1.222 ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up ifdoen lo ifup lo route add -host $vip lo:0 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
測試訪問群集的vip。分發器會按照輪詢算法來分配給後端web服務器處理
在windows瀏覽器中訪問時會有等待時間。等待一會刷新就可以驗證到不同主機的訪問了(web服務器提供不同的首頁內容來加以判斷)
keepalived+LVS負載均衡
為什麽需要keepalived+LVS的結構
在使用lvs分發數據時,lvs分發點是單一的,一但分發器故障的話會導致整個後端web無法訪問。並且如果後端如果web服務器發生故障,LVS同樣會把請求交給這臺故障的服務器IP。但是這樣的話會無法完成這次訪問請求,因為分發到的web服務器不可能去響應這個請求
keepalived+lvs ?準備工作
dir分發器:192.168.1.220
dr2:192.168.1.234
群集使用的VIP:192.168.1.200
在dir分發器上安裝keepalived
如果有兩臺以上的keepalived。那麽就需要配置高可用,這裏沒有配置高可用服務
[root@localhost src]# vim /etc/keepalived/keepalived.conf
vrrp_instance VI_1 {
? ?#備用服務器上為 BACKUP
? state MASTER
? ?#綁定vip的網卡為ens33,你的網卡和阿銘的可能不一樣,這裏需要你改一下
? interface ens33
? virtual_router_id 51
? ?#備用服務器上為90
? priority 100
? advert_int 1
? authentication {
? ? ? auth_type PASS
? ? ? auth_pass aminglinux
? }
? virtual_ipaddress {
? ? ? ?192.168.1.200 ? ? ? #指定虛擬ip的配置
? }
}
virtual_server 192.168.1.200 80 { ?#指定虛擬ip的配置,並指定訪問端口
? ?#(每隔10秒查詢realserver狀態) ?
? delay_loop 10
? ?#(lvs 算法)
? lb_algo wlc
? ?#(DR模式)
? lb_kind DR
? ?#(同一IP的連接60秒內被分配到同一臺realserver)
? persistence_timeout 60
? ?#(用TCP協議檢查realserver狀態)
? protocol TCP
? real_server 192.168.1.223 80 {
? ? ? ?#(權重)
? ? ? weight 100
? ? ? TCP_CHECK {
? ? ? ?#(10秒無響應超時)
? ? ? connect_timeout 10
? ? ? nb_get_retry 3
? ? ? delay_before_retry 3
? ? ? connect_port 80
? ? ? }
? }
? real_server 192.168.1.234 80 {
? ? ? weight 100
? ? ? TCP_CHECK {
? ? ? connect_timeout 10
? ? ? nb_get_retry 3
? ? ? delay_before_retry 3
? ? ? connect_port 80
? ? ? }
? ? }
}
在分發器上開啟路由轉發功能,讓請求數據轉發到後端的web server上,由web server去處理請求
echo 1 > /proc/sys/net/ipv4/ip_forward
rs1和rs2上的路由轉發:在後端的web server上開啟路由轉發,且配置虛擬ip地址,讓處理後返回的數據直接通過配置的vip響應給客戶端
#!/bin/bash
vip=192.168.1.200
ipdown lo
ipup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
清除之前測試產生的ipvsadm配置,然後啟動keepalived服務,註意這裏是單臺keepalived,配置高可用需要兩臺及以上的數量
[root@localhost src]# ipvsadm -C
[root@localhost src]# systemctl restart keepalived
[root@localhost src]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
?-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.1.220:80 wlc persistent 60
?-> 192.168.1.223:80 Route 100 0 0 ? ? ? ?
?-> 192.168.1.234:80 Route 100 0 0 ?
清除分發服務器上公網網口的虛擬ip或其他配置,然後啟動keepalived服務並查看網卡上的虛擬ip是否存在
[root@localhost src]# ifdown ens33 && ifup ens33
Device ‘ens33‘ successfully disconnected.
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@localhost src]# systemctl restart keepalived
[root@localhost src]# ip a
lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
? link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
? inet 127.0.0.1/8 scope host lo
? ? ? valid_lft forever preferred_lft forever
? inet6 ::1/128 scope host
? ? ? valid_lft forever preferred_lft forever
ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
? link/ether 00:0c:29:e2:85:91 brd ff:ff:ff:ff:ff:ff
? inet 192.168.1.220/24 brd 192.168.1.255 scope global ens33
? ? ? valid_lft forever preferred_lft forever
? inet 192.168.1.200/32 scope global ens33 ? ? ? ? ? ? ? <-------1.200是配置的虛擬ip
? ? ? valid_lft forever preferred_lft forever
? inet6 fe80::1e68:a845:d31f:1bbc/64 scope link
? ? ? valid_lft forever preferred_lft forever
?web server啟動nginx服務, 在瀏覽器中進行訪問測試
暫停一個web server的服務,並在分發服務器上查看ipvsadm的配置,是否剔除掉了故障的服務器
LVS DR配置和keepalived+LVS