Amazon Linux 2 全面技术指南:从基础到最佳实践

在云计算时代,选择一款稳定、高效且与云平台深度集成的操作系统至关重要。Amazon Linux 2 作为 AWS 推出的开源 Linux 发行版,专为 EC2 实例和 AWS 云服务优化,凭借长期支持、安全合规性和高性能,已成为云上工作负载的首选系统之一。本文将从基础概念到高级实践,全面解析 Amazon Linux 2 的核心特性、安装配置、系统管理、安全最佳实践及迁移策略,帮助开发者和运维人员充分发挥其在 AWS 环境中的优势。

目录#

  1. Amazon Linux 2 概述

    • 1.1 什么是 Amazon Linux 2?
    • 1.2 核心特性与优势
    • 1.3 支持生命周期与维护政策
  2. 安装与部署 Amazon Linux 2

    • 2.1 在 EC2 实例上启动 Amazon Linux 2
    • 2.2 本地环境安装(VMware/VirtualBox)
    • 2.3 容器化部署(Docker 镜像)
  3. 包管理:Yum 与 Amazon Linux Extras

    • 3.1 Yum 基础操作(安装/更新/卸载)
    • 3.2 Amazon Linux Extras:扩展软件仓库
    • 3.3 启用 EPEL 仓库(第三方软件支持)
  4. 系统管理核心操作

    • 4.1 systemd 服务管理(替代 Upstart)
    • 4.2 用户与权限管理(sudo 配置)
    • 4.3 网络配置(静态 IP 与 DNS)
  5. 安全最佳实践

    • 5.1 系统更新与漏洞修复
    • 5.2 SSH 安全加固(禁用密码登录)
    • 5.3 防火墙与 SELinux 配置
    • 5.4 IAM 角色与最小权限原则
    • 5.5 数据加密(EBS 与传输中数据)
  6. 性能优化指南

    • 6.1 内核参数调优(网络与 I/O)
    • 6.2 EBS 与实例存储优化
    • 6.3 内存与 Swap 配置
    • 6.4 CloudWatch 监控与性能分析
  7. 典型应用场景实践

    • 7.1 搭建 Nginx/Apache Web 服务器
    • 7.2 部署 Node.js/Python 应用服务
    • 7.3 运行 MySQL/PostgreSQL 数据库
    • 7.4 作为 Docker/K8s 节点的基础系统
  8. 从 Amazon Linux 1 迁移至 Amazon Linux 2

    • 8.1 核心差异对比(Systemd、内核等)
    • 8.2 迁移步骤与工具
    • 8.3 常见问题与解决方案
  9. 总结与参考资料

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 实例。步骤如下:

  1. 登录 AWS 控制台,进入 EC2 服务页面。
  2. 启动实例,在「选择 Amazon 系统镜像 (AMI)」中搜索 Amazon Linux 2,选择最新稳定版(如 amzn2-ami-hvm-*-gp2)。
  3. 选择实例类型(如 t2.micro 免费套餐),配置网络、存储和安全组(默认允许 SSH 访问)。
  4. 启动实例,选择或创建密钥对(用于 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        # 替换为你的子网 ID

2.2 本地环境安装(VMware/VirtualBox)#

若需本地测试,可下载 Amazon Linux 2 镜像并导入虚拟机:

  1. 下载镜像:从 AWS 官方镜像地址 下载 amzn2-ami-hvm-x86_64-gp2.img(约 800MB)。
  2. 转换格式:使用 qemu-img 将 RAW 格式转换为 VM 支持的格式(如 VMDK):
    qemu-img convert -f raw -O vmdk amzn2-ami-hvm-x86_64-gp2.img amzn2.vmdk
  3. 导入虚拟机:在 VMware/VirtualBox 中新建虚拟机,选择「使用现有虚拟硬盘」,导入转换后的 amzn2.vmdk
  4. 启动并配置:启动后通过 ec2-user 用户登录(默认无密码,需通过虚拟机控制台设置)。

2.3 容器化部署(Docker 镜像)#

Amazon Linux 2 提供官方 Docker 镜像,适用于容器化开发或 CI/CD 场景:

# 拉取镜像
docker pull amazonlinux:2
 
# 启动交互式容器
docker run -it amazonlinux:2 /bin/bash

3. 包管理: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 python3

3.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.x

3.3 启用 EPEL 仓库#

若需安装第三方工具(如 htopjq),可启用 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 htop

4. 系统管理核心操作#

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 myapp

4.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 eth0

4. 安全最佳实践#

安全是云环境的核心,以下是 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 = yes

4.2 SSH 安全加固#

默认情况下,EC2 实例通过密钥登录,但需进一步加固:

  1. 禁用密码登录:编辑 /etc/ssh/sshd_config
    PasswordAuthentication no  # 禁用密码登录
    ChallengeResponseAuthentication no
  2. 限制 SSH 用户:仅允许指定用户登录:
    AllowUsers ec2-user johndoe  # 仅允许 ec2-user 和 johndoe
  3. 重启 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 --reload

SELinux#

Amazon Linux 2 默认以 Permissive 模式运行 SELinux(仅记录违规,不阻止操作)。如需启用 Enforcing 模式:

# 临时切换(立即生效,重启失效)
sudo setenforce 1
 
# 永久生效(编辑 /etc/selinux/config)
SELINUX=enforcing

4.4 IAM 角色与最小权限原则#

禁止在实例中存储 AWS 访问密钥,应使用 IAM 角色授予 EC2 实例权限:

  1. 在 AWS 控制台创建 IAM 角色,附加所需权限(如 AmazonS3ReadOnlyAccess)。
  2. 将角色附加到 EC2 实例(通过「操作 > 安全 > 修改 IAM 角色」)。
  3. 实例中通过 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/fstab

5.4 CloudWatch 监控与性能分析#

通过 CloudWatch 监控实例性能:

  1. 安装 CloudWatch 代理
    # 下载代理安装脚本
    wget https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
     
    # 安装
    sudo rpm -Uvh amazon-cloudwatch-agent.rpm
  2. 配置代理:运行 sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard,选择监控指标(CPU、内存、磁盘等)。
  3. 启动代理
    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 -p

6.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 kubelet

7. 从 Amazon Linux 1 迁移至 Amazon Linux 2#

Amazon Linux 1 已于 2020 年 12 月停止维护,用户需迁移至 Amazon Linux 2。

7.1 核心差异对比#

特性Amazon Linux 1Amazon Linux 2
Init 系统UpstartSystemd
内核版本3.10.x4.14.x LTS
包管理yum(基础仓库)yum + Amazon Linux Extras
支持周期已停止维护至 2025 年 6 月
默认用户ec2-userec2-user(兼容)

7.2 迁移步骤与工具#

  1. 评估当前环境:记录安装的包(rpm -qa > packages.txt)、服务(chkconfig --list)和自定义配置(/etc/ 下的修改)。
  2. 创建 Amazon Linux 2 测试环境:复制生产环境配置,验证兼容性。
  3. 迁移配置与数据
    • 复制应用配置文件(如 /etc/nginx//etc/httpd/)。
    • 将 Amazon Linux 1 的 init.d 脚本转换为 Systemd 服务文件(参考 4.1 节)。
  4. 使用 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
  5. 测试与切换:验证功能后,通过 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 都能提供稳定高效的运行环境。

参考资料#