4、OVS安装与部署:源码编译安装、包管理器安装(apt/yum)、OVS内核模块加载
好,咱们进入实战环节的第一关——把OVS装起来。
说实话,OVS的安装方式有好几种。我最早接触OVS时,图省事直接apt install了事。后来在生产环境踩了坑,才发现不同场景得选不同方式。今天我把三种主流方法都讲透,你根据自己情况选就行。
4.1 包管理器安装(apt/yum)—— 最快上手
如果你只是想快速体验,或者搭建测试环境,用包管理器装最省心。
Ubuntu/Debian 系(apt)
# 更新源
sudo apt update
# 安装OVS
sudo apt install openvswitch-switch openvswitch-common -y
# 验证安装
sudo ovs-vsctl show
CentOS/RHEL 系(yum)
# 安装依赖
sudo yum install -y epel-release
# 安装OVS
sudo yum install -y openvswitch
# 启动服务
sudo systemctl start openvswitch
sudo systemctl enable openvswitch
包管理器安装的好处是依赖自动解决,升级也方便。但缺点也很明显——版本通常比较老。比如Ubuntu 20.04默认源里是2.13,而最新版已经到3.x了。如果你需要新特性,比如VXLAN的某些优化,就得考虑源码编译。
4.2 源码编译安装 —— 定制化最强
我个人习惯在生产环境用源码编译。虽然步骤多几步,但你能拿到最新特性,还能按需裁剪模块。
第一步:安装编译依赖
# Ubuntu
sudo apt install -y build-essential fakeroot debhelper \
autoconf automake libtool libssl-dev \
pkg-config python3 python3-sphinx
# CentOS
sudo yum install -y gcc make python3-devel openssl-devel \
kernel-devel graphviz autoconf automake \
libtool
第二步:下载源码
# 从官网下载
wget https://www.openvswitch.org/releases/openvswitch-3.1.0.tar.gz
# 解压
tar -xzf openvswitch-3.1.0.tar.gz
cd openvswitch-3.1.0
第三步:编译配置
# 生成configure文件
./boot.sh
# 配置编译选项
./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc
这里有个坑——--prefix参数决定了安装路径。我建议用/usr,这样二进制文件直接在PATH里,省得配环境变量。
第四步:编译与安装
# 编译(-j4表示4核并行,根据你CPU核心数调整)
make -j4
# 安装
sudo make install
第五步:初始化配置
# 创建OVS数据库
sudo ovsdb-tool create /etc/openvswitch/conf.db \
/usr/share/openvswitch/vswitch.ovsschema
# 启动OVSDB服务
sudo ovsdb-server --remote=punix:/var/run/openvswitch/db.sock \
--remote=db:Open_vSwitch,Open_vSwitch,manager_options \
--pidfile --detach
# 启动vswitchd
sudo ovs-vswitchd --pidfile --detach
4.3 OVS内核模块加载 —— 性能关键
OVS有两种数据路径:用户态和内核态。内核态性能更好,但需要加载内核模块。
检查当前状态
# 查看内核模块是否加载
lsmod | grep openvswitch
# 如果没输出,说明没加载
加载内核模块
# 加载模块
sudo modprobe openvswitch
# 验证
lsmod | grep openvswitch
# 应该看到类似输出:
# openvswitch ext4 ...
开机自动加载
# 编辑配置文件
echo "openvswitch" | sudo tee /etc/modules-load.d/openvswitch.conf
为什么要加载内核模块?
说白了,内核模块让OVS的数据转发在内核空间完成,避免了用户态和内核态之间的上下文切换。我在测试中发现,加载内核模块后,小包转发性能能提升30%-50%。
常见问题排查
| 现象 | 原因 | 解决 |
|---|---|---|
| modprobe报错 | 内核头文件未安装 | 安装对应内核版本的headers包 |
| 加载后ovs-vswitchd报错 | 内核模块版本不匹配 | 重新编译内核模块 |
| 性能没提升 | 数据包走了用户态路径 | 检查流表是否匹配到内核态转发 |
make modules_install,然后重启。
4.4 三种方式怎么选?
我总结一下我的选择逻辑:
- 学习测试:apt/yum装,5分钟搞定
- 生产环境:源码编译,版本可控,性能可调
- 性能敏感场景:必须加载内核模块,同时考虑DPDK(后面章节会讲)
嗯,到这里OVS就装好了。你可以用ovs-vsctl show看一眼,应该能看到一个空的OVS实例。下一章咱们开始创建第一个网桥和端口,真正玩起来。
验证安装是否成功:
# 查看版本
ovs-vsctl --version
# 查看运行状态
sudo ovs-vsctl show
# 如果输出类似:
# 5a4e3f7c-1b2d-4e8f-9a6b-3c2d1e0f8a7b
# ovs_version: "3.1.0"
# 说明安装成功
最后提醒一句:无论用哪种方式装完,都建议重启一下系统,确保所有服务正常自启。我见过太多人装完就跑,结果重启后OVS没起来,排查半天才发现是systemd服务没配好。