具體解釋參考:http://www.linuxvirtualserver.org/zh/lvs4.html html
基於LVS+Keepalived實現的LVS羣集結構中,至少包括兩臺熱備的負載調度器,兩臺以上的節點服務器,以DR模式的LVS羣集爲基礎,增長一臺從負載調度器,使用Keepalived來實現主、從調度器的熱備,從而構建建有負載均衡、高可用兩種能力的LVS網站羣集平臺。
IPVS實現負載均衡機制有三種:
VS/TUN :即(Virtual Server via IP Tunneling)
也就是IP隧道技術實現虛擬服務器。它的鏈接調度和管理與VS/NAT方式同樣,只是它的報文轉發方法不一樣,VS/TUN方式中,調度器採用IP隧道技術將用戶請求轉發到某個Real Server,而這個Real Server將直接響應用戶的請求,再也不通過前端調度器,此外,對Real Server的地域位置沒有要求,能夠和Director Server位於同一個網段,也能夠是獨立的一個網絡。所以,在TUN方式中,調度器將只處理用戶的報文請求,集羣系統的吞吐量大大提升。
NAT(Network Address Translation)是一種外網和內網地址映射的技術。NAT模式下, 網絡數據報的進出都要通過LVS的處理。LVS須要做爲RS(真實服務器)的網關。當包到達LVS時,LVS作目標地址轉換(DNAT),將目標IP改成 RS的IP。RS接收到包之後,彷彿是客戶端直接發給它的同樣。RS處理完,返回響應時,源IP是RS IP,目標IP是客戶端的IP。這時RS的包經過網關(LVS)中轉,LVS會作源地址轉換(SNAT),將包的源地址改成VIP,這樣,這個包對客戶端 看起來就彷彿是LVS直接返回給它的。客戶端沒法感知到後端RS的存在。前端
VS/DR: 即(Virtual Server via Direct Routing)
也就是用直接路由技術實現虛擬服務器。它的鏈接調度 和管理與VS/NAT和VS/TUN中的同樣,但它的報文轉發方法又有不一樣,VS/DR經過改寫請求報文的MAC地址,將請求發送到Real Server,而Real Server將響應直接返回給客戶,免去了VS/TUN中的IP隧道開銷。這種方式是三種負載調度機制中性能最高最好的,可是必需要求Director Server與Real Server都有一塊網卡連在同一物理網段上。linux
lvs支持8種不一樣的調度算法:web
經過LVS+Keepalived構建的LVS集羣,LVS負載均衡用戶請求到後端RS服務器,Keepalived的做用是檢測web服務器的狀態,若是有一臺RS 服務器死機,或工做出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工做正常後Keepalived自動將web服務器加入到服務器羣中,這些工做所有自動完成,不須要人工干涉,須要人工作的只是修復故障的web服務器。
keepalived能夠實現服務的高可用或熱備,用來防止單點故障的問題;而Keepalived的核心VRRP協議,VRRP協議主要實現了在路由器或三層交換機處的冗餘;Keepalived就是使用VRRP協議來實現高可用的;
Keepalived啓動後會有三個進程:
父進程:內存管理,子進程管理
子進程:VRRP子進程
子進程:healthchecker子進程
高可用集羣構建前提:
1.proxy和proxy2節點時間必須同步;
192.168.12.92 lvs-slave
192.168.12.38 lvs-master
192.168.12.22 lvs-web2 b
192.168.12.25 lvs-web1 a
192.168.12.230 vip
(1)本次基於VMware Workstation搭建一個四臺Linux(CentOS 6.6)系統所構成的一個服務器集羣,其中兩臺負載均衡服務器(一臺爲主機,另外一臺爲備機),另外兩臺做爲真實的Web服務器
(2)本次實驗基於DR負載均衡模式,設置了一個VIP(Virtual IP)爲192.168.12.230,用戶只須要訪問這個IP地址便可得到網頁服務。其中,負載均衡主機爲192.168.12.38,備機爲192.168.12.92。Web服務器A爲192.168.12.25,Web服務器B爲192.168.80.22
1、
1)將機器綁定ip地址
vi /etc/sysconfig/network-scripts/ifcfg-eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.12.22
NETMASK=255.255.255.0
GATEWAY=192.168.12.1
DNS1=114.114.114.114
DNS2=202.106.0.20
或者用setup命令更改
2)設定主機名
hostname XXX
vi /etc/sysconfig/network
3)IP地址與主機名綁定
vi /etc/hosts
192.168.12.92 lvs-slave
192.168.12.6 lvs-master
192.168.12.22 lvs-web2
192.168.12.25 lvs-web1
#在Master與Backup服務器上分別安裝Ipvsadm、Keepalived
yum install -y ipvsadm kernel-devel perl perl-DBI perl-DBD-MySQL make gcc openssl-devel libnl*
yum install -y keepalived ipvsadm
#這裏安裝Ipvsadm工具主要是爲了查看lvs規則使用
chkconfig --add keepalived
chkconfig keepalived on
chkconfig --list keepalived
內核優化 主要是開啓內核轉發
vi /etc/sysctl.conf
#———————————————————————————————————————————-
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
net.core.somaxconn = 32768
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 20
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.core.netdev_max_backlog = 32768
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_mem = 41943040 73400320 94371840
net.ipv4.tcp_max_orphans = 3276800
fs.file-max = 1300000#LVS虛擬服務器(VIP)忽略ARP廣播包
net.ipv4.ip_forward= 1
net.ipv4.conf.lo.arp_ignore= 1
net.ipv4.conf.lo.arp_announce= 2
net.ipv4.conf.all.arp_ignore= 1
net.ipv4.conf.all.arp_announce= 2
配置備負載服務器 192.168.12.38
cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email {
zclzhao@admin.com 發生故障時發送的郵箱
}
notification_email_from admin@admin.com 使用哪一個郵箱發送
smtp_server 192.168.12.1 發件服務器
smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP 指定keepalived的角色,MASTER爲主,BACKUP爲備
interface eth1 指定網絡接口
virtual_router_id 5 虛擬路由編號,主備要一致
priority 99 定義優先級,數字越大,優先級越高,主DR必須大於備用DR
advert_int 1 檢查間隔,默認爲1S
authentication { 定義認證
auth_type PASS 認證方式爲口令認證
auth_pass 1111 認證口令
}
virtual_ipaddress { 定義vip
192.168.12.230 多個vip能夠換行添加
}
}
virtual_server 192.168.12.230 80 {
delay_loop 6 每隔6秒查看realserver狀態
lb_algo wrr 調度算法爲加權最小鏈接數
lb_kind DR lvs工做模式爲DR(直接路由)模式
nat_mask 255.255.255.0
persistence_timeout 0 同一IP的鏈接0秒內分配到同一臺realserver (這個0根據實際環境更改)
protocol TCP 用TCp檢測realserver的狀態
real_server 192.168.12.22 80{ 定義realserver
weight 3 定義權重
TCP_CHECK { 注意TCP_CHECK和{之間的空格,若是沒有的話只會添加第一個realserver}
connect_port 80
connect_timeout 10 10秒無反應超時
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.12.25 80 {
weight 3
TCP_CHECK {
connect_port 80
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
}
}
}
配置主lvs的keepalived,只須要將state BACKUP 改成state MASTER,將priority 99 的值改爲100
配置兩臺web
192.168.12.22操做
cat /etc/init.d/realserver
SNS_VIP=192.168.12.230 定義虛擬ip
. /etc/rc.d/init.d/functions 調用init.d腳本的標準庫
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
chmod 755 /etc/init.d/realserver
service realserver start
將realserver啓動腳本考到192.168.12.25/etc/init.d/下
scp /etc/init.d/realserver root@192.168.12.22:/etc/init.d/realserver
驗證測試
指定請求的均衡轉發:由於兩個Web服務器的權重都同樣,因此會依次轉發給兩個Web服務器;算法