当前位置: 首页 > news >正文

自动化运维工具 Ansible:集中化管理服务器完全指南

文章目录

  • 前言
  • 一、Ansible 概述和运行机制
    • 1.1 Ansible 概述
    • 1.2 Ansible 工作机制
    • 1.3 Ansible 角色 (Role)
  • 二、Ansible 环境安装部署
    • 2.1 环境规划
    • 2.2 安装步骤
    • 2.3 主机清单配置
    • 2.4 SSH免密登录配置
  • 三、Ansible 基础命令及模块操作
    • 3.1 基本命令格式
    • 3.2 常用模块详解
      • 3.2.1 command 模块
      • 3.2.2 shell 模块
      • 3.2.3 cron 模块
      • 3.2.4 user 模块
      • 3.2.5 group 模块
      • 3.2.6 copy 模块
      • 3.2.7 file 模块
      • 3.2.8 hostname 模块
      • 3.2.9 ping 模块
      • 3.2.10 yum 模块
      • 3.2.11 service/systemd 模块
      • 3.2.12 script 模块
      • 3.2.13 setup 模块
  • 四、Inventory 主机清单与变量配置
    • 4.1 主机分组管理
    • 4.2 Inventory变量配置
      • 4.2.1 主机变量配置
      • 4.2.2 组变量配置
      • 4.2.3 组嵌套配置
  • 总结

前言

在当今的IT运维环境中,随着服务器数量的不断增加和业务复杂度的提升,传统的手工运维方式已经无法满足效率和质量的要求。自动化运维工具应运而生。

其中Ansible以其简单易用、功能强大的特点成为了众多运维工程师的首选。本文将详细介绍Ansible的基本概念、安装配置、核心模块使用以及主机清单管理,帮助读者快速掌握这一强大的自动化运维工具。

一、Ansible 概述和运行机制

1.1 Ansible 概述

Ansible是一款面向类Unix系统的自由开源配置和自动化工具,采用Python语言编写。与其他自动化工具如SaltStack(Python C/S)、Puppet(ruby C/S)、Chef相比,Ansible具有以下显著优势:

  • 无需客户端:被管理节点无需安装任何客户端,实现真正的轻量级管理
  • 基于SSH协议:直接通过SSH协议与节点进行通信,安全可靠
  • YAML编排:使用简单易懂的YAML格式和Jinja2模板语言进行任务编排

官方网站:https://www.ansible.com/

其他自动化运维工具

  • Puppet:ruby C/S http
  • SaltStack:Python C/S ssh,可以加入MQ
  • Chef:ruby C/S http

重要行业事件

  • 2015年10月,红帽(Red Hat)宣布收购Ansible,交易金额约为1-1.5亿美元
  • Ansible公司成立于2013年,总部位于北卡罗来纳州达勒姆,联合创始人均为红帽前员工

Ansible核心特点

  1. 部署简单:只需在管理端安装,被控端无需额外操作
  2. 协议标准:默认使用SSH协议管理设备,无需学习新协议
  3. 集中管理:支持主从模式,实现集中化运维管理
  4. 功能强大:配置简洁但功能丰富,扩展性极高
  5. 扩展灵活:支持API和自定义模块,可通过Python轻松扩展
  6. 编排强大:Playbook支持复杂任务配置和状态管理
  7. 生态完善:对云计算和大数据平台有良好支持

1.2 Ansible 工作机制

Ansible通过SSH协议将模块推送到被管理节点执行,执行完成后自动删除临时文件。这种无代理的架构使得部署和维护变得极其简单。在实际生产环境中,可以结合SVN、Git等版本控制工具来管理自定义模块和任务编排。

在这里插入图片描述

Ansible核心组件

  1. Ansible引擎:核心引擎,核心控制中心,负责任务调度和执行
  2. 模块系统:包含丰富的内置核心模块和可扩展的自定义模块
  3. 插件机制:提供连接插件、邮件插件等扩展功能
  4. Playbooks:任务剧本,使用YAML格式定义复杂的多任务操作流程
  5. Inventory:主机清单,管理所有被控节点信息

1.3 Ansible 角色 (Role)

随着企业数据中心环境的日益复杂,单一的Playbook文件往往会变得臃肿且难以维护。Ansible角色(Role)机制应运而生,它提供了以下优势:

  • 模块化管理:将相关任务组织为独立、可复用的单元
  • 结构清晰:提供标准的目录结构,便于维护和理解
  • 灵活加载:支持从外部加载任务、处理程序和变量
  • 资源关联:可以关联静态文件、模板等资源文件
  • 复用性强:满足通用运维需求,可在不同项目中重复使用

二、Ansible 环境安装部署

2.1 环境规划

在实际部署前,需要合理规划环境结构。以下是一个典型的生产环境示例:

节点类型IP地址角色描述
管理端192.168.10.22Ansible控制节点
被管理端192.168.10.14Web服务器组
被管理端192.168.10.15数据库服务器组

2.2 安装步骤

在管理端安装Ansible

# 安装EPEL源(CentOS/RHEL系统)
yum install -y epel-release# 安装Ansible
yum install -y ansible

Ansible目录结构

/etc/ansible/
├── ansible.cfg    # 主配置文件,通常使用默认配置即可
├── hosts          # 主机清单文件,定义被管理节点
└── roles/         # 公共角色目录,存放可复用的角色

2.3 主机清单配置

编辑/etc/ansible/hosts文件,配置主机分组:

[webservers]   # Web服务器组
192.168.10.14  # 组里包含的被管理的主机IP地址或主机名(主机名需要先修改/etc/hosts文件)[dbservers]    # 数据库服务器组
192.168.10.15

2.4 SSH免密登录配置

为实现自动化管理,需要配置SSH密钥认证:

# 生成SSH密钥对
ssh-keygen -t rsa# 将公钥分发到被管理节点(需要输入目标主机密码)
sshpass -p '000000' ssh-copy-id root@192.168.10.14
sshpass -p '000000' ssh-copy-id root@192.168.10.15

三、Ansible 基础命令及模块操作

3.1 基本命令格式

Ansible的基本命令格式如下:

ansible <主机组名> -m <模块名> -a "<参数>"
ansible-doc -l  # 列出所有模块

3.2 常用模块详解

3.2.1 command 模块

功能:在远程主机执行命令,不支持管道、重定向等shell特性

# 查看command模块帮助
# -s 列出指定模块的描述信息和操作动作
ansible-doc -s command

在这里插入图片描述

# 基本使用示例
ansible 192.168.10.14 -m command -a 'date'        # 指定IP执行命令
ansible webservers -m command -a 'date'           # 指定组执行命令
ansible dbservers -m command -a 'date'

在这里插入图片描述

ansible all -m command -a 'date'                  # 所有主机执行命令
ansible all -a 'ls /'                             # 省略-m参数,默认使用command模块

在这里插入图片描述

# 常用的参数:
chdir:在远程主机上运行命令前提前进入目录
creates:判断指定文件是否存在,如果存在,不执行后面的操作
removes:判断指定文件是否存在,如果存在,执行后面的操作
# 高级参数使用
ansible all -m command -a 'chdir=/home ls ./'     # 执行前切换目录
ansible all -m command -a 'creates=/tmp/file date'  # 文件存在则不执行
ansible all -m command -a 'removes=/tmp/file date'  # 文件存在则执行

在这里插入图片描述

3.2.2 shell 模块

功能:支持管道和shell特性的远程命令执行

# 在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令(支持管道符号等功能)
# 查看shell模块帮助
ansible-doc -s shell# 使用示例
ansible dbservers -m shell -a 'echo 123456 | passwd --stdin test'
# 注意单引号与双引号,双引号中的$会识别成变量,所以要用\转移
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print $2}") | cut -d " " -f2'
ansible dbservers -m shell -a 'echo $(ifconfig ens33 | awk "NR==2 {print \$2}")'

在这里插入图片描述
在这里插入图片描述

3.2.3 cron 模块

功能:管理远程主机的计划任务

# 在远程主机定义任务计划。其中有两种状态(state):present表示添加(可以省略),absent表示移除。
# 查看cron模块帮助
ansible-doc -s cron
常用的参数:
- minute/hour/day/month/weekday:分/时/日/月/周
- job:任务计划要执行的命令
- name:任务计划的名称
# 创建计划任务
ansible webservers -m cron -a 'minute="*/1" job="/bin/echo helloworld" name="test crontab"'# 查看计划任务
ansible webservers -a 'crontab -l'# 删除计划任务,假如该计划任务没有取名字,name=None即可
ansible webservers -m cron -a 'name="test crontab" state=absent'

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2.4 user 模块

功能:管理系统用户账户

常用的参数

参数名可选值/类型说明
name字符串用户名,必选参数
statepresent / absent创建账号或删除账号,present 表示创建,absent 表示删除
systemyes / no是否为系统账号
uid整数用户 UID
group字符串用户基本组
shell字符串默认使用的 Shell
move_homeyes / no若家目录已存在,是否移动已存在的家目录
password字符串用户密码,建议使用加密后的字符串
comment字符串用户的注释信息
removeyes / nostate=absent 时,是否删除用户的家目录
# 查看user模块帮助
ansible-doc -s user
# 创建用户
ansible dbservers -m user -a 'name="test01"'# 验证用户创建
ansible dbservers -m command -a 'tail /etc/passwd'# 删除用户
ansible dbservers -m user -a 'name="test01" state=absent'

在这里插入图片描述
在这里插入图片描述

3.2.5 group 模块

功能:管理系统用户组

# 查看group模块帮助
ansible-doc -s group# 创建用户组mysql
ansible dbservers -m group -a 'name=mysql gid=306 system=yes'
ansible dbservers -a 'tail /etc/group'

在这里插入图片描述
在这里插入图片描述

# 将用户添加到组
ansible dbservers -m user -a 'name=test01 uid=306 system=yes group=mysql'
ansible dbservers -a 'tail /etc/passwd'
# 验证配置
ansible dbservers -a 'id test01'

在这里插入图片描述
在这里插入图片描述

3.2.6 copy 模块

功能:复制本机文件或内容到远程主机

参数名描述备注
dest目标文件或目录的绝对路径。若源为目录,目标也需为目录。若目标已存在会被覆盖。必须参数
src源文件/目录路径(相对或绝对路径)。若为目录,目标也需为目录。content互斥
mode设置目标文件的权限(如644)。支持八进制或符号模式(u=rw,g=r,o=r
owner设置目标文件的属主(如root)。需要Ansible主机有权限修改
group设置目标文件的属组(如www-data)。需要Ansible主机有权限修改
content直接指定写入目标文件的内容(多行文本需用|)。src互斥,不能同时使用

注意事项

  • src为目录时,需确保目标路径以/结尾(如/opt/files/),否则会重命名目录。
  • mode参数在Windows目标主机上无效。
  • owner/group指定的用户/组不存在,任务会失败。
# 查看copy模块帮助
ansible-doc -s copy# 复制文件
ansible dbservers -m copy -a 'src=/etc/fstab dest=/opt/fstab.bak owner=root mode=640'
ansible dbservers -a 'ls -l /opt'
ansible dbservers -a 'cat /opt/fstab.bak'

在这里插入图片描述
在这里插入图片描述

# 写入内容到文件
ansible dbservers -m copy -a 'content="helloworld" dest=/opt/hello.txt'
ansible dbservers -a 'cat /opt/hello.txt'

在这里插入图片描述

3.2.7 file 模块

功能:管理文件属性和状态,创建和删除模块

# 查看file模块帮助
ansible-doc -s file# 修改文件属性
ansible dbservers -m file -a 'owner=simon group=mysql mode=644 path=/opt/fstab.bak'
ansible dbservers -a 'ls -l /opt'

在这里插入图片描述

# 创建链接文件,设置/opt/fstab.link为/opt/fstab.bak的链接文件
ansible dbservers -m file -a 'path=/opt/fstab.link src=/opt/fstab.bak state=link'
ansible dbservers -a 'ls -l /opt'

在这里插入图片描述

# 创建和删除文件
ansible dbservers -m file -a "path=/opt/abc.txt state=touch"
ansible dbservers -a 'ls -l /opt'
ansible dbservers -m file -a "path=/opt/abc.txt state=absent"

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2.8 hostname 模块

功能:修改远程主机的主机名

ansible dbservers -m hostname -a "name=mysql01"

在这里插入图片描述

3.2.9 ping 模块

功能:检测主机的连通性

ansible all -m ping

在这里插入图片描述

3.2.10 yum 模块

功能:管理软件包的安装和卸载

# 查看yum模块帮助
ansible-doc -s yum# 安装软件包
ansible webservers -m yum -a 'name=httpd'# 卸载软件包
ansible webservers -m yum -a 'name=httpd state=absent'

在这里插入图片描述
在这里插入图片描述

3.2.11 service/systemd 模块

功能:管理系统服务

# 查看service模块帮助
ansible-doc -s service
# 常用的参数:
- name:被管理的服务名称
- state=started|stopped|restarted:动作包含启动关闭或者重启
- enabled=yes|no:表示是否设置该服务开机自启
- runlevel:如果设定了enabled开机自启,则要定义在哪些运行目标下自启动
# 查看服务状态
ansible webservers -a 'systemctl status httpd'# 启动服务并设置开机自启
ansible webservers -m service -a 'enabled=true name=httpd state=started'

在这里插入图片描述
在这里插入图片描述

3.2.12 script 模块

功能:在远程主机批量运行本地的 shell 脚本

# 查看script模块帮助
ansible-doc -s script# 创建测试脚本
vim test.sh
#!/bin/bash
echo "hello ansible from script" > /opt/script.txtchmod +x test.sh# 执行脚本
ansible webservers -m script -a 'test.sh'# 验证执行结果
ansible webservers -a 'cat /opt/script.txt'

在这里插入图片描述
在这里插入图片描述

3.2.13 setup 模块

功能:收集被管理节点的系统信息

facts 组件是用来收集被管理节点信息的,使用 setup 模块可以获取这些信息

# 查看setup模块帮助
ansible-doc -s setup# 获取webservers 组主机的facts信息
ansible webservers -m setup# 过滤特定信息,使用filter可以筛选指定的facts信息
ansible dbservers -m setup -a 'filter=*ipv4'

在这里插入图片描述
补充

# 内存信息
ansible all -m setup -a "filter=ansible_memory_mb*"# 具体内存信息
ansible all -m setup -a "filter=ansible_memory_mb"
ansible all -m setup -a "filter=ansible_swaptotal_mb"  # 磁盘信息
ansible all -m setup -a "filter=ansible_devices*"
ansible all -m setup -a "filter=ansible_mounts*"# 具体磁盘信息
ansible all -m setup -a "filter=ansible_devices"
ansible all -m setup -a "filter=ansible_mounts"
ansible all -m setup -a "filter=ansible_device_links"# 网络信息
ansible all -m setup -a "filter=ansible_*ipv4*"
ansible all -m setup -a "filter=ansible_default_ipv4*"# 具体 IP 信息
ansible all -m setup -a "filter=ansible_default_ipv4"
ansible all -m setup -a "filter=ansible_all_ipv4_addresses"

四、Inventory 主机清单与变量配置

4.1 主机分组管理

Inventory支持对主机进行分组,每个组内可以定义多个主机,每个主机都可以定义在任何一个或多个主机组内。

# 如果是名称类似的主机,可以使用列表的方式标识各个主机。
# 基本分组
vim /etc/ansible/hosts[webservers]
192.168.10.14:2222        # 指定非标准SSH端口
192.168.10.1[2:5]         # 支持数字范围匹配[dbservers]
db-[a:f].example.org      # 支持字母范围匹配

4.2 Inventory变量配置

Ansible提供了丰富的变量来定制连接和行为:

变量名说明
ansible_host节点IP地址
ansible_portSSH端口,默认22
ansible_userSSH连接用户名
ansible_passwordSSH密码(密钥认证时不需要)
ansible_ssh_private_key_fileSSH私钥文件路径
ansible_become是否提升权限
ansible_become_method权限提升方式(sudo/su/runas)
ansible_become_user提升为指定用户
ansible_become_password权限提升密码

变量优先级: 命令行参数- --》playbooks 变量 —》 主机变量 —>组变量—》全局变量

4.2.1 主机变量配置

[webservers]
192.168.10.16 ansible_port=22 ansible_user=root ansible_password=000000

在这里插入图片描述
在这里插入图片描述

4.2.2 组变量配置

[webservers]
192.168.10.16[webservers:vars]
ansible_user=root
ansible_password=000000[all:vars]
ansible_port=22

在这里插入图片描述

ansible webservers -m ping

在这里插入图片描述

4.2.3 组嵌套配置

# 定义基础组
[nginx]
192.168.10.20
192.168.10.21
192.168.10.22[apache]
192.168.10.30
192.168.10.31
192.168.10.32
192.168.10.33# 组嵌套,下面只能写组名,children是关键字
[webs:children]
nginx
apache

在这里插入图片描述
在这里插入图片描述

总结

通过本文的详细介绍,我们全面了解了Ansible这一强大的自动化运维工具。

ansibe是一个自动化运维工具,通过ssh对目标主机进行配置、应用部署、任务执行、编排调度等 操作。 它主要简化了复杂的环境管理和自动化任务,提高工作效率,同时 ansibel的剧本(playbooks)可以使用YMAL语言编写,易于运维或扩展

从基本概念到实际操作,从模块使用到主机管理,Ansible展现出了其在自动化运维领域的独特优势:

  1. 简单易用:基于SSH和YAML,学习成本低,上手速度快
  2. 功能全面:丰富的模块库覆盖了日常运维的各个方面
  3. 扩展性强:支持自定义模块和插件,满足个性化需求
  4. 安全可靠:无代理架构减少安全风险,基于SSH保证通信安全
  5. 社区活跃:拥有庞大的用户社区和丰富的文档资源

在实际生产环境中,合理运用Ansible可以大幅提升运维效率,减少人为错误,实现运维工作的标准化和自动化。建议读者在掌握基础知识后,进一步学习Playbook编写、角色管理、Ansible Tower等高级功能,构建完整的自动化运维体系。

随着云计算和容器技术的普及,自动化运维的重要性日益凸显。掌握Ansible这样的工具,不仅是技术能力的提升,更是适应现代IT运维发展趋势的必然要求。希望本文能为您的Ansible学习之路提供有力的帮助!

http://www.dtcms.com/a/402947.html

相关文章:

  • 电影网站的建设目标做网站的公司简称什么行业
  • 【ThreeJs】【HTML载入】Three.js 中的 CSS2DRenderer 与 CSS3DRenderer 全面解析
  • (50)elasticsearch服务部署-有状态负载(华为云平台CCE)
  • 【时序预测-5】FFT、STL、ARIMA频域特征和时序分解
  • Kotlinx Serialization 指南
  • SpringBoot @Scheduled 注解详解
  • layui 表格行级 upload 上传操作
  • 【Unity 入门教程】三、如何设置自定义字体(解决中文乱码问题)
  • STM32开发(FreeRTOS实时操作系统)
  • RocketMQ-生产常见问题汇总
  • 成都网站托管外包施工企业科技宣传片
  • 小厂 Java 面试,难度怎么样?
  • Webpack5 第一节
  • 【深入理解JVM】常见的垃圾回收器
  • 东莞企业建设网站官网有限公司百度一下百度网页版主页
  • 【大模型:知识图谱】--7.Neo4j数据库的导入和导出
  • 数据结构与算法(栈)
  • Coze源码分析-资源库-创建数据库-后端源码-基础设施/数据存储层
  • PySpark 安装教程及 WordCount 实战与任务提交
  • 制作网站的公司八大建筑央企排名
  • zynq纯PL读取XADC
  • 【FastMCP】中间件
  • bigo二面总结
  • 个人网站建设思路省级别网站建设方案
  • 测试自动化教程:Parasoft如何流重定向与单元测试自动化
  • 开源AI大模型、AI智能名片与S2B2C商城小程序在价值观型社群构建与运营中的价值与应用
  • 郑州 网站建设公司阿里企业邮箱收费标准一年多少钱
  • Day03:小程序的常用操作
  • 交互的脉络:小程序事件系统详解
  • 自助建站免费平台深圳建设管理中心网站首页