第1章:操作系统环境准备
大家好,我是你们的运维架构师。今天咱们聊聊集群部署的第一步——操作系统环境准备。
说实话,我见过太多人一上来就急着装软件、配服务,结果后面各种踩坑。操作系统环境没打好,后面再折腾也是白搭。这就像盖房子,地基没夯实,装修再漂亮也白费。
1.1 Linux发行版选择:CentOS / Ubuntu / Rocky Linux
选哪个发行版?这个问题我几乎每次培训都会被问到。我的回答是:看场景。
我个人习惯把发行版分成三类:
| 发行版 | 特点 | 适用场景 | 我的建议 |
|---|---|---|---|
| CentOS 7/8 | 稳定、社区支持强、RHEL兼容 | 企业生产环境 | 老项目首选,但2024年已停止维护 |
| Ubuntu 20.04/22.04 LTS | 包新、社区活跃、文档丰富 | 开发测试、云原生 | 新手友好,K8s社区首选 |
| Rocky Linux 8/9 | CentOS替代品、RHEL兼容 | 新项目生产环境 | 我目前的主力推荐 |
我在项目中遇到过一件事:有个客户坚持用CentOS 6,结果某天发现内核太老,Docker跑不起来。嗯,那场面挺尴尬的。所以我的建议是——别跟版本过不去。
核心原则:生产环境选LTS版本,开发环境可以追新。别用EOL(停止维护)的版本,除非你想给自己找麻烦。
说白了,如果你现在要搭一个新集群,我推荐Rocky Linux 9。为什么?因为它继承了CentOS的稳定性,又保持了RHEL的兼容性。你想想看,以后迁移到商业版RHEL,几乎零成本。
1.2 系统最小化安装
很多新手装系统喜欢「全选」——桌面环境、开发工具、办公套件全装上。我刚开始也这样,直到有一次发现一个生产服务器上居然装了游戏……
最小化安装的原则很简单:用不到的东西,一个都不要装。
具体怎么做?
- 安装时选择「Minimal Install」——只有命令行,没有图形界面
- 只选必要的包组:比如「Standard」、「Development Tools」
- 别选「Server with GUI」——集群服务器不需要桌面
小技巧:装完系统后,用 rpm -qa | wc -l 看看装了多少包。我一般控制在300-400个包以内。超过500个,说明你装多了。
为什么要这么严格?因为每个多余的包都可能带来安全漏洞,每个多余的服务都在消耗系统资源。集群环境下,几十台甚至上百台服务器,这点浪费累积起来就很可观了。
1.3 内核参数优化
装完系统,下一步就是调内核参数。这一步很多人会忽略,但恰恰是性能的关键。
我常用的优化参数,整理成了一张表:
| 参数 | 默认值 | 推荐值 | 说明 |
|---|---|---|---|
| net.core.somaxconn | 128 | 65535 | 提高TCP连接队列长度 |
| net.ipv4.tcp_tw_reuse | 0 | 1 | 复用TIME_WAIT状态的连接 |
| vm.swappiness | 60 | 10 | 减少内存交换,提高响应速度 |
| fs.file-max | 系统默认 | 6553560 | 增加文件句柄上限 |
| net.ipv4.ip_local_port_range | 32768 60999 | 1024 65535 | 扩大本地端口范围 |
配置方法很简单,编辑 /etc/sysctl.conf 文件,把上面的参数加进去,然后执行 sysctl -p 生效。
# 我的常用内核优化配置
cat >> /etc/sysctl.conf << EOF
# 网络优化
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65535
# 内存优化
vm.swappiness = 10
# 文件句柄
fs.file-max = 6553560
EOF
# 立即生效
sysctl -p
注意:我曾经在一台生产服务器上把 vm.swappiness 设成了0,结果内存不够时系统直接OOM了。后来我改成10,既保证了性能,又留了缓冲。别走极端,优化要适度。
为什么会这样?因为 swappiness=0 意味着系统不到万不得已绝不使用交换分区,一旦内存耗尽就直接杀进程。设成10,系统会在内存使用率达到90%左右时开始交换,留出缓冲空间。
1.4 SSH免密登录配置
集群环境下,你不可能每台机器都输密码登录。SSH免密登录是基本功。
配置步骤其实就三步:
- 生成密钥对——在管理节点上执行
ssh-keygen -t rsa -b 4096 - 分发公钥——用
ssh-copy-id user@node-ip把公钥复制到各节点 - 验证登录——直接
ssh node-ip看看能不能免密登录
# 在管理节点上执行
# 1. 生成密钥(一路回车即可)
ssh-keygen -t rsa -b 4096
# 2. 分发到各节点
ssh-copy-id root@192.168.1.101
ssh-copy-id root@192.168.1.102
ssh-copy-id root@192.168.1.103
# 3. 验证
ssh 192.168.1.101 "hostname"
避坑指南:我曾经遇到一个问题——明明配了免密,但就是登录不了。查了半天,发现是 /root/.ssh 目录权限不对。记住:.ssh 目录权限必须是700,authorized_keys 文件权限必须是600。权限太松,SSH会直接拒绝。
还有个细节:如果你用的是非root用户,记得把公钥放到对应用户的 ~/.ssh/authorized_keys 里。别放错地方了。
知识体系总览
这一章的内容,我用一张图来总结:
好了,这一章的内容就到这里。操作系统环境准备是集群部署的第一步,也是最容易被忽视的一步。把这一步做好,后面的工作会顺畅很多。
想要更多资料,联系可可