LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目在1998年5月由章文嵩博士成立,是中國國內最先出現的自由軟件項目之一。目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR)linux
本文主要介紹DR模式運用算法
DR模式是什麼?撇開lvs調度算法部分,DR模式的原理就是,將報文直接路由給目標服務器(Direct Routing),其實這裏沒有routing啥事情,叫作Direct Select更準確一些,爲何這麼說呢?由於他直接不修改數據包,他直接把數據包打包成以太網的數據幀,只是這個數據幀裏的目標MAC地址是最終的真實服務器的MAC地址,因此DR模式要求在同一個物理網段,不能跨路由。shell
當目標服務器收到這個數據幀的時候,把它解包,當服務器發現數據包的目標地址(也就是VIP)是在本地的網絡設備上(通常都是在真實服務器的lo:0上綁定一個vip地址),服務器處理這個數據包,而後根據本地路由表將響應報文直接返回給客戶vim
2.1 keepalived bash
這裏是用keepalived來進行lvs的創建和服務器和vip的健康檢查,其實keepalived就像一個shell,他自動的給你作lvs+vrrp。服務器
keepalived自己來作真實服務器的健康檢查,vrrp來作vip的冗餘。網絡
VIP:192.168.2.240負載均衡
LVS:192.168.2.210 192.168.2.211oop
Realserver: 192.168.2.212 192.168.2.213spa
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
所需軟件:keepalived
Ipvsadm(主要是管理查看做用)
# ln -s /usr/src/kernels/2.6.18-92.el5-i686 /usr/src/linux
# tar -zxvf ipvsadm-1.24.tar.gz
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
先配置 Realserver 腳本:
/opt/lvs_server.sh 192.168.2.212
#!/bin/bash # description: Config realserver VIP=192.168.2.240 /etc/rc.d/init.d/functions case "$1" in start) /sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP /sbin/route add -host $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) /sbin/ifconfig lo:0 down /sbin/route del $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
# scp /opt/lvs_server.sh root@192.168.2.213:/opt/
加入到開
vim /etc/rc.d/rc.local
/bin/bash /opt/lvs_real start
配置keepalived :
vim /etc/keepalived/keepalived.conf 192.168.2.210
! Configuration File for keepalived global_defs { notification_email { jackchengwc@gmail.com } notification_email_from jackchengwc@163.com smtp_server smtp.163.com smtp_connect_timeout 30 router_id LVS_DEVEL } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 5 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.2.240 } } virtual_server 192.168.2.240 80 { delay_loop 6 lb_algo wlc lb_kind DR persistence_timeout 60 protocol TCP real_server 192.168.2.212 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.2.213 80 { weight 3 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
# scp /etc/keepalived/keepalived.conf root@192.168.2.211:/etc/keepalived/
lvs_sync_daemon_inteface eth0 #負載均衡器之間的監控接口,相似於HA HeartBeat的心跳線。但它的機制優於Heartbeat,由於它沒有「裂腦」這個問題,它是以優先級這個機制來規避這個麻煩的。在DR模式 中,lvs_sync_daemon_inteface 與服務接口interface 使用同一個網絡接口
virtual_router_id 51 #虛擬路由標識,這個標識是一個數字,而且同一個vrrp實例使用惟一的標識。即同一個vrrp_stance,MASTER和BACKUP的virtual_router_id是一致的,同時在整個vrrp內是惟一的
mcast_src_ip 192.168.2.240
#mcast_src_ip #多播的源ip,設置爲這臺lvs的ip 好像不用也行
priority 100 #路由的優先級別,主lvs要設置的比從lvs要高
advert_int 1
authentication {
auth_type PASS #同一vrrp實例MASTER與BACKUP 使用相同的密碼才能正常通訊
auth_pass 1111
}
virtual_ipaddress {
192.168.11.240 #虛擬ip,也就是vip地址。能夠設置不少組vip
}
delay_loop 3 #健康檢查的間隔
lb_algo wlc #lvs的調度算法
lb_kind DR #lvs的調度模式
persistence_timeout 50 #鏈接保持的超時時間,保證一個用戶的鏈接老是導向到同一個服務器,當用戶第一次訪問的時候,他的訪問請求被負載均衡器轉給某個真實服務器,這樣他看到一個登錄頁面,第一次訪問完畢;接着他在登錄框填寫用戶名和密碼,而後提交;這時候,問題就可能出現了—登錄不能成功。由於沒有會話保持,負載均衡器可能會把第2次的請求轉發到其餘的服務器
#用ipvsadm -Lcn 觀察是否生效
protocol TCP
ha_suspend #禁止,vip失效的時候對真實服務器進行健康檢查(也就是說備用服務器不會去作真實服務器的健康檢查)
# ipvsadm -L -n 這個命令查看