ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

火山引擎服务器实战:安全组、SSH排错与监控告警全攻略

火山引擎服务器实战:安全组、SSH排错与监控告警全攻略

我最近把一个跑了大半年的个人项目迁到了一台火山引擎服务器上,折腾了整整一个周末才把所有事理顺。过程中踩的坑、绕的路比预想中多不少,但也正因为这一趟,才把云服务器从开通到稳定运行全链路摸了个透。这篇不打算做成那种纯复制官方文档的教程,而是把我实际操作的顺序、判断逻辑、排错过程都记录下来,给准备入手火山引擎服务器、或者刚开完机器不知道从哪下手的朋友一份可以直接照着做的清单。

下面的内容偏经验向,不保证适合所有业务,但针对中小型网站、个人服务、测试环境这一类场景,可信度还是够的。尤其如果你是第一次用火山引擎服务器,强烈建议从头到尾过一遍,特别是第三章的安全组和第五章的排错,基本能把新手期的绝大部分问题提前堵住。

1. 为什么把业务迁到火山引擎服务器:选型前的四个硬指标

1.1 我真正在意的网络、价格、扩容和运维成本

选服务器这件事,大多数人第一眼只看CPU核数和内存大小,但真正跑起业务之后,才会发现还有一堆比配置更重要的东西。我自己这轮选型,主要盯了四个维度:

第一是网络质量。之前我用过某小厂商的便宜机器,价格确实低,但一到晚高峰,公网延迟直接翻几倍,丢包率也明显上去,页面打开慢不说,还时不时超时。换到火山引擎服务器之后,同一时期、同一地域的测试数据对比,晚高峰的稳定性明显好一个档次。注意,这里的对比不是说它性能数据有多夸张,而是说稳定性让我放心,不会因为某个时间段流量上来就拉胯。

第二是性价比。云服务器的价格体系看起来复杂,拆开无非就是“计算、存储、网络”三项捆在一起。火山引擎的计费结构在同类产品里算是比较清晰的,包年包月有折扣,按量付费适合测试,GPU实例也单独拆出来了,不会出现买了一台普通实例结果还要硬着头皮跑图的情况。

第三是扩容的灵活性。这个不用等到业务大了才考虑,哪怕是个人项目,也可能突然要加带宽、加数据盘。火山引擎的实例在控制台里做配置变更很快,数据盘扩容也能不停机处理,实际体验下来,比我之前用过的某平台要顺手一些。

第四是运维成本。对没有专职运维的个人或小团队来说,控制台的易用性直接决定你的幸福指数。安全组、快照、监控告警这些都做成可视化操作,比天天敲命令行要省心太多。我身边有位同行,团队只有三个人,照样在火山引擎服务器上托管了几个客户站点,靠的就是这套管理能力。

1.2 常见的三种选型误区

这里的误区,我见过太多次了,自己也踩过。

第一个误区:CPU核数越大越好。很多新手买机器第一反应就是“加核”,好像核多了性能就一定强。实际上,对绝大多数Web应用来说,瓶颈往往在磁盘I/O和公网带宽上。一个2核4G的实例,搭配好一点的SSD云盘,如果业务量不大,跑起来比我之前那台4核8G但磁盘性能一般的机器还顺畅。与其堆CPU,不如先想清楚自己瓶颈在哪。

第二个误区:以为实例创建成功就等于可以登录了。这是云服务器新手第一大坑。机器创建出来了,但安全组可能没有放行SSH端口,然后一直连接失败,最后才发现是安全组规则没配。这个细节在后面第三章会详细说。

第三个误区:把不适合的实例类型用在错误场景。有人拿普通通用型实例去跑视频转码或者AI推理,跑到CPU疯狂打满、内存爆掉,然后怪服务器不稳。做这种计算密集任务,该选GPU实例或者计算型实例就选对应的,别拿一把瑞士军刀去当斧头用。

2. 从开通到能登录:一份可以直接照抄的启动清单

2.1 地域、可用区怎么选才不后悔

地域和可用区的选择这事,比很多人想的重要得多。原则其实很简单:离你的目标用户近,离你的其他业务资源近。

如果你的用户主要在国内,那就选择国内的主要地域节点,这样访问延迟会比境外节点低不少。如果你还有数据库、存储桶之类的配套服务,最好让服务器和被访问的资源在同一个地域,不然跨地域内网访问会出现额外延迟,还可能产生不必要的流量费用。

可用区则是地域下面的分区,同一地域通常有多个可用区。单台实例无所谓,但如果你的架构涉及多台实例做高可用,尽量把实例分散在不同可用区,这样某个可用区出现故障时,另一边的机器还能扛住。对个人项目来说,选一个可用区就够了,不用过度设计。

这里有个容易被忽略的细节:选好地域之后,后面创建其他云资源时也要注意保持一致,比如你的服务器在A地域,结果对象存储买到B地域,后面做内网访问就会很别扭。

2.2 镜像选择和规格组合的建议

多数人刚开服务器时,遇到的第一道选择题就是镜像。

操作系统镜像我个人的建议是:优先选Ubuntu LTS或者Debian系统。理由不是别的,是社区资料多、软件源全、遇到问题一搜就能找到解决方法。用Windows Server也行,但那是给明确依赖.NET或桌面化运维的人准备的,普通轻量级服务用Linux更省资源。

还有一点建议:尽量别选那种已经处于维护尾声、不再接收更新补丁的老系统镜像。系统安全这种事,一旦出问题就不是小事,选一个还在活跃维护期的版本,能省掉很多后顾之忧。

关于规格组合,我列了一个参考表:

场景参考规格系统盘数据盘备注
个人博客/轻量服务2核4G40G50G性价比高
中小型企业官网4核8G40G100G预留扩展空间
电商/小程序后端4核8G及以上50G200G关注磁盘IOPS
视频转码/AI推理GPU或计算型50G按需别用通用型硬扛

这个表不是标准答案,但能作为一个起步参考。核心思路是:前期配置可以适度少一点,网络带宽和数据盘容量预留富余,这样业务起来后调整成本更小。

2.3 计费模式怎么组合最省钱

计费模式这个事,说简单也简单,说复杂也复杂。核心就一句话:长期稳定跑的机器选包年包月,临时测试的机器选按量付费。

比如你只是想测一下某个代码能不能跑起来、体验一下系统环境,那就按量付费开一台,测完直接释放,几块钱搞定,不用纠结。而正式站点一旦上线,基本不会关机的,这时候包年包月的折扣优势就很明显,长期算下来能省不少。

我自己实际操作的习惯是:先用按量付费开一台,把环境搭好、服务跑通,再根据需求转成包月或者包年。这个流程很实用,既不会买错配置,也能安心测试。要注意的就是控制好测试时间,别把按量的机器开着挂机忘了关,第二天账单出来心会疼。

3. 安全组、SSH与防火墙:服务器开机后最该先做这三件事

3.1 安全组规则设计:最小权限真的不是说说而已

安全组可以理解成云服务器窗外面的第一道门,它决定哪些流量能进来。创建实例的时候,一般会有默认安全组,但很多人没细看就直接用默认规则,结果入方向可能啥都放行了,或者反过来啥都没放行。

我的建议是,别用默认安全组,自己建一个,按最小权限原则设计。普通Web服务的初始入方向规则,我一般只放行这几个:

方向协议端口源地址用途
入站TCP22你自己的公网IPSSH远程管理
入站TCP800.0.0.0/0HTTP网页访问
入站TCP4430.0.0.0/0HTTPS网页访问
出站全部全部0.0.0.0/0默认允许

如果你有数据库,比如MySQL的3306端口,千万别直接对公网全放开,宁可让应用在VPC内网访问。真要远程管理数据库,用SSH隧道或者只允许特定IP,都比开公网端口安全得多。

还有一个容易被忽略的点:安全组规则改完之后,是实时生效的,不用重启实例。如果遇到改完规则还是连不上的情况,问题多半出在下一节的系统防火墙那里。

3.2 用SSH密钥登录,把密码登录关掉

密码登录不是不能用,但长期跑公网的服务器,密码登录就是一直在用枪指着自己的脚趾。我强烈建议,第一次登录后立刻配置SSH密钥登录。

操作流程大概是这样:在控制台的安全配置里创建密钥对,然后下载私钥文件到本地,Windows和macOS都有对应的远程连接工具支持。拿到私钥后,在本地终端执行:

chmod 600 ~/.ssh/火山引擎服务器-key.pem ssh -i ~/.ssh/火山引擎服务器-key.pem root@你的公网IP

这里第一个要注意的就是私钥文件的权限。很多人在这一步连不上,原因就是私钥文件权限太宽松,SSH客户端直接拒绝使用。把权限改成600,一般就好了。

密钥登录跑通之后,再考虑关密码登录。修改SSH服务配置文件前,强烈建议保持当前SSH会话不要断开,然后修改配置,添加如下内容:

PasswordAuthentication no

改完重启SSH服务:

systemctl restart sshd

然后新开一个终端窗口,用密钥试试能不能连上。确认没问题,再把旧的密码登录会话关闭。这套流程能确保你不会把自己锁在外面。

3.3 安全组和系统防火墙是两道不同的门

很多新手会把安全组和系统防火墙当成一回事,其实它俩是独立的两层。安全组是云平台在实例外的网络层过滤,系统防火墙是操作系统内部的过滤。你光在安全组放行80端口,系统里ufw还拦着,网站照样打不开。

新装好的Linux系统,有些发行版默认关着防火墙,有些则开着。我建议你主动确认一下,以Ubuntu为例:

sudo ufw status

如果没启用,可以考虑按顺序放行几个必要端口:

sudo ufw allow 22/tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable

这里我想多强调一句:别图省事直接把整台服务器的防火墙关掉。很多人在本地开发时习惯了关防火墙,一到生产环境也照做,结果出事之后后悔都来不及。内部加一道防火墙不费事,但能挡住不少扫描攻击。

4. 从零跑通第一个Web服务:把服务器真正用起来

4.1 数据盘挂载:买了数据盘却看不到容量,原因就是差这一步

很多人买了数据盘,登录服务器后执行df -h一看,容量跟没买似的,瞬间以为自己被坑了。其实不是,数据盘默认是需要手动挂载的,系统只帮你识别到设备,不会自动格式化并挂载到某个目录。

具体操作步骤大致如下:

查看当前磁盘:

lsblk

你会看到类似vdb这样的数据盘设备,但没有分区,也没挂载点。接下来进行分区和格式化:

fdisk /dev/vdb

在fdisk交互界面里依次输入n新建分区、p主分区、w保存退出。然后格式化:

mkfs.ext4 /dev/vdb1

创建挂载目录并挂载:

mkdir -p /data mount /dev/vdb1 /data

最关键的一步是写入开机自动挂载配置,不然重启后你又得手动挂一次:

echo "/dev/vdb1 /data ext4 defaults 0 2" >> /etc/fstab

写入fstab之前,可以先用blkid查一下设备UUID,用UUID挂载比直接用设备名更稳,因为设备名在重启后可能变化。

4.2 安装并运行Nginx:最小可访问Web服务

环境配置好之后,先跑一个最简单的Web服务验证整个链路。以Ubuntu为例,安装Nginx很直接:

apt update && apt install nginx -y systemctl enable --now nginx

然后本机先验证一下:

curl 127.0.0.1

如果看到HTML内容,说明服务起来了。这时候再去公网浏览器里访问你的公网IP,如果能看到Nginx默认页面,那恭喜,整条公网链路已经通了。

这一步如果打不开,先回头看安全组和系统防火墙。顺序是这样的:先确保防火墙规则放行80端口,再检查安全组入方向规则,然后再排查Nginx是否真的在监听80端口:

ss -tlnp | grep 80

4.3 域名解析和Nginx配置的几个要点

用IP访问只是起步,正式项目终究要绑定域名。域名解析的操作步骤不算复杂,把你域名的A记录解析到服务器的公网IP上就行了。解析生效后,在Nginx的配置文件里指定server_name,就能把请求路由到对应的站点目录。

这里有个常见问题,就是改完DNS之后迟迟不生效。这很正常,DNS解析有TTL时间,有的地方可能几分钟,有的要更久。不用慌,去本地执行ping 你的域名或者dig 你的域名,看解析结果是否已经指向服务器IP,等指向正确再谈下一步。

如果你还想用Nginx做反向代理,把请求转发给某个Node.js或者Java进程,配置思路是这样的:在server块里加一个location规则,用proxy_pass指向本机某个端口,比如3000。这样外部访问80端口,内部自动转到应用服务。这个方法在实际项目里几乎天天用。

5. 故障排查实录:四次真实故障的完整排查链路

这一节我想认真讲讲排错过程,而不是只给结论。排错的方式比结论更重要,因为你能从中掌握"当问题发生时,第一步应该看哪里"的思维方式。

5.1 故障一:公网IP能通,但SSH怎么都连不上

某天我准备登录一台新开的火山引擎服务器,控制台里显示实例运行正常,公网IP也能ping通,但SSH就是一直超时。排查过程如下:

先在本机执行连接测试:

nc -vz IP地址 22

结果显示timed out,说明22端口无法访问。果断打开控制台里的远程连接功能,用网页版VNC登录到系统内部,先确认sshd服务状态:

systemctl status sshd

服务是running,再检查监听端口:

ss -tlnp | grep 22

结果发现sshd监听的是127.0.0.1:22,而不是0.0.0.0:22!问题一下就明朗了:配置文件里把监听地址写死了,只允许本机连接,自然外部就无法访问。修改sshd_config里的ListenAddress,去掉这行或者改成0.0.0.0,重启sshd,问题解决。

这个坑的根源在于很多人喜欢盯着教程抄配置,抄的时候把一些个性化参数也带过来了,结果环境不同就出问题。遇到SSH问题,优先检查监听地址、安全组规则、sshd配置三件事,大多数都能解决。

5.2 故障二:安全组都放行了80端口,Nginx还是访问不了

有一次帮一位朋友排查网站打不开,他在火山引擎控制台里确认安全组已经放行了80端口,Nginx服务也显示running,但公网访问就是超时。这类问题,排查链路比结论更有参考价值。

先本机访问,curl 127.0.0.1,返回了HTML,说明Nginx进程没问题。再检查监听端口,ss -tlnp | grep 80,显示nginx监听在*:80,端口正常。问题就剩中间链路了。

这时我想起系统防火墙还没看。执行:

sudo ufw status

果然,ufw是active状态,而且规则里没有放行80端口。立刻执行sudo ufw allow 80/tcp,再刷新浏览器,页面出来了。

教训很明确:安全组和系统防火墙是两套独立逻辑,控制台放行不代表系统内部放行。排查顺序建议是"本机测一遍,安全组看一眼,防火墙确认一下",基本能覆盖90%的端口不通问题。

5.3 故障三:控制台扩容了数据盘,系统里看到的容量没变

某次业务数据增长,我在控制台把数据盘从50G扩到100G,重启实例后执行df -h,发现还是50G,当时就怀疑人生了。后来才明白,控制台扩容只是把云盘的底层存储空间扩大了,操作系统里的分区和文件系统还停留在之前的尺寸。

正确流程是这样:

先看当前磁盘分区情况:

lsblk

能看到底层设备已经是100G了,但分区vdb1还是50G。这时候需要先扩展分区,再扩展文件系统:

growpart /dev/vdb 1

然后根据文件系统类型来扩容。ext4格式用resize2fs:

resize2fs /dev/vdb1

执行完再看df -h,容量就对了。

这个坑几乎人人都能遇到,不是火山引擎特有,但处理步骤我建议收藏起来。核心就记住一句话:控制台扩的是云盘,系统里扩的是分区和文件系统,两个都必须做。

5.4 故障四:内存一直飙高,莫名其妙就被系统“杀”了

有一次跑一个Java后端服务,日志里突然显示进程被kill了,没有任何异常退出信息。查看系统消息:

journalctl -k | grep -i oom

结果看到一堆Out of memory: Kill process的记录,这就不用慌了,是Linux的OOM Killer在物理内存不够时强制结束进程。

这类问题的解决思路分两步。第一步是优化应用本身,比如给JVM设置合理的堆内存,别让应用无限占用。第二步是给系统加一点Swap空间作为兜底。创建一个swap文件的方法如下:

fallocate -l 2G /swapfile chmod 600 /swapfile mkswap /swapfile swapon /swapfile

想开机自动启用的话,写入/etc/fstab:

echo "/swapfile none swap sw 0 0" >> /etc/fstab

Swap不能完全替代物理内存,但关键时刻能避免进程瞬间被杀,给排查问题争取时间。不过也别把Swap设得过大,系统频繁换页会拖慢整体性能。

6. 监控告警与账单管理:让服务器持续稳定且不超支

6.1 控制台里必看的五个监控维度

服务器稳定运行,靠的不是等出问题了再上去救火,而是提前配置监控。在火山引擎的监控控制台里,我一般会盯这五个指标:

CPU用率不用多说,长期飙到90%以上就要注意,要么扩容,要么优化代码。内存使用率也是重点关注项,结合Swap占用一起看,比单看内存数字有意义。磁盘使用率这个一定要设置告警,磁盘满了的影响不只是写入失败,很多服务会直接崩溃。网络带宽出入方向要分别看,如果有按流量计费的实例,出方向流量直接关系到账单金额。还有一个比较容易忽略的是TCP连接数,网站突然被大量扫描攻击时,连接数会异常飙升,这种迹象看监控一眼就能发现。

6.2 告警配置习惯:别把通知当成骚扰

很多人对告警的态度是"全开但从不看",这跟没开一样。我的做法是只设几个真正有意义的阈值,宁可少而精,也不要多到麻木。

比如CPU使用率,我设的是持续5分钟超过85%才算告警,因为短时间波动是正常的,持续高负载才是问题。磁盘使用率阈值设在80%,留出缓冲空间去清理日志或扩容。带宽和TCP连接数则根据业务基线来调,不要硬套别人的参数。

告警通知渠道上,建议选择能直接推送到手机的方式,比天天盯邮件强。有人会把所有指标都加到告警规则里,结果一天收几十条通知,最后干脆全屏蔽了,这反而失去了监控的意义。

6.3 账单管理的几个省钱习惯

这个部分对个人开发者尤其重要。我见过太多人月底看到账单时才惊觉自己居然开着一堆闲置实例。

我的经验就三条:定期检查实例列表和快照,把常年不用的实例直接释放,把没有保留价值的快照删掉;对非生产环境,尽量按量付费或者定时开关机,比如测试机只在工作日开着,周末全部关机;包年包月的机器到期后如果不续费,要提前确认数据是否需要备份备份后才释放。

另外关于带宽计费,如果你不确定自己的业务流量是稳定还是波动的,建议先选按流量计费,观察一段时间再切。因为按固定带宽计费时,带宽开得过高会很浪费,开得太低可能影响体验。按流量计费是出多少付多少,对流量波动大的业务更友好。


最后分享一个小习惯:我在每次对火山引擎服务器做关键变更前,都会手动创建一份快照,比如升级配置、改安全组、调数据库参数,这些操作都不算大,但万一出了问题,快照能让我在几分钟内恢复到变更前的状态。等确认变更没问题之后,再根据快照策略去清理旧快照。这个习惯帮我免掉了至少三次大麻烦,有两次都是因为改配置时不小心手滑,靠快照一键回滚才没耽误线上业务。你也别等到出了问题才想起备份,云服务器这东西,数据安全永远是第一位的。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进