DPVS的3种转发模式分别是:NAT、DR、TUN模式。
NAT模式
FNAT 模式
FNAT都是双臂模式,即正反向流量都通过DPVS节点。
FULLNAT下,客户端感知不到RS,RS也感知不到客户端,它们都只能看到DPVS。
FNAT单节点
拓扑: 如上图所示,client ip为 10.0.0.48,其他 各节点的IP地址如下:
VIP: client访问的VIP为10.0.0.100:80
DPVS的local_ip为192.168.100.200
RS1的local_ip 为 192.168.100.2
RS2的local_ip 为 192.168.100.3
可见,此示例中client与DPVS VIP同网段,DPVS的local_ip与RS同网段。
配置:
#!/bin/sh -
## 配置VIP到dpdk1
./dpip addr add 10.0.0.100/32 dev dpdk1
## 配置 DPVS接口WAN/LAN 路由
./dpip route add 10.0.0.0/16 dev dpdk1
./dpip route add 192.168.100.0/24 dev dpdk0
## 配置VIP监听器,配置轮询模式
./ipvsadm -A -t 10.0.0.100:80 -s rr
## 配置后端服务器,以及转发模式(-b)
./ipvsadm -a -t 10.0.0.100:80 -r 192.168.100.2 -b // -b 表示 FNAT
./ipvsadm -a -t 10.0.0.100:80 -r 192.168.100.3 -b
## 配置VIP监听器使用的DPVS local_ip
./ipvsadm --add-laddr -z 192.168.100.200 -t 10.0.0.100:80 -F dpdk0
注意:
请使用ipvsadm--add laddr设置LIP而不是dpip addr add。。。。因为ipvs和inet模块都需要LIP地址,sapool选项将自动设置
对于FNAT,客户端(源端)的CIP:cport 将被LIP:lport替换。目的端 VIP:vport LIP将被转换为后端的RIP:rport。,如果RS需要通过socket API获取客户端的真实IP:port,例如getpeername或accept,而不是某种应用程序方式。TOA内核模块应该安装在RS上,TOA是为Linux内核的某个版本开发的,其他版本或BSD、mTCP等操作系统内核可能需要移植。
DPVS处理流程:
client访问VIP,发送给DPVS;
DPVS将源IPclient_ip修改为local_ip,源端口修改为某一端口,目的IPVIP修改为某一个后端的IP
RS收到数据包后,因为数据报文的目的ip为自己的ip,接收处理;
处理后,查找arp、路由表,原路返回给dpvs;
dpvs 将目的ip端口与源ip修改后返回client。
主备
DPVS通过keepalived使其工作在主备模式,通过VRRP协议选举哪个DPVS节点为主。
拓扑: 如上图所示,各节点的IP地址如下:
VIP: client访问的VIP为192.168.100.254:80,
DPVS Master的local_ip为192.168.100.200
DPVS Backup的local_ip为192.168.100.201
RS1的local_ip 为 192.168.100.2
RS2的loc