利用虚拟环境实现家用服务器的(全能)改造

不知不觉间,已经在家里组建了三台服务器

  1. 一台运行 Windows 10 Pro 的文件服务器,同时提供 Plex 视频串流
  2. 一台运行 Xpenology 的监控服务器,同时做手机照片备份
  3. 一台运行了各种服务的综合服务器,提供包括智能家居控制、个人网站等等各项服务

这次又按耐不住,开始折腾第四台服务器了。

改造需求

这次第四台服务器主要为了满足两个需求,一是为移动设备提供 4k HDR 转码服务,二是尝试一下更快的数据传输速度,直接上 10Gbps 网络。

但是,服务器多了费电。之前的 #3 服务器就因为耗电问题,各项服务都陆续转移到其他两台服务器里面去了。所以这次折腾服务器的另外一个目标:整合服务,只留两台服务器。

改造方案

目标有了,行动方案也很清楚了:新服务器替换掉 #1 服务器,将 #2 和 #3 服务器整合。然后在整合之后的 #2 服务器上安装 10Gbps 网卡,制作软交换机(网桥)。

这个方案是根据 #2 和 #3 服务器的配置来制定的。

  • 服务器 #2:Core i7-4790,Dell Inspiron 3647 主板(仅有一条 PCIe x16 插槽和一条 x1 插槽)
  • 服务器 #3:Core i7-4770,Asus ROG G30AK 主板(有三条 PCIe x16 插槽,分别是 x8/x8/x4 模式,和一条 x1 插槽)

整合之后的服务器会使用 Asus ROG G30AK 主板配合 Core i7-4790 处理器。因为四代酷睿已经能很好支持虚拟化技术,可以挂上下列板卡(按插槽顺序),并使用硬件直通分配给各个虚拟机

  • PCIe x8:LSI 9207-8i SAS 卡(直通给 NAS 虚拟机)
  • PCIe x1:Intel I350-T4 四口千兆网卡(分别直通给:NAS 虚拟机、软交换虚拟机、智能家居虚拟机、杂务虚拟机)
  • PCIe x8:多口万兆网卡(所有端口均直通给软交换虚拟机)
  • PCIe x4:单口或多口万兆网卡(其中一个端口直通给 NAS 虚拟机)

说句题外话,这种组合暴露出普通桌面电脑的弱项:PCIe 通道不够多。Core i7-4790 仅有 16 条 PCIe 3.0 通道,Z97 芯片组仅能扩展出最多 8 个 PCIe 2.0 通道,其中还有一部分要分给主板上的其他设备(板载声卡、网卡等等)。这次插入四张板卡就已经是 Haswell + Z97 平台的极限了,如果要塞入更多卡就只能换成 Xeon 处理器 + 服务器主板了。

之所以要考虑 PCIe 通道数量,是因为扩展卡需要足够的通道数量才不会造成性能瓶颈。比如将 40GbE + 10GbE 网卡插入 PCIe 2.0 x4 插槽仅能获得 5GT/s x 4 = 20GT/s(略少于 20Gbps)带宽,离满速运行所需要的 50Gbps 相去甚远。当然,带宽只要够用就行,实际使用 PCIe x8 插槽最多也就只能达到不超过 40Gbps 速率,但是这个速率已经完全可以满足三台 10Gbps 设备之间的数据交换需求。

回归主题,既然用了硬件直通,那么底层虚拟机 Hypervisor 一定要操作简单、功能强大、最好还要免费。大概答案只有一个:VMware ESXi。

NAS 部分继续使用 Xpenology。软交换机大概可以选比较通用的 OpenWrt。

硬件采购

既然方案已经确定了,接下来就是采购工作。这次照例还是去 eBay 捡垃圾。本着“尝试有风险,一张卡不行就再换一张”的原则,购买了下面几张万兆网卡。

IMG_20210309_120458.jpg

从上到下依次是

  1. Mellanox MHZH29B-XTR ConnectX-2 40GbE (QSFP+) + 10GbE (SFP+) 双口网卡
  2. HP 764285-B21 544+FLR-QSFP 10GbE/40GbE 双口网卡(Mellanox ConnectX-3 Pro)
  3. Broadcom NetXtreme II BCM57711 双口 10GbE (SFP+) 网卡
  4. Emulex OneConnect OCe11102-NX 双口 10GbE (SFP+) 网卡
  5. Intel X520-DA1 单口 10GbE (SFP+) 网卡

其中 #2 拿到手之后发现,其使用的是 HP 自己的 FlexibleLOM 插槽规格,看着像是 PCIe 引脚,但是跟标准的 PCIe 3.0 引脚规范还是有区别的,插到主板上不识别,需要 FlexibleLOM to PCIe 转换卡。这部分详见《如何正确使用 HP 764285-B21 10GbE/40GbE 双口 FlexibleLOM 网卡》

另外,收到的第一张 #1 是坏的,插到机器里只能识别出 Mellanox Technologies MT25408 [ConnectX IB Flash Recovery] (rev b0),尝试刷写硬件会报 MFE_NO_FLASH_DETECTED 错误(见下图)。于是只能联系卖家更换。好在卖家很痛快地又发了一张卡给我。

screenshot_burn_fixed.png

2021-04-15 更新: Mellanox ConnectX-2 仅支持 40Gbps InfiniBand 或者 10Gbps Ethernet。如果使用 QSFP+ to SFP+ breakout cable 的话,仅第一个 SFP+ 可以建立 10GbE 连接,其他的 SFP+ 插头不工作。

软件兼容性

板卡线材都拿到手了之后,才发现软件兼容性是一个很让人头疼的问题。因为这些板卡都年代久远,基本上要么属于完全过时不予支持(obsolete),要么已经到支持周期边缘。

  • ESXi 7.0 不支持 #1 和 #4,需要降级到 ESXi 6.7。
  • OpenWrt 需要 21 以上版本才能支持这些网卡(后面会说明如何设置)。
  • Xpenology 目前我在用的 DSM 6.x Loader v1.04b 模拟出来的 DS918+ 环境仅支持 #5。

硬件直通

ESXi 上面设置硬件直通在这里不多做赘述,网上各种教程有很多。

这次硬件直通的经验总结如下:

  1. LSI 9207-8i(显示为 LSI2308)可以整体直通给 NAS,这样就不用针对每个硬盘做直通,方便快捷。
  2. Intel I350-T4 可以将不同的端口直通给不同的虚拟机。
  3. Emulex OneConnect OCe11102-NX 也可以将不同的端口直通给不同的虚拟机。
  4. Broadcom NetXtreme II BCM57711 不可以将不同的端口直通给不同的虚拟机,要注意。
  5. 网卡直通不需要设置 SR-IOV,只需要将 PCIe 设备直通给虚拟机就好。

而对于“网卡直通给软交换机”和“使用 ESXi 虚拟交换机桥接网卡”之间的性能区别,我并没有花时间做对比,在此也不多做评论。

最终配置清单

把兼容性问题都搞明白了之后,就可以决定到底使用那些硬件了。

  1. PCIe 3.0 x8: LSI 9208-8i 八口 SAS 存储卡
  2. PCIe 2.0 x1: Intel I350-T4 四口 1GbE (RJ45) 网卡
  3. PCIe 3.0 x8: Mellanox MHZH29B-XTR ConnectX-2 40GbE (QSFP+) + 10GbE (SFP+) 双口网卡
  4. PCIe 2.0 x4: Intel X520-DA1 单口 10GbE (SFP+) 网卡

软件方面。

  1. 虚拟机:ESXi 6.7 U3
  2. 软路由:OpenWRT 定制版(直通:#2 的一个端口,#3)
  3. NAS:Xpenology loader v1.04b + DSM 6.2.3(直通:#2 的一个端口,#4)
  4. 智能家居:Home Assistant(直通:#2 的一个端口)
  5. 科学下载:Ubuntu 20.04 + VPN + qBittorrent(直通:#2 的一个端口)

安装 OpenWRT

在写下本文时,OpenWRT 的最新稳定版本为 19.07.7。然而这个版本对于网卡的支持有限。要支持所有上面的网卡,尤其是 Mellanox ConnectX-2,需要至少 21.xx 版本。所以这里我们需要下载正在开发中的每日生成版本

启动虚拟机之后,先关掉 DHCP、DNS 和防火墙。

# Disable DHCP and DNS
/etc/init.d/dnsmasq disable
/etc/init.d/dnsmasq stop

# Disable DHCPv6
/etc/init.d/odhcpd disable
/etc/init.d/odhcpd stop

# Disable firewall
/etc/init.d/firewall disable
/etc/init.d/firewall stop

之后,设置 IP 地址。(需要重启让设置生效)

# vi /etc/config/network
config interface 'lan'
    option proto 'static'
    option ifname 'eth0'
    option ipaddr '192.168.x.x'
    option netmask '255.255.255.0'
    option gateway '192.168.x.x'
    option dns '192.168.x.x'
    option ip6assign '60'

这个版本的 OpenWRT 安装之后是不带网络管理界面的,需要手动安装。各个驱动也需要手动安装。

opkg update
opkg install luci
opkg install kmod-mlx4-core

各个网卡的驱动程序包名字如下

  • (Mellanox ConnectX-2) -> kmod-mlx4-core
  • (Broadcom NetXtreme II BCM57711) -> kmod-bnx2x
  • (Emulex OneConnect OCe11102-NX) -> kmod-be2net
  • (Intel X520-DA1) -> kmod-ixgbe

Mellanox ConnectX-2 是一块 Ethernet/InfiniBand 双模网卡,这里我需要连接到其他 Ethernet 设备,所以需要在 OpenWRT 加载驱动的时候强制网卡选择 Ethernet 模式。(需要重启让设置生效)

# vi /etc/modules.d/mlx4
mlx4_core port_type_array=2,2
mlx4_en

然后,设置网络桥接。(需要重启让设置生效)

# vi /etc/config/network
config interface 'lan'
    option proto 'static'
    option type 'bridge'
    option ifname 'eth0 eth1 eth2'
    option ipaddr '192.168.x.x'
    option netmask '255.255.255.0'
    option gateway '192.168.x.x'
    option dns '192.168.x.x'
    option ip6assign '60'

最后,将 QSFP+ -> 4 x SFP+ breakout cable 插到 Mellanox ConnectX-2 的 QSFP+ 端口上,将其中分出来的一条插到 Intel X520-DA1 的 SFP+ 端口上,在 DSM 里面就能看到 10Gbps 连接了。

dsm_10gbps.png

跑了一下 iPerf,确认 10Gbps 连接无误。

capture_10gbps.PNG

安装 VMware Tools

OpenWRT 下安装 VM Tools。

opkg update
opkg install open-vm-tools

Ubuntu 下安装 VM Tools。

# On Ubuntu server (without GUI)
sudo apt-get install open-vm-tools
# On Ubuntu desktop (with GUI)
sudo apt-get install open-vm-tools-desktop open-vm-tools

DSM 下安装 VM Tools,需要先下载 SPK 软件包,然后再在套件中心里面安装。


插曲:CPU 开盖

在服务器上线试运行的时候,开机之后不久就马上花屏死机。本来以为是散热器没装好,重新安装之后故障依旧。于是意识到,大概是该换 CPU 内部的散热硅脂了。于是从亚马逊搞来一套 CPU 手术工具,打开一看,果然内部散热硅脂已经干掉了。

IMG_20210315_004336.jpg

清理之后重新涂了 Youtube 主播都赞不绝口的 Thermal Grizzly Kryonaut,装好散热器重新上电之后果然 CPU 比以前清爽了很多。空载温度由 40°C 降到了 32°C。

这里要补充说一下,最好选择不导电的散热硅脂,这样就算涂的稍微多一点也不用担心。而且,不管是 CPU 内部的散热硅脂,还是 CPU 和散热器之间的散热硅脂,只要涂的不太少就可以,稍微多涂一些无所谓。对于采用钎焊的 CPU 不推荐开盖换硅脂。

另外还有一种散热改良方案是在开盖之后直接裸露运行(direct die)。这种方式对于散热器的高度和散热性能都有特殊要求。因为不加盖的话,CPU 会比正常状态下矮几个毫米,如果散热器高度不可调的话,这几个毫米的空隙会对散热造成很大影响。

已有 2 条评论
  1. Ivan Ivan

    你好, 想請問關於:

    Emulex OneConnect OCe11102-NX 也可以将不同的端口直通给不同的虚拟机。
    Broadcom NetXtreme II BCM57711 不可以将不同的端口直通给不同的虚拟机,要注意。

    要怎樣判斷NIC卡支不支持將端口直通给不同的VM呢? 因為目前我正在使用hp 530flr直通給DSM VM使用發現浪費了一個10Gb端口, 所以打算只直通其中一個端口, 另一端口安排給vswitch使用, 但這樣設定後DSM無法得到IP, 只能雙端口都直通給DSM才能正常使用

    1. BCM57711 的两个端口是绑定在一起的,开启直通的时候,只要开启其中一个端口,另外一个端口也同时开启。另外,如果将两个端口分别分配给两个不同的虚拟机,第一个虚拟机可以正常开机,第二个虚拟机开机会报错,说设备正在使用。

      查了一下,HP 530FLR 用的是 QLogic 57810S 芯片,需要看一下 DSM 对这个芯片组的支持如何,或者尝试一下 IG-88 发布的 extra 驱动包。

添加新评论