2、环境搭建:在Ubuntu/CentOS上安装OVS、启动OVS服务、验证安装是否成功

好,咱们正式开始动手。环境搭建这一步,说白了就是给系统装上OVS这个“软件交换机”。我见过不少新手在这一步翻车,其实没那么复杂。你跟着我来,一步步走稳就行。

2.1 操作系统与前置准备

我个人习惯用Ubuntu 20.04 LTS或CentOS 7/8来做实验。为什么?因为这两个发行版的包管理最成熟,踩坑最少。你想想看,要是系统源里都没有OVS的包,你还得手动编译,那多折腾。

先确认你的系统版本:

# Ubuntu
cat /etc/os-release

# CentOS
cat /etc/redhat-release

嗯,这里要注意:内核版本最好在4.19以上。我曾在CentOS 7的默认内核(3.10)上装OVS,结果有些高级特性跑不起来。后来升级了内核才搞定。

⚠️ 避坑指南: 我曾经在最小化安装的CentOS上直接装OVS,结果发现缺少gcc、make等编译工具。建议先装好基础开发包:
# Ubuntu
sudo apt update && sudo apt install -y build-essential

# CentOS
sudo yum groupinstall -y "Development Tools"

2.2 安装OVS——两种主流方式

安装方式我推荐两种:包管理器安装(省心)和源码编译安装(灵活)。咱们先讲最常用的包管理器方式。

方式一:apt/yum 直接安装

这是最快捷的路径。Ubuntu和CentOS的官方源里其实都带了OVS,但版本可能偏旧。我建议先添加OVS官方仓库:

# Ubuntu 20.04
sudo apt install -y openvswitch-switch openvswitch-common

# CentOS 7/8
sudo yum install -y openvswitch

等一下,CentOS用户注意:默认的epel源里OVS版本可能比较老。我建议用以下方式获取最新稳定版:

# CentOS 7 添加OVS官方源
sudo yum install -y https://rpm.ovn.org/centos/7.9.2009/x86_64/ovn-2021/ovn-2021.09.0-1.el7.x86_64.rpm

# 或者直接用RDO仓库
sudo yum install -y centos-release-openstack-train
sudo yum install -y openvswitch

方式二:源码编译安装(进阶)

如果你需要定制化编译选项,或者想体验最新特性,那就走源码编译。我在生产环境里其实更推荐这种方式,因为可控性更强。

# 下载源码
wget https://www.openvswitch.org/releases/openvswitch-2.17.0.tar.gz
tar -xzf openvswitch-2.17.0.tar.gz
cd openvswitch-2.17.0

# 配置与编译
./configure --prefix=/usr --localstatedir=/var --sysconfdir=/etc
make -j$(nproc)
sudo make install

这里有个小技巧:make -j$(nproc) 能利用你CPU的所有核心并行编译,速度能快好几倍。我第一次编译时没加这个参数,等了快20分钟……后来同事提醒了我。

💡 个人经验: 源码编译完成后,别忘了初始化OVS的数据库:
sudo ovsdb-tool create /etc/openvswitch/conf.db \
    /usr/share/openvswitch/vswitch.ovsschema
这一步很多人会漏掉,导致启动时报错。

2.3 启动OVS服务

装好之后,就该让OVS跑起来了。这里分两种情况:

使用systemd管理(推荐)

# 启动OVS数据库服务
sudo systemctl start ovsdb-server

# 启动OVS vswitchd服务
sudo systemctl start ovs-vswitchd

# 设置开机自启
sudo systemctl enable ovsdb-server ovs-vswitchd

你可能会问:为什么要先启动ovsdb-server?其实OVS的架构是分层的——ovsdb-server负责存储配置,ovs-vswitchd负责实际转发。先有数据库,交换机才能读取配置。这个顺序搞反了,服务就起不来。

手动启动(调试用)

有时候systemd抽风,或者你在容器里跑,那就手动启动:

# 启动数据库
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
🔑 关键点: 启动后检查一下进程是否在运行:
ps -ef | grep ovs
你应该能看到两个进程:ovsdb-server 和 ovs-vswitchd。少一个都不行。

2.4 验证安装是否成功

服务跑起来了,但怎么确认它真的能用?我一般用三板斧:

第一板斧:查看版本

sudo ovs-vsctl --version

输出应该类似:

ovs-vsctl (Open vSwitch) 2.17.0
DB Schema 8.2.0

看到版本号就说明核心工具装好了。我曾经遇到过一次,版本号显示正常,但ovs-vswitchd没启动,结果后面创建网桥全失败。所以别只看版本,还得看服务状态。

第二板斧:检查服务状态

sudo systemctl status ovsdb-server
sudo systemctl status ovs-vswitchd

输出里要有 active (running) 字样。如果看到 failedinactive,那就得去查日志了:

sudo journalctl -u ovs-vswitchd -n 50

第三板斧:创建测试网桥

这是最实在的验证方式——直接创建一个虚拟交换机试试:

# 创建一个名为br-test的网桥
sudo ovs-vsctl add-br br-test

# 查看网桥列表
sudo ovs-vsctl list-br

# 查看网桥详细信息
sudo ovs-vsctl show

如果能看到类似这样的输出,恭喜你,OVS已经可以正常工作了:

a1b2c3d4-e5f6-7890-abcd-ef1234567890
    Bridge br-test
        Port br-test
            Interface br-test
                type: internal
    ovs_version: "2.17.0"
⚠️ 注意: 测试完成后记得清理:
sudo ovs-vsctl del-br br-test
别留着测试网桥在生产环境里,我见过有人忘了删,结果网络拓扑里多了一个莫名其妙的桥,排查了半天。

2.5 常见问题与排错

搭建过程中难免遇到问题。我把最常见的几个列出来:

问题现象 可能原因 解决方法
ovs-vswitchd启动失败 内核模块未加载 sudo modprobe openvswitch
ovs-vsctl命令找不到 PATH环境变量问题 源码安装后执行 export PATH=$PATH:/usr/local/bin
创建网桥报错“permission denied” 当前用户无权限 使用sudo,或将用户加入openvswitch组
服务启动但ovs-vsctl show为空 数据库未初始化 检查 /etc/openvswitch/conf.db 是否存在

嗯,最后再啰嗦一句:环境搭建是整个实验的基础。我见过太多人在这一步图快,结果后面配置VLAN时各种报错,回头才发现是OVS没装对。所以,别急,把每一步都验证到位了再往下走。

下一章咱们就开始玩真的——配置VLAN隔离。到时候你会看到,刚才搭建的这个环境到底有多强大。