RHEL6.6_x86_64linux
主要軟件:算法
keepalived-1.2.16.tar.gzvim
ipvsadm-1.26-4.el6.x86_64.rpmbash
Keepalived是一種高性能的服務器高可用解決方案,架構不一樣於corosync和heartbeat。Keepalived的實現是基於VRRP(Virtual Router Redundancy Protocol,虛擬路由冗餘協議),VRRP是一種容錯協議。一個網絡內的全部主機都設置有一條默認路由,這樣,主機發出的目的地址不在本網段的報文將經過默認路由發送往RouterA,從而實現主機與外網通訊。當RouterA掛掉,本網段中全部以RouterA爲默認路由下一跳的主機將不能與外網通訊。VRRP就是解決這一問題而出現的。服務器
VRRP將局域網的(兩臺或以上)路由器虛擬成一個設備,對外提供虛擬路由器IP,在路由器組內部,若實際擁有這個對外IP的路由器工做正常的話就是MASTER,MASTER實現針對虛擬路由器IP的各類網絡功能,如ARP請求,ICMP,數據轉發等。其餘設備不擁有該IP,則是BACKUP,BACKUP只接收MASTER的VRRP狀態通告信息。當MASTER宕掉,BACKUP接管MASTER的網絡功能。網絡
在這個結構圖裏,處於下端的是內核空間,它包括 ipvs 和 NETLINK 兩個部分。netlink 提供高級路由及其餘相關的網絡功能,若是咱們在負載均衡器上啓用 netfilter/iptable,將會直接影響它的性能。出於圖形上方的組件爲用戶空間,架構
1、 WatchDog 負責監控 checkers 和 VRRP 進程的情況。app
2、 Checkers 負責真實服務器的健康檢查 healthchecking,是 keepalived 最主要的功能。負載均衡
3、 VRRP Stack 負責負載均衡器之間的失敗切換 FailOver. 若是隻用一個負載均衡器,則VRRP 不是必須的。ide
4、 IPVS wrapper 用來發送設定的規則到內核 ipvs 代碼。
5、 Netlink Reflector 用來設定 vrrp 的 vip 地址等。
Master_DS : 192.168.1.5
Backup_DS : 192.168.1.8
RS1:192.168.1.6
RS2: 192.168.1.7
VIP: 192.168.1.10
編譯安裝keepalived
# tar xf keepalived-1.2.16.tar.gz
# cd keepalived-1.2.16
# ./configure --prefix=/usr/local/keepalived --sysconfdir=/etc
# make
# make install
配置keepalived
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
notification_email { #keepalived狀態切換時通知email出現故障,郵件報警
root@localhost
}
notification_email_from keepalived@localhost #指定發件人
smtp_server 127.0.0.1 #smtp服務器地址
smtp_connect_timeout 30 #smtp鏈接超時時間
router_id LVS_DEVEL #運行keepalived機器的一個標識
}
vrrp_instance VI_1 {
state MASTER #配置爲主
interface eth1 #通信網卡
virtual_router_id 51 #路由標識
priority 100 #優先級
advert_int 1 #通告時間間隔:發送通告報文的時間間隔。在VRRPVersion2中單位爲秒,默認值爲1秒。
authentication {
auth_type PASS
auth_pass 1111 #驗證密碼,通信主機間驗證
}
virtual_ipaddress { #虛擬IP地址
192.168.1.10/24 dev eth1 label eth1:0
}
}
virtual_server 192.168.1.10 80 {
delay_loop 6
lb_algo rr # rr調度算法, 有rr|wrr|lblc|sh|sh
lb_kind DR # DR模型
nat_mask 255.255.255.0
#persistence_timeout 50
protocol TCP
sorry_server 127.0.0.1 80 #全部RS故障,重定向到本機
real_server 192.168.1.6 80 {
weight 1 #權重,0爲失效
TCP_CHECK {
connect_timeout 3 #鏈接超時時間
nb_get_retry 3 #重試次數
delay_before_retry 3#重試時間間隔
}
}
real_server 192.168.1.7 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
# yum install ivsadm
192.168.1.8主機中
安裝keepalived同192.168.1.5
配置文件中:
將「state MASTER" 改成 」state BACKUP"
將"priority 100"改成比100小的值,這裏改成「priority 70".
# yum install ipvsadm
配置Real server
編寫Real Server腳本
#/bin/bash
# Author xiaoming
# mail: xiaoming.linux@gmail.com
VIP=192.168.1.10
. /etc/init.d/functions
case "$1" in
start)
echo "Start Real Server "
/sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
route add -host $VIP dev lo:0
echo 1 > /proc/sys/net/ipv4/conf/eth1/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth1/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
;;
stop)
echo "Stop Real Server"
/sbin/ifconfig lo:0 down
route del $VIP
echo 0 > /proc/sys/net/ipv4/conf/eth1/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/eth1/arp_announce
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
分別在Real Server1和Real Server2上執行此腳本
配置完畢,分別在director server上啓動keepalived服務,
# service keepalivedstart
查看LVS路由表信息
# ipvsadm -LnIP Virtual Server version 1.2.1 (size=4096)Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 192.168.1.10:80 rr -> 192.168.1.6:80 Route 1 0 0 -> 192.168.1.7:80 Route 1 0 0