19.3.1 配置管理目标、范围与原则
配置管理旨在建立“可控、可追溯、可复用、可审计”的运维基础能力,确保环境一致性与服务稳定性。核心目标包括:降低人为差异与配置漂移风险、缩短交付与恢复时间、提升变更透明度与协作效率,并通过标准化沉淀实现规模化运维。范围覆盖主机与操作系统、网络与安全策略、中间件与应用参数、容器与编排资源、监控与告警规则以及依赖关系,贯穿开发、测试到生产全生命周期。原则强调“单一事实来源、分层解耦、最小权限、可审计、可回滚、自动化优先”,同时明确配置与代码边界,避免配置硬编码进应用,并通过分级审批与变更冻结保障高峰期稳定性。
示例:以“单一事实来源”为目标,使用 Git 作为配置仓库,统一管理 Nginx 站点配置与变量。
# 1) 安装 Git 并初始化配置库
sudo yum -y install git
mkdir -p /opt/config-repo/nginx
cd /opt/config-repo
git init
# 2) 创建模板与环境变量文件
cat > /opt/config-repo/nginx/nginx.conf.tpl <<'EOF'
worker_processes auto;
events { worker_connections 1024; }
http {
server {
listen ${PORT};
server_name ${SERVER_NAME};
location / {
root ${DOC_ROOT};
index index.html;
}
}
}
EOF
cat > /opt/config-repo/nginx/dev.env <<'EOF'
PORT=8080
SERVER_NAME=dev.example.com
DOC_ROOT=/var/www/dev
EOF
# 3) 生成最终配置并发布
export $(grep -v '^#' /opt/config-repo/nginx/dev.env | xargs)
envsubst < /opt/config-repo/nginx/nginx.conf.tpl > /etc/nginx/nginx.conf
nginx -t && systemctl reload nginx
# 4) 提交变更记录
git add nginx/nginx.conf.tpl nginx/dev.env
git commit -m "Add nginx template and dev env"
示例:范围覆盖与分层解耦——把安全基线与业务配置分离。
# 安全基线(系统级)
cat > /etc/sysctl.d/99-security.conf <<'EOF'
net.ipv4.ip_forward = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
EOF
sysctl --system
# 业务配置(应用级)
cat > /etc/myapp/app.conf <<'EOF'
log.level=INFO
db.host=10.0.0.10
db.port=3306
EOF
示例:可审计与可回滚——配置发布前后对比与回滚。
# 发布前备份
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak.$(date +%F_%H%M%S)
# 发布后验证
nginx -t
systemctl reload nginx
diff -u /etc/nginx/nginx.conf.bak.* /etc/nginx/nginx.conf | head
# 回滚
cp /etc/nginx/nginx.conf.bak.2024-01-01_120000 /etc/nginx/nginx.conf
nginx -t && systemctl reload nginx
安装与环境准备建议(适用于配置标准化与变更追踪的最小工具链):
# 安装基础工具
sudo yum -y install git rsync jq
# 初始化配置目录结构
mkdir -p /opt/config-repo/{global,envs,roles,apps}
tree /opt/config-repo
排错要点与命令解释:
# 1) 验证配置语法,避免发布失败
nginx -t
# 2) 查看服务是否成功重载
systemctl status nginx --no-pager
# 3) 比对漂移:配置实际状态与仓库内容
diff -u /opt/config-repo/nginx/nginx.conf.tpl /etc/nginx/nginx.conf
# 4) 快速定位日志
journalctl -u nginx -n 50 --no-pager
nginx -t:仅检查语法,不会真正重载。diff -u:用于发现“漂移”,对比基线与现状差异。journalctl -u:查询服务级别日志,定位失败原因。
练习:
1. 在 dev.env 中将 PORT 改为 8081,重新生成并发布配置,验证 Nginx 是否监听新端口。
2. 故意在 nginx.conf.tpl 中加入错误指令(如 listen abc;),观察 nginx -t 输出并修复。
3. 手动修改 /etc/nginx/nginx.conf 中 server_name,使用 diff -u 找出漂移并回滚。
4. 将安全基线参数迁移到 global 目录,提交一次变更记录并说明改动原因。