LVS
LVS+Keepalived+heartbeat
Lvs:Linux Virtual Server Linux 虚拟服务器,是一个虚拟的服务器集群系统
主要有四种负载均衡技术(VS/NAT,VS/TUN,VS/DR,VS/fullNAT)十余种调度算法:(rr,wrr,lc,wlc,lblcr,dh,sh,sed,nq)
Keepalvied主要作用时Realserver的健康状态检查及LoadBalance主机和Backfail的实现。
LVS可分为三部分:
1.Load Balancer:这是LVS的核心部分,它好比我们网站MVC模型的Controller。它负责将客户的请求按照一定的算法分发到下一层不同的服务器进行处理,自己本身不做具体业务的处理。另外该层还可用监控下一层的状态,如果下一层的某台服务器不能正常工作了,它会自动把其剔除,恢复后又可用加上。该层由一台或者几台Director Server组成。
2.Server Array:该层负责具体业务。可有WEB Server、mail Server、FTP Server、DNS Server等组成。注意,其实上层的Director Server也可以当Real server用的。
3.Shared Storage:主要是提高上一层数据和为上一层保持数据一致
负载均衡机制
前面我们说了LVS是工作在网络层。相对于其它负载均衡的解决办法,比如DNS域名轮流解析、应用层负载的调度、客户端的调度等,它的效率是非常高的。LVS的通过控制IP来实现负载均衡。IPVS是其具体的实现模块。IPVS的主要作用:安装在Director Server上面,在Director Server虚拟一个对外访问的IP(VIP)。用户访问VIP,到达Director Server,Director Server根据一定的规则选择一个Real Server,处理完成后然后返回给客户端数据。这些步骤产生了一些具体的问题,比如如何选择具体的Real Server,Real Server如果返回给客户端数据等等。IPVS为此有三种机制:
1.VS/NAT(Virtual Server via Network Address Translation),即网络地址翻转技术实现虚拟服务器。当请求来到时,Diretor server上处理的程序将数据报文中的目标地址(即虚拟IP地址)改成具体的某台Real Server,端口也改成Real Server的端口,然后把报文发给Real Server。Real Server处理完数据后,需要返回给Diretor Server,然后Diretor server将数据包中的源地址和源端口改成VIP的地址和端口,最后把数据发送出去。由此可以看出,用户的请求和返回都要经过Diretor Server,如果数据过多,Diretor Server肯定会不堪重负。
2.VS/TUN(Virtual Server via IP Tunneling),即IP隧道技术实现虚拟服务器。它跟VS/NAT基本一样,但是Real server是直接返回数据给客户端,不需要经过Diretor server,这大大降低了Diretor server的压力。
3.VS/DR(Virtual Server via Direct Routing),即用直接路由技术实现虚拟服务器。跟前面两种方式,它的报文转发方法有所不同,VS/DR通过改写请求报文的MAC地址,将请求发送到Real Server,而Real Server将响应直接返回给客户,免去了VS/TUN中的IP隧道开销。这种方式是三种负载调度机制中性能最高最好的,但是必须要求Director Server与Real Server都有一块网卡连在同一物理网段上
ARP协议:
ARP:Address Resolution Protocol是根据IP地址获取物理地址的一个TCP?IP协议,主机反送消息时将包含目标IP的ARP请求广播到网络上的所有主机,并接受返回消息,一次确定目标的物理地址,受到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保存一定时间,下次请求时直接查询ARP缓存以节约资源。
由于lvs是linux2.6以后内核自带的,所以可以直接使用
Ipvsadm在rhel中含有,只要安装ipvsadm,ipvsadm在rhel的隐藏模块中,所以应该先配好yum源,有关配置请查看上一片“redhat_HA”
Serve1作为Scheduler
Server3和Server4作为RealServer
在Server3和Server4上安装httpd服务器,作为测试项
写入主页:
并加入红色
[root@server3 ~]# cat /var/www/html/index.html
server3.example.com
为Scheduler和RealServer添加VIrt Ip(VIP)
[root@server1 ~]# ip addr add 172.25.33.100/24 dev eth0
[root@server4/3 ~]# ip addr add 172.25.33.100/32 dev eth0
添加策略:
[root@server1 ~]# ipvsadm -A -t 172.25.33.100:80 -s rr
[root@server1 ~]# ipvsadm -a -t 172.25.33.100:80 -r 172.25.33.3
[root@server1 ~]# ipvsadm -a -t 172.25.33.100:80 -r 172.25.33.4
[root@server1 ~]# service ipvsadm save
ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]
-A, --add-service
Add a virtual service.
-a, --add-server
Add a real server to a virtual service.
-t, --tcp-service service-address
Use TCP service.
-s, --scheduler scheduling-method
scheduling-method
rr 调度算法:轮询
-r, --real-server server-address
Real server that an associated request for service may be
assigned to.
设置其在第三和第五等级开机启动。
[root@server1 ~]# chkconfig --level 35 ipvsadm on
[root@server1 ~]# chkconfig --list |grep ipvsadm
ipvsadm 0:off1:off2:off3:on4:off5:on6:off
此时的lvs已经可以开始访问了,但是由于realserver的vip也是100,很容易造成arp表中的映射关系错误,从而产生只能访问一个realserver的错误。
如果想要客户端访问调度器而不能访问realserver,那么需要让realserver忽略每个虚拟IP的ARP请求,执行以下指令
[root@server4/3 ~]# yum install arptables_jf -y
[root@server4 ~]# arptables -A IN -d 172.25.33.100 -j DROP
[root@server4 ~]# arptables -A OUT -s 172.25.33.100 -j mangle --mangle-ip-s 172.25.33.4
此时,realserver仅响应调度器的请求。
保存策略
[root@server4 ~]# service arptables_jf save
Saving current rules to /etc/sysconfig/arptables: [ OK ]
使用arp -an IP 查看当前请求iP和MAC的绑定关系,如果不会自动轮询,那么查看各主机的mac,看是否在某个主机上。
[kiosk@foundation33 Desktop]$ arp -an 172.25.33.100
? (172.25.33.100) at 52:54:00:ec:e5:a9 [ether] on br0
使用arp -d 172.25.33.100删除IP——MAC映射表。
与heartbeat的结合:
使用ipvsadm -C清空策略: