LVS简介
LVS:Linux Virtual Server,简译Linux虚拟服务器,一个虚拟的服务器集群系统,也可以说是负载调度器,是中国国内最早出现的自由软件项目之一。系统扩展的方式有两种:Scale UP(向上增强)和Scale Out(向外扩展)。简单的说向上增强就是升级硬件,i5不够买i7,硬件终究有瓶颈的,所以向外扩展的可行性比较大。向外扩展有多种方式,增加设备、调度分配,Cluster。
什么是Cluster?
Cluster就是集群,为解决某个特定问题将多台计算机组合起来形成的单个系统。
Linux Cluster类型
LB:负载均衡
HA:高可用
HPC:高性能
LB Cluster的实现
一般来说实现方式有软件实现和硬件实现。硬件的实现就是需要比较昂贵的设备,比如:F5,A10。LVS属于软件的实现负载均衡,除了lvs还有nginx,haproxy等等很多实现方式。这里我们只着重介绍lvs。根据工作的协议层次不同,又可分为传输层和应用层两种。lvs是工作在传输层上,不支持应用层,这也是它的不足之处。
LVS工作原理:
专门用来做lvs的我们称之为VS(Virtual Server),后面接真正提供服务的RS(Real Server)。VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS。
lvs集群的类型:
lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
lvs-dr:操纵封装新的MAC地址
lvs-tun:在原请求IP报文之外新加一个IP首部
lvs-fullnat:修改请求报文的源和目标IP
LVS/NAT的实现
前提:关闭防火墙、SELINUX,date时间一致
网络环境:
说明:客户端通过vs访问后面的http服务,实现nat的调度。
client配置
]#route add default gw 172.18.32.112 <===添加默认路由,指定为vs的VIP
RS1配置
]#yum install -y httpd ]#vim /var/www/html/index.html server RS1 ]#service httpd start <===启动http服务,centos7为ststemctl start httpd ]#route add default gw 192.168.32.112
RS2配置
]#yum install -y httpd ]#vim /var/www/html/index.html server RS2 ]#service httpd start ]#route add default gw 192.168.32.112
VS配置
]#yum install -y ipvsadm <===ipvsadm是lvs的管理工具,后面有介绍 ]#ipvsadm -A -t 172.18.32.112:80 -s rr <===添加地址和端口进行调度 -s 指定调度算法 ]#ipvsadm -a -t 172.18.32.112:80 -r 192.168.32.9 -m <===添加需要调度的后台服务器 -m 代表natl类型 ]#ipvsadm -a -t 172.18.32.112:80 -r 192.168.32.111 -m ]#echo 1 > /proc/sys/net/ipv4/ip_forward <===开启转发,临时生效 ]#vim /etc/sysctl.conf <===永久生效 net.ipv4.ip_forward=1 ]#ipvsadm -Ln <===查看列表 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 172.18.32.112:80 wrr -> 192.168.32.9:80 Masq 3 0 0 -> 192.168.32.111:80 Masq 1 0 0
测试
]#for i in {1..10};do curl 172.18.32.112;done server RS1 server RS2 server RS1 server RS2 server RS1 server RS2 server RS1 server RS2 server RS1 server RS2
也可以试试其他算法
]#ipvsadm -C ]#ipvsadm -A -t 172.18.32.112:80 -s wrr ]#ipvsadm -a -t 172.18.32.112:80 -r 192.168.32.9 -m -w 3 ]#ipvsadm -a -t 172.18.32.112:80 -r 192.168.32.111 -m -w 1
测试
]#for i in {1..10};do curl 172.18.32.112;done server RS1 server RS2 server RS2 server RS2 server RS1 server RS2 server RS2 server RS2 server RS1 server RS2
写了这么多,是不是还对具体调度的实现不是很理解呢?根据上面的拓扑图给大家解释一下:当CLIENT访问我公司网站时,我们把公网地址配置在VS上为VIP,同时也配置了连接内网的DIP。第一次地址从CIP-->VIP,VS根据算法进行替换VIP,这时候变成CIP-->RIP,RS收到进行响应的时候是RIP-->CIP,到达VS进行替换变成VIP-->CIP,这样CLIENT收到响应报文。因为响应报文也从VS回去,这就造成了VS负载比较大,所以RS不能太多,有局限性。后面我们介绍另外一种方式LVS/DR方式,会解决这个问题。
原文地址:http://maguofu.blog.51cto.com/12431016/1975303