一、为什么要使 用负载均衡技术?
1、系统高可用性
2、 系统可扩展性
3、 负载均衡能力
LVS+keepalived能很好的实现以上的要求,LVS提 供负载均衡,keepalived提供健康检查,故障转移,提高系统的可用性!采用这样的架构以后 很容易对现有系统进行扩展,只要在后端添加或者减少realserver,只要更改lvs的 配置文件,并能实现无缝配置变更!
二、LVS+Keepalived介绍
1、 LVS
LVS是一个开源的软件,可以实现LINUX平台下的简单负载均衡。LVS是Linux Virtual Server的缩写,意思是Linux虚拟服务器。目前有三种IP负 载均衡技术(VS/NAT、VS/TUN和VS/DR);八种调度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。
2、 keepalived
Keepalived 是运行在lvs 之上,它的主要功能是实现真实机的故障隔离及负载均衡器间的失败 切换,提高系统的可用性
/sbin/ipvsadm-save
/sbin/ipvsadm-restore
/usr/man/man8/ipvsadm.8
/usr/man/man8/ipvsadm-save.8
/usr/man/man8/ipvsadm-restore.8
/etc/rc.d/init.d/ipvsadm
------------------------
Keepalived version : 1.1.20
Compiler : gcc
Compiler flags : -g -O2
Extra Lib : -lpopt -lssl -lcrypto
Use IPVS Framework : Yes
IPVS sync daemon support : Yes
Use VRRP Framework : Yes
Use Debug flags : No
global_defs {
notification_email {
#acassen@firewall.loc
#failover@firewall.loc
#sysadmin@firewall.loc
zjj@xxxxxx.com
}
# notification_email_from Alexandre.Cassen@firewall.loc
notification_email_from zjj@xxxxxx.com
smtp_connect_timeout 30
#router_id LVS_DEVEL
router_id LVS_MASTER //从负载机器需要修改的地方,我改成LVS_BACKUP
}
vrrp_instance VI_1 {
state MASTER //从负载机器需要修改的地方,我改成BACKUP
interface eth0
virtual_router_id 51
priority 100 //从服务器需要修改的地方改成比100小的数字,改成99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
#192.168.200.16
#192.168.200.17
#192.168.200.18
172.17.94.18
}
}
#virtual_server 192.168.200.100 443 {
virtual_server 172.17.94.18 80 {
delay_loop 6
lb_algo wrr
#lb_kind NAT
lb_kind DR
nat_mask 255.255.224.0
persistence_timeout 50
protocol TCP
# real_server 192.168.201.100 443 {
real_server 172.17.94.234 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 172.17.94.95 80 {
weight 1
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
#filename:real.sh
VIP=172.17.94.18
. /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
/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)
ifconfig lo:0 down
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
inet addr:172.17.94.234 Bcast:172.17.255.255 Mask:255.255.0.0
inet6 addr: fe80::250:8dff:fe58:a8df/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:19707 errors:0 dropped:0 overruns:0 frame:0
TX packets:2457 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2164485 (2.0 MiB) TX bytes:206181 (201.3 KiB)
Interrupt:169 Base address:0x2000
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:16436 Metric:1
RX packets:14 errors:0 dropped:0 overruns:0 frame:0
TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1008 (1008.0 b) TX bytes:1008 (1008.0 b)
lo:0 Link encap:Local Loopback #出现这个才正常,没有出现这个,允许real.sh脚本
inet addr:172.17.94.18 Mask:255.255.255.255
UP LOOPBACK RUNNING MTU:16436 Metric: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
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:0f:94:2f brd ff:ff:ff:ff:ff:ff
inet 172.17.94.16/19 brd 172.17.95.255 scope global eth0
inet 172.17.94.18/32 scope global eth0
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
link/ether 00:0c:29:0f:94:39 brd ff:ff:ff:ff:ff:ff
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:78:c6:35 brd ff:ff:ff:ff:ff:ff
inet 172.17.94.21/19 brd 172.17.95.255 scope global eth0
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
link/ether 00:0c:29:78:c6:3f brd ff:ff:ff:ff:ff:ff
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.17.94.18:http wrr persistent 50
-> 172.17.94.95:http Route 1 0 0
-> 172.17.94.234:http Route 1 0 0