LVS的全称Linux vitual system,是由目前阿里巴巴的著名工程师章文嵩博士开发的一款开源软件。LVS工作在一台server上提供Directory(负载均衡器)的功能,本身并不提供服务,只是把特定的请求转发给对应的realserver(真正提供服务的主机),从而实现集群环境中的负载均衡。
LVS的核心组件ipvs工作在kernel中,是真正的用于实现根据定义的集群转发规则把客户端的请求转发到特定的realserver。而另一个组件ipvsadm是工作在用户空间的一个让用户定义ipvs规则的工具。故我们只要在server上装了ipvsadm软件包就可以定义ipvs规则,而在linux kernel的2.6版本之后kernel是直接支持ipvs的。
注:由于ipvs是接受netfilter五个钩子函数的中的local_in函数控制的。故ipvs不能和netfilter的一些控制规则同时使用。
好了,进入正题,以下是今天所分享的主要内容:
LVS三种模型LVS-NAT2,LVS-DR,LVS-TUN的工作原理及环境搭建。
实验环境:redhat enterprise 5.4+ipvsadm+httpd(用于提供web服务)
这些为LVS环境搭建中的一些专业名词:
RIP:realserver的ip地址
DIP:director的ip地址
CIP:用户客户端的ip地址
VIP:虚拟ip地址(这个ip地址是用户请求的提供服务的ip地址)
一,LVS-NAT
工作原理图:
工作原理:
图3.1:VS/NAT的体系结构
客户通过Virtual IP Address(虚拟服务的IP地址)访问网络服务时,请求报文到达调度器,调度器根据连接调度算法从一组真实服务器中选出一台服务器,将报文的目标地址Virtual IP Address改写成选定服务器的地址,报文的目标端口改写成选定服务器的相应端口,最后将修改后的报文发送给选出的服务器。同时,调度器在连接Hash表中记录这个连接,当这个连接的下一个报文到达时,从连接Hash表中可以得到原选定服务器的地址和端口,进行同样的改写操作,并将报文传给原选定的服务器。当来自真实服务器的响应报文经过调度器时,调度器将报文的源地址和源端口改为Virtual IP Address和相应的端口,再把报文发给用户。我们在连接上引入一个状态机,不同的报文会使得连接处于不同的状态,不同的状态有不同的超时值。在TCP连接中,根据标准的TCP有限状态机进行状态迁移;在UDP中,我们只设置一个UDP状态。不同状态的超时值是可以设置的,在缺省情况下,SYN状态的超时为1分钟,ESTABLISHED状态的超时为15分钟,FIN状态的超时为1分钟;UDP状态的超时为5分钟。当连接终止或超时,调度器将这个连接从连接Hash表中***。
这样,客户所看到的只是在Virtual IP Address上提供的服务,而服务器集群的结构对用户是透明的。对改写后的报文,应用增量调整Checksum的算法调整TCP Checksum的值,避免了扫描整个报文来计算Checksum的开销。
特点:
1,所有的realserver和director要在同一个网段内
2,VIP生产环境为公网ip,而DIP用于和rs通信
3,director同时处理请求和应答数据包
4,realserver的网关要指向DIP
5,可以实现端口映射
6,realserver可以是任意操作系统
7,director很可能成为系统性能瓶颈
实验拓扑:
Director这台server为双网卡eth0用于客户端的请求,而eth1用于和realserver通信。
客户端通过请求172.16.30.1提供web服务。请根据拓扑配置好网络。
1,rs1上的配置:
配置好rs1上的yum源,可以指向我们的系统安装光盘。
rs1是作为一台realserver使用,故需要安装httpd提供web服务:
# yum -y install httpd
添加测试页:
# cd /var/www/html
# vim index.html
添加如下内容:
jia's server1
启动httpd服务:
# service httpd start
测试rs1上的web服务:
路由的配置:
# route add default gw 192.168.1.1
2,rs2上的配置:
配置好rs2上的yum源,可以指向我们的系统安装光盘。
rs2是作为一台realserver使用,故需要安装httpd提供web服务:
# yum -y install httpd
添加测试页:
# cd /var/www/html
# vim index.html
添加如下内容:
jia's server2
启动httpd服务:
# service httpd start
测试rs2上的web服务: