我主要参考的是官方文档进行的安装,补充了下遇到的问题。官方文档链接:https://github.com/iqiyi/dpvs
1.下载DPVS
git clone https://github.com/iqiyi/dpvs.git
cd dpvs
2.安装DPDK
wget https://fast.dpdk.org/rel/dpdk-17.11.2.tar.xz
tar vxf dpdk-17.11.2.tar.xz
3.DPDK补丁
有一个用于硬件组播的DPDK kni驱动程序的补丁,如果需要就应用它。
//切换到dpvs的路径下
cd <path-of-dpvs>
//复制补丁
cp patch/dpdk-stable-17.11.2/*.patch dpdk-stable-17.11.2/
cd dpdk-stable-17.11.2/
patch -p 1 < 0001-kni-use-netlink-event-for-multicast-driver-part.patch
patch -p 1 < 0002-net-support-variable-IP-header-len-for-checksum-API.patch
patch -p 1 < 0003-enable-pdump-and-change-dpdk-pdump-tool-for-DPVS.patch
patch -p 1 < 0004-patch-dpdk-17.11.2-to-support-rh75-provided-by-Jason.patch
4.dpdk编译安装
下载依赖
yum install -y libpcap-devel
构建dpdk和导入环境变量
cd dpdk-stable-17.11.2/
make config T=x86_64-native-linuxapp-gcc
//Configuration done
make
export RTE_SDK=$PWD
设置大页内存
echo 8192 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages
echo 8192 > /sys/devices/system/node/node1/hugepages/hugepages-2048kB/nr_hugepages
mkdir /mnt/huge
mount -t hugetlbfs nodev /mnt/huge
加载驱动
我用的网卡是ens39绑定dpdk,这里需要pci号。可以用 lspci | grep Eth查询,查询结果如下:
modprobe uio
cd dpdk-stable-17.11.2
insmod build/kmod/igb_uio.ko
insmod build/kmod/rte_kni.ko
./usertools/dpdk-devbind.py --status
ifconfig ens39 down # assuming ens39 is 0000:02:07.0
./usertools/dpdk-devbind.py -b igb_uio 0000:02:07.0
5.构建dpvs
cd dpdk-stable-17.11.2/
export RTE_SDK=$PWD
cd <path-of-dpvs>
make # or "make -j40" to speed up.
make install
编译时出现问题。提示ipvsadm.c:114:18: 致命错误:popt.h:没有那个文件或目录,需要安装依赖。
yum install popt-devel
Output files are installed to dpvs/bin
dpvs是主程序。
dpip是设置IP地址、路由、vlan、neigh等的工具。
ipvsadm和keepalive来自于LVS,都是经过修改的。
6.启动dpvs
#复制配置文件到etc下
cp conf/dpvs.conf.single-nic.sample /etc/dpvs.conf
#启动
cd <path-of-dpvs>/bin
./dpvs &
#检测是否启动
./dpip link show
启动时报错:EAL: Error reading from file descriptor 21: Input/output error
原因:在虚拟机添加的网卡,dpdk不支持导致的。需要修改一行代码,跳过dpdk pci 检查。
#修改前
pci_intx_mask_supported(udev->pdev)
#修改后
pci_intx_mask_supported(udev->pdev) || true
make clean
#重新编译
make
rmmod igb_uio
insmod build/kmod/igb_uio.ko
建议用物理机,我用的虚拟机会有很多问题。包括内存不足,队列不够等问题。
启动正常如下: