1. 为什么非要替换CAS:被遗忘的授权清单与自主可控压力
先交代一下项目背景。我所在单位前几年采购了一批X86服务器,配套购买了新华三CAS虚拟化平台。那时候选型很简单,销售给了一套打包方案,硬件、虚拟化、运维服务一起签,部署完成之后确实省心——CAS的Web管理界面做得比较友好,虚拟机创建、模板分发、HA这些常规功能都有,底层基于KVM,跑业务系统也稳定。真正让我动了替换念头,是三年后的一次例行盘点:合同里CAS授权的CPU socket数只覆盖了第一波采购的物理机,后来新增的两台高配服务器根本没买授权,等于白跑了好几个虚机。销售给的续费报价也不便宜,算上技术服务年费,够买好几台新服务器了。更麻烦的是,售后工程师响应开始变慢,遇到平台级问题需要层层报备,和早期随叫随到的体验完全不一样。于是单位内部开始讨论:有没有可能用一套成本可控、自主运维的虚拟化方案把它替代掉。
这个“替代”不是从物理机直接改成虚拟化,而是从一个商业虚拟化平台迁移到另一个技术路线。CAS本质上是新华三基于开源KVM做的商业化封装发行版,加上了自己的管理组件、HA调度、存储对接和运维门户。它好用,但闭源,而且授权模式锁定你持续采购原厂服务。替代的核心诉求其实有三层:第一层是算力复用不受license限制,新服务器随时能纳入资源池;第二层是管理面可控,出问题我们自己的运维团队能完全排查、恢复、调优,而不是等供应商;第三层是技术栈向社区主流靠拢,便于后续接入容器、GPU直通、智能运维等更现代的架构。
文章是给谁看的?主要给两类人:一类是和我处境相似,手里跑着CAS、正在被授权成本和技术支持逼得头疼的运维工程师;另一类是正准备做虚拟化选型,想绕过商业锁定、一步到位走开源路线的技术管理者。下面的内容以我的实际迁移经历为主线,涉及选型对比、环境规划、迁移执行、踩坑复盘和替代后的运营实感,中间给出的命令、参数、处理方法都是我在这个项目里实际验证过的。
需要说明的是,我这里的业务规模不算大:物理服务器总计12台,承载虚机约60个,峰值在线率大概85%,业务类型包括Web服务、数据库、文件服务、中间件和一些内部系统。这个体量不复杂,但麻雀虽小五脏俱全,CAS所有的功能模块几乎都用了,迁移中该遇到的问题基本都碰到了,因此对同等规模或更小规模的团队参考价值很高。如果你们是上千虚机的超大规模场景,网络和存储架构会更复杂,本文的网络规划部分需要结合你们自身的SDN或存储方案做适配调整。
2. 替代方案选型:KVM技术栈里的三条路线与我的取舍
2.1 为什么替代品的候选锁定在KVM技术栈
先把CAS替换这件事想清楚:我们需要的不是“换一个牌子的虚拟化”,而是“换一套可以自主控制的虚拟化底座”。选型范围其实相当聚焦——Hyper-V是微软的商业授权路线,授权成本和CAS半斤八两,排除;VMware vSphere虽然功能成熟,但更高额的授权费用和长期订阅化趋势与我们替换初衷完全背离,排除;剩下的主流开源路线,无一例外都建立在Linux KVM内核技术之上。
KVM本身不是一个完整的虚拟化产品,它是Linux内核里负责CPU虚拟化和内存虚拟化的模块,需要配合QEMU提供设备模拟,再加上libvirt做管理API,以及上层的Web管理界面,才能形成完整的虚拟化平台。CAS也是这么搭出来的,只不过站在它上面的管理框架是新华三自己研发的。所以我们替换CAS,本质上是把“别人封装的管理层”换成“我们自己能掌控的管理层”,底层还是KVM,虚机的运行机制不会大变,这给迁移降低了难度——至少不需要重装每个虚机的操作系统,镜像和磁盘格式可以完整保留。
2.2 三条开源路线的横向对比
我实际考察了三条路线:Proxmox VE(以下简称PVE)、oVirt、以及纯KVM+libvirt手工栈。先说结论,我最终在生产环境选了PVE作为替代平台,但另外两条路线各有适用场景。
下面这个表格是我当时做的对比记录:
| 对比维度 | PVE(Proxmox VE) | oVirt | 纯KVM+libvirt |
|---|---|---|---|
| 部署难度 | 低,ISO安装即可 | 中高,需要Engine+Host分离部署 | 高,所有功能需手工搭建 |
| Web管理界面 | 完整,中文界面友好 | 完整,偏企业级但较笨重 | 无,需自建或纯命令行 |
| 高可用(HA) | 内置,基于Corosync | 内置,基于VDSM集群 | 需要手工配置Pacemaker |
| 存储支持 | LVM、ZFS、Ceph、NFS等 | 存储域概念,对接丰富 | 按需手工配置 |
| 虚拟机模板/克隆 | 支持完整和链接克隆 | 支持模板 | 需结合qcow2后端手工实现 |
| 学习成本和社区活跃度 | 低,社区文档海量 | 中高,社区活跃度一般 | 高,资料分散 |
| 适合规模 | 几十到几百虚机 | 几百到上千虚机 | 灵活但维护成本最高 |
PVE胜在“开箱即用且可控”——它把KVM的管理面做成了开源的Web服务,所有底层配置都能通过命令行或配置文件直接修改,没有黑盒。这对于我这种需要亲自排查问题的运维来说非常关键。oVirt的企业级功能更强,适合更大规模的集中管控,但部署和日常维护对人力要求高,我们团队只有三个人,没有余量伺候它。纯手工栈技术上限最高,但一切都要自己搭,包括存储池、网络桥、虚拟机生命周期管理、监控告警,工作量不可接受。
2.3 选型背后算的一笔账
选PVE除了有技术层面的原因,经济账也得能讲通。我们原来CAS的续费报价,按CPU socket数算,12台物理机全量覆盖的话,一年大概要花费数万元授权加服务费。PVE的订阅费用完全自愿,社区仓库和生产仓库的差别主要在于软件源更新频率及商业支持服务,不订阅照样能正常使用全部功能,只是不能使用企业源,切到社区源即可。这意味着硬件不变的情况下,这个替代项目的一次性成本几乎为零——买几块新硬盘做迁移缓冲、一台上架用的笔记本、若干根网线,再加我们三个人两周半的工时。
更重要的是算力自由。CAS时代新增服务器要谈授权,虚拟化平台的CPU核数预算卡得很死,很多性能冗余明明摆在物理机上却不敢开虚机。换到PVE之后,物理机上所有CPU核心都能被池化分配,同规格硬件的承载能力估算直接翻到了CAS时代的1.3倍。替换不是只看迁移成本,更要看替换后三五年里的持续释放空间。现在这套架构跑了一年多,后续加机器、扩资源池,不会再有人来跟我提“licence不够”四个字了。
3. 迁移前必须做好的四件套:清单盘点、驱动预植入、存储规划、网络拓扑
3.1 先从纸面清理:虚机台账是迁移的底稿
很多人对迁移的理解就是“把虚机复制到新平台,然后开机”。真这么干,后面准出乱子。我在动手之前花了整整两天做清单盘点,一张表管到底,每一行记录一个虚机:
- 虚机名称、IP地址、MAC地址、所属业务、重要级别
- 操作系统版本、位数、是否Windows域成员
- CPU核数和内存大小,迁移后是否有调整需求
- 磁盘数量、磁盘接口类型(virtio还是IDE)、磁盘容量和实际占用
- 是否有静态IP绑定、是否有特殊内核参数
- 是否依赖CAS特有的功能(比如虚拟机快照回滚、分布式虚拟交换机策略)
这份表看起来繁琐,但它是后续批量迁移顺序安排、资源配比估算、故障回滚的依据。比如我后来发现有个数据库虚机居然依赖CAS的虚拟机级别的“端口组安全策略”,这种虚机迁到PVE后,网络策略需要重新设计为PVE的Linux网桥对应方式,如果没有提前在台账里标记,走到网络配置环节就会卡壳。
清单里还要标注每台虚机的“可停窗口”。有些业务允许深夜停机半小时,有些只能周末停2小时,还有一套核心账务系统要求迁移后RPO为零、RTO不超过15分钟。不同的停窗口决定了迁移顺序和迁移方式,后面第4章我会结合具体案例讲。
3.2 驱动预植入:Windows虚机的生死线
这是整个迁移里最容易被忽略、但杀伤力最大的一步。CAS里的Windows虚机,默认磁盘总线通常是IDE或者它的私有驱动的SCSI模式,网卡通常是e1000或者virtio。迁移到PVE后,为了性能考虑,我强烈建议把磁盘总线改成virtio,网卡也改成virtio。问题在于,Windows系统在启动时如果找不到对应总线上的磁盘控制器驱动,会直接蓝屏或者卡在启动界面。你根本来不及进系统装驱动,因为系统起不来。
解决办法是在迁移之前就完成驱动预植入:在CAS上的Windows虚机里,手动挂载virtio驱动镜像,把磁盘控制器驱动和网卡驱动全部安装好,但暂时不切换设备类型。这样虚机里已经存在virtio驱动了,迁移后再改总线类型,Windows才能正常识别新硬件并加载对应驱动。这个步骤很多人会跳过,直到迁移完虚机启动蓝屏才回头补功课,那时候就非常被动了。
Linux虚机基本没有这个问题,只要内核里编入了virtio模块(主流发行版默认都有),迁移后改总线类型直接能起来。但需要注意,个别老系统(比如CentOS 6系列的默认内核)可能没编入virtio_blk,最好迁移前用modprobe virtio_blk检查一下,或者稳妥起见让老系统保持IDE总线,性能略差但能稳定启动。
3.3 存储规划和数据搬运的节奏控制
我们的存储方案选的是服务器本地盘+LVM thin pool,没有上共享存储。主要原因是规模不大,单台物理机的故障可以通过虚机备份快速恢复,不需要跨节点实时漂移;另外共享存储又是一笔投入,CAS时代我们也没用共享存储,迁移不想顺手把存储架构也推翻。
本地存储的部署要点是把系统盘和虚机数据盘分开。我规划每台物理机系统盘用两块SSD做RAID 1,其余数据盘直接组LVM thin池,用于存放虚机镜像。迁移阶段新老平台并行运行,原来的CAS机器还在持续承载业务,所以数据搬运不能一次性把物理网卡和存储资源全占满。我的节奏是白天只做清单梳理、驱动预植、网络配置,晚上业务低峰期再做磁盘复制,每次只迁2到3个虚机,复制完成后先不启动,第二天确认源端无新数据写入后再做增量同步和切换。
磁盘格式建议统一使用qcow2,原因有两个:一是qcow2是KVM生态默认格式,支持快照、支持压缩,后续维护最顺手;二是迁移过程中如果需要从源端多次增量同步,qcow2支持 overlay 方式做增量备份链,qemu-img 工具可以比较优雅地处理。CAS里导出的虚机磁盘原始格式可能是raw或者qcow2,无论哪种,我都是先转成qcow2再导入新平台。
3.4 网络拓扑:VLAN、bond和IP不冲突的完整设计
网络规划是最容易被“复制粘贴”心态坑到的环节。CAS的虚拟网络基于它自己的分布式虚拟交换机概念,绑定物理网卡做上行,虚机流量通过虚拟端口组划分VLAN。PVE的网络模型是Linux网桥,每个物理网卡或bond对应一个vmbr网桥,虚机接入网桥,VLAN通过网桥上的接口配置或VM内的VLAN标签实现。
我先理清现有资源:物理服务器各有两个千兆业务网口和两个万兆存储/迁移网口。规划如下:业务口做bond4(LACP动态聚合)后接vmbr0,承载所有需要走办公网和业务网的虚机流量;存储和迁移流量单独走万兆口,用独立的vmbr1,不承载业务,避免迁移数据搬运和业务流量互相挤占。
虚机IP地址保持不变,这是迁移能否顺利完成的重要前提。物理网卡改名后,虚机MAC地址尽量保持和CAS时代一致(尤其是Windows系统,网卡绑定IP时会记录MAC),避免因MAC变化引发IP冲突或域认证失败。我是在迁移前从CAS平台把每台虚机的MAC地址读出来,在PVE侧创建虚机时手动指定相同的MAC。
有一件事必须提前和网络同事确认:接入交换机的端口模式。如果原来CAS的物理服务器端口是trunk模式,那么新平台PVE服务器的端口也必须配置成trunk,否则虚机里按VLAN标签收发数据会直接不通。不要默认迁移后还会照旧,我曾经在一台接入交换机上吃过亏——端口在CAS下线后被网络同事按普通access模式回收了,迁移过程中物理机连上去虚机全断网,排查了两小时才找到原因。网络拓扑图最好画成文档,把物理口、bond、vmbr、VLAN、虚机MAC的对应关系全部落到纸上。
4. 迁移实施:从virt-v2v批量转换到手工修正的全过程
4.1 主力迁移工具:libguestfs的virt-v2v
CAS底层是KVM,虚机磁盘格式通常是qcow2或raw,理论上可以直接把磁盘文件拷到PVE上再用virtio总线启动。但直接拷带有个问题:磁盘文件里保留着原平台的设备配置痕迹,迁移后虚机启动时设备枚举顺序可能不一致,导致启动异常。更规范的做法是用virt-v2v做一次完整的“转换+清洗”。
virt-v2v是红帽开源的一个虚机转换工具,它能读取源虚机的磁盘镜像,在离线状态下修改里面的系统配置:卸载原平台的Tools或驱动残留、注入virtio驱动、重写fstab和grub配置、适配新平台的总线和网卡类型。这个工具原本是给KVM和vSphere之间迁移设计的,但只要是KVM体系,它同样适用。
我的操作流程分两段:
第一步,在CAS平台先把目标虚机通过它的备份/导出功能导出一份磁盘镜像。如果是大容量磁盘,导出过程比较久,建议直接在源虚机的存储文件层面用qemu-img做只读转换,避免CAS自己的导出格式折腾。
第二步,把导出的磁盘镜像文件放到PVE宿主机的临时目录,执行转换:
virt-v2v -i disk 源磁盘.qcow2 -o local -os /var/lib/vz/images/新虚机ID --network bridge=vmbr0 --vmtype server如果源磁盘是raw格式,先转qcow2:
qemu-img convert -f raw -O qcow2 源磁盘.img 待转换.qcow2转换完成后,virt-v2v会生成一个XML描述文件,里面包含了转换后的磁盘、网卡和显卡配置。我一般再用这个XML去定义PVE虚机,而不是让virt-v2v直接写进PVE的存储池,这样我对最终虚机配置有完全的控制权。
4.2 手工创建虚机与配置对齐:MAC、启动顺序、CPU模式
virt-v2v转换完成后,新虚机的配置文件里有些参数还需要人工对齐。我在PVE里手工创建虚机,把virt-v2v生成的磁盘文件挂载进去,然后逐项核对:
- 处理器类型设为
host(透传物理机CPU特性),避免因CPU型号漂移引起虚机内软件授权失效(比如某些数据库软件按CPU型号做license绑定) - 引导顺序设为磁盘优先,关闭软驱和光驱引导(避免PXE或光驱空转导致启动卡壳)
- 网络模型设为virtio,MAC地址手动填成原值
- 显卡类型按需改成VGA或SPICE,Windows虚机用VGA兼容性更好
- 如果是Windows虚机,磁盘总线强制设为VirtIO Block,但前提是前面3.2步的驱动预植入已经完成
启动虚机后,我固定执行三步检查:登录虚机确认IP地址正确、确认磁盘设备被正确识别(Windows下看设备管理器里磁盘控制器驱动无黄色感叹号)、确认业务进程正常拉起。这三步全部通过才宣告这台虚机迁移成功。万一启动失败,回滚策略也简单:把源端CAS上的原虚机重新开机,它的数据没动过,业务能在几分钟内恢复,只是CAS平台的资源占用要注意一下。
4.3 典型迁移案例:一套不分库的Oracle数据库虚机
这套库是项目里最让我紧张的迁移对象。业务关键、数据量大、停机窗口短。虚机配置是16核CPU、64GB内存、一块1.5TB的数据盘和一块100GB的系统盘。数据库存的是历史交易记录,平时查询多但写入相对平稳。
迁移前我做的额外准备是把Oracle的redo日志和归档目录单独记录下来,切窗口前让开发侧做一次手动检查点,确保数据文件状态一致。切窗口开始后,我先把系统盘原地复制到新平台(系统盘小,复制快),然后数据盘开启增量同步。增量同步用的是qemu-img的-b参数建立overlay快照链,第一次全量同步后,每隔5分钟把新增写入的块同步过去一次。等数据盘增量变化量小于100MB时,停源库,做最后一次增量同步,然后在新平台启动虚机,Oracle数据库做常规的redo应用和一致性校验。整个切换过程从停源库到新库对外提供服务,耗时约12分钟,低于RTO的15分钟要求。
这次迁移能这么顺利,真正的功臣是CAS和PVE都是KVM体系,磁盘文件格式和节流参数完全一致,virt-v2v转换时基本没有做复杂改动。如果是跨Hyper-V迁移到KVM,磁盘扇区对齐、启动引导都要重做,难度完全不是一个级别。
4.4 批量迁移的脚本化小技巧
几十台虚机不可能每台都手工点界面。我写了一个简单的Shell脚本,循环读取台账CSV文件,自动调用virt-v2v转换,然后通过“qm create + qm importdisk + qm set”一系列命令创建虚机并导入磁盘。脚本里加了严格的日志记录,每台虚机的转换开始时间、结束时间、命令返回值全部写进文件,便于出问题时回溯。
这里给出一个精简片段:
#!/bin/bash # 批量迁移脚本片段:仅作思路参考 while IFS=',' read -r vmname cpu mem diskdir mac olddisk; do echo "$(date) 开始转换 $vmname" >> migrate.log virt-v2v -i disk "$olddisk" -o local -os "$diskdir" --network bridge=vmbr0 \ --vmtype server > /tmp/${vmname}_convert.log 2>&1 vmid=$(pvesh create /cluster/nextid) qm create $vmid --name "$vmname" --sockets 1 --cores "$cpu" --memory "$mem" \ --net0 virtio,bridge=vmbr0,macaddr="$mac" qm importdisk $vmid "$diskdir/${vmname}.qcow2" local-lvm qm set $vmid --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-$vmid-disk-0 echo "$(date) $vmname 迁移完成,VMID=$vmid" >> migrate.log done < vm_list.csv注意这个脚本里的CPU规格是按单路多核设置的,如果源虚机是多路CPU,需要调整sockets参数。PVE里虚机CPU的分配策略很灵活,但最好在创建时就设计好,后面默认的CPU拓扑改起来比较绕。
5. 迁移后必须处理的五个隐藏雷区:从启动失败到性能回落
5.1 “设备启动失败”背后的virtio驱动缺失问题
迁移后的虚机有两台在首次启动时报错“设备启动失败”或者直接蓝屏。排查路径很典型:一台是Windows Server 2012,磁盘总线还在IDE,网卡被virt-v2v改成了virtio,但系统里没有对应的NetKVM驱动;另一台是Windows Server 2008 R2,virt-v2v已经注入了virtio驱动但重启后系统校验签名失败,蓝屏代码指向驱动加载失败。
处理方式分三种:
- 如果虚机能进安全模式,进安全模式手动安装virtio驱动,然后重启正常模式
- 如果不能进安全模式,用PE工具盘挂载镜像,离线把virtio驱动文件复制到系统驱动目录,并手动修改注册表HKLM\SYSTEM\CurrentControlSet\Services里对应驱动的Start值
- 最省事但性能上有点妥协的办法:磁盘总线改回IDE,网卡改回e1000,先保证系统能起来,后续再找窗口做驱动注入和总线切换
这次之后我把“迁移前驱动预植入”从建议项升级成了强制项,并且集团内部发文要求所有后续虚拟化迁移项目都按这个规范执行。血的教训比任何文档都管用。
5.2 CPU模式引发的性能回落与应用授权失效
迁移完成后,业务侧反馈一套财务系统查询变慢,还有一套工业软件提示license失效。第一次排查没头绪,后来对比发现:virt-v2v转出来的虚机CPU类型默认是qemu64或者按Virto方式模拟,没有使用宿主机的完整指令集。财务系统用的Java应用和加密算法依赖AES-NI指令,qemu64模式下这些指令不暴露给虚机,应用只能用软件算法跑加密,性能断崖式下跌。工业软件的license与CPU型号绑定,虚拟出的qemu64型号和原先CAS透传的host型号不一致,直接判定授权失效。
这就解释了我为什么在前面反复强调处理器类型设为host。普通办公类虚机感觉不到差异,但凡是涉及数据库、加解密、科学计算、工业软件的场景,CPU透传是必须项。修改方式很简单:在PVE的Web界面或通过命令行把虚机的CPU type改成host,然后重启虚机。
qm set 虚机ID --cpu host5.3 网络bond模式切换:LACP没协商通导致丢包
迁移后有一台数据库虚机出现间歇性丢包,业务偶发超时。查了一圈,问题出在物理机网络bond上。原来的物理网卡在CAS下跑的是主备模式(active-backup),我规划PVE时直接配置了LACP动态聚合,但接入交换机对应端口并没有启用LACP协商。协商失败后,bond接口不会自动变成主备模式降级使用,而是所有流量都卡在一条链路上且对端交换机完全不知情,表现就是间歇性丢包和链路震荡。
处理办法是两端对齐:交换机的成员口启用静态LACP或者动态LACP,PVE侧bond配置改成对应模式。如果交换机实在不支持LACP,就老老实实把bond模式设成active-backup。这里给个建议,机房内没有强制双链路高可用的场景,用active-backup模式更省心,它不依赖交换机侧任何协议配置,故障切换也很快。
修改PVE bond配置可以直接编辑/etc/network/interfaces:
auto bond0 iface bond0 inet manual bond-slaves eno1 eno2 bond-mode active-backup bond-miimon 100改完执行ifreload -a重载网络配置,确认bond0起来了再继续跑业务。
5.4 AMD-V/Intel VT开启状况确认:嵌套虚拟化与Docker Desktop的连带问题
这个雷区是迁移后半个月才爆出来的。部分开发部门的虚机里跑着Docker Desktop和WSL2,迁移后启动直接报“此平台不支持虚拟化的amd-v”或者“Docker Desktop启动失败,因为未检测到虚拟化支持”。原因在于:迁移前CAS平台默认向虚机暴露了物理CPU的硬件虚拟化标志,虚机里能开启嵌套虚拟化;而virt-v2v转换后的虚机CPU类型是qemu64,并不包含vmx/svm标志位,虚机内部看到的CPU就不支持硬件虚拟化。
排查方法很简单:
# 在物理机上确认硬件虚拟化已开启 grep -E 'vmx|svm' /proc/cpuinfo # 在虚机内部执行同样命令,如果没有输出,说明虚机没拿到标志位解决办法仍然是把CPU类型改成host。改完后Docker Desktop能正常启动。另外,Windows 11虚机如果开了VBS(基于虚拟化的安全),迁移后CPU标志位缺失会直接提示“此平台不支持虚拟化”,同样通过host模式解决。这个细节建议在迁移清单里提前标注:凡是开发测试类虚机、Windows 11版本虚机,迁移后一律检查CPU标志位。
5.5 快照链过度膨胀与磁盘空间告警
迁移完成两个月后,某台虚机的存储占用异常增长。排查发现是迁移过程中增量同步用的qcow2 overlay快照链没有正确合并,底层链太长,每个快照里都保留了一部分数据块,占用远超实际磁盘用量。qcow2的机制是写入时copy-on-write,快照层越多,源层数据块越分散,磁盘使用率膨胀得越厉害。
清理方式是用qemu-img的commit或convert合并快照:
# 查看快照链 qemu-img snapshot -l 磁盘文件.qcow2 # 将整个链合并回单文件 qemu-img convert -O qcow2 磁盘文件.qcow2 合并后.qcow2这个操作要在虚机关机或者至少磁盘只读状态下做,否则数据一致性没有保证。我在后续的迁移SOP里加了硬性要求:迁移完成后72小时内必须做一次快照链清理,并开启PVE的磁盘占用告警阈值。
6. 替代完成后的运营实感:效率、成本和自主运维的真实变化
替换CAS完成到现在一年多了,说几点最直接的感受。
运维效率方面,PVE的管理界面虽然不如CAS那么“商业感”,但胜在轻快、响应迅速,创建虚机基本秒级完成。模板分发、克隆、快照这些高频操作都比CAS顺手,尤其是快照功能,PVE原生支持的快照可以做到虚机运行状态下直接打点回滚,对变更操作的安全性提升明显。更重要的是,出问题时我可以直接在PVE宿主机上敲命令排查,层层看日志、看配置,CPU、内存、I/O的监控数据都能拉出来。这种感觉在CAS时代是没有的——以前遇到疑难问题,我能做的只是收集日志发给原厂,然后等回复,一等就是半天一天。
成本结构方面,授权费用彻底归零,省下来的预算变成了两台新服务器。因为不再受socket授权约束,我把原来CAS上不敢分配的低负载虚机重新做了资源整合,12台物理机的虚机承载数量从60个提升到了68个,还有余量。运维工时上确实有投入:PVE的社区文档丰富,遇到问题基本能自己解决,遇到中文资料少的场景,靠着官方wiki和英文社区也能搞定。对比原厂支持服务那几百块的时薪,自行解决问题的成本优势非常明显。
稳定性方面,一年里发生过一次物理机内存故障导致宕机。由于没有共享存储,这台机器上的虚机只能靠备份恢复到其他宿主机上。整个过程大概40分钟业务全部拉起,比CAS时代等备件、重启、启动虚机的周期快很多。这个教训促使我进一步改进了备份策略:现在每台虚机每日增量备份,每周全量备份,备份文件存放在独立的备份服务器上,恢复时直接通过PVE的备份恢复功能读取即可。
最后分享一个额外收获:因为整个平台完全开源标准化,我们团队对Linux内核、KVM原理、网络存储体系的理解明显上了一个台阶,排查问题的能力也涨了不少。原来三个人围着商业软件界面打转,现在三个人能系统地管起一套底层的虚拟化基础设施。从长远看,这是比省下的授权费用更有价值的东西。如果有人问我是否后悔做这个替换,我的回答是不会——但前提是,你真的愿意把平台当成自己的平台来运维,而不是换了免费平台后继续当甩手掌柜。