在腾讯云(以及大多数国内云厂商)上使用 Ubuntu 22.04 LTS,虽然基础镜像是通用的,但为了生产环境的稳定性、安全性和性能,有几个坑和最佳实践是必须提前知道的。
以下是基于实际运维经验的总结,分为初始化配置、安全与网络、存储与性能、常见痛点四个维度。
1. 初始化配置:别只靠 cloud-init
Ubuntu 22.04 的云镜像默认集成了 cloud-init,它能自动处理主机名、SSH 密钥注入等。但在国内环境下,你需要关注以下几点:
- 源替换(必做):
默认的官方源在国内访问速度极慢且不稳定。不要等到安装软件时才去改源。建议在创建实例后,第一时间将/etc/apt/sources.list替换为阿里云或腾讯云的 Ubuntu 源,或者使用ppa提速工具。# 示例:备份并替换为阿里云源(需根据具体版本调整路径) sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak sudo sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list sudo apt update && sudo apt upgrade -y - 时区设置:
部分旧版镜像可能默认 UTC 时间。对于需要记录日志或依赖本地时间的业务,务必检查并设置为Asia/Shanghai。timedatectl set-timezone Asia/Shanghai - Swap 分区策略:
Ubuntu 22.04 默认可能不创建 Swap 文件,或者大小不合适。云服务器通常内存较大,但如果运行 Java/Python 等堆内存敏感应用,建议手动创建一个适当大小的 Swap 文件作为兜底,防止 OOM Kill 导致服务直接崩溃而非降级。
2. 安全与网络:防火墙是双刃剑
- UFW vs iptables/nftables:
Ubuntu 默认启用ufw(Uncomplicated Firewall)。在腾讯云控制台你已经设置了“安全组”,这层防护更底层、更高效。- 建议:如果安全组规则已经覆盖所有需求,可以关闭 UFW (
sudo ufw disable),减少两层防火墙带来的排查复杂度。 - 注意:如果你启用了 UFW,确保它没有拦截 SSH (22) 或你自定义的端口。很多时候服务器连不上,是因为 UFW 默认策略设为
deny而忘记添加allow规则。
- 建议:如果安全组规则已经覆盖所有需求,可以关闭 UFW (
- SSH 强化:
- 禁用密码登录:强制使用密钥对登录,这是云服务器的标准安全基线。
- 修改默认端口:虽然不能解决被扫描的问题,但能减少大量无效日志噪音。
- Fail2ban:强烈建议安装
fail2ban,防止暴力破解 SSH 密码(即使禁用了密码登录,也能防止其他服务的弱口令攻击)。
3. 存储与性能:NVMe 驱动与 I/O 调度
腾讯云 CVM 使用的是 NVMe SSD 磁盘,这与传统机械硬盘或早期 SATA SSD 完全不同。
- I/O Scheduler:
对于 NVMe 磁盘,Linux 内核通常推荐使用none或mq-deadline调度器,而不是传统的cfq或bfq。
检查当前调度器:cat /sys/block/vda/queue/scheduler如果不是
none或mq-deadline,需要在 GRUB 中永久修改。错误的调度器会显著降低高并发下的 IOPS 性能。 - 文件系统格式化:
新挂载的云盘建议使用ext4或xfs。如果是高性能场景,xfs在处理大文件和并行写入时表现更好。记得在mkfs时指定合适的块大小(block size),通常为 4K。 - 磁盘扩容:
腾讯云支持在线扩容系统盘和数据盘。扩容后,你需要进入系统内部执行growpart和resize2fs(ext4) 或xfs_growfs(xfs) 操作。切记:先备份快照! 很多新手在这里搞丢数据。
4. 常见痛点与“坑”
- IPv6 问题:
Ubuntu 22.04 默认可能开启 IPv6,但腾讯云的安全组和路由表可能未完全配置 IPv6 策略。如果你的应用不支持 IPv6,可能会导致某些 DNS 解析超时或连接失败。- 解决方案:在
/etc/sysctl.conf中临时禁用 IPv6,或在网络配置文件中明确指定仅使用 IPv4。
- 解决方案:在
- Docker 与 systemd-resolved:
Docker 容器内的 DNS 解析有时会出现问题,因为 Ubuntu 22.04 默认使用systemd-resolved管理 DNS。- 解决方案:确保
/etc/resolv.conf指向正确的上游 DNS(如 8.8.8.8 或腾讯云内网 DNS),或者在 Docker daemon.json 中配置固定的 nameserver。
- 解决方案:确保
- 内核更新重启:
Ubuntu 22.04 的内核更新频率较高。在生产环境,务必测试内核更新后的兼容性。特别是使用了第三方内核模块(如 NVIDIA GPU 驱动、特定网卡驱动)的场景,内核升级可能导致驱动失效,从而无法启动网络或 GPU 计算任务。 - 监控XX:
腾讯云的基础监控指标(CPU、内存、带宽)是通过 Guest Agent 采集的。确保tccli或腾讯云提供的监控插件已正确安装并运行。如果没有安装,你将失去详细的进程级监控和历史趋势图,这对故障排查非常不利。
5. 总结建议清单
- 创建实例前:选择“公共镜像”中的 Ubuntu 22.04 LTS,勾选“自动安装云助手”(便于后续批量操作)。
- 首次登录后:
- 换源。
- 全量更新 (
apt full-upgrade)。 - 配置 SSH 密钥登录,禁用密码。
- 检查并优化 I/O 调度器。
- 安装 fail2ban 和基础监控插件。
- 部署应用前:
- 确认防火墙策略(安全组 + UFW)。
- 测试 DNS 解析和网络连通性。
- 创建快照备份。
最后,永远不要在没有任何备份的情况下直接在生产环境进行内核升级或重大配置更改。腾讯云提供免费的快照功能,善用它是最好的保险。
云技术博客