Keepalived + LVS 實現負載均衡
1、Keepalived 管理LVS負載均衡軟件,Keepalived 可以通過讀取自身的配置文件,實現通過更底層的接口直接管理LVS的配置以及控制服務的啟動、停止等功能,這使用LVS的應用更加簡單方便了。
2、Keepalived 實現對LVS集群節點健康檢查功能,當LVS集群中的某一個甚至是幾個節點服務器同時發生故障無法提供服務時,Keepalived 服務會自動將失效的節點服務器從LVS 的正常轉發隊列中清除出去,並將請求調度到別的正常節點服務器上,從而保證最終用戶的訪問不受影響,並且故障恢復時,又可以加到正常轉發隊列中。
3、Keepalived 作為系統網絡服務的高可用功能,可以實現任意兩臺主機之間的故障轉移和自動切換。
4、LVS 負責數據轉發,基於第層網絡傳輸層,使用ARP協議,修改目的地MAC地址,實現數據的高速轉發,相對於NGINX的第七層轉發,有一定的優勢。
二、實現拓撲圖
三、實驗步驟
1、分別設置好各臺主機的IP地址,如:
主機-負載均衡:10.3.150.196
備機-負載均衡:10.3.150.197
web01:10.3.150.198
web02:10.3.150.199
2、在兩臺web主機裏,分別設置綁定 Local Loopback IP地址(VIP:10.3.150.200)
[root@web01 ~]# vi /etc/init.d/realserver
#!/bin/bash # # realserver # # chkconfig: 2345 24 76 # description: realserver ip SNS_VIP=10.3.150.200 /etc/rc.d/init.d/functions case "$1" in start) ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP /sbin/route add -host $SNS_VIP dev 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 sysctl -p >/dev/null 2>&1 echo "RealServer Start OK" ;; stop) ifconfig lo:0 down route del $SNS_VIP >/dev/null 2>&1 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Stoped" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0
[root@web01 ~]# chmod +x /etc/init.d/realserver
[root@web01 ~]# chkconfig --add /etc/init.d/realserver
[root@web01 ~]# chkconfig realserver on
[root@web01 ~]# /etc/init.d/realserver start
3、檢查web服務器綁定local loopback ip 是否正常。
[root@web01 ~]# ifconfig eth1 Link encap:Ethernet HWaddr 00:50:56:AA:51:29 inet addr:10.3.150.198 Bcast:10.3.150.255 Mask:255.255.255.0 inet6 addr: fe80::250:56ff:feaa:5129/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:52847 errors:0 dropped:0 overruns:0 frame:0 TX packets:3322 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:4160205 (3.9 MiB) TX bytes:272504 (266.1 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:80 errors:0 dropped:0 overruns:0 frame:0 TX packets:80 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:5200 (5.0 KiB) TX bytes:5200 (5.0 KiB) lo:0 Link encap:Local Loopback inet addr:10.3.150.200 Mask:255.255.255.255 UP LOOPBACK RUNNING MTU:65536 Metric:1
4、配置主機-負載均衡的keepalived.conf配置文件
! Configuration File for keepalived
global_defs {
notification_email {
[email protected]
}
notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id lb01
}
vrrp_instance VI_1 {
state MASTER #指定Keepalived角色,MASTER為主
interface eth1 #Keepalived 綁定的網絡
virtual_router_id 53 #虛擬路由編號,主備必須要一致
priority 150 #定義優先級,數字越大,優先級越高
advert_int 1
authentication {
auth_type PASS
auth_pass 3333
}
virtual_ipaddress {
10.3.150.200/24 dev eth1 label eth1:1 #定義虛擬IP(VIP)為10.3.150.200
}
}
# 定義對外提供服務的LVS的VIP以及port
virtual_server 10.3.150.200 80 {
delay_loop 6 # 設置健康檢查時間,單位是秒
lb_algo wrr # 設置負載調度的算法為wlc
lb_kind DR # 設置LVS實現負載的機制,有NAT、TUN、DR三個模式
nat_mask 255.255.255.0
persistence_timeout 0
protocol TCP
real_server 10.3.150.198 80 { # 指定real server1的IP地址
weight 3 # 配置節點權值,數字越大權重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.3.150.199 80 { # 指定real server2的IP地址
weight 3 # 配置節點權值,數字越大權重越高
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
5、配置備機-負載均衡的keepalived.conf配置文件
與主機-負載均衡一致,只需修改以下兩處:
1、state MASTER 改為 state BACKUP
2、priority 150 改為 priority 100
6、啟動兩臺負載均衡的keepalived服務
[root@lb01 keepalived]# service keepalived start
在主機-負載均衡器上,查看是否獲取了VIP(10.3.150.200)
[root@lb01 keepalived]# ifconfig
eth1 Link encap:Ethernet HWaddr 00:50:56:AA:B1:25
inet addr:10.3.150.196 Bcast:10.3.150.255 Mask:255.255.255.0
inet6 addr: fe80::250:56ff:feaa:b125/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:89077 errors:0 dropped:0 overruns:0 frame:0
TX packets:14028 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:7242746 (6.9 MiB) TX bytes:982746 (959.7 KiB)
eth1:1 Link encap:Ethernet HWaddr 00:50:56:AA:B1:25
inet addr:10.3.150.200 Bcast:0.0.0.0 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:80 errors:0 dropped:0 overruns:0 frame:0
TX packets:80 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:5120 (5.0 KiB) TX bytes:5120 (5.0 KiB)
四、驗證故障切換是否成功
1、訪問VIP,是否能正常訪問得到web01和web02的內容(web01和web02為不一致的靜態文件內容,以方便區別,檢查是否生效)。
2、停止web01服務,訪問VIP,看是否還能正常訪問web02的內容,同時又不會提示web01無法訪問的錯誤信息,因LVS能做端口健康檢查。
3、啟動web01,訪問VIP,是否可以同時訪問web01和web02的內容。
4、停止lb01主機-負載均衡的keepalived服務,檢查VIP是否漂移到備機-負載負載器的主機上,同時訪問VIP,是否正常訪問web01與web02的內容。
5、啟動lb01主機-負載均衡的keepalived服務,檢查VIP是否漂移到主機-負載均衡器,同時訪問VIP,是否能正常訪問web01與web02的內容。
Keepalived + LVS 實現負載均衡