lvs:linux Virtual Server
L4:Layer 4,四层交换,四层路由
lvs管理工具:
ipvsadm/ipvs(让用户定义规则)
ipvsadm:用户空间的命令行工具,用于管理集群服务;(即规则的增删查改)支持TCP,UDP,AH,EST,AH_EST,SCTP等诸多协议
lvs几个概念
- 调度器:director,dispatcher,balancer
- RS:Real Server(后端真实提供服务主机)
- Client IP:CIP(客户访问的IP)
- Director Virtual IP:VIP(提供外网访问的虚拟IP)
- Director IP:DIP(虚拟IP主机上的真实IP)
- Real Server IP:RIP(后端真实提供服务主机的IP)
lvs工作模式
- Lvs-nat:通常称为MASQUERADE
- Lvs-dr(direct routing直接路由):GATEWAY
- Lvs-tun(ip tunneling,隧道模式):IPIP
- Lvs-fullnat:
lvs-nat模式
请求和响应报文都经过director,而且DIP和RIP 必须在同一网段;
多目标的DNAT(iptables):它通过修改请求报文的目标IP地址(同时可能会修改目标端口)至挑选出某RS的RIP实现转发;
(1)RS应该和DIP应该使用私网地址,且RS的网关要指向DIP;
(2)请求和响应报文都经由director转发;极高负载的场景中,director可能会成系统瓶颈;
(3)支持端口映射;
(4)RS可以使用任意OS;
(5)RS的RIP和Director的DIP必须在同一IP网络;
(6)由于数据包来回都需要经过高度器,因此要开启内核转发功能,当然防火墙Iptables也要开启forward功能
lvs-dr模式(生产中最常用的模式)
dr模式的工作原理:
a.direct routing,客户端请求报文经由director;
b.direct通过修改请求报文的目标MAC地址进行转发,将MAC改为后端RS的MAC,然后将请求发送给修改后的MAC对应的RS;
c.响应报文经由RS直接经由网关响应客户端;
在以上流程中,唯一修改的就是目标MAC
所有节点和LVS要处于一个局域网,可以是不同网段;
后端RS如何实现直接将请求直接响应:
a.在RS的lo上绑定VIP
b.抑制arp广播响应
注:修改RS主机内核的参数(抑制arp广播,因为RS会在lo上配置VIP,客户端请求时会发arp广播,如果不抑制,会有2个主机进行响应,LVS功能就会失效;在LVS和RS之间没有广播进行,LVS是直接封闭信息,经由Director算法找到RS,从而由RS直接进行转发)
(1)保证前端路由器将目标IP为VIP的请求报文发送给director;
(2)RS的RIP可以使用私有地址,但也可以使用公网地址;
(3)RS跟Director必须在同一物理网络中;可以是不同网段;
(4)请求报文经由Director调度,但响应报文一定不能经由Director;
(5)不支持端口映射;
(6)RS可以是大多数OS;
(7)RS的网关不能指向DIP;
(8)理论上只要RS可以出网即可,不是必须要配置外网IP,当然配置外网响应速度会更快(否则容易造成网关瓶颈)
(9)总的来说DR模式效率很高,但配置较麻烦,建议日PV在1000-2000WPV或并发请求1万以下的建议用haproxy/nginx模型
(10)直接对外的访问业务,例如:web服务做RS节点,RS最好用公网IP地址,如果不直接对外的业务,例如:mysql,存储系统RS节点,最好只用内部IP地址
Lvs-tun模式:(ipip隧道)
不修改请求报文的IP首部,而是通过在原有的IP首部(CIP-VIP)之外,再封装一个ip首部(DIP-RIP);
(1)RIP,DIP,VIP全得是公网地址;
(2)RS的网关不能指向DIP;
(3)请求报文必须经由director调度,但响应报文必须不能经由director;
(4)不支持端口映射;
(5)RS的OS必须支持隧道功能;
基本上同dr模式一样,只是在客户端请求的时候在首部添加一个指向RS的IP头部
Lvs-fullnat:源地址和目标地址都会改变
director通过同时修改请求报文的上标地址和源地址进行转发;(1)VIP是公网地址;RIP和DIP是私网地址,二者无须在同一个网络中:
(2)RS接收到的请求报文的源地址为DIP,因此要响应给DIP;
(3)请求报文和响应报文都必须经由Director;
(4)支持端口映射机制;
(5)RS的OS可以是任意OS;
LVS的负载调度算法
- 轮询 (Round Robin)
- 将收到的访问请求按照顺序轮流分配给群集中的各节点(真是服务器),均等的对待每一台服务器,而不管服务器的实际连接数和系统负载
- 加权轮询(Weighted Round Robin)
- 根据调度器设置的权重值来分发请求,权重值高的节点优先获得任务,分配的请求数越多
- 保证性能强的服务器承担更多的访问流量