对LVS只做了粗浅的了解,LVS的工作模式主要分
- VS-NAT
- VS-DRouting
- VS-IPTunneling
其中用的最多的是NAT模式,下面分别来阐述下
VS-NAT
原理图
请求到达lvs之后,lvs会重写数据包的目的地址到real server ip:port,并将请求转发给real server,real server处理完之后,将请求包反馈给lvs,lvs修改数据包的源地址为vip:port.
假设202.100.1.2:3456是客户端的地址,202.103.106.5:80是LVS的虚拟地址,172.16.0.3:8000是内网真实server地址。
The incoming packet for web service would has source and destination addresses as:
SOURCE 202.100.1.2:3456 DEST 202.103.106.5:80
The load balancer will choose a real server, e.g. 172.16.0.3:8000. The packet would >be rewritten and forwarded to the server as:SOURCE 202.100.1.2:3456 DEST 172.16.0.3:8000
Replies get back to the load balancer as:SOURCE 172.16.0.3:8000 DEST 202.100.1.2:3456
The packets would be written back to the virtual server address and returned to the client as:SOURCE 202.103.106.5:80 DEST 202.100.1.2:3456
疑问1:对于返回的数据包怎么DEST是202.100.1.2:3456,还是会请求到LVS呢?
解答:这个其实是因为后端的real server没有独立的公网IP,在real server上有配置路由规则,LVS是该机器上所有外网请求的网关。
VS-DRouting
原理图
在dr模式下:
- lvs只是接收client的请求,response是直接由后端的real server返回给client的,相当于lvs只是做了负载均衡。
- 要求所有的real server都必须要有公网IP。
- lvs和real server都需要共享这个虚IP,所以lvs和real server必须要在同一个物理网段下。
疑问1: 为什么lvs和real server必须要在同一个物理网段?因为要共享一个虚拟IP。为什么只有同一个物理网段才能共享同一个虚拟IP呢?
疑问2:这是通过MAC地址转发吗,走的数据链路层?
流程图
VS-IPTunneling
原理图
在ip-tunneling模式下:
- lvs只是接收client的请求,response是直接由后端的real server返回给client的,相当于lvs只是做了负载均衡(与dr模式一致)。
- 这个要求所有的real server都必须要有公网IP(与dr模式一致)。
- real server不需要跟lvs在同一个网段下,也不需要共享一个虚拟IP。
流程图
疑问1: client请求的时候dest是lvs的外网地址,但接收包的src变成real server的外网地址了,client还会认这个包吗,不会认为这个是伪造的请求回复包?
疑问2:IP封包技术,走IP层的转发?对下层透明
其他说明
echo 1 > /proc/sys/net/ipv4/ip_forward
作用?