VMware Workstation 16搭建CentOS 8虚拟机集群实战 1. 先把方案定下来平台选型、节点规模与网络拓扑1.1 为什么这套组合至今仍然值得用用 VMware Workstation Pro 16 搭一套 CentOS 8 虚拟机集群说白了就是在一台物理机上用软件“造”出三到五台互相能通的服务器用来做分布式练习、主从复制实验、集群中间件部署这些活。我在带新人的时候基本都用这套组合起步原因是它的门槛足够低不需要额外的物理机不需要采购服务器一台 16G 内存的笔记本就能跑起来三个节点关机快照一打实验环境随时能回滚到干净状态。Workstation Pro 16 这个版本有几个实际好用的点。一是它对硬件版本的支持比较新虚拟机可以开到 18 及以上的硬件版本对多核、大内存的调度比老版本顺畅二是快照管理和克隆功能做得比较成熟一台配好的“模板机”能快速复制出整个集群三是虚拟网络编辑器可以自己规划子网和 DHCP 范围这对集群来说很关键因为集群里的机器必须用固定 IP不能让 DHCP 随机分配。CentOS 8 作为操作系统选它有历史和生态的原因。它的包管理用 dnf和 yum 命令基本兼容systemd、firewalld、NetworkManager 这套组合和主流企业发行版一致学到的操作习惯可以平滑迁移。需要提前说清楚的一点是CentOS 8 的生命周期已经结束官方主镜像不再维护默认的 yum 源大概率是拉不动的后面第 4 节会专门讲怎么把源换到归档地址这一步不做后面所有装包操作都会卡住。适合看这篇内容的人大概分三类一是刚开始接触 Linux 集群概念想在自己电脑上把环境跑起来的二是需要一套可反复销毁重建的实验环境做数据库主从、消息队列集群、容器编排前置练习的三是想搞清楚虚拟机克隆、网络规划这些“环境工程”细节的。整套流程不需要你提前懂集群软件但基本的 Linux 命令得会敲。1.2 节点数量与资源分配的计算过程集群节点数不是拍脑袋定的。做最小可用的分布式实验三台是最常见的起点因为多数集群软件的心智模型就是“多数派”三节点能容忍一台挂掉两节点反而容易出现脑裂判断的尴尬。如果你的目标是练容器编排或者分布式存储三台是底线如果只是练主从复制、负载均衡这类两台也能凑合但很多演示效果出不来。资源分配要做一道简单的算术题。假设宿主机是 16G 内存、8 核 CPU角色数量单台内存单台 vCPU单台磁盘小计内存集群节点34G220G12G宿主机自身占用1———约 4G合计——6 核60G16G这个配置刚好卡在临界点上宿主机只剩 4G 左右给系统和其他软件浏览器多开几个标签页就开始转圈。我的建议是宿主机内存 16G 时节点内存压到 3G或者干脆把节点数减到两台做入门宿主机有 32G 的话三节点各给 4G 甚至 6G 都毫无压力。CPU 这块有个常见的误区就是觉得“我给虚拟机多分点核它就跑得快”。实际不是这样。虚拟机分到的 vCPU 是要宿主机真实核心来调度的如果你给三台虚拟机各分 4 核总共有 12 个 vCPU 抢 8 个物理核心结果就是 CPU 就绪时间飙升虚拟机里的操作会明显发涩。稳妥的做法是总 vCPU 数不超过物理核心数的 1.2 倍每台给 2 核是比较舒服的配比。磁盘容量也要留够。CentOS 8 最小安装大概占 2G 出头加上后续装中间件、存日志、放数据20G 是起步线。如果打算在同一套集群上练容器和镜像仓库单台给到 40G 更从容。另外注意完整克隆三台机器意味着宿主机磁盘上会实打实多出 60G 以上的占用克隆之前先看一眼宿主机剩余空间别等到克隆到一半才提示磁盘不足。1.3 网络模式选型NAT、桥接还是仅主机这是整套方案里最容易被忽略、但后期最折磨人的一环。Workstation Pro 提供三种主要网络模式各自的适用场景差别很大。模式虚拟网卡IP 来源能否访问外网局域网其他设备能否访问虚拟机适用场景桥接复用物理网卡由所在局域网分配能能需要被同事或手机访问的实验NATVMnet8由虚拟 DHCP 分配能不能绝大多数本地集群练习仅主机VMnet1由虚拟 DHCP 分配不能不能纯内网隔离、安全实验对集群练习来说NAT 模式是最省心的选择。虚拟机共享宿主机的网络出口装包、拉镜像、访问外部服务都不受影响同时又和宿主机所在的局域网隔离开不会因为虚拟机的 IP 和公司网络里的设备冲突而被网管找上门。桥接模式虽然能让虚拟机看起来像局域网里的一台真机但它会占用局域网 IP 段一旦你的笔记本换了办公地点IP 网段变了之前配好的静态 IP 全部失效得逐个改很麻烦。仅主机模式适合做完全隔离的环境但代价是虚拟机上不了外网装包得靠本地镜像源前期准备成本高。用 NAT 模式要记住两个关键数字。打开虚拟网络编辑器能看到 VMnet8 的子网地址和 NAT 设置。默认情况下 NAT 网关地址是子网里的.2比如子网是192.168.100.0/24网关就是192.168.100.2。DHCP 的地址池默认从.128开始到.254也就是说.1到.127这段是留给静态 IP 的。规划集群 IP 时就往这段里挑比如.11、.12、.13既不会和 DHCP 撞车也不会和网关冲突。这个细节不注意你配好静态 IP 用了几天某天宿主机重启后 DHCP 把同一个地址分给了别的虚拟机就会出现“莫名其妙连不上”的情况。如果后期想更进一步可以给每台虚拟机加第二块网卡走仅主机模式 VMnet1专门承载集群内部通信。这样外网流量走 NAT节点之间的数据同步走内网互不干扰也更接近真实机房的网络分层。这个做法在第 3 节会展开。2. 宿主机准备与第一台“模板机”的落地2.1 宿主机上必须先做的三项检查很多人卡在第一步不是不会装而是装完发现虚拟机性能差得离谱或者“虚拟化引擎”那个选项灰掉点不动。这类问题的根源基本都在宿主机层面装系统之前先检查三件事能省掉后面大半的折腾。第一件事确认宿主机没有启用相互冲突的虚拟化功能。Windows 系统上如果开了“虚拟机监控程序平台”“虚拟机平台”这类功能Workstation 就无法直接接管 CPU 的虚拟化指令会退化成用户态模拟模式性能直接掉一大截。表现就是开机慢、CPU 占用高、想勾选嵌套虚拟化选项时提示不支持。处理办法是在系统的“启用或关闭功能”里把相关项取消勾选重启后再开 Workstation。同时留意一下内核隔离、内存完整性这类安全特性它们也可能影响虚拟化指令的可用性。第二件事确认 VT-x 或 AMD-V 已经在固件里打开。任务管理器里能看到“虚拟化已启用”才算过关。如果显示已禁用需要进固件设置里找对应开关通常叫虚拟化技术、虚拟化支持之类。这一步不过关虚拟机连正常安装都跑不起来更别说勾选嵌套虚拟化。第三件事把虚拟机存储目录规划好。默认情况下虚拟机会放在系统盘的用户目录下三台机器加上快照几十上百 G 的空间很快就吃满了。建议在空间充裕的非系统盘上建一个专门的目录比如命名为集群实验然后在 Workstation 的偏好设置里把默认虚拟机位置改到那里。这样后续所有克隆都落在正确的盘上也不用担心系统盘爆掉导致整台电脑卡死。2.2 CentOS 8 安装过程中的关键选择安装介质从归档站点下载即可选择 DVD 版的 ISO 镜像比较省事它自带基础软件包装完不用立刻联网。下载完成后校验一下文件完整性镜像损坏导致安装中途报错的情况并不少见尤其是在网络不稳定的环境里下的包。新建虚拟机时Workstation 会问你用哪种安装方式。这里选“稍后安装操作系统”不要用自动安装或者简易安装。自动安装会套用一套它认为合理的默认配置分区方案、软件包选择都由它决定后期想改回来很麻烦。手动走一遍安装流程虽然多点几下但你能控制每一个关键参数。进入 Anaconda 安装界面后有四个地方的设置值得停下来想一想。其一是安装源和软件选择。软件选择里选“最小安装”还是“带 GUI 的服务器”取决于你的用途。集群节点通常是纯命令行的选最小安装就够装完系统干净、占用少、没有一堆用不上的服务在后台跑。需要图形界面的场景才选带桌面的选项但代价是内存占用高、开机慢三台一起开的时候宿主机压力会很明显。其二是分区方案。选自动分区也能用但自动分区往往会给你弄出一个体积不太合理的根分区。手动分区的话/boot给 1G交换分区给 2G剩下的全给根分区用 xfs 文件系统这是 CentOS 8 默认的搭配稳定且够用。如果你的机器内存给到了 4G 以上交换分区甚至可以只给 1G 或者干脆不要因为集群里通常更希望通过配置调整来避免频繁换页而不是靠交换分区硬扛。其三是网络和主机名。安装界面的右下角可以先把主机名改好比如node01并且把网卡开关打开。这里打开之后会触发 DHCP 分配地址虽然集群最终要用静态 IP但安装阶段能在线拉包会方便很多。如果打算装完立刻换源也可以先在这里把网络配通。其四是根密码和用户。集群环境里我习惯直接设置 root 密码并允许 root 登录省得每次操作都加 sudo。这只是实验环境的选择正式环境应该建普通用户并配置提权。密码别设太简单某些系统策略会校验复杂度设得太弱会卡在安装最后一步过不去。2.3 模板机装完立刻要做的五件收敛动作装完重启之后这台机器还不叫“模板机”只能叫“装好了系统的机器”。想要它配得上模板这两个字得先做一轮收敛把后面批量复制时会出问题的地方提前处理掉。第一件把软件源换到归档地址。这个动作放在最前面因为后面所有装包操作都依赖它。CentOS 8 的默认源指向的地址已经不提供服务了直接执行装包命令会报找不到仓库或者超时。具体怎么改第 4 节会给完整的配置文件内容这里先记住这个顺序换源 → 清理缓存 → 重新生成缓存三步做完再干别的。第二件装上常用的基础工具。最小安装的系统里连vim、wget、net-tools、bash-completion这些都没有不装的话后面每一步都会别扭。一条命令批量装掉dnf install -y vim wget curl net-tools bash-completion lsof tar unzip装bash-completion之后记得重新登录一次 shell命令补全才生效很多人装完发现补全没反应就是没重连。第三件处理安全策略。实验环境里 firewalld 和 SELinux 经常是各种“服务起不来”“端口访问不到”的元凶我一般在模板机阶段就把它们调成宽松状态减少干扰。防火墙用systemctl disable --now firewalld停掉并禁止开机自启SELinux 临时用setenforce 0切到宽容模式再把配置文件里的默认值改成 permissive重启后依然生效setenforce 0 sed -i s/^SELINUXenforcing/SELINUXpermissive/ /etc/selinux/config注意这只是实验环境的取舍。如果你的集群练习本身就包含安全加固环节那这两项应该保留并且按规范配置端口放行规则别图省事全关掉。第四件安装虚拟机增强工具。它能让虚拟机和宿主机之间的时间同步更准、鼠标切换更顺、剪贴板共享可用。命令很简单dnf install -y open-vm-tools如果装了图形界面再补一个open-vm-tools-desktop。纯命令行环境只装前者就够了装桌面版反而会带进一堆图形依赖。第五件清理痕迹并关机。删掉安装日志、清空命令历史、把临时文件清干净然后执行关机。关机之后再给这台机器拍一个快照命名为“模板基线”。这个快照的价值在于后面克隆出来的所有节点如果被玩坏了你可以随时从这个基线重新克隆而不用再走一遍安装流程。dnf clean all history -c poweroff关机状态下的克隆和快照文件一致性最好不会出现内存里的脏数据被复制过去的问题。养成“关机再克隆”的习惯能避免很多玄学问题。3. 克隆出整个集群并打通网络3.1 完整克隆与链接克隆怎么选Workstation 提供两种克隆方式选错了后期会很别扭值得单独说清楚。对比项完整克隆链接克隆磁盘占用每台一份完整磁盘20G 就是 20G只存差异部分初始占用很小对父机的依赖完全独立父机删了也不影响强依赖父机磁盘父机一删全部报废性能与普通虚拟机一致读操作要回溯父盘略慢适合场景集群节点、长期使用的环境临时验证、一次性实验集群节点我强烈建议用完整克隆。原因很直接链接克隆的磁盘是分层的读数据的时候要一层层往回找节点多了以后 I/O 会有可感知的延迟而且只要父机的磁盘文件被动过或者被删掉整条克隆链上的机器全部起不来。集群练习往往要跑好几个月链接克隆这种脆弱性不值得省那点磁盘。完整克隆的操作路径是在虚拟机关机状态下右键虚拟机 → 管理 → 克隆 → 选择“虚拟机中的当前状态” → 选择“创建完整克隆” → 指定名称和存放位置。名称建议直接用节点名比如node02、node03存放位置放到同一个父目录下方便统一管理。克隆数量按你的规划来。三节点集群就克隆两台加上原来的模板机正好三台。克隆过程会复制磁盘文件20G 的盘大概需要几分钟期间宿主机磁盘会有明显的写入压力别同时开着别的大文件操作。3.2 克隆后必改的四样东西克隆出来的机器是“双胞胎”如果什么都不改就直接开机联网会出现各种诡异现象IP 冲突、主机名混乱、SSH 连上去发现连的不是以为的那台。有四样东西必须在开机后第一时间改掉。第一样是主机名。用hostnamectl set-hostname node02设置改完重新登录一次 shell 才会在提示符里体现。同时要把/etc/hosts里对应本机 IP 的那一行也改掉否则有些服务解析自己的名字时会拿到旧值。第二样是机器标识。这个文件是很多系统服务的唯一标识来源克隆后三台机器如果标识相同会出现日志混淆、DHCP 客户端标识重复、某些授权类服务判断异常等问题。处理方式truncate -s 0 /etc/machine-id systemd-machine-id-setup执行完可以用cat /etc/machine-id确认三台机器各不相同。第三样是 MAC 地址。克隆时 Workstation 一般会自动重新生成 MAC但保险起见还是检查一下。在虚拟机的设置里找到网络适配器点高级看看 MAC 地址是否和原机不同如果相同就点“生成”换一个。MAC 相同而 IP 不同在同一个虚拟网络里会造成交换表混乱表现为时通时不通。第四样是网卡配置文件。克隆后最常见的情况是网卡的实际设备名变了比如原来是ens33克隆后变成了ens37但 NetworkManager 里还是那个叫ens33的连接配置于是nmcli connection show看到配置存在ip addr却看不到 IP。这个问题在 5.2 节会给出完整的排查和修复步骤这里先记住看到“配置在但 IP 没有”八成就是网卡名对不上。3.3 静态 IP 与双网卡规划IP 规划要在动手之前定好写在纸上或者记在文档里不要边配边想。以 VMnet8 子网192.168.100.0/24、网关.2为例主机名主网卡 IPNAT用途node01192.168.100.11集群主节点、时间服务器node02192.168.100.12工作节点node03192.168.100.13工作节点配置命令用nmcli最稳妥CentOS 8 上 NetworkManager 是默认网络管理组件用命令行改配置比手写配置文件不容易出错nmcli connection modify ens33 \ ipv4.method manual \ ipv4.addresses 192.168.100.11/24 \ ipv4.gateway 192.168.100.2 \ ipv4.dns 114.114.114.114 \ connection.autoconnect yes nmcli connection up ens33参数逐个解释一下。ipv4.method manual表示手动配置不走 DHCPipv4.addresses里的/24是子网掩码不能省ipv4.gateway填虚拟网络编辑器里看到的 NAT 网关地址填错了就上不了外网connection.autoconnect yes保证开机自动启用。配置完用ip addr和ping验证先 ping 网关再 ping 一个外部地址两步都通说明网络没问题。如果你打算用双网卡方案给每台虚拟机加一块仅主机模式的网卡子网设成192.168.200.0/24宿主机上不配网关。这样集群内部通信走192.168.200.x这个网段外网访问走192.168.100.x。这么做的好处是集群节点之间大量数据同步时不会挤占 NAT 通道而且即使宿主机断网节点之间的通信依然正常实验可以继续做。提示双网卡配置时要注意路由优先级。如果两个网段都有默认网关可能出现流量走错网卡的情况。仅主机网卡不要配网关让它只承担同网段通信即可。3.4 主机名解析与 SSH 免密集群里的机器要互相认识靠 IP 记太累配好 hosts 文件是最省事的办法。三台机器的/etc/hosts都加上同样的内容cat /etc/hosts EOF 192.168.100.11 node01 192.168.100.12 node02 192.168.100.13 node03 EOF加完之后用ping node02测试能通说明解析生效。这一步在集群软件部署时非常关键很多集群组件默认用主机名做节点标识主机名解析不通会直接导致节点加入失败。SSH 免密是另一个必做项。集群部署脚本、批量分发文件、节点间互信都依赖免密登录。生成密钥对ssh-keygen -t rsa -b 4096 -N -f /root/.ssh/id_rsa-N 表示不设密码短语方便脚本自动执行。然后把公钥分发到所有节点包括本机for h in node01 node02 node03; do ssh-copy-id -i /root/.ssh/id_rsa.pub root$h done分发过程中会要求输入各节点的 root 密码输一次就行。全部完成后用ssh node03 hostname测试如果不需要密码就直接返回了主机名说明配置成功。实操心得ssh-copy-id偶尔会因为目标机的/root/.ssh目录权限不对而失败。如果提示权限问题先在目标机上执行chmod 700 /root/.ssh chmod 600 /root/.ssh/authorized_keys再重试。配置完成后建议把/root/.ssh目录整个打包备份一份后面如果重新克隆节点直接解压就能恢复免密关系不用再走一遍分发流程。4. 让集群“像一个整体”环境统一化配置4.1 yum 源失效后的替代配置这一步是所有后续操作的前提。CentOS 8 的主镜像服务早已停止默认仓库地址访问会失败症状是dnf install卡住很久然后报“无法下载元数据”或者超时。解决办法是把仓库地址指向归档站点。先备份原有配置避免改错了没法回退mkdir -p /etc/yum.repos.d/bak mv /etc/yum.repos.d/CentOS-*.repo /etc/yum.repos.d/bak/然后写一份新的仓库配置cat /etc/yum.repos.d/CentOS-Vault.repo EOF [baseos] nameCentOS-8-BaseOS baseurlhttps://vault.centos.org/8.5.2111/BaseOS/x86_64/os/ gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial enabled1 [appstream] nameCentOS-8-AppStream baseurlhttps://vault.centos.org/8.5.2111/AppStream/x86_64/os/ gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial enabled1 [extras] nameCentOS-8-Extras baseurlhttps://vault.centos.org/8.5.2111/extras/x86_64/os/ gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial enabled1 EOF8.5.2111是 CentOS 8 最后一个归档版本号路径必须精确匹配写错了会返回 404。三个仓库分工不同BaseOS 放系统核心包AppStream 放应用层软件包Extras 放补充工具三个都配齐才不会出现“某个包明明存在却装不上”的情况。配置完刷新缓存dnf clean all dnf makecache如果makecache报证书错误先检查系统时间是否准确时间偏差过大会导致 TLS 握手失败这是新手最常踩的坑之一。用date看一眼如果时间差了好几年先手动校准再重试。提示归档站点在境外拉取速度可能不理想。部分国内开源镜像站也保留了归档目录可以把baseurl换成对应的国内地址速度会快不少。换之前先确认该镜像站确实保留了8.5.2111这个版本目录。这台机器的源配好并且验证通过之后再去做克隆后续所有节点天然就是可用的。这个顺序很关键先克隆再配源就得重复配三遍。4.2 内网时间同步集群里时间不一致是隐形杀手。表现是SSH 免密突然要求输密码、日志时间戳对不上排查困难、集群组件之间心跳检测失败、证书校验报错。宿主机休眠唤醒之后虚拟机时钟跑偏是常事多台机器各跑各的偏差会越来越大。解决办法是选一台机器做内网时间服务器其他机器向它同步。选 node01 做服务端编辑它的时间同步配置vim /etc/chrony.conf把默认的服务器列表注释掉改成能被外部同步的地址同时允许内网段来同步server ntp.aliyun.com iburst allow 192.168.100.0/24 local stratum 10iburst表示启动时快速发几个包加快同步allow放开内网段的查询权限local stratum 10是个兜底配置意思是即使外部源全部不可达这台机器也能把自己当作一个较低层级的时间源对外提供服务。这一行在实际使用中很有用因为你的宿主机可能经常断网没有这一行的话断网期间客户端会同步失败。node02 和 node03 的配置更简单只指向 node01server 192.168.100.11 iburst三台机器都执行启动并设置开机自启systemctl enable --now chronyd在客户端上用chronyc sources -v查看同步状态看到 node01 那一行前面有个星号就表示同步成功。刚配置完可能需要等几十秒不用急着判断失败。注意如果你之前改过系统时间做测试记得把时间调回来再启用同步。chrony 默认会拒绝与偏差过大的源同步时间差太多时需要加makestep参数强制跳变具体做法是在配置文件里加一行makestep 1.0 -1。4.3 安全策略与基础工具的统一模板机阶段已经处理过一次安全策略克隆出来的节点会继承这些设置理论上不用再动。但有两件事需要在集群层面补一下。一是确认三台机器的防火墙状态一致。有些人在某台机器上手动开了端口另一台忘了开结果集群部署时一台能通一台不通排查半天。统一用systemctl status firewalld看一眼三台结果应该一样。二是如果选择保留防火墙比如你的实验包含安全配置环节那就要在每台机器上放行集群需要的端口。以常见的集群通信为例firewall-cmd --permanent --add-port22/tcp firewall-cmd --permanent --add-port6443/tcp firewall-cmd --permanent --add-port2379-2380/tcp firewall-cmd --permanent --add-port10250-10252/tcp firewall-cmd --reload端口号按你实际要部署的组件来定这里只是举例说明写法。放行后别忘了--reload不重载配置是不生效的这个细节漏掉的人特别多。基础工具的统一也值得花两分钟。三台机器上装同一套工具避免出现“这台有telnet那台没有”的尴尬dnf install -y vim wget curl net-tools lsof tar unzip tree bash-completion如果打算做容器相关练习还得把交换分区关掉并调整内核参数这部分内容超出本次范围但思路是一样的所有节点做同样的操作别只改一台。4.4 虚拟机工具与快照策略open-vm-tools在模板机阶段已经装了克隆后不用重装但要确认服务在跑systemctl status vmtoolsd正常应该是运行状态。如果没起来systemctl enable --now vmtoolsd拉起来即可。这个服务负责虚拟机和宿主机之间的信息交换时间同步、优雅关机、IP 地址上报都靠它停掉的话在 Workstation 界面里就看不到虚拟机的 IP 了管理起来很不方便。快照策略这件事踩过坑的人才知道重要。我的做法是分三层快照层级拍摄时机保留策略基线快照模板机配好源、工具、安全策略关机后永久保留不删节点快照集群网络配通、免密配好之后保留到该阶段实验结束实验快照每次装重要组件之前实验完成后删除避免占用膨胀最关键的一条经验是快照不是备份不要长期挂着不删。快照文件记录的是磁盘变化量你用的时间越长、写入越多快照文件就越大最后可能比原磁盘还大。我见过有人挂了一年多的快照虚拟机跑得越来越慢磁盘占用翻了几倍才发现问题。另一个细节是拍快照的时机。关机状态拍快照最干净恢复后不会出现文件系统不一致的问题运行状态拍快照速度快但恢复后可能有些服务需要手动重启。做关键组件的实验前我会选择关机拍快照多花十几秒换来的稳定性是值得的。4.5 交付前的集群验收清单环境搭完别急着往上装软件先跑一遍验收确认基础是牢的。这一步花五分钟能省掉后面几小时的排查。检查项命令预期结果主机名正确hostnamectl显示对应节点名IP 与规划一致ip addr三台分别是.11.12.13外网连通ping -c 2 114.114.114.114有回包内网互通ping -c 2 node03有回包主机名解析getent hosts node02返回对应 IP免密登录ssh node02 hostname直接返回 node02时间一致date三台对比误差在 1 秒内软件源可用dnf makecache无报错元数据缓存成功机器标识唯一cat /etc/machine-id三台各不相同虚拟机工具systemctl is-active vmtoolsd输出 active这张表里我特别想强调的是机器标识和 MAC 地址这两项。它们平时不显眼但一旦出问题症状会非常迷惑比如日志里两台机器的记录混在一起或者 SSH 连上去发现操作的是另一台机器。养成克隆后先检查这两项的习惯能少走很多弯路。5. 踩坑记录常见问题与排查路径5.1 网络类问题的定位思路网络问题占了我在这套环境上排查时间的一大半但绝大多数都能通过一个固定的顺序定位出来。先看链路层通不通ip link看网卡是不是 UP 状态。如果显示DOWN说明网卡没启用用nmcli connection up 连接名拉起来。这一步没解决后面所有检查都是白费。再看有没有拿到 IPip addr看对应网卡下有没有inet那一行。如果没有回到 NetworkManager 里查配置。常见原因是配置写在了ens33上但实际网卡叫ens37配置根本没生效。然后看网关通不通ping 网关地址。不通的话检查虚拟网络编辑器里的 NAT 子网和网关设置以及虚拟机的网络适配器是不是连到了正确的 VMnet。最后看外网通不通ping 一个外部 IP。如果 IP 能通但域名不通那是 DNS 配置的问题检查/etc/resolv.conf或者nmcli里的 DNS 设置。如果 IP 也不通回到上一步查网关。这个顺序的价值在于它把“网络不通”这个大问题拆成了四个小判断每一步都有明确的通过或不通过不会陷入“到底是哪出问题了”的盲目猜测。还有一种情况是“时通时不通”这通常和 IP 冲突有关。三个节点如果用的是克隆出来的同一份配置又有某台没改 IP就会出现两个设备抢同一个地址。排查方法是挨个ping一下规划中的 IP对比 MAC 地址对不对得上或者干脆在虚拟网络编辑器里看 DHCP 租约列表确认没有设备占用你规划给静态 IP 的地址。5.2 克隆后的网卡名错位这是克隆操作里最高频的问题值得单独展开。症状很典型开机后nmcli connection show能看到一个叫ens33的连接状态是已激活但ip addr里只能看到lo没有任何 IP 地址。原因在于克隆时 Workstation 重新生成了网卡设备名从ens33变成了ens37或者别的编号但 NetworkManager 里的那份连接配置还绑在旧的接口名上于是配置悬空了新网卡没有配置可用自然拿不到 IP。处理办法有两种。稳妥一点的做法是删掉旧配置按新网卡名重建nmcli connection delete ens33 nmcli connection add type ethernet ifname ens37 con-name ens37 \ ipv4.method manual \ ipv4.addresses 192.168.100.12/24 \ ipv4.gateway 192.168.100.2 \ ipv4.dns 114.114.114.114 nmcli connection up ens37另一种做法是直接修改现有配置的接口绑定保留原有设置省得重配一遍nmcli connection modify ens33 connection.interface-name ens37 nmcli connection up ens33实操心得改完之后如果nmcli connection show里出现两个连接同时抢同一个网卡会导致行为不确定。改之前先nmcli connection show确认只有一份配置对应这块物理网卡多余的删掉。还有一种更彻底的做法是把网卡命名规则改成传统的eth0风格这样无论怎么克隆名字都固定。做法是在内核启动参数里加net.ifnames0 biosdevname0改完重启。这个方案适合喜欢固定命名的人但要注意配置文件里的网卡名全都要跟着改否则又是一轮排查。5.3 软件源与时间类问题软件源相关的报错有几种典型形态认准了修起来很快。报“无法下载元数据已超出超时”或者连接超时说明 baseurl 地址不可达检查路径拼写、检查网络是否通、检查是否用了正确的归档版本号。用curl -I 仓库地址可以直接测通不通比在 dnf 里等超时快得多。报“SSL 证书校验失败”九成是系统时间不对。TLS 握手依赖时间戳时间偏差太大就直接拒绝。date看一眼不对劲先手动改成大致正确的时间再跑时间同步。这个问题在刚克隆完、还没配时间同步的阶段特别容易遇到因为它本身就卡在“先配源还是先配时间”的死循环里。解法是先手动执行date -s 2024-01-01 12:00:00设一个大致正确的时间让证书能过然后立刻把时间同步配好。报“没有启用的仓库”说明 repo 文件没有被识别。检查文件是否放在/etc/yum.repos.d/目录下、后缀是不是.repo、文件权限是否可读。用dnf repolist能看到当前识别到的仓库列表如果列表是空的问题一定在配置文件本身。时间同步的问题则通常是“看起来配好了但不同步”。chronyc sources -v里如果源那一行前面是?说明无法连接如果是^开头的一大串说明还在同步过程中。最常见的失败原因是防火墙挡住了 123 端口或者配置文件里的allow网段写错了。还有一种情况是 chrony 服务在跑但配置文件根本没被读取那就要检查是不是改错了文件路径。5.4 常见问题速查表把上面这些经验整理成一张表遇到问题先对照着看比从零开始想快得多现象最可能的原因快速验证方式处理办法虚拟机装不上系统卡在启动CPU 虚拟化未开启任务管理器看虚拟化状态进固件开启虚拟化虚拟机运行极慢、CPU 高宿主机有虚拟化功能冲突Workstation 提示不支持虚拟化关闭冲突的系统功能后重启配好静态 IP 但没有地址网卡名与配置不匹配nmcli -t -f NAME,DEVICE connection show改配置的接口名或重建连接能 ping 通 IPDNS 解析失败DNS 未配置或配错cat /etc/resolv.conf补上可用的 DNS 地址三台机器网络时通时不通存在 IP 或 MAC 冲突对比各机 MAC 与 IP改 IP重新生成 MAC装包提示找不到仓库源地址失效dnf repolist是否为空换成归档源配置装包提示证书错误系统时间偏差过大date查看当前时间手动校时后启用 chronySSH 免密突然要密码时间不同步或权限不对chronyc sources -v修时间检查.ssh目录权限集群软件节点加入失败主机名解析不通getent hosts 节点名补全所有节点的 hosts虚拟机磁盘越来越满快照长期未清理查看虚拟机目录文件大小删除过期快照并合并克隆后日志混乱机器标识重复cat /etc/machine-id重新生成机器标识虚拟机时间越走越偏未安装或未启动增强工具systemctl is-active vmtoolsd启动 vmtoolsd 服务6. 长期使用中的资源优化与维护经验环境搭好只是开始真正决定这套集群好不好用的是后续怎么维护。我在这上面折腾了挺久攒了几条比较实在的经验。内存是最先见底的资源。三台虚拟机各 4G加上宿主机系统16G 的机器跑起来会很紧。有个技巧是在不用的节点上临时降配比如平时只开两台第三台用的时候再开。Workstation 允许在关机状态下调整内存大小改完下次启动生效不需要重装系统。如果只是偶尔验证一下集群拓扑可以把节点内存降到 2G跑完再改回来。磁盘方面虚拟磁盘默认是“按需分配”实际占用会随着使用慢慢涨上去但上限是你设置的容量。三台 20G 的盘长期用下来实际占用可能在 25G 到 40G 之间还算可控。真正吃空间的是快照一个挂了半年的快照可能比原盘还大。养成习惯实验做完就检查一下虚拟机目录下的文件大小异常膨胀的第一时间处理。网络方面如果长期用这套环境建议在宿主机上把 VMnet8 的 DHCP 服务关掉全部用静态 IP 管理。DHCP 开着虽然方便但和静态 IP 混用迟早出冲突。关闭位置在虚拟网络编辑器的 NAT 设置里取消勾选 DHCP 服务即可。关掉之后所有虚拟机必须配静态 IP所以要在确认三台都配好之后再关顺序别搞反。还有一个容易被忽略的点是宿主机的休眠。笔记本合盖休眠再唤醒之后虚拟机的时钟往往会跑偏如果时间同步没配好就会出现各种莫名其妙的认证失败。我现在的做法是时间同步一定要配而且 node01 的配置文件里加了local stratum 10兜底这样即使宿主机断网内网时间同步依然能工作不会因为外部时间源不可达而导致整个集群时间乱套。最后分享一个批量操作的小技巧。三台机器重复做同样的操作很浪费时间可以用一个简单的循环批量执行for h in node01 node02 node03; do echo $h ssh $h hostnamectl; date; dnf repolist | head -5 done把要检查的命令塞进引号里一条命令就能拿到三台机器的对比结果排查问题时比自己挨个登录快得多。这套免密登录配好之后能玩的花样还有很多比如批量分发文件、批量重启服务本质上就是把重复劳动交给脚本。我个人在实际操作中的体会是环境搭建阶段多花半小时把免密和 hosts 配扎实后面几个月的实验能省下几十次的重复输入。