先说结论:目前(2024年及以后),如果你要在新项目上部署 PostgreSQL,Ubuntu Server 是更稳妥、更主流的选择。 CentOS Stream 或者传统的 CentOS Linux 8/9 在数据库生产环境中的长期稳定性和社区支持力度上,已经明显落后于 Ubuntu LTS。
但这并不是一个非黑即白的答案,我们需要从几个核心维度来拆解,看看为什么现在的趋势变了,以及你该如何根据具体场景做决定。
1. 稳定性与生命周期:LTS vs. RHEL Clone
Ubuntu Server (LTS):
- 优势:Canonical 推出的 Long Term Support (LTS) 版本每两年发布一次,提供长达 5 年(甚至通过 Extended Security Maintenance 扩展到 10 年)的安全更新和技术支持。对于数据库这种需要长期稳定运行的服务来说,LTS 版本的内核和软件包经过充分测试,兼容性极好。
- PostgreSQL 集成:Ubuntu 官方仓库直接维护了较新版本的 PostgreSQL,且社区教程、StackOverflow 上的解决方案绝大多数基于 Debian/Ubuntu 体系。遇到报错,搜一下基本都能找到现成的坑填法。
CentOS:
- 现状尴尬:CentOS Linux 8 已于 2021 年底停止维护。Red Hat 将其转型为 CentOS Stream,这是一个滚动发布的上游开发版本,介于 Fedora 和 RHEL 之间。这意味着它不再是“最终版”的稳定系统,而是 RHEL 的预演版。
- 风险:虽然 CentOS Stream 也很稳定,但对于追求“绝对确定”的生产环境数据库来说,滚动更新的特性意味着你需要更频繁地关注依赖库的变化。此外,许多老旧的运维脚本和文档是基于 CentOS 7 编写的,迁移到 CentOS Stream 或 Rocky/AlmaLinux 时可能会遇到路径或配置差异。
注意:如果你坚持使用 RHEL 系生态,现在国内更常见的替代方案是 Rocky Linux 或 AlmaLinux,它们旨在完全二进制兼容 RHEL。但在国内云计算厂商(如阿里云、腾讯云)的镜像市场中,Ubuntu 的支持度和用户基数远超这些 RHEL 克隆版。
2. 云厂商支持与镜像优化
你提到熟悉国内云计算厂商,这点非常关键。
-
阿里云/腾讯云/华为云:
- Ubuntu:在所有主流云厂商中,Ubuntu LTS 是最受推崇的操作系统之一。云厂商提供的 Ubuntu 镜像通常经过了深度定制,比如预装了
cloud-init,优化了网络驱动,并且有专门的团队进行安全补丁推送。 - CentOS/RHEL 系:由于 CentOS 8 EOL 的影响,很多云厂商对 CentOS 系列的支持力度减弱。他们更倾向于推荐 Ubuntu 或自家的 Alibaba Cloud Linux / TencentOS(基于 CentOS 修改但自有维护)。如果你用公有云的 CentOS 镜像,可能面临底层驱动更新不及时的问题。
- Ubuntu:在所有主流云厂商中,Ubuntu LTS 是最受推崇的操作系统之一。云厂商提供的 Ubuntu 镜像通常经过了深度定制,比如预装了
-
性能调优:
PostgreSQL 的性能很大程度上依赖于操作系统的 I/O 调度、内存管理和文件系统。Ubuntu 的内核版本通常比 RHEL/CentOS 更新更快(尤其是在硬件提速、NVMe SSD 支持方面)。对于高性能数据库实例,较新的内核往往能带来更好的吞吐量和更低的延迟。
3. 软件包管理与生态
-
apt vs yum/dnf:
- Ubuntu 的
apt和dpkg在处理依赖关系时非常直观。安装 PostgreSQL 扩展(如 PostGIS, pgvector, timescaledb)时,Ubuntu 社区提供了大量的 PPA 或第三方源,安装过程简单粗暴。 - CentOS/RHEL 系的
dnf虽然强大,但在某些专有软件源的配置上略显繁琐。特别是当你需要使用一些非官方的监控工具或备份脚本时,Ubuntu 社区的脚本覆盖率更高。
- Ubuntu 的
-
容器化与 Kubernetes:
如果你打算将 PostgreSQL 部署在 K8s 集群中,Ubuntu 是 K8s 的事实标准操作系统。大多数 Helm Chart 和 Operator 默认针对 Ubuntu 进行了优化和测试。
4. 实际建议:怎么选?
✅ 选择 Ubuntu Server 的情况:
- 新项目启动:没有历史包袱,希望获得最新的内核支持和软件包。
- 云上部署:使用阿里云、腾讯云等公有云 ECS/CVM,Ubuntu 镜像更友好,技术支持响应更快。
- 需要最新功能:比如你想用 PostgreSQL 16/17 的新特性,Ubuntu 仓库会更快跟进。
- 团队技术栈:团队成员更熟悉 Debian/Ubuntu 体系,或者同时运行 Python/Node.js/Web 应用,Ubuntu 的环境配置更统一。
- 长期使用:计划运行 3-5 年以上,LTS 版本能提供稳定的安全更新周期。
⚠️ 考虑 CentOS/Rocky/AlmaLinux 的情况:
- 遗留系统迁移:公司已有大量基于 CentOS 7 的运维工具和监控体系,迁移成本高,暂时不想改动。
- 强合规要求:某些XX或XX项目明确要求必须使用 RHEL 或其二进制兼容发行版(此时应选 Rocky/AlmaLinux,而非 CentOS Stream)。
- 特定硬件驱动:极少数情况下,某些老式专用服务器硬件只有 RHEL 系的驱动支持(这种情况现在越来越少见)。
5. PostgreSQL 在 Ubuntu 上的最佳实践小贴士
既然选了 Ubuntu,这里有几个关键点能让你跑得更稳:
-
使用官方仓库:不要只用
apt install postgresql装系统自带的旧版本。建议添加 PostgreSQL 官方 APT 仓库,获取最新版 PG。sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo apt update sudo apt install postgresql-16 # 以 PG16 为例 -
调整 sysctl 参数:Ubuntu 默认的共享内存设置可能不适合数据库。编辑
/etc/sysctl.conf,增加:vm.overcommit_memory = 1 vm.swappiness = 1 net.core.somaxconn = 1024然后执行
sudo sysctl -p生效。 -
文件系统设计:推荐使用
ext4或XFS。如果数据盘很大,XFS 在并发写入和高容量下表现更好。确保挂载时启用noatime选项以减少不必要的元数据写入。 -
防火墙与安全组:Ubuntu 默认使用
ufw,但在云服务器上,建议主要依赖云厂商的“安全组”来控制端口访问,ufw作为本地最后一道防线即可。
总结
别再纠结 CentOS 了,除非你有特殊的合规或遗留系统约束。Ubuntu Server LTS + PostgreSQL 是目前国内互联网行业最成熟、文档最全、问题最少、云厂商支持最好的组合。
如果你担心 Ubuntu 的“滚动更新”风险,请记住:只选 LTS 版本(如 22.04, 24.04),并定期打补丁。这比折腾 CentOS Stream 的不确定性要可靠得多。
云技术博客