1. 程式人生 > >LVS DR配置和keepalived+LVS

LVS DR配置和keepalived+LVS

multi dev emc nginx服務 delay all 服務器 可能 算法

LVS DR

準備工作
群集的虛擬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

dr1:192.168.1.223
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