当前位置: 首页 > news >正文

RHEL 9.6 从源码安装 Open vSwitch 完整指南

在这里插入图片描述

文章目录

  • RHEL 9.6 从源码安装 Open vSwitch 完整指南
    • 前言
    • 环境信息
    • 为什么选择源码安装
    • 一、安装编译依赖
    • 二、下载并编译 Open vSwitch
      • 1. 下载源码
      • 2. 配置和编译
      • 3. 安装
    • 三、配置 systemd 服务(重点)
      • 1. 创建必要的目录
      • 2. 创建环境配置文件
      • 3. 创建 ovsdb-server 服务文件
      • 4. 创建 ovs-vswitchd 服务文件
      • 5. 创建主服务文件
    • 四、启动和验证服务
      • 1. 重新加载 systemd 并启动服务
      • 2. 验证安装
    • 五、常见问题和解决方案
      • 问题 1: 服务启动失败 - 资源不可用
      • 问题 2: 数据库锁文件冲突
      • 问题 3: 内核模块加载失败
      • 问题 4: 命令找不到
    • 六、基本使用示例
      • 创建网桥
      • 添加端口
      • 配置 VLAN
      • 流表管理
    • 七、性能优化建议
      • 1. CPU 隔离和绑定
      • 2. 内存优化
      • 3. 网卡多队列
    • 八、监控和维护
      • 日志管理
      • 性能监控
      • 定期维护
    • 九、卸载和清理
    • 十、总结
    • 参考资源

RHEL 9.6 从源码安装 Open vSwitch 完整指南

前言

本文详细记录了在 Red Hat Enterprise Linux 9.6 上从源码编译安装 Open vSwitch 3.6.0 的完整过程,包括遇到的问题和解决方案。适合需要安装最新版本或特定版本 OVS 的用户。

环境信息

  • 操作系统: Red Hat Enterprise Linux 9.6
  • OVS 版本: 3.6.0(源码编译)
  • 权限要求: root 或 sudo 权限
  • 内核版本: 5.14 或更高

为什么选择源码安装

  • 需要最新版本的 OVS 特性
  • 官方仓库版本较旧(RHEL 9.6 仓库默认是 3.3 版本)
  • 需要自定义编译选项
  • 学习和研究 OVS 源码

一、安装编译依赖

# 安装完整的编译工具链和依赖库
sudo dnf groupinstall -y "Development Tools"
sudo dnf install -y gcc make python3-devel openssl-devel \kernel-devel kernel-headers autoconf automake libtool \rpm-build redhat-rpm-config desktop-file-utils groff \graphviz procps-ng checkpolicy selinux-policy-devel \python3-sphinx libcap-ng libcap-ng-devel \unbound unbound-devel python3-pip# 验证关键工具
gcc --version
make --version
python3 --version

二、下载并编译 Open vSwitch

1. 下载源码

# 创建工作目录
mkdir -p ~/ovs-build && cd ~/ovs-build# 下载 OVS 3.6.0 源码
wget https://www.openvswitch.org/releases/openvswitch-3.6.0.tar.gz# 验证下载(可选)
# wget https://www.openvswitch.org/releases/openvswitch-3.6.0.tar.gz.asc
# gpg --verify openvswitch-3.6.0.tar.gz.asc# 解压
tar -xzf openvswitch-3.6.0.tar.gz
cd openvswitch-3.6.0

2. 配置和编译

# 配置编译选项
# --prefix=/usr 将程序安装到 /usr 而不是 /usr/local
# --localstatedir=/var 指定运行时数据目录
# --sysconfdir=/etc 指定配置文件目录
./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc# 编译(使用所有 CPU 核心加速)
make -j$(nproc)# 编译过程大约需要 5-10 分钟,取决于机器性能

3. 安装

# 安装主程序和工具
sudo make install# 安装内核模块
sudo make modules_install# 手动加载内核模块
sudo modprobe openvswitch# 验证模块加载
lsmod | grep openvswitch

三、配置 systemd 服务(重点)

这是源码安装最关键的步骤,很多安装失败都是因为服务文件配置不当。

1. 创建必要的目录

# 创建运行时目录
sudo mkdir -p /var/run/openvswitch
sudo mkdir -p /var/log/openvswitch
sudo mkdir -p /etc/openvswitch
sudo mkdir -p /usr/share/openvswitch# 复制 schema 文件
sudo cp vswitchd/vswitch.ovsschema /usr/share/openvswitch/

2. 创建环境配置文件

# 创建 OVS 环境配置文件
sudo tee /etc/openvswitch/openvswitch > /dev/null <<'EOF'
# Open vSwitch 配置文件
# 可以在这里添加环境变量
EOF

3. 创建 ovsdb-server 服务文件

这是 OVS 的核心数据库服务:

sudo tee /usr/lib/systemd/system/ovsdb-server.service > /dev/null <<'EOF'
[Unit]
Description=Open vSwitch Database Unit
After=syslog.target network-pre.target
Before=network.target network.service[Service]
Type=forking
Restart=on-failure
EnvironmentFile=-/etc/openvswitch/openvswitch# 预启动:创建目录和清理锁文件
ExecStartPre=/usr/bin/mkdir -p /var/run/openvswitch
ExecStartPre=/usr/bin/mkdir -p /var/log/openvswitch
ExecStartPre=/usr/bin/mkdir -p /etc/openvswitch
ExecStartPre=-/usr/bin/rm -f /etc/openvswitch/.*.~lock~
ExecStartPre=-/usr/bin/rm -f /var/run/openvswitch/ovsdb-server.pid
ExecStartPre=-/usr/bin/rm -f /var/run/openvswitch/db.sock# 初始化数据库(如果不存在)
ExecStartPre=-/usr/bin/ovsdb-tool create /etc/openvswitch/conf.db /usr/share/openvswitch/vswitch.ovsschema# 启动数据库服务
ExecStart=/usr/sbin/ovsdb-server /etc/openvswitch/conf.db \--remote=punix:/var/run/openvswitch/db.sock \--remote=db:Open_vSwitch,Open_vSwitch,manager_options \--private-key=db:Open_vSwitch,SSL,private_key \--certificate=db:Open_vSwitch,SSL,certificate \--bootstrap-ca-cert=db:Open_vSwitch,SSL,ca_cert \--pidfile --detach --log-file# 启动后初始化数据库
ExecStartPost=/usr/bin/ovs-vsctl --no-wait initPIDFile=/var/run/openvswitch/ovsdb-server.pid[Install]
WantedBy=multi-user.target
EOF

服务文件关键点说明

  • ExecStartPre=- 前面的 - 表示即使命令失败也继续执行
  • 清理锁文件避免启动失败(这是常见问题)
  • 使用 --detach 让进程在后台运行

4. 创建 ovs-vswitchd 服务文件

这是 OVS 的数据平面服务:

sudo tee /usr/lib/systemd/system/ovs-vswitchd.service > /dev/null <<'EOF'
[Unit]
Description=Open vSwitch Forwarding Unit
After=ovsdb-server.service network-pre.target systemd-udev-settle.service
Before=network.target network.service
Requires=ovsdb-server.service
ReloadPropagatedFrom=ovsdb-server.service[Service]
Type=forking
Restart=on-failure
EnvironmentFile=-/etc/openvswitch/openvswitch# 清理旧的 PID 文件
ExecStartPre=-/usr/bin/rm -f /var/run/openvswitch/ovs-vswitchd.pid# 启动交换机守护进程
ExecStart=/usr/sbin/ovs-vswitchd unix:/var/run/openvswitch/db.sock \--pidfile --detach --log-filePIDFile=/var/run/openvswitch/ovs-vswitchd.pid
ExecReload=/bin/kill -HUP $MAINPID[Install]
WantedBy=multi-user.target
EOF

5. 创建主服务文件

sudo tee /usr/lib/systemd/system/openvswitch.service > /dev/null <<'EOF'
[Unit]
Description=Open vSwitch
After=network-pre.target
Before=network.target network.service
Wants=ovsdb-server.service ovs-vswitchd.service[Service]
Type=oneshot
ExecStart=/bin/true
ExecStop=/bin/true
RemainAfterExit=yes[Install]
WantedBy=multi-user.target
EOF

四、启动和验证服务

1. 重新加载 systemd 并启动服务

# 重新加载 systemd 配置
sudo systemctl daemon-reload# 启动 ovsdb-server
sudo systemctl start ovsdb-server
sudo systemctl status ovsdb-server# 查看 ovsdb-server 日志(如果启动失败)
sudo journalctl -xeu ovsdb-server.service -n 50# 启动 ovs-vswitchd
sudo systemctl start ovs-vswitchd
sudo systemctl status ovs-vswitchd# 设置开机自启
sudo systemctl enable ovsdb-server
sudo systemctl enable ovs-vswitchd# 或者使用主服务
sudo systemctl start openvswitch
sudo systemctl enable openvswitch

2. 验证安装

# 检查版本
ovs-vsctl --version
ovs-vswitchd --version
ovsdb-server --version# 查看 OVS 状态
sudo ovs-vsctl show# 检查进程
ps aux | grep ovs# 检查内核模块
lsmod | grep openvswitch# 查看服务状态
sudo systemctl status ovsdb-server ovs-vswitchd

预期输出示例:

ovs-vsctl (Open vSwitch) 3.6.0
Compiled Oct 30 2025 18:00:00

五、常见问题和解决方案

问题 1: 服务启动失败 - 资源不可用

错误信息

Failed to start ovsdb-server.service: Unit ovsdb-server.service not found.
Failed to load environment files: No such file or directory

解决方案

# 确保服务文件存在
ls -la /usr/lib/systemd/system/ovsdb-server.service# 创建环境配置文件
sudo touch /etc/openvswitch/openvswitch# 重新加载 systemd
sudo systemctl daemon-reload

问题 2: 数据库锁文件冲突

错误信息

cannot lock file because it is already locked by pid XXXXX
failed to lock lockfile (Resource temporarily unavailable)

解决方案

# 停止所有 OVS 进程
sudo systemctl stop ovsdb-server ovs-vswitchd
sudo pkill -9 ovsdb-server
sudo pkill -9 ovs-vswitchd# 清理锁文件和 PID 文件
sudo rm -f /etc/openvswitch/.*.~lock~
sudo rm -f /var/run/openvswitch/*.pid
sudo rm -f /var/run/openvswitch/db.sock# 重新启动
sudo systemctl start ovsdb-server
sudo systemctl start ovs-vswitchd

问题 3: 内核模块加载失败

错误信息

modprobe: FATAL: Module openvswitch not found

解决方案

# 重新安装内核模块
cd ~/ovs-build/openvswitch-3.6.0
sudo make modules_install# 更新模块依赖
sudo depmod -a# 手动加载
sudo modprobe openvswitch# 设置开机自动加载
echo "openvswitch" | sudo tee /etc/modules-load.d/openvswitch.conf

问题 4: 命令找不到

错误信息

ovs-vsctl: command not found

解决方案

# 检查安装路径
sudo find /usr -name "ovs-vsctl"# 添加到 PATH(如果安装在 /usr/local)
echo 'export PATH=$PATH:/usr/local/bin:/usr/local/sbin' >> ~/.bashrc
source ~/.bashrc

六、基本使用示例

创建网桥

# 创建第一个 OVS 网桥
sudo ovs-vsctl add-br br0# 查看网桥列表
sudo ovs-vsctl list-br# 查看详细配置
sudo ovs-vsctl show

添加端口

# 添加物理网卡到网桥(注意:这会中断网络连接)
sudo ovs-vsctl add-port br0 eth1# 创建内部端口
sudo ovs-vsctl add-port br0 vnet0 -- set interface vnet0 type=internal# 配置 IP 地址
sudo ip addr add 192.168.100.1/24 dev br0
sudo ip link set br0 up

配置 VLAN

# 创建 VLAN 100 的端口
sudo ovs-vsctl add-port br0 vnet1 tag=100 -- set interface vnet1 type=internal# 查看端口 VLAN 配置
sudo ovs-vsctl list port vnet1

流表管理

# 查看流表
sudo ovs-ofctl dump-flows br0# 添加简单转发规则
sudo ovs-ofctl add-flow br0 "in_port=1,actions=output:2"# 添加带优先级的规则
sudo ovs-ofctl add-flow br0 "priority=100,dl_type=0x0800,nw_dst=192.168.1.0/24,actions=output:3"# 删除所有流表
sudo ovs-ofctl del-flows br0

七、性能优化建议

1. CPU 隔离和绑定

# 查看 CPU 信息
lscpu# 设置 PMD 线程 CPU 亲和性(使用 CPU 2-3)
sudo ovs-vsctl set Open_vSwitch . other_config:pmd-cpu-mask=0x0C# 设置 DPDK lcore mask
sudo ovs-vsctl set Open_vSwitch . other_config:dpdk-lcore-mask=0x02

2. 内存优化

# 增加 socket 缓冲区
sudo sysctl -w net.core.rmem_max=134217728
sudo sysctl -w net.core.wmem_max=134217728# 持久化配置
echo "net.core.rmem_max=134217728" | sudo tee -a /etc/sysctl.conf
echo "net.core.wmem_max=134217728" | sudo tee -a /etc/sysctl.conf

3. 网卡多队列

# 查看网卡队列数
ethtool -l eth1# 设置网卡队列数(如果支持)
sudo ethtool -L eth1 combined 4

八、监控和维护

日志管理

# 查看 ovsdb-server 日志
sudo tail -f /var/log/openvswitch/ovsdb-server.log# 查看 ovs-vswitchd 日志
sudo tail -f /var/log/openvswitch/ovs-vswitchd.log# 使用 journalctl 查看服务日志
sudo journalctl -u ovsdb-server -f
sudo journalctl -u ovs-vswitchd -f# 设置日志级别
sudo ovs-appctl vlog/set ANY:file:dbg

性能监控

# 查看端口统计
sudo ovs-ofctl dump-ports br0# 查看端口详细描述
sudo ovs-ofctl dump-ports-desc br0# 查看接口统计
sudo ovs-vsctl list interface# 实时监控流表匹配
sudo ovs-dpctl dump-flows

定期维护

# 清理旧的日志(根据需要)
sudo find /var/log/openvswitch -name "*.log.*" -mtime +30 -delete# 备份配置数据库
sudo ovsdb-client backup unix:/var/run/openvswitch/db.sock > ovs-backup-$(date +%Y%m%d).json# 压缩数据库(减少文件大小)
sudo ovs-appctl ovsdb-server/compact

九、卸载和清理

如果需要卸载 Open vSwitch:

# 停止服务
sudo systemctl stop openvswitch
sudo systemctl stop ovs-vswitchd
sudo systemctl stop ovsdb-server# 禁用开机自启
sudo systemctl disable openvswitch
sudo systemctl disable ovs-vswitchd
sudo systemctl disable ovsdb-server# 删除所有网桥
for br in $(sudo ovs-vsctl list-br); dosudo ovs-vsctl del-br $br
done# 卸载软件(在源码目录执行)
cd ~/ovs-build/openvswitch-3.6.0
sudo make uninstall# 卸载内核模块
sudo rmmod openvswitch# 删除配置文件和数据
sudo rm -rf /etc/openvswitch
sudo rm -rf /var/run/openvswitch
sudo rm -rf /var/log/openvswitch# 删除 systemd 服务文件
sudo rm -f /usr/lib/systemd/system/ovsdb-server.service
sudo rm -f /usr/lib/systemd/system/ovs-vswitchd.service
sudo rm -f /usr/lib/systemd/system/openvswitch.service# 重新加载 systemd
sudo systemctl daemon-reload

十、总结

本文完整记录了在 RHEL 9.6 上从源码安装 Open vSwitch 3.6.0 的过程,重点包括:

  1. 编译依赖安装:完整的开发工具链
  2. 源码下载和编译:配置选项和编译过程
  3. systemd 服务配置:这是源码安装的关键,包含了锁文件清理等重要细节
  4. 常见问题解决:基于实际遇到的问题提供解决方案
  5. 基本使用和优化:实用的配置示例

关键经验总结

  • ✅ systemd 服务文件必须包含锁文件清理步骤
  • ✅ 确保所有目录权限正确
  • ✅ 启动前清理残留的 PID 文件和 socket 文件
  • ✅ 使用 journalctl 和日志文件排查问题
  • ✅ 测试环境建议先手动启动验证配置

适用场景

  • 需要最新版本 OVS 特性
  • 研究和学习 OVS 源码
  • 定制化编译需求
  • 官方仓库版本不满足需求

对于生产环境,如果不需要特定版本,建议使用 dnf install openvswitch 安装官方包,更稳定且易于维护。

参考资源

  • Open vSwitch 官方网站
  • OVS 官方文档
  • OVS GitHub 仓库
  • RHEL 9 网络配置指南

作者注:本文基于实际安装过程编写,所有命令均经过测试验证。如有问题欢迎反馈。

http://www.dtcms.com/a/550866.html

相关文章:

  • 域名跟空间都有了怎么做网站网站的思维导图怎么做
  • 高端建站用什么软件菏泽 做网站 多少钱
  • 网站导航页设计标识设计公司排名
  • 【符号论】群的概念与五行关系的循环群结构
  • 宜兴网站建设价格信息做海报的素材那个网站比较好
  • 网站开发用到的技术上海网站建设上海
  • 昆山高端网站建设咨询设计公司职位
  • 你问GeeLark答 QA 第8章
  • 南京360推广 网站建设网页视频加速器
  • 有谁知道网站优化怎么做南宁网站建设信息推荐
  • 永川区网站建设名词解释搜索引擎优化
  • 点云深度学习:KPFCNN(Kernel Point Convolutional Neural Network)
  • Rust:类型 impl
  • STM32项目分享:避障小车设计
  • 从密集到稀疏:InfLLM-V2 如何实现零参数开销的长文本高效处理
  • 网站推广平台排行如何免费建立官方网站
  • 基于MATLAB的Copula函数实现合集
  • p2p贷款网站建设建设网站需要的人员及资金
  • 佛山市网站建设分站哪家好开发公司物业移交物业协议
  • wordpress 网站导航龙岩食品有限公司
  • 有网站做点什么好wordpress多媒体插件
  • 网站建设得缺点自媒体营销推广
  • 李红波先生与EDT过滤器(替代ERF1150X FILTER)的故事
  • 提示词构成
  • 镍钴分离的方法;镍钴分离树脂;除重树脂
  • 网上书城网站开发的结论与不足网站营销推广策划书
  • 郴州网站建设哪家公司好专做负面的网站
  • 做影视网站犯法吗鼎湖网站建设公司
  • Slicer项目Base目录
  • 揭秘低价网站建设危害莱州网络推广