VPP LoadBalancer 号称是对google maglev的复刻版,所以忍不住要试用一下。
在CentOS 7.2上面安装非常快速,因为vpp为centos提供了repo源和打包好的vpp程序。
#添加repo源
cat > /etc/yum.repos.d/vpp.repo <<END
[fdio-release]
name=fd.io release branch latest merge
baseurl=https://nexus.fd.io/content/repositories/fd.io.centos7/
enabled=1
gpgcheck=0
END
# 安装vpp
yum install vpp vpp-plugins dpdk dpdk-tools
# LoadBalancer拓扑
VPP-Server: 192.168.2.2/24
VPP-VIP: 192.168.1.2
Real-Server-A: 192.168.2.3/24
Real-Server-B: 192.168.2.4/24
# 配置vpp
$ dpdk_nic_bind -s
$ modprobe uio_pci_generic
# 这里根据网卡的pci来设置
$ dpdk_nic_bind -b uio_pci_generic 0000:0b:00.0
$ sysctl -w vm.nr_hugepages=2048
$ vim /etc/vpp/startup.conf
dpdk {
uio-driver uio_pci_generic
dev 0000:0b:00.0
socket-mem 1024
}
# 启动vpp
$ service vpp start
# 配置网卡地址
$ vppctl
$ show int
$ set int state GigabitEthernetb/0/0 up
$ set int ip address GigabitEthernetb/0/0 192.168.2.2/24
$ show int address
$ show hardware
$ show ip arp
$ show ip fib
# 配置LoadBalancer
$ vppctl
$ lb conf ip4-src-address 192.168.2.2 timeout 3
$ lb vip 192.168.1.2/32 encap gre4 new_len 1024
$ lb as 192.168.1.2/32 192.168.2.3 192.168.2.4
$ show lb vip verbose
# 配置其中一台Real Server
$ ip tunnel add tun0 mode gre local 192.168.2.3 remote 192.168.2.2 ttl 255
$ ifconfig tun0 192.168.2.2/32 up
$ echo 1 > /proc/sys/net/ipv4/conf/tun0/arp_ignore
$ echo 2 > /proc/sys/net/ipv4/conf/tun0/arp_announce
$ echo 0 > /proc/sys/net/ipv4/conf/tun0/rp_filter
$ echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
$ echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
$ echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
# 结论
-
小包的转发性能确实因为用了dpdk达到了不少的提升,基本上是线性转发。
-
默认用的RR轮询策略,还没有地方可以配置转发策略。
-
目前还没有health monitor,所以即使移除RealServer也依然会向那个地址转发。
-
要上生产,还需要解决以上问题。