
实话说现在专门折腾CentOS 7.6的人确实不多了但凡是还在用这套系统的基本都是线上正经跑业务的。前几天刚给一台600GB磁盘的2U服务器做新机交付系统装CentOS 7.6网络要求完成双网卡bond配置。整个流程走下来从分区规划到bond模式选型踩了几个不大不小的坑。趁热打铁把过程捋清楚从系统安装、600GB磁盘分区到bond配置和验证一次性说明白省得后来人再走弯路。这台机器要做什么物理上有两块千兆网卡逻辑上把它们合成一张虚拟网卡bond0实现链路冗余。一块网卡故障流量秒级切换到另一块业务不断。600GB磁盘说大不大、说小也不小既要给系统留足空间又不能压缩业务数据盘的容量分区规划需要一点讲究。这篇内容适合两类人刚接触服务器装机的运维新手可以照着步骤一步步做已经会装机但没碰过bond或者bond总是起不来的人重点看第4部分模式选型和第5部分排障经验。1. 项目背景与整体思路1.1 为什么选CentOS 7.6先聊系统选型。CentOS 7.6的内核版本是3.10.0-9572018年底发布。很多朋友一听就会觉得“这版本太老了吧”但放到服务器场景里“老”恰恰是优势。这个内核虽然版本号不高但红帽在维护周期内做了大量补丁回移对主流服务器硬件的支持度和稳定性都经过长时间验证。数据库、中间件、备份软件这些基础设施对7.x系列的适配也最充分踩坑成本最低。我这次装机的场景是机房物理服务器承载数据库和内部业务系统稳定性优先级高于新特性。CentOS 7.6在生命周期内有持续的安全更新项目周期内不用担心“系统失修”。选它做基础底座yum装软件、上网查资料、找案例都极度方便团队维护成本也低。新项目当然完全可以用更新版本但如果业务依赖的驱动或SDK只在7.x下验证过那就老老实实上7.6别拿生产环境去尝鲜。1.2 为什么非做Bond不可服务器硬件再稳定物理链路永远是单点。机房现场有个常见现象某块网卡的指示灯灭了一周没人发现业务却一直正常为什么因为没做bond的机器默认只有主网卡在工作备用网卡平时根本不出流量。反过来主网卡一旦真的挂了网络直接中断那张备用网卡也帮不上忙业务立刻不可用。Bond要做的事情就是不再让第二张网卡“躺平”。以最常见的active-backup主备模式来看两块卡一张主一张备主卡正常工作时流量全部走它备卡实时监测链路状态但不出流量。一旦主卡链路异常备卡在毫秒级顶上去业务侧几乎无感。如果业务流量大还可以选balance-rr或者802.3ad模式让两块卡同时跑流量吞吐量接近翻倍。这次方案选了active-backup核心是因为兼容性。主备模式不依赖交换机开启LACP无论机房网络设备是什么品牌、什么配置只要物理口能通bond就能直接用。很多运维场景下你根本没有权限去动交换机配置这个模式就是最稳的选择。1.3 600GB磁盘分区要想明白600GB听起来不小但如果直接“全部分给根分区”后面会很被动。系统日志和临时文件可能把磁盘撑满进而拖垮业务想单独扩容某个目录要折腾半天备份和数据文件跟系统混在一起恢复和迁移都不方便。所以分区规划的思路是/boot独立分区放引导文件swap按物理内存情况给够根分区给系统软件和日志预留充足余量剩余空间全部划给独立数据分区。如果后续想更灵活地调整容量数据分区还可以用LVM来承载。具体容量分配我在第3部分结合安装界面详细讲。2. 安装前的准备工作2.1 镜像下载别小看版本号CentOS 7.6的完整版本号是1810对应ISO文件一般是CentOS-7-x86_64-DVD-1810.iso。很多人下载镜像时只搜“CentOS 7”就随便拿了一个版本装完才发现和自己的文档版本对不上很多参数和行为都不一样排查起来很麻烦。建议从国内几个常用镜像站获取速度快也稳定阿里云开源镜像站清华大学TUNA镜像站中国科学技术大学USTC镜像站选DVD版就好4GB左右常用软件包都包含了即使安装时内网不通也能装完基础系统。如果网络条件好也可以考虑Everything版但没必要。下载完先做SHA256校验Linux下一条命令sha256sum CentOS-7-x86_64-DVD-1810.iso和镜像站页面给出的校验值比对一致再继续。别省这一步。以前我见过镜像文件下载不完整安装到一半包解压报错的案例回头重新下载花的时间比校验多得多。2.2 启动盘制作写入方式决定成败Windows下制作启动盘推荐RufusLinux下直接dd就行。Rufus在烧录CentOS镜像时如果工具询问写入模式选择DD镜像模式而不是默认的ISO写入模式否则U盘可能引导不起来。用dd的话命令很简洁dd ifCentOS-7-x86_64-DVD-1810.iso of/dev/sdb bs4M statusprogress这里一定注意of后面是磁盘设备名不是分区名。先用lsblk确认U盘对应的设备节点比如sdb别写错盘。机房手一滑把启动盘写到服务器系统盘上的案例不是没有操作前多看一眼lsblk这个习惯能保命。2.3 BIOS引导相关准备开机进BIOS后把U盘设为第一启动项硬盘放第二位。如果服务器插了RAID卡需要在RAID配置界面提前把磁盘组好或设置为直通如果只有单块600GB物理盘直接保持直通状态即可。引导模式也要想清楚CentOS 7.6同时支持Legacy BIOS和UEFI但两种模式的分区结构不一样混用容易导致安装后grub启动失败。如果主板支持并且你打算和别的系统共存提前想好引导模式。生产环境我通常统一用Legacy模式MBR分区表兼容性最好。另外如果主板比较新U盘启动时遇到黑屏或花屏检查BIOS里的Secure Boot设置必要时关掉。3. CentOS 7.6系统安装全流程3.1 安装向导要点U盘引导后进入安装界面第一个选项是“Install CentOS 7”按回车开始。语言建议选English主要因为后续查资料、搜索排障关键词用英文更顺畅中文界面虽然友好但很多命令输出和报错信息都是英文切换着看反而麻烦。这只是个人偏好中文界面完全不耽误使用。安装主界面会显示一堆配置项。时间日期、键盘布局这些默认通常没问题但三个位置必须仔细调整软件选择、安装位置、网络和主机名。这三项直接决定系统装完能不能用、好不好用。3.2 软件选择与600GB磁盘分区方案软件选择里服务器场景强烈建议Minimal Install最小化安装装完是纯命令行环境。好处是干净没那么多用不到的服务攻击面小依赖也少。需要什么软件再自己装系统可控性高。有些朋友图省事选了带图形界面的Server with GUI说实话在服务器上没什么必要白占资源。到安装位置这一步别用“自动配置分区”手动点进去。600GB磁盘建议这样规划挂载点容量文件系统用途/boot1GBxfs内核和grub引导文件swap16GBswap虚拟内存/200GBxfs系统软件、日志、临时文件/data剩余约383GBxfs业务数据这个分区方案的考虑点值得展开说。/boot给到1GBCentOS 7的内核升级比较频繁如果只给512MB更新几个内核版本后分区就可能报警1GB基本能覆盖多年升级量。swap给了16GB是基于物理内存32GB来定的一般取内存的0.5到1倍。旧经验里“swap是内存2倍”对现代大内存服务器已经不适用了白白浪费磁盘空间。根分区给200GB系统软件加日志绰绰有余即使日志没有做轮转短期内也不会撑爆根分区。剩余空间全部给/data业务数据、安装包、备份文件都放这里后续要扩容、迁移、备份都独立操作和系统分区互不干扰。实际创建分区时/、/boot、/data分别输入挂载点swap在文件系统类型里选swap其他保持xfs默认。CentOS 7的默认文件系统就是xfs不需要特意改成ext4。3.3 网络与主机名先让网卡通着安装向导的“网络和主机名”页面先把主机名设置好比如node-01。此时系统会识别出两块物理网卡比如eno1、eno2也可能显示为eth0、eth1。关键操作是先给主网卡开一个DHCP自动获取地址也就是设置bootprotodhcp。这样安装完成重启后至少有一张卡能通可以SSH远程上去继续操作。为什么安装阶段不直接把静态IP写好因为后面做bond配置时网络服务的重启和网卡角色变化可能导致短时间断连。如果人不在机房最好确保系统装完后有一个能通的IP。bond配置即使中途出问题还有一张卡兜底能重新连上去处理。安装向导里的静态IP当然也能填但有时DNS或路由配置不完整不如先靠DHCP把网络跑通装完系统再用配置文件改成静态地址整个路径更可控。3.4 安装过程中的几个细节开始安装后系统会要求设置root密码。这一步必须重视建议16位以上大小写、数字、特殊字符混合。同时可以创建一个普通用户并赋予sudo权限日常用普通用户登录避免一直用root操作降低误操作风险。如果不想多一步sudo操作至少给root设置一个足够复杂的密码。安装进度条跑完后重启此时记得把U盘拔掉。看到登录提示符就算安装完成。用root登录后建议先跑几个基本命令确认初始状态cat /etc/redhat-release lsblk free -h ip addr这几个命令分别确认系统版本、磁盘分区、内存和swap、网卡与地址。确认无误后再进入下一步bond配置。3.5 一个小坑NetworkManager和network.service并存CentOS 7.6默认安装NetworkManager但系统里也保留着传统的network.service。两者同时管理网络时ifcfg文件的修改可能不会按预期生效。最省心的做法是安装完成后直接禁用NetworkManager统一用network.servicesystemctl stop NetworkManager systemctl disable NetworkManager这条路我在多台机器上验证过处理bond场景时极其省心。如果你更习惯NetworkManager也可以走nmcli那套逻辑配置bond但两条路只能选一条不要混用。混用最典型的症状就是文件明明写对了重启后配置像被“吃掉”一样全部回归。4. Bond配置实操从原理到落地4.1 Bond模式选型先看需求再谈配置Linux bonding支持7种模式从mode 0到mode 6但生产环境真正常用的就三种。直接给对比表模式名称工作机制交换机要求mode 0balance-rr两块网卡轮询发送数据包基本无要求但对端设备需支持mode 1active-backup主备冗余同一时间只有一块卡工作无要求mode 4802.3ad动态链路聚合两块卡按规则分摊流量交换机必须开启LACP简单记忆mode 0是两块卡轮流干活吞吐量理论上翻倍但数据包乱序风险需要业务容忍mode 1是一块干活一块待命最保守最可靠mode 4是两块卡协同工作既有冗余又能提升带宽代价是要交换机配合。这台机器选mode 1理由很直接不需要交换机修改任何配置。实际运维中机房交换机的策略往往不是服务器管理员说了算网络管理员不会为了一台服务器专门开LACP。而且这台业务对单千兆带宽没有瓶颈双网卡绑定的核心诉求是故障冗余mode 1完全满足。如果以后带宽不够再评估升级mode 4两边配置同步切换。4.2 确认物理网卡接口名不要拿着文档里的eno1直接套用到自己的机器上。CentOS 7.6使用一致性网络设备命名常见的是eno1、eno2但也可能显示为em1、em2或者p1p1之类。先跑命令看实际名称ip link show确认两块物理网卡的系统名称后最好再对应一下物理口。实际操作中插拔网线时观察ip link输出的状态变化或者看网卡指示灯把系统网卡名和机箱上的物理口对应起来。这个习惯能在排障时省下大量时间不然你以为配置的是1号口实际插的却是2号口bond状态看起来就永远不对。4.3 加载bonding内核模块Bond功能由内核模块bonding提供。CentOS 7.6内核自带这个模块但要显式加载。先临时加载验证modprobe bonding lsmod | grep bonding确认模块能正常加载后创建modprobe配置文件让它永久生效vim /etc/modprobe.d/bonding.conf内容如下alias bond0 bonding options bond0 mode1 miimon100alias把bond0这个虚拟接口和bonding模块绑定options指定bond0的工作模式是mode 1每100毫秒做一次链路状态探测。miimon的值越小故障检测和切换越快但过小的值会增加系统开销100毫秒是业界最常见的选择。4.4 编写三个核心网络配置文件bond配置的核心是把物理网卡作为slave挂到虚拟网卡bond0下面。涉及的配置文件都在/etc/sysconfig/network-scripts/目录下分别是ifcfg-bond0、ifcfg-eno1、ifcfg-eno2。先创建bond0的配置文件vim /etc/sysconfig/network-scripts/ifcfg-bond0内容DEVICEbond0 NAMEbond0 TYPEBond BONDING_MASTERyes ONBOOTyes BOOTPROTOstatic IPADDR192.168.10.10 NETMASK255.255.255.0 GATEWAY192.168.10.1 DNS18.8.8.8 BONDING_OPTSmode1 miimon100几个字段解释一下。BOOTPROTOstatic表示用静态IP如果希望bond0走DHCP把这一行改成BOOTPROTOdhcp同时删掉IPADDR、NETMASK、GATEWAY这几个字段。BONDING_OPTS直接写在ifcfg里这是配置bond参数的推荐做法比在modprobe.d里写options更直观也方便单文件查看。如果两处都写了确保参数一致避免系统加载时产生歧义。接下来改第一块物理网卡vim /etc/sysconfig/network-scripts/ifcfg-eno1内容DEVICEeno1 NAMEeno1 TYPEEthernet BOOTPROTOnone ONBOOTyes MASTERbond0 SLAVEyes第二块网卡同理把DEVICE和NAME换成eno2其余不变DEVICEeno2 NAMEeno2 TYPEEthernet BOOTPROTOnone ONBOOTyes MASTERbond0 SLAVEyes这里有一个关键点物理网卡上的BOOTPROTO必须设置成noneIP信息完全由bond0虚拟网卡负责。如果物理网卡上还留着IP配置网络服务重启时会出现冲突bond起不来或者IP混乱。4.5 重启网络服务并验证bond状态配置文件写完先检查一遍语法和内容ip link show确认没有拼写问题后重启网络systemctl restart network然后验证bond0的状态ip addr show bond0 cat /proc/net/bonding/bond0/proc/net/bonding/bond0是bond运行状态的第一手资料里面能看到当前活动的slave网卡Currently Active Slave、MII状态和链路速度。在mode 1下正常情况下应该显示eno1是当前活动网卡eno2状态为up但非活动。可以手动拔掉eno1的网线等一两秒再看活动网卡切到eno2说明故障切换生效了。如果是远程维护拔网线之前必须确保有带外管理口IPMI/iLO/DRAC或者物理控制台。测试完再插回网线观察是否回切。主动拔线测试是bond验证最重要的一步很多配置看起来都对实际拔线不切换问题就出在没做这轮验证。4.6 聊聊bootprotodhcp的适用场景bootprotodhcp这个参数本身不复杂就是把网卡的IP获取方式设为DHCP。安装CentOS时默认的“自动DHCP”就是它。在bond0的场景里用到dhcp通常有两种情况。一种是自动化交付场景服务器装完不分配固定IP由机房DHCP统一发地址之后配置管理平台再根据机器标签下发最终配置。另一种是临时测试环境不想手动规划IP段用DHCP快速跑通链路。用dhcp有一个坑如果网络里没有可用的DHCP服务器网络服务启动时会反复请求导致开机后卡在等待网络配置很长时间。所以在bond0上用dhcp前一定确认局域网里有可用的DHCP服务。生产环境静态IP还是更可控一些至少排查问题的时候IP不会突然变动。4.7 一个容易忽视的步骤关闭NetworkManager虽然第3部分提过一次但到这里还要再强调。CentOS 7.6里NetworkManager和network.service同时存在如果决定用传统ifcfg文件方式配置bond一定要把NetworkManager先停掉systemctl stop NetworkManager systemctl disable NetworkManager systemctl restart network如果不关重启后NetworkManager可能接管网卡把你手动写的ifcfg文件覆盖或忽略bond状态直接异常。关闭NM是ifcfg方式bond配置的标准前置操作。反过来如果决定用NetworkManager那就要用nmcli创建bond连接两条路只能选一条走禁止混用。混用的表现往往是网卡状态看着正常重启后一切回归原点配置“丢失”。5. 常见问题与排查技巧实录5.1 bond起来后ping不通怎么定位第一步看bond0状态cat /proc/net/bonding/bond0。如果文件不存在或者没有输出说明bond0没有创建成功回退检查modprobe配置文件。第二步看物理网卡状态ip link show eno1确认两块卡都是UP。第三步看路由ip route默认路由是否有default via 192.168.10.1 dev bond0。很多情况是ifcfg-bond0里写了GATEWAY但路由表没刷新重启网络或者手动添加ip route add default via 192.168.10.1 dev bond0最后一步检查防火墙。CentOS 7默认的firewalld可能是启用的如果ping不通但网卡状态都正常先systemctl stop firewalld试一下能通就是规则问题。5.2 网卡名称不稳定bond配置时有时无某些主板上Linux启动时网卡命名受PCIe枚举顺序影响如果插拔过设备eno1和eno2可能互换甚至变成eno3。这个坑非常隐蔽配置看起来完全正确但bond每次重启状态都不一样。解决办法是在物理网卡的ifcfg文件里加HWADDR字段绑定MAC地址HWADDRxx:xx:xx:xx:xx:xxMAC地址从ip link或者dmesg里获取。这样无论系统怎么枚举网卡eno1永远是那块指定的物理卡bond的运行状态就稳定了。5.3 重启网络卡在Bringing up interface bond0这个现象多半是DHCP等待超时或者物理网卡的BOOTPROTO参数配置错误。检查顺序看ifcfg-eno1和ifcfg-eno2里BOOTPROTO是否为none物理网卡不应配置dhcp。看局域网内是否有DHCP服务器如果bond0用了dhcp但网络里没有dhcp服务就会反复等待超时。看NetworkManager是否没关干净systemctl status NetworkManager确认状态。如果网络服务卡住可以用CtrlC中断然后看journalctl -xe的日志输出定位具体卡在哪个环节。日志里一般会直接告诉你是DHCP超时还是物理链路未up。5.4 分区相关的小提醒手动分区最容易踩的坑是swap忘记指定文件系统类型导致安装完成后free -h看不到swap。另外/boot分区如果给得太小比如512MB内核多升级几次后就会容量告警后续yum更新都可能受影响。所以/boot直接给到1GB最省心分区完成后用swapon -s确认swap挂载正常。如果用了LVM分区还要注意VG和LV类型匹配避免扩容时出现兼容问题。5.5 测试完毕再交付业务bond配置完、网络服务重启正常这只是第一步。真正交付前还要做一轮完整测试重启系统等待开机确认bond0自动恢复active状态拔掉主网卡网线观察切换耗时插回网线观察回切是否正常。整个过程用ping持续监测确保业务侧没有长时间中断。如果是远程操作这些测试要提前沟通维护窗口避免影响线上用户。6. 实操心得与总结6.1 这次配置过程中最值得记住的三件事第一bond参数不要只改一个地方。modprobe.d里的options和ifcfg-bond0里的BONDING_OPTS都定义了bond参数两处要确保一致。我习惯以ifcfg-bond0为准modprobe.d作为模块加载的兜底万一某处被覆盖结果也不会偏。第二分区不要太死板。600GB磁盘分完系统区后剩余空间如果业务形态还没定型建议用LVM来承载后续调整容量比裸分区灵活得多。虽然xfs本身支持在线扩容但LVM在管理和迁移上的优势不可替代。第三远程操作bond时一定留后路。在机房现场可以随便折腾远程一旦配置出错就可能彻底断网没有带外管理就只能跑一趟机房。所有网络类变更远程操作前先确认带外通道可用再动手。6.2 后续可以怎么扩展这套bond配置如果想切到mode 4只需要改ifcfg-bond0里的BONDING_OPTS为mode4 miimon100同时让网络管理员在交换机端口上开启LACP然后重启网络服务。切换前确认业务低峰期避免流量中断影响。如果后续需要调整/data分区大小当初用了LVM的话在VG还有剩余空间的前提下直接在线扩容即可不用停机操作。6.3 一些想说给后来人的话CentOS 7.6加bond这套组合拳在机房里还能稳定服役很长一段时间。整个装机流程换到CentOS 7.9甚至其他7.x小版本操作思路基本一致差别只在个别版本细节。把这套流程跑熟以后不管换什么品牌的服务器走一遍这个思路都能稳稳交付。最后再提醒一次配置bond不是写完配置文件就完事拔线测试和重启验证必须做不然你永远不知道配置在极端情况下靠不靠谱。