Amazon Linux 2 全面技术指南:从基础到最佳实践
在云计算时代,选择一款稳定、高效且与云平台深度集成的操作系统至关重要。Amazon Linux 2 作为 AWS 推出的开源 Linux 发行版,专为 EC2 实例和 AWS 云服务优化,凭借长期支持、安全合规性和高性能,已成为云上工作负载的首选系统之一。本文将从基础概念到高级实践,全面解析 Amazon Linux 2 的核心特性、安装配置、系统管理、安全最佳实践及迁移策略,帮助开发者和运维人员充分发挥其在 AWS 环境中的优势。
目录#
-
- 1.1 什么是 Amazon Linux 2?
- 1.2 核心特性与优势
- 1.3 支持生命周期与维护政策
-
- 2.1 在 EC2 实例上启动 Amazon Linux 2
- 2.2 本地环境安装(VMware/VirtualBox)
- 2.3 容器化部署(Docker 镜像)
-
- 3.1 Yum 基础操作(安装/更新/卸载)
- 3.2 Amazon Linux Extras:扩展软件仓库
- 3.3 启用 EPEL 仓库(第三方软件支持)
-
- 4.1 systemd 服务管理(替代 Upstart)
- 4.2 用户与权限管理(sudo 配置)
- 4.3 网络配置(静态 IP 与 DNS)
-
- 5.1 系统更新与漏洞修复
- 5.2 SSH 安全加固(禁用密码登录)
- 5.3 防火墙与 SELinux 配置
- 5.4 IAM 角色与最小权限原则
- 5.5 数据加密(EBS 与传输中数据)
-
- 6.1 内核参数调优(网络与 I/O)
- 6.2 EBS 与实例存储优化
- 6.3 内存与 Swap 配置
- 6.4 CloudWatch 监控与性能分析
-
- 7.1 搭建 Nginx/Apache Web 服务器
- 7.2 部署 Node.js/Python 应用服务
- 7.3 运行 MySQL/PostgreSQL 数据库
- 7.4 作为 Docker/K8s 节点的基础系统
-
从 Amazon Linux 1 迁移至 Amazon Linux 2
- 8.1 核心差异对比(Systemd、内核等)
- 8.2 迁移步骤与工具
- 8.3 常见问题与解决方案
1. Amazon Linux 2 概述#
1.1 什么是 Amazon Linux 2?#
Amazon Linux 2 是 AWS 推出的免费开源 Linux 发行版,基于 Red Hat Enterprise Linux (RHEL)/CentOS 内核构建,专为 AWS 云环境优化。它提供长期支持(LTS)、定期安全更新和与 AWS 服务的深度集成,适用于从简单 Web 应用到复杂企业级工作负载的各类场景。
1.2 核心特性与优势#
| 特性 | 说明 |
|---|---|
| 长期支持 | 支持至 2025 年 6 月,提供 5 年安全更新与维护 |
| 内核优化 | 基于 Linux 4.14 LTS 内核,针对 EC2 实例的 CPU、内存和网络性能优化 |
| 轻量级设计 | 最小化镜像大小,减少攻击面,启动速度快 |
| Amazon Linux Extras | 提供额外软件仓库,支持快速安装最新版本的语言(如 Python 3.9)、数据库等 |
| Systemd 管理 | 采用 Systemd 作为 init 系统,替代 Amazon Linux 1 的 Upstart,提升服务管理效率 |
| AWS 服务集成 | 预装 AWS CLI、CloudWatch 代理等工具,无缝对接 S3、EC2、IAM 等服务 |
1.3 支持生命周期与维护政策#
- 维护周期:Amazon Linux 2 提供至 2025 年 6 月的安全更新和错误修复。
- 更新策略:通过
yum仓库推送安全补丁,用户可手动或通过 AWS Systems Manager 自动更新。 - 兼容性:保证二进制兼容性,确保现有应用无需修改即可迁移。
2. 安装与部署 Amazon Linux 2#
2.1 在 EC2 实例上启动 Amazon Linux 2#
Amazon Linux 2 最常见的部署方式是通过 EC2 实例。步骤如下:
- 登录 AWS 控制台,进入 EC2 服务页面。
- 启动实例,在「选择 Amazon 系统镜像 (AMI)」中搜索 Amazon Linux 2,选择最新稳定版(如
amzn2-ami-hvm-*-gp2)。 - 选择实例类型(如
t2.micro免费套餐),配置网络、存储和安全组(默认允许 SSH 访问)。 - 启动实例,选择或创建密钥对(用于 SSH 登录)。
AWS CLI 快速启动示例:
aws ec2 run-instances \
--image-id ami-0c55b159cbfafe1f0 # 替换为目标区域的 Amazon Linux 2 AMI ID \
--instance-type t2.micro \
--key-name my-key-pair \ # 替换为你的密钥对名称
--security-group-ids sg-123456 \ # 替换为允许 SSH 的安全组
--subnet-id subnet-7890ab # 替换为你的子网 ID2.2 本地环境安装(VMware/VirtualBox)#
若需本地测试,可下载 Amazon Linux 2 镜像并导入虚拟机:
- 下载镜像:从 AWS 官方镜像地址 下载
amzn2-ami-hvm-x86_64-gp2.img(约 800MB)。 - 转换格式:使用
qemu-img将 RAW 格式转换为 VM 支持的格式(如 VMDK):qemu-img convert -f raw -O vmdk amzn2-ami-hvm-x86_64-gp2.img amzn2.vmdk - 导入虚拟机:在 VMware/VirtualBox 中新建虚拟机,选择「使用现有虚拟硬盘」,导入转换后的
amzn2.vmdk。 - 启动并配置:启动后通过
ec2-user用户登录(默认无密码,需通过虚拟机控制台设置)。
2.3 容器化部署(Docker 镜像)#
Amazon Linux 2 提供官方 Docker 镜像,适用于容器化开发或 CI/CD 场景:
# 拉取镜像
docker pull amazonlinux:2
# 启动交互式容器
docker run -it amazonlinux:2 /bin/bash3. 包管理:Yum 与 Amazon Linux Extras#
Amazon Linux 2 使用 yum 作为默认包管理器,并通过 Amazon Linux Extras 提供额外软件版本。
3.1 Yum 基础操作#
# 检查可更新包
yum check-update
# 更新所有包(需 root 权限)
sudo yum update -y
# 安装指定包(如 Nginx)
sudo yum install -y nginx
# 卸载包
sudo yum remove -y nginx
# 查看包信息
yum info nginx
# 搜索包
yum search python33.2 Amazon Linux Extras:扩展软件仓库#
Amazon Linux Extras 提供官方仓库未包含的最新软件(如 Python 3.9、Node.js 18 等),无需手动添加第三方源。
常用命令:
# 列出所有可用软件包
amazon-linux-extras list
# 启用指定软件(如 Python 3.9)
sudo amazon-linux-extras enable python3.9
# 安装启用的软件
sudo yum install -y python3.9
# 禁用软件(如需回退版本)
sudo amazon-linux-extras disable python3.9示例:安装 Node.js 18
sudo amazon-linux-extras enable nodejs18
sudo yum install -y nodejs
node -v # 验证版本:v18.x.x3.3 启用 EPEL 仓库#
若需安装第三方工具(如 htop、jq),可启用 EPEL(Extra Packages for Enterprise Linux)仓库:
# 安装 EPEL 源
sudo yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# 安装 EPEL 包(如 htop)
sudo yum install -y htop4. 系统管理核心操作#
4.1 Systemd 服务管理#
Amazon Linux 2 使用 Systemd 替代传统 init.d,服务管理更高效。
常用命令:
# 启动服务(如 Nginx)
sudo systemctl start nginx
# 停止服务
sudo systemctl stop nginx
# 重启服务
sudo systemctl restart nginx
# 设置开机自启
sudo systemctl enable nginx
# 禁用开机自启
sudo systemctl disable nginx
# 查看服务状态
sudo systemctl status nginx自定义服务示例:为 Node.js 应用创建 Systemd 服务(/etc/systemd/system/myapp.service):
[Unit]
Description=My Node.js App
After=network.target
[Service]
User=ec2-user
WorkingDirectory=/home/ec2-user/myapp
ExecStart=/usr/bin/node app.js
Restart=on-failure # 失败时自动重启
[Install]
WantedBy=multi-user.target启用并启动服务:
sudo systemctl daemon-reload # 重新加载服务配置
sudo systemctl enable myapp
sudo systemctl start myapp4.2 用户与权限管理#
添加用户并授予 sudo 权限#
# 创建用户
sudo useradd -m johndoe
# 设置密码
sudo passwd johndoe
# 授予 sudo 权限(无需密码)
sudo visudo # 编辑 /etc/sudoers,添加:
# johndoe ALL=(ALL) NOPASSWD:ALL切换用户与权限检查#
su - johndoe # 切换到 johndoe
sudo ls /root # 验证 sudo 权限4.3 网络配置#
Amazon Linux 2 默认通过 DHCP 获取网络配置(适用于 EC2),若需静态 IP(如本地 VM),可手动修改配置文件。
临时配置(重启失效)#
sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0
sudo route add default gw 192.168.1.1 eth0永久配置(通过 NetworkManager)#
# 查看网络接口
nmcli device status
# 配置静态 IP(以 eth0 为例)
sudo nmcli con mod eth0 \
ipv4.addresses 192.168.1.100/24 \
ipv4.gateway 192.168.1.1 \
ipv4.dns "8.8.8.8 8.8.4.4" \
ipv4.method manual
# 重启网络
sudo nmcli con up eth04. 安全最佳实践#
安全是云环境的核心,以下是 Amazon Linux 2 的关键安全配置。
4.1 系统更新与漏洞修复#
定期更新系统是防范漏洞的首要措施:
# 自动更新(推荐生产环境)
sudo yum install -y yum-cron
sudo systemctl enable --now yum-cron # 启用自动更新服务配置 yum-cron(/etc/yum/yum-cron.conf):
update_cmd = security # 仅更新安全补丁
download_updates = yes
apply_updates = yes4.2 SSH 安全加固#
默认情况下,EC2 实例通过密钥登录,但需进一步加固:
- 禁用密码登录:编辑
/etc/ssh/sshd_config:PasswordAuthentication no # 禁用密码登录 ChallengeResponseAuthentication no - 限制 SSH 用户:仅允许指定用户登录:
AllowUsers ec2-user johndoe # 仅允许 ec2-user 和 johndoe - 重启 SSH 服务:
sudo systemctl restart sshd
4.3 防火墙与 SELinux 配置#
Firewalld(默认防火墙)#
# 启用并启动 firewalld
sudo systemctl enable --now firewalld
# 允许 HTTP/HTTPS 端口
sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
# 允许 SSH 端口(默认 22,建议修改为非默认端口)
sudo firewall-cmd --add-port=2222/tcp --permanent # 假设 SSH 端口为 2222
# 重载规则
sudo firewall-cmd --reloadSELinux#
Amazon Linux 2 默认以 Permissive 模式运行 SELinux(仅记录违规,不阻止操作)。如需启用 Enforcing 模式:
# 临时切换(立即生效,重启失效)
sudo setenforce 1
# 永久生效(编辑 /etc/selinux/config)
SELINUX=enforcing4.4 IAM 角色与最小权限原则#
禁止在实例中存储 AWS 访问密钥,应使用 IAM 角色授予 EC2 实例权限:
- 在 AWS 控制台创建 IAM 角色,附加所需权限(如
AmazonS3ReadOnlyAccess)。 - 将角色附加到 EC2 实例(通过「操作 > 安全 > 修改 IAM 角色」)。
- 实例中通过 AWS CLI 或 SDK 自动获取临时凭证:
aws s3 ls # 无需配置 access key,直接访问 S3
4.5 数据加密#
EBS 卷加密#
创建 EC2 实例时,选择「启用加密」以加密 EBS 卷。对于现有卷,可通过「创建快照 > 从快照创建加密卷」迁移。
数据传输加密#
- SSH/HTTPS:强制使用 SSH 密钥和 HTTPS(配置 Nginx/Apache 启用 TLS)。
- 内部服务通信:使用 AWS PrivateLink 或 TLS 加密 VPC 内服务通信。
5. 性能优化指南#
5.1 内核参数调优#
通过 /etc/sysctl.conf 优化内核参数(以 Web 服务器为例):
# 增加 TCP 连接队列长度(应对高并发)
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 4096
# 减少 TIME_WAIT 连接超时(释放端口)
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1 # 允许复用 TIME_WAIT 连接应用配置:sudo sysctl -p
5.2 EBS 与实例存储优化#
- 使用 EBS 优化实例:确保 EC2 实例启用「EBS 优化」(部分实例默认启用,如 t3 系列)。
- 选择合适的 EBS 类型:
- 通用型(gp3):平衡性能与成本,适用于大多数场景。
- 性能型(io2):高 IOPS,适用于数据库。
- 启用 EBS 多队列:对于 NVMe 卷,启用多队列支持(需内核 4.10+):
# /etc/modprobe.d/nvme.conf options nvme_core io_queue_count=4 # 增加队列数至 4
5.3 内存与 Swap 配置#
EC2 实例默认无 Swap 分区,若内存不足,可手动创建:
# 创建 4GB Swap 文件
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile # 限制权限
sudo mkswap /swapfile
sudo swapon /swapfile
# 永久生效(编辑 /etc/fstab)
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab5.4 CloudWatch 监控与性能分析#
通过 CloudWatch 监控实例性能:
- 安装 CloudWatch 代理:
# 下载代理安装脚本 wget https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm # 安装 sudo rpm -Uvh amazon-cloudwatch-agent.rpm - 配置代理:运行
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard,选择监控指标(CPU、内存、磁盘等)。 - 启动代理:
sudo systemctl start amazon-cloudwatch-agent
6. 典型应用场景实践#
6.1 搭建 Nginx Web 服务器#
# 安装 Nginx
sudo amazon-linux-extras enable nginx1
sudo yum install -y nginx
# 启动并设置开机自启
sudo systemctl enable --now nginx
# 验证(需安全组开放 80 端口)
curl http://localhost # 应返回 Nginx 默认页面配置自定义网站:编辑 /etc/nginx/conf.d/myapp.conf:
server {
listen 80;
server_name example.com;
root /var/www/myapp;
index index.html;
}重启 Nginx:sudo systemctl restart nginx。
6.2 部署 Node.js 应用服务#
# 安装 Node.js 18
sudo amazon-linux-extras enable nodejs18
sudo yum install -y nodejs
# 创建示例应用
mkdir -p /home/ec2-user/myapp && cd /home/ec2-user/myapp
echo "const http = require('http'); http.createServer((req, res) => { res.end('Hello AWS!'); }).listen(3000);" > app.js
# 创建 Systemd 服务(确保应用后台运行)
sudo tee /etc/systemd/system/myapp.service <<EOF
[Unit]
Description=Node.js App
After=network.target
[Service]
User=ec2-user
WorkingDirectory=/home/ec2-user/myapp
ExecStart=/usr/bin/node app.js
Restart=always
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
sudo systemctl enable --now myapp
# 验证
curl http://localhost:3000 # 应返回 "Hello AWS!"6.3 运行 MySQL 数据库#
# 安装 MySQL 8.0
sudo amazon-linux-extras enable mysql8.0
sudo yum install -y mysql-server
# 启动并设置开机自启
sudo systemctl enable --now mysqld
# 安全初始化(设置 root 密码、禁用远程 root 登录等)
sudo mysql_secure_installation
# 登录数据库
mysql -u root -p6.4 作为 Docker/K8s 节点的基础系统#
Amazon Linux 2 是 EKS(Amazon Elastic Kubernetes Service)的推荐节点系统:
# 安装 Docker
sudo amazon-linux-extras enable docker
sudo yum install -y docker
sudo systemctl enable --now docker
sudo usermod -aG docker ec2-user # 允许 ec2-user 管理 Docker(需重新登录)
# 安装 Kubernetes 组件(用于 EKS 节点)
sudo yum install -y kubelet kubeadm kubectl
sudo systemctl enable --now kubelet7. 从 Amazon Linux 1 迁移至 Amazon Linux 2#
Amazon Linux 1 已于 2020 年 12 月停止维护,用户需迁移至 Amazon Linux 2。
7.1 核心差异对比#
| 特性 | Amazon Linux 1 | Amazon Linux 2 |
|---|---|---|
| Init 系统 | Upstart | Systemd |
| 内核版本 | 3.10.x | 4.14.x LTS |
| 包管理 | yum(基础仓库) | yum + Amazon Linux Extras |
| 支持周期 | 已停止维护 | 至 2025 年 6 月 |
| 默认用户 | ec2-user | ec2-user(兼容) |
7.2 迁移步骤与工具#
- 评估当前环境:记录安装的包(
rpm -qa > packages.txt)、服务(chkconfig --list)和自定义配置(/etc/下的修改)。 - 创建 Amazon Linux 2 测试环境:复制生产环境配置,验证兼容性。
- 迁移配置与数据:
- 复制应用配置文件(如
/etc/nginx/、/etc/httpd/)。 - 将 Amazon Linux 1 的
init.d脚本转换为 Systemd 服务文件(参考 4.1 节)。
- 复制应用配置文件(如
- 使用 AWS 迁移工具:
- AWS Application Migration Service:自动化服务器迁移。
- amazon-linux-2-migration-helper:AWS 提供的迁移脚本,检查兼容性并生成迁移报告:
# 在 Amazon Linux 1 实例上运行 curl -O https://amazon-linux-2-migration-helper.s3.amazonaws.com/amazon-linux-2-migration-helper.zip unzip amazon-linux-2-migration-helper.zip sudo ./amazon-linux-2-migration-helper
- 测试与切换:验证功能后,通过 DNS 切换或蓝绿部署迁移流量。
7.3 常见问题与解决方案#
- Systemd 服务不兼容:需将
init.d脚本重写为.service文件(可使用systemctl convert工具自动转换)。 - 软件版本差异:通过
amazon-linux-extras安装与 Amazon Linux 1 相同或兼容的软件版本。 - 内核模块问题:Amazon Linux 2 内核更新可能导致旧模块失效,需重新编译或寻找替代模块。
8. 总结与参考资料#
Amazon Linux 2 凭借其与 AWS 的深度集成、长期支持和性能优化,成为云上工作负载的理想选择。本文从安装部署、系统管理到安全最佳实践和迁移策略,覆盖了 Amazon Linux 2 的核心知识点。无论是 Web 服务、数据库还是容器化应用,Amazon Linux 2 都能提供稳定高效的运行环境。