基于 Ansible 的 Linux 服务器自动化运维实战

ops/2025/1/30 22:07:37/

📝个人主页🌹:一ge科研小菜鸡-CSDN博客
🌹🌹期待您的关注 🌹🌹

引言

在现代企业的 IT 运营中,Linux 服务器的管理和维护是日常运维工作的核心。传统的手动配置和维护方式效率低下,容易出现人为错误。Ansible 作为一种无代理、轻量级的自动化运维工具,能够帮助运维人员快速实现大规模服务器的自动化部署、配置管理和任务编排。

本指南将详细介绍如何使用 Ansible 对 Linux 服务器进行自动化管理,涵盖从环境搭建、配置管理、批量部署、任务调度到监控预警等多个方面,帮助运维人员掌握 Ansible 的核心技能。


1. 自动化运维概述

1.1 Ansible 简介

Ansible 是一个基于 Python 开发的开源自动化工具,能够实现配置管理、应用部署和任务自动化,具有以下特点:

  • 无代理架构: 通过 SSH 远程连接,无需在被控端安装客户端
  • 易于学习: 使用 YAML 语法编写任务,简单直观
  • 可扩展性强: 适用于从单机到大规模集群的管理

1.2 Ansible 适用场景

Ansible 适用于以下场景:

  • 批量软件部署: 批量安装、更新或卸载软件
  • 配置管理: 确保服务器环境保持一致性
  • 自动化运维任务: 定时执行运维任务,如日志清理、备份、服务重启

2. 环境准备

2.1 系统要求

在开始使用 Ansible 之前,需确保控制端和被控端满足以下条件:

组件要求
控制端安装 Ansible,支持 Linux/macOS
被控端运行 SSH 服务,支持 Linux(CentOS、Ubuntu 等)

2.2 安装 Ansible

在控制端(CentOS 7)安装 Ansible:

# 更新系统包索引
sudo yum update -y# 安装 EPEL 源
sudo yum install epel-release -y# 安装 Ansible
sudo yum install ansible -y# 验证安装
ansible --version

2.3 配置 SSH 免密登录

为了让 Ansible 控制端能够无密码访问被控端,需要配置 SSH 免密登录:

# 生成 SSH 密钥
ssh-keygen -t rsa# 复制公钥到被控端
ssh-copy-id user@remote_server# 测试 SSH 连接
ssh user@remote_server

3. Ansible 基础操作

3.1 定义主机清单文件

Ansible 通过 inventory 文件来定义被控主机。示例 inventory.ini 文件:

[web_servers]
192.168.1.10
192.168.1.11[db_servers]
192.168.1.20 ansible_user=root ansible_port=22

3.2 Ping 测试

使用 ansible 命令测试被控端连通性:

ansible all -i inventory.ini -m ping

输出示例:

192.168.1.10 | SUCCESS => {"changed": false,"ping": "pong"
}

4. 自动化服务器配置管理

4.1 编写 Ansible Playbook

Playbook 是 Ansible 的核心,使用 YAML 格式定义自动化任务。例如,创建 setup_web.yaml 文件,安装 Web 服务:

- hosts: web_serversbecome: yestasks:- name: 安装 Apacheyum:name: httpdstate: present- name: 启动并启用 Apache 服务service:name: httpdstate: startedenabled: yes

4.2 运行 Playbook

执行 Playbook 来完成 Web 服务器安装:

ansible-playbook -i inventory.ini setup_web.yaml

5. 批量软件部署

在大规模集群中,批量部署软件是常见的运维需求。以下是通过 Ansible 安装多个服务器上的 Nginx 服务的示例:

- hosts: web_serversbecome: yestasks:- name: 安装 EPEL 仓库yum:name: epel-releasestate: present- name: 安装 Nginxyum:name: nginxstate: present

执行部署命令:

ansible-playbook -i inventory.ini install_nginx.yaml

6. 服务器安全加固

通过 Ansible 可以自动化执行服务器的安全配置,如修改 SSH 配置、禁用 root 登录、配置防火墙等。示例如下:

- hosts: allbecome: yestasks:- name: 禁用 root 远程登录lineinfile:path: /etc/ssh/sshd_configregexp: '^PermitRootLogin'line: 'PermitRootLogin no'notify: 重启 SSHhandlers:- name: 重启 SSHservice:name: sshdstate: restarted

7. 监控与告警

自动化运维不仅包括配置,还包括监控与告警。可以使用 Ansible 配置 Prometheus 监控系统,实现对服务器的实时监控。

示例 Playbook 安装 Prometheus:

- hosts: monitoring_serverbecome: yestasks:- name: 下载 Prometheusget_url:url: https://github.com/prometheus/prometheus/releases/download/v2.31.1/prometheus-2.31.1.linux-amd64.tar.gzdest: /tmp/prometheus.tar.gz

8. 计划任务自动化

使用 Ansible 安装并配置 Cron 任务,实现定时执行任务,例如日志清理:

- hosts: allbecome: yestasks:- name: 设置定时清理日志任务cron:name: "log cleanup"minute: "0"hour: "2"job: "rm -rf /var/log/*.log"

9. 故障排查与优化

自动化运维系统运行过程中,可能会遇到 SSH 连接失败、YAML 语法错误、权限不足等问题。以下是常见问题与解决方案:

问题解决方案
SSH 连接失败检查 SSH 免密登录配置
Playbook 执行失败使用 -vvv 选项查看详细日志
权限问题确保使用 become: yes 提升权限

结论

本指南介绍了如何使用 Ansible 进行 Linux 服务器的自动化运维,包括环境搭建、批量部署、配置管理、任务自动化等内容。通过实践这些技术,运维人员可以大幅提高运维效率,减少人为干预,实现系统的高可用和一致性。

自动化运维是 IT 运维发展的重要方向,未来可以结合 DevOps 工具链、云计算技术,构建更加智能化的运维体系。


http://www.ppmy.cn/ops/154309.html

相关文章

SocketCAN

socketcan是Linux上的CAN协议(控制局域网). 为什么不使用字符设备,要使用socketCAN? 大多数字符设备实现一次只支持一个进程打开设备,类似于串行接口。更换 CAN 控制器需要使用另一个设备驱动程序,并且通常需要使应用程序的大部分内容适应新驱动程序的 API。 Socketcan…

剑指 Offer II 001. 整数除法

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20001.%20%E6%95%B4%E6%95%B0%E9%99%A4%E6%B3%95/README.md 剑指 Offer II 001. 整数除法 题目描述 给定两个整数 a 和 b ,求它们的除法的商 a/b &a…

【C++】List的模拟实现

文章目录 1.ListNode 结构体2.List成员变量与typedef3.迭代器iterator4.begin()、end()、size()、empty()、构造函数5. insert()、erase()6.push_back()、pop_back()、push_front()、pop_front()7.拷贝构造、赋值、析构8.总代码 以后有时间会更新其它成员函数 1.ListNode 结构…

【BQ3568HM开发板】深入解析智能家居中控屏工程的NAPI接口设计

目录 引言 一、NAPI接口概述 二、NAPI接口设计 1. 接口定义 2. 接口实现 三、NAPI接口在智能家居中控屏中的应用 1. 灯光控制 2. 窗帘控制 四、总结 本文收发于电子发烧友论坛:https://bbs.elecfans.com/jishu_2474863_1_1.html。 引言 在智能家居中控屏…

【自然语言处理(NLP)】Bahdanau 注意力(Bahdanau Attention)原理及代码实现

文章目录 介绍Bahdanau 注意力(Bahdanau Attention)原理公式含义计算过程编码器部分注意力机制部分解码器部分 计算过程代码实现导包定义注意力解码器添加Bahdanau的decoder训练评估指标 bleu开始预测 个人主页:道友老李 欢迎加入社区&#x…

el-tree 父节点隐藏

这是我之前面试的一个题 让我写 如果你恰好也有这道题 希望可以帮到你 实现效果 <el-treenode-key"id"ref"tree"check-change"handleCheckChange":props"props":load"loadNode"lazyshow-checkbox //添加选择框>//深度…

深入MapReduce——计算模型设计

引入 通过引入篇&#xff0c;我们可以总结&#xff0c;MapReduce针对海量数据计算核心痛点的解法如下&#xff1a; 统一编程模型&#xff0c;降低用户使用门槛分而治之&#xff0c;利用了并行处理提高计算效率移动计算&#xff0c;减少硬件瓶颈的限制 优秀的设计&#xff0c…

上位机知识篇---Linux的shell脚本搜索、查找、管道

文章目录 前言第一部分&#xff1a;什么是shell&#xff1f;1. 基本结构脚本声明注释命令和表达式例子 2.变量控制结构条件判断 3.函数输入输出重定向 4.执行命令5.实际应用 第二部分&#xff1a;Linux的搜索、查找、管道命令1.搜索命令2.查找命令3.管道操作 总结 前言 以上就…