负载均衡主要有两种方式:硬件均衡器,软件均衡。前者是靠钱解决问题的,性能绝对优于后者,这次还是继续上回的穷人话题。如何利用省钱的方案简单的解决负载均衡以及故障转移。先上一个机器部署的示意图。

LVS: linux virtual server
lvs就是国产的优秀开源的项目之一,最简单的理解就是建立一个虚拟IP的服务器,然后通过这个虚拟机器把前端的请求转发到后面的真实服务器上实现负载分配。对于老的linux版本需要给系统打上ipvs的补丁,对于新的linux系统已内置了ipvs模块。
lsmod |grep ip_vs #查看是否已加载ipvs模块
sudo modprobe ip_vs #加载ip_vs模块
为了方便进行ipvs管理,还需要安装ipvsadm
sudo apt-get install ipvsadm
关于lvs工作模式的介绍这里有篇IBM的文档对lvs的三种模式的原理,说得十分的详细。
keepalived: 实现机器的心跳检查以及机器的故障转移。
1. 当真实生产机器出现故障的时候,会自动把出问题的机器从集群中删除,当出问题的机器恢复正常的时候,也会自动把机器自动添加到集群中来。这样就可以很平滑很方便维护线上的生产机器。
2. 从图中可以看出,如果没有备份虚机(192.168.1.200)的话。在192.168.1.100机器上还是出现了单点问题。keepalived会在192.168.1.100故障的情况下,把VIP切到192.168.1.200.这其中用到了vrrp协议。注: 开防火墙的朋友得把这两台机器的vrrp端口打开。不然keepalived无法实现主备机器的切换。
上配置文件喽!
192.168.123.100与192.168.123.200
软件:
1.ip_vs
2.ipvsadmin
3.keepalived
/etc/keepalived/keepalived.conf
global_defs {
notification_email {
test@gmail.com
}
smtp_server 192.168.1.100
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
interface eth0
virtual_router_id 51
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.80
}
}
virtual_server 192.168.1.80 80 {
delay_loop 6
lb_algo wlc
lb_kind DR
persistence_timeout 60
protocol TCP
real_server 192.168.1.101 80 {
weight 2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.102 80 {
weight 2
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
配置文件变量名定义得十分易懂,基本上看完配置文件就知道keepalived的工作概况。
192.168.1.101与192.168.1.102中要执行的代码:
#!/bin/bash
VIP=192.168.1.80
case "$1" in
start)
echo "start lvs RealServer"
/sbin/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
;;
stop)
/sbin/ifconfig lo:0 down
/sbin/route del $VIP >/dev/null 2>&1
echo "close LVS RealServer"
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 "Usage: $0 {start|stop}"
exit 1
用以上代码保存成一个lvs realserver的启动文件,方便realserver的打开与关闭

0 Responses
Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.