DPVS学习(二)DPVS教程

1.术语

关于全nat(FNAT),DR,Tunnel,toa,OSPF/ECMP和keepalived的概念,可以参考LVS和阿里巴巴/LVS。

注:DPVS支持FNAT,DR,Tunnel,NAT,SNAT转发模式,有或没有OSFP/ECMP/keepalive,每个模式可以配置为单臂或两臂拓扑。后面给出一些日常工作中常用的工作模型。

1.1 单臂和多臂

双臂意味着,你在负载平衡器(LB)的一端拥有客户机,在另一端拥有服务器,然后LB在它的两个逻辑网络接口之间转发数据包。例如,wan到lan的负载平衡。

另一方面,单臂意味着所有的客户端和服务器都在负载均衡器的同一端,LB通过相同的逻辑网络接口转发流量。

为了方便,一般不考虑虚拟设备。因此,双臂拓扑需要如下:

(1)两个装有igb_uio驱动程序的DPDK接口。

(2)/etc/dpvs.conf应该配置两个接口,请参考文件conf/dpvs.conf.sample。

对于单臂,只需要一个DPDK接口,可以参考conf/dpv.conv.conf.con.single-nic.sample

1.2 kni设备

与LVS一样,DPVS可以部署为不同类型的集群模型,以实现高可用性(HA)。同时支持OSPF/ECMP和主/备份模型。OSPF/ECMP模型需要软件包quagga及其zebra和ospfd程序。master/back模型需要保活。

考虑到DPDK应用程序完全管理网络接口,Linux内核和运行在内核TCP/IP栈上的程序不能直接从DPDK接口接收数据包。为了实现sshd、zebra/ospfd和keepalived等Linux程序,使用了DPDK kni设备。这样Linux程序就可以使用Linux TCP/IP栈在kni设备上运行了。实际上,DPVS将不会把的数据包传递给kni设备。例如,OSPF/VRRP/ssh包。这样在Linux堆栈上“工作”的程序就能够处理它们。

我们不希望将ospfd/keepalieved/sshd移植到DPDK环境,因为需要TCP和套接字层。对DPDK的负荷也是一个原因。

 

注意:keepalived是由DPVS项目修改的,以支持一些特定的参数。代码是驻留在tools/keepalived和可执行文件是bin/keepalived。ospfd/sshd是标准版本。

2.全NAT模式

2.1 简单的全NAT模式(双臂)

这是FullNAT(FNAT)的一个简单示例,在两个接口之间进行转发。假设一个是WAN接口(dpdk1),另一个是LAN接口(dpdk0)。

配置包括:

(1)用于DPDK局域网(LAN)/广域网(WAN)的ip地址和路由。

(2)WAN接口上的VIP(dpdk1)。

(3)FNAT服务(vip:vport)及相关RS(Real Server)。

(4)FNAT模式至少需要一个局域网接口(dpdk0)。

脚本如下:

#!/bin/sh -

# add VIP to WAN interface
./dpip addr add 10.0.0.100/32 dev dpdk1

# route for WAN/LAN access
# add routes for other network or default route if needed.
./dpip route add 10.0.0.0/16 dev dpdk1
./dpip route add 192.168.100.0/24 dev dpdk0

# add service <VIP:vport> to forwarding, scheduling mode is RR.
# use ipvsadm --help for more info.
./ipvsadm -A -t 10.0.0.100:80 -s rr

# add two RS for service, forwarding mode is FNAT (-b)
./ipvsadm -a -t 10.0.0.100:80 -r 192.168.100.2 -b
./ipvsadm -a -t 10.0.0.100:80 -r 192.168.100.3 -b

# add at least one Local-IP (LIP) for FNAT on LAN interface
./ipvsadm --add-laddr -z 192.168.100.200 -t 10.0.0.100:80 -F dpdk0

可以使用下面的命令来检查刚刚设置的内容:

$ ./dpip addr show
$ ./dpip route show
$ ./ipvsadm  -ln
$ ./ipvsadm  -G

现在来验证FNAT(双臂)是否有效。我已经设置了Nginx服务器上RS(与TOA模块)响应HTTP请求与客户端的真实IP和端口。响应格式是纯文本(不是html)。

client$ curl 10.0.0.100
Your ip:port : 10.0.0.48:37177

FNAT转换需要LIP或Local-IP,客户的CIP:cport将替换为LIP:lport,而VIP:vport将被翻译成RS的RIP:rport。我想这就是为什么模式被称为“全nat”的原因。

请使用 ipvsadm --add laddr设置LIP而不是dpip addr add。因为ipvs和inet模块都需要LIP地址,sapool选项将自动设置。

另一个技巧是可以使用dpip addr add 10.0.0.100/16 dev dpdk1同时设置VIP和WAN路由。但让我们使用两个命令来明确它。

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值