上一篇 下一篇 分享链接 返回 返回顶部

香港服务器如何利用Proxmox虚拟化平台实现Windows与Linux混合集群?

发布人:Minchunlin 发布时间:2025-08-25 10:26 阅读量:1104


那天是周五晚上 10 点,在香港湾仔机房里,我刚把第三台节点推入 42U 机柜底部,隔壁 ISP 的同事递来一杯冻柠茶:“又加班啊?”

我笑笑没接话——因为我知道,今晚不只是“装几台机器”,而是要把一个可以托管 Windows + Linux 混合业务 的 Proxmox VE 高可用集群落在这片嘈杂里。客户要的是快、稳、可扩、可回滚,而且跨境访问还要顺滑。下面这篇,就是我从零到一的完整实操过程,带着汗味、坑点和解决办法。

目标与约束(现场真实约束)

目标:搭建一套 3~5 节点的 Proxmox VE(下文简称 PVE)集群,支撑 Windows Server(域控、IIS/SQL、RDS) 与 Linux(CentOS 7、Ubuntu LTS、Nginx、Redis、容器工作负载) 的混合运行;提供 HA、在线迁移、快照/备份、模板化批量交付。

网络:香港本地 10/25GbE 内网,BGP 走多个运营商;管理、存储、业务流量分网段/分 VLAN;跨境链路延迟 30~60ms(取决于时段)。

存储:节点内置 NVMe 提供本地高 IOPS;集群用 Ceph 做共享存储(也给后续水平扩展留口子);另外接一台 Proxmox Backup Server(PBS) 做备份与异地复制。

操作系统:

Linux 模板以 CentOS 7 为主(客户遗留系统多),同时预置 Ubuntu 22.04。

Windows 模板以 Windows Server 2019/2022 为主,内置 VirtIO 驱动与 Cloudbase-Init。

合规:Windows 授权、软件版权合规;业务数据跨境传输加密。

机架与硬件清单(我实际采购与上架的参数)

注:下面是我们这一批交付的真实“级别”,你可以按预算等比例缩放。关键是网卡与盘位的规划,不要省在刀刃上。

角色 数量 机型/规格 CPU 内存 系统盘 数据盘 网卡 备注
PVE 计算+存储节点 3~5 台 1U/2U 双路(支持 AVX2/VT-d) 2×24C 256~512GB 2×480GB SATA SSD(RAID1) 4×3.84TB NVMe U.2(OSD)+ 2×1.92TB NVMe(DB/WAL) 2×25GbE(SFP28)+ 2×1GbE NVMe 抽拉盒便于热更
PBS 备份服务器 1 台 2U 1×16C 128GB 2×480GB SATA(RAID1) 8×16TB SATA HDD(RAIDZ2)+ 2×1.92TB NVMe(cache) 2×10GbE 只跑备份与远程同步
交换机 2 台 25G TOR 24×SFP28 + 4×100G 上行 MLAG/VSX,支持 LACP

上架顺序:自下而上,重量大在下;电源走 A/B 双路;每台服务器双电;SFP28 光模块做 25G 堆叠上连,LACP 到交换机对等聚合口(交换机侧开 mLAG/VSX,服务器侧 bond)。

网络与 VLAN 规划(能用一眼看懂的表)

我一向坚持把管理、存储、集群心跳、业务平面分开,否则现场排障要命。

网络用途 VLAN 子网 MTU 备注
管理(PVE GUI/SSH) 10 10.10.10.0/24 1500 只允许堡垒机/VPN 进入
集群心跳(Corosync Ring0) 20 10.20.20.0/24 9000 走 25G,尽量零丢包
Ceph 公网(client/public) 30 10.30.30.0/24 9000 VM 访问存储
Ceph 集群(cluster/replication) 40 10.40.40.0/24 9000 OSD 复制流量
业务前端(公网/内网) 100~199 依业务分网段 1500/9000 前端与后端按需拆 VLAN

ASCII 走线示意:

[ PVE Node ]===25G(bond0)===< TOR-A >==MLAG==< TOR-B >===25G(bond0)===[ PVE Node ]
         \__1G(ipmi)__/                                \__1G(ipmi)__/
           \____________________ PBS 10G/25G _____________________/

安装与基础调优(一步步做,出错了也能回头)

1)BIOS/固件设置(别跳过)

开启 VT-x/VT-d、SR-IOV;关掉 C-States(或调 conservative),开 Turbo。

SATA 模式 AHCI,关闭主板上会偷 IO 的“怪功能”(如自动 RAID 卡写缓存)。

更新到最新 BMC/IPMI 固件,设置好带内 KVM,固定 BMC IP 到管理网段。

2)安装 Proxmox VE

用官方 ISO 引导(U 盘写入即可),系统盘做 RAID1,文件系统我选 ZFS(mirror):

优点:自带校验、压缩、快照,便于日后主机级迁移/回滚。

安装时把 ashift 设为 12(对齐 4K),压缩选 lz4。

3)Linux 网卡聚合与桥(/etc/network/interfaces)

交换机侧:mLAG/VSX 打开,端口组 LACP active,Trunk 允许 VLAN 10/20/30/40/100-199。

auto lo
iface lo inet loopback

auto enp175s0f0
iface enp175s0f0 inet manual
    mtu 9000

auto enp175s0f1
iface enp175s0f1 inet manual
    mtu 9000

# 25G 聚合
auto bond0
iface bond0 inet manual
    bond-slaves enp175s0f0 enp175s0f1
    bond-miimon 100
    bond-mode 802.3ad
    bond-xmit-hash-policy layer3+4
    mtu 9000

# 管理桥(VLAN 10)
auto vmbr0
iface vmbr0 inet static
    address 10.10.10.11/24
    gateway 10.10.10.1
    bridge-ports bond0.10
    bridge-stp off
    bridge-fd 0
    mtu 1500

# 集群心跳(VLAN 20)
auto vmbr1
iface vmbr1 inet static
    address 10.20.20.11/24
    bridge-ports bond0.20
    mtu 9000
    bridge-stp off
    bridge-fd 0

# Ceph 公网(VLAN 30)
auto vmbr2
iface vmbr2 inet static
    address 10.30.30.11/24
    bridge-ports bond0.30
    mtu 9000
    bridge-stp off
    bridge-fd 0

# Ceph 集群网(VLAN 40)
auto vmbr3
iface vmbr3 inet static
    address 10.40.40.11/24
    bridge-ports bond0.40
    mtu 9000
    bridge-stp off
    bridge-fd 0

小贴士:MTU 统一很重要。交换机、服务器、桥、VLAN 子接口必须一致,否则 Ceph 会莫名其妙抖动。

4)创建 PVE 集群与冗余心跳

在第一台节点上:

pvecm create hk-cluster

把其他节点加入(在其他节点上运行 pvecm add x.x.x.x,x 为第 1 节点管理 IP)。

集群起来后,编辑 /etc/pve/corosync.conf,加双环(ring0=VLAN20,ring1=VLAN40):

totem {
    version: 2
    cluster_name: hk-cluster
    transport: udpu
    secauth: on
    token: 3000
    interface {
        ringnumber: 0
        bindnetaddr: 10.20.20.0
        mcastport: 5405
    }
    interface {
        ringnumber: 1
        bindnetaddr: 10.40.40.0
        mcastport: 5406
    }
}
nodelist {
    node {
        name: pve01
        nodeid: 1
        ring0_addr: 10.20.20.11
        ring1_addr: 10.40.40.11
    }
    ...
}
quorum {
    provider: corosync_votequorum
    two_node: 0
    wait_for_all: 1
    last_man_standing: 1
}

经验:双环心跳能极大降低单网口/单交换机故障的脑裂风险。

存储设计:ZFS + Ceph + PBS(各司其职)

主机系统:ZFS mirror(系统盘),稳定且可快照回滚。

共享块存储:Ceph(NVMe OSD),VM 放在 rbd 池,支持在线迁移/HA。

备份/归档:Proxmox Backup Server(HDD 为主、NVMe 做缓存),异地同步到另一个站点。

1)部署 Ceph(在 PVE 内置向导或 CLI)

每节点安装 ceph 组件,创建两张网络:

  • public network = 10.30.30.0/24
  • cluster network = 10.40.40.0/24

OSD 规划:每块 3.84TB NVMe 做 1 个 OSD,DB/WAL 放到独立 1.92TB NVMe。目标副本数 size=3,最小 min_size=2。

示例(以 CLI 表达思路,实际可用 WebUI 点几下):

pveceph install
pveceph init --network 10.30.30.0/24
# 创建 MON/MGR
pveceph createmon
pveceph createmgr

# 每个数据 NVMe 盘创建 OSD,并指定 DB/WAL 盘
pveceph createosd /dev/nvme0n1 --db_dev /dev/nvme2n1 --wal_dev /dev/nvme2n1
pveceph createosd /dev/nvme1n1 --db_dev /dev/nvme2n1 --wal_dev /dev/nvme2n1
# 其他节点同理

# 创建存储池,副本 3
ceph osd pool create rbd-pool 128
ceph osd pool set rbd-pool size 3
rbd pool init rbd-pool

PVE 存储配置 /etc/pve/storage.cfg 增加:

rbd: ceph-rbd
    pool rbd-pool
    content images,rootdir
    krbd 0
    nodes pve01,pve02,pve03

2)部署 PBS(备份与验证)

PBS 服务器上创建 datastore(如 hk-pbs-ds1),PVE 侧添加为备份存储,设置每日增量、每周完整与保留策略(如:日 7、周 5、月 12)。

务必做一次完整还原演练:拉起一台隔离网络的 PVE,把备份还原出来,验证 Windows/SQL、Linux 服务能启动,这一步能救命。

模板工程:一劳永逸的 Windows 与 CentOS 7

A. CentOS 7 Cloud-Init 模板

上传官方 ISO 与 cloud-init seed ISO(后者可由 PVE 自动生成)。

创建模板 VM:

qm create 7001 --name tmpl-centos7 --memory 4096 --cores 2 --sockets 1 --numa 1 \
  --cpu host --machine q35 --scsihw virtio-scsi-pci --scsi0 ceph-rbd:32 \
  --net0 virtio,bridge=vmbr100,tag=100 \
  --serial0 socket --vga serial0 \
  --ostype l26 --agent 1

qm set 7001 --ide2 local:cloudinit
qm set 7001 --boot c --bootdisk scsi0
qm set 7001 --rng0 source=/dev/urandom
qm set 7001 --balloon 2048
qm set 7001 --onboot 0

挂载 CentOS7 ISO 安装最小化系统(或直接导入 cloud image)。

安装常用工具、开启 qemu-guest-agent、chrony:

yum install -y qemu-guest-agent cloud-init chrony
systemctl enable --now qemu-guest-agent chronyd

清理机器特征(避免重复主机名/MAC):

cloud-init clean
rm -f /etc/ssh/ssh_host_*

转换为模板:

qm template 7001

常用 cloud-init user-data 示例:

#cloud-config
hostname: web-{{vm_id}}
manage_etc_hosts: true
ssh_authorized_keys:
  - ssh-rsa AAAA...你的公钥
package_update: true
packages:
  - wget
  - vim
  - net-tools
runcmd:
  - sed -i 's/^SELINUX=.*/SELINUX=permissive/' /etc/selinux/config
  - systemctl disable firewalld || true
  - echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
  - sysctl -p

B. Windows Server 2019/2022 模板(VirtIO + Cloudbase-Init)

上传 Windows 安装 ISO 与 VirtIO 驱动 ISO。

创建 VM:

qm create 7002 --name tmpl-winsrv --memory 8192 --cores 4 --sockets 1 --numa 1 \
  --cpu host --machine q35 --scsihw virtio-scsi-pci --scsi0 ceph-rbd:64 \
  --net0 virtio,bridge=vmbr100,tag=100 \
  --virtio0 ceph-rbd:32 \
  --serial0 socket --vga std \
  --agent 1 --ostype win10
qm set 7002 --ide2 local:iso/virtio-win.iso,media=cdrom
qm set 7002 --cdrom local:iso/WinSrv.iso
qm set 7002 --boot order=scsi0;ide2;virtio0

安装 Windows 时手动加载 VirtIO 存储与网卡驱动(在“加载驱动程序”选择 virtio ISO 里的 vioscsi/viostor、NetKVM)。

进系统后安装 Cloudbase-Init(支持 cloud-init 元数据),配置使用 OpenStack 元数据服务;开启 WinRM,安装 qemu-guest-agent。

sysprep 泛化:

# 以管理员身份 PowerShell
Enable-PSRemoting -Force
Set-Item WSMan:\localhost\Service\AllowUnencrypted $true
winrm set winrm/config/service/auth '@{Basic="true"}'

# 可选:时钟同步到香港 NTP
w32tm /config /syncfromflags:manual /manualpeerlist:"time.google.com,0x8" /update
w32tm /resync /force

# Sysprep 泛化
C:\Windows\System32\Sysprep\sysprep.exe /oobe /generalize /shutdown

模板化:

qm template 7002

基于模板批量克隆:

# Linux
qm clone 7001 101 --name web01 --full 0 --storage ceph-rbd
qm set 101 --cipassword 'Str0ngPass!' --ciuser devops --ipconfig0 ip=192.168.100.11/24,gw=192.168.100.1

# Windows(cloudbase-init 自动接收主机名/密码)
qm clone 7002 201 --name app01 --full 0 --storage ceph-rbd

HA、在线迁移与调度策略(让故障可承受)

将关键 VM 加入 HA 组,为节点打上 group/tag(区分机柜/供电 A/B),避免同组 VM 落在同一物理故障域。

打开 磁盘缓存 = write back(有 UPS 时),或 conservative 的 write through。

迁移测试(白天低峰做):

qm migrate 101 pve02 --online

NUMA-aware:CPU type 选 host,大内存 VM 开 NUMA,必要时做 CPU pinning:

qm set 201 --cpulimit 8 --cpuunits 2048

业务网络与防火墙(Windows + Linux 共存的“秩序”)

Proxmox Datacenter → Firewall 开全局防火墙,默认拒绝,白名单放行堡垒机、PBS、监控。

VM 级别用 Security Groups 做可维护的规则集(如 sg-rdp, sg-ssh, sg-web)。

Windows 启用 NLA 的 RDP;Linux 禁用密码登录,仅 SSH Key。

需要 SR-IOV/直通 的高吞吐 VM(如边缘网关)按需配置 VF 或 PCI Passthrough(记得开 intel_iommu=on/amd_iommu=on)。

自动化:Ansible + PowerShell(交付成“流水线”)

Ansible(Linux 初始化):

- hosts: linux_web
  become: yes
  tasks:
    - name: Update & base tools
      yum:
        name:
          - epel-release
          - htop
          - git
        state: present
    - name: Sysctl tuning
      sysctl:
        name: net.core.somaxconn
        value: "65535"
        state: present
        sysctl_set: yes
        reload: yes
    - name: Nginx install
      yum:
        name: nginx
        state: latest
    - name: Nginx enable
      service:
        name: nginx
        state: started
        enabled: yes

PowerShell(Windows 基线):

# 禁用旧版 TLS,打开必要功能
Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server' -Name Enabled -Value 0 -Type DWord
Install-WindowsFeature -Name Web-Server,Web-WebSockets,NET-Framework-Features -IncludeAllSubFeature
# 配置 RDP NLA
Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name UserAuthentication -Value 1

监控与日志

  • Node/VM:Prometheus Node Exporter、WMI Exporter(Windows);Zabbix 也可。
  • Ceph:关注 osd near full、pg stuck、slow ops;图表看延迟 ~ms 级别变化。
  • PVE:Syslog 收敛到 ELK/Graylog;备份任务结果必须报警(PBS 有通知 webhook)。

性能小抄(当天晚上我就这样把抖动压下去了)

关闭不必要的 offloading(某些 NIC + VirtIO 组合下小包多会高延迟):

ethtool -K eth0 gso off gro off tso off

磁盘调度:OSD/高 IOPS 盘设置为 none 或 mq-deadline,虚拟磁盘可用 io_uring。

Windows 磁盘对齐与写缓存:设备管理器启用写缓存;SQL/日志盘独立 vdisk。

时间同步:Corosync 对时很敏感,节点统一 chrony 指向同一 NTP,Windows 用 w32tm 指同源。

我踩过的坑与现场解法(不藏私)

症状 根因 解决
两节点同开机就“脑裂”警报 单环心跳 + 交换机单板重启导致丢包 双环 Corosync(见上),心跳走不同 VLAN 与不同物理路径
迁移中断、Ceph 抖动 MTU 不一致(交换机 9000,Linux bridge 1500) 统一所有路径 MTU;ping -M do -s 8972 验证
Windows 装不上/蓝屏 忘记加载 VirtIO 存储/网卡驱动 安装页“加载驱动程序”,选择 VirtIO ISO 对应版本
云端初始化失败 Windows 未装 Cloudbase-Init 或 sysprep 不彻底 安装 Cloudbase-Init,确保 sysprep /generalize 后再模板化
LACP 一直 up/down 抖动 交换机是 passive,服务器也是 passive 一端设 active(推荐交换机侧 active),另一端 passive
Ceph “slow ops” OSD DB/WAL 混在数据盘、写放大严重 独立 NVMe 做 DB/WAL;合理副本数与 PG 数
PBS 备份快但恢复慢 HDD 阵列无缓存、网络限速 加 NVMe cache、提升 PBS 网口至 25G,恢复走同 VLAN

交付验收清单(我真正在机房里逐项打勾)

  1.  三节点以上、Quorum 正常(pvecm status)。
  2.  双环心跳连通,ring0/ring1 都 ACTIVE。
  3.  Ceph 健康 HEALTH_OK,无 near full。
  4.  模板可克隆,Linux/Windows 首次启动能自动配置主机名/网络/密钥。
  5.  在线迁移 2 次以上无中断。
  6.  HA 演练:强制关机一节点,关键 VM 在 60~120 秒内恢复。
  7.  PBS 备份/还原演练通过。
  8.  防火墙基线、账号最小化、NTP 同步、监控告警联通。

成本与容量估算(实用表格)

项目 单价参考 数量 小计 说明
计算节点(含 4×3.84TB NVMe + 25G) ¥5~7 万/台 3 ¥15~21 万 可先上 3 台,后续水平扩
PBS(2U + 8×16TB HDD + 25G) ¥5 万 1 ¥5 万 备份与异地同步
25G TOR(成对) ¥6~10 万/对 1 ¥6~10 万 看品牌与特性
光模块/线缆 ¥500~1000/条 8 ¥0.4~0.8 万 25G SFP28
机柜与带宽(月) 香港按机柜/功率/带宽计费

备注:上面是我今年在香港两套集群落地的真实量级,波动来自供应链与汇率。

凌晨两点,HA 演练的最后一轮结束,关键 Windows 应用在另一个节点上 90 秒内起死回生;CentOS 7 的 Nginx 撑着压测的长连接稳如老狗。换好最后一个标签,我靠着机柜坐了会儿,外面港岛的夜风从卸货区缝隙钻进来,带着一点海味。
第二周客户突发一次物理节点 PSU 故障——告警响起,我只看了一眼 Proxmox 的 HA 面板,VM 已经在备用节点跑起来了。用户那边几乎无感。那一刻我知道,这套 Windows + Linux 混合集群是真的“接住了”。

附:我常用的命令与文件片段(可直接抄)

查看集群与迁移:

pvecm status
pveperf
qm list
qm migrate <vmid> <target-node> --online

Ceph 快速健康检查:

ceph -s
ceph osd df tree
rados df

PBS:手动触发备份任务(在 PVE 上):

vzdump 101 201 --storage pbs-hk --mode snapshot --compress zstd

Windows 时钟与 RDP:

w32tm /query /status
Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server' -Name fDenyTSConnections -Value 0

CentOS 7 ifcfg 示例(VLAN 100):

# /etc/sysconfig/network-scripts/ifcfg-eth0.100
DEVICE=eth0.100
BOOTPROTO=none
ONBOOT=yes
VLAN=yes
IPADDR=192.168.100.11
PREFIX=24
GATEWAY=192.168.100.1

如果你也在香港、深圳或任何需要低时延对外的地方要搭一套混合集群,Proxmox + Ceph + PBS 是我反复验证过的“性价比三件套”。
记住三个关键词:分平面、可回滚、可验证。把坑踩在凌晨,把稳定留给白天的业务。等你从机房出来,楼下便利店还在亮着灯——买瓶冻柠茶,给自己也打个勾 ✅。

目录结构
全文