linux安装ansible

前言

在现代IT运维中,自动化工具已经成为不可或缺的一部分。Ansible作为一款无代理、基于Python的自动化工具,以其简单、易用和强大的功能受到广大运维人员的青睐。我最近亲自操作并测试了Ansible的安装过程,并编写了一个Ansible角色(Role)来测试系统性能。本文将详细分享整个过程,包括环境准备、Ansible的安装、配置,以及如何编写一个用于系统性能测试的Ansible角色,希望对需要的朋友有所帮助。

环境准备

在开始之前,我们需要准备以下环境:

  • 操作系统:CentOS 7(被控节点也使用相同的系统)
  • 权限:具有sudo权限的用户
  • 网络连接:控制节点与被控节点之间的网络通信正常
  • Python版本:Python 2.7 或 Python 3.5+

Ansible简介

Ansible是一款基于SSH的开源自动化工具,可以实现配置管理、应用部署、任务执行等功能。由于Ansible采用无代理(Agentless)的方式,只需要在控制节点安装Ansible即可,被控节点无需安装任何客户端。

安装Ansible

1. 更新系统软件包

在控制节点上,首先更新系统的软件包,以确保拥有最新的系统环境。

sudo yum update -y

2. 安装EPEL仓库

EPEL(Extra Packages for Enterprise Linux)是一个为企业级Linux提供额外软件包的项目。Ansible在EPEL仓库中提供。

sudo yum install epel-release -y

3. 安装Ansible

通过YUM包管理器直接安装Ansible。

sudo yum install ansible -y

4. 验证安装

检查Ansible是否安装成功,并查看版本信息。

ansible --version

输出类似以下信息表示安装成功:

ansible 2.9.25config file = /etc/ansible/ansible.cfgconfigured module search path = ['/home/user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']python version = 2.7.5

配置Ansible

1. 设置SSH免密码登录

为了让Ansible能够无障碍地与被控节点通信,需要设置SSH免密码登录。

在控制节点上生成SSH密钥对
ssh-keygen -t rsa -b 2048

一路回车,使用默认路径和空密码。

将公钥复制到被控节点

假设被控节点的IP为192.168.0.101,用户名为user

ssh-copy-id user@192.168.0.101

输入被控节点用户的密码,即可完成公钥复制。

2. 配置Ansible主机清单(Inventory)

Ansible的默认主机清单文件位于/etc/ansible/hosts,但我们可以在项目目录下创建自定义的主机清单。

在项目根目录下创建hosts文件,内容如下:

[servers]
server1 ansible_host=192.168.0.101 ansible_user=user
server2 ansible_host=192.168.0.102 ansible_user=user
  • [servers]:定义一个主机组,名为servers
  • ansible_host:指定目标主机的IP地址。
  • ansible_user:指定SSH连接的用户名。

3. 测试连接

使用ping模块测试Ansible与被控节点的连接。

ansible -i hosts servers -m ping

成功的输出应类似于:

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

编写Ansible角色(Role)测试系统性能

Ansible的角色(Role)是一种将相关的任务、变量、文件、模板等组织在一起的方式,方便复用和共享。

1. 创建项目目录结构

按照Ansible的最佳实践,创建以下目录结构:

mkdir -p ansible-perf-test/roles/system_performance/{tasks,handlers,templates,files,vars,defaults,meta}

各目录的作用:

  • tasks:存放主要的任务文件。
  • handlers:存放触发的处理器。
  • templates:存放Jinja2模板文件。
  • files:存放需要分发到被控节点的文件。
  • vars:存放变量文件。
  • defaults:存放默认变量文件。
  • meta:存放角色的元数据。

2. 编写任务文件

roles/system_performance/tasks/main.yml中添加以下内容:

---
- name: Install necessary packagesbecome: yespackage:name: sysstatstate: present- name: Gather CPU usageshell: |top -bn1 | grep "Cpu(s)" | \awk '{print 100 - $8"%"}'register: cpu_usage- name: Gather Memory usageshell: |free -m | awk 'NR==2{printf "%.2f%", $3*100/$2 }'register: mem_usage- name: Gather Disk usageshell: |df -h / | awk 'NR==2 {print $5}'register: disk_usage- name: Gather Network statisticsshell: |sar -n DEV 1 1 | grep Average | grep -v IFACE | awk '{print $2": RX "$5"KB/s TX "$6"KB/s"}'register: net_stats- name: Display CPU usagedebug:msg: "CPU Usage: {{ cpu_usage.stdout }}"- name: Display Memory usagedebug:msg: "Memory Usage: {{ mem_usage.stdout }}"- name: Display Disk usagedebug:msg: "Disk Usage: {{ disk_usage.stdout }}"- name: Display Network statisticsdebug:msg: "Network Stats: {{ net_stats.stdout_lines }}"
任务详解
  1. 安装必要的软件包

    • sysstat:提供sar命令,用于收集系统活动报告。
  2. 收集CPU使用率

    • 使用top命令获取CPU空闲率,然后计算使用率。
  3. 收集内存使用率

    • 使用free命令计算已用内存占总内存的百分比。
  4. 收集磁盘使用率

    • 使用df命令获取根目录的磁盘使用率。
  5. 收集网络统计

    • 使用sar命令获取网络接口的传输速率。
  6. 显示结果

    • 使用debug模块在控制台输出收集到的性能指标。

3. 编写主剧本

在项目根目录下创建site.yml文件:

---
- hosts: serversbecome: yesroles:- system_performance
剧本详解
  • hosts: servers:指定目标主机组为servers
  • become: yes:启用特权提升(sudo)。
  • roles:包含需要执行的角色列表。

4. 执行剧本

在项目根目录下,运行以下命令:

ansible-playbook -i hosts site.yml

测试结果与分析

执行后,控制台将显示各个任务的执行结果和性能指标。例如:

PLAY [servers] *****************************************************************TASK [Gathering Facts] *********************************************************
ok: [server1]
ok: [server2]TASK [system_performance : Install necessary packages] *************************
changed: [server1]
changed: [server2]TASK [system_performance : Gather CPU usage] ***********************************
changed: [server1]
changed: [server2]TASK [system_performance : Gather Memory usage] ********************************
changed: [server1]
changed: [server2]TASK [system_performance : Gather Disk usage] **********************************
changed: [server1]
changed: [server2]TASK [system_performance : Gather Network statistics] **************************
changed: [server1]
changed: [server2]TASK [system_performance : Display CPU usage] **********************************
ok: [server1] => {"msg": "CPU Usage: 15.3%"
}
ok: [server2] => {"msg": "CPU Usage: 20.1%"
}TASK [system_performance : Display Memory usage] *******************************
ok: [server1] => {"msg": "Memory Usage: 45.67%"
}
ok: [server2] => {"msg": "Memory Usage: 55.23%"
}TASK [system_performance : Display Disk usage] *********************************
ok: [server1] => {"msg": "Disk Usage: 35%"
}
ok: [server2] => {"msg": "Disk Usage: 40%"
}TASK [system_performance : Display Network statistics] *************************
ok: [server1] => {"msg": "Network Stats: ['eth0: RX 0.00KB/s TX 0.00KB/s']"
}
ok: [server2] => {"msg": "Network Stats: ['eth0: RX 0.00KB/s TX 0.00KB/s']"
}PLAY RECAP *********************************************************************
server1                   : ok=10   changed=5    unreachable=0    failed=0
server2                   : ok=10   changed=5    unreachable=0    failed=0

结果分析

  • CPU使用率:显示了当前CPU的使用百分比。
  • 内存使用率:显示了已用内存占总内存的百分比。
  • 磁盘使用率:显示了根目录的磁盘使用百分比。
  • 网络统计:显示了网络接口的接收和发送速率。

通过这些数据,可以初步了解各服务器的性能状况。如果某项指标过高,可能需要进一步调查和优化。

扩展与优化

1. 将结果保存到文件

可以修改任务,将性能指标保存到被控节点的文件中,或集中收集到控制节点。

- name: Save performance data to filecopy:content: |CPU Usage: {{ cpu_usage.stdout }}Memory Usage: {{ mem_usage.stdout }}Disk Usage: {{ disk_usage.stdout }}Network Stats: {{ net_stats.stdout_lines }}dest: /var/log/performance.log

2. 使用自定义变量

可以在defaults/main.yml中定义阈值,进行性能报警。

cpu_threshold: 80
mem_threshold: 80
disk_threshold: 90

在任务中,添加条件判断:

- name: Check if CPU usage is highdebug:msg: "Warning: CPU usage is above {{ cpu_threshold }}%!"when: cpu_usage.stdout | float > cpu_threshold

3. 集成到监控系统

可以将Ansible与Zabbix、Nagios等监控系统集成,实现自动化监控和报警。

常见问题及解决

问题1:无法连接被控节点

解决方案

  • 检查被控节点的SSH服务是否开启。
  • 确认防火墙是否允许SSH连接。
  • 验证SSH免密码登录是否配置正确。

问题2:sysstat未安装,导致sar命令不可用

解决方案

  • 确保在任务中安装了sysstat包。
  • 可以手动在被控节点上安装,或检查YUM仓库是否可用。

问题3:权限问题导致任务执行失败

解决方案

  • 在剧本中使用become: yes启用特权提升。
  • 确保控制节点用户在被控节点上具有sudo权限。

参考资料

  • Ansible官方文档
  • Ansible最佳实践
  • sysstat手册页

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/12952.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

期刊论文查重率多少,才会不被认定为学术不端?

Q问:论文查重和学术不端具有紧密的相关性,但是被认定为学术不端的查重率的界限是什么? A答:关于论文和查重,虽然这两者之间有着“说不清也道不明”的关系,这其中很重要的一个原因是很多人对查重都有一定的…

JAVA中重写与重载的极简区别

重载就是同样的一个方法能够根据输入数据的不同,做出不同的处理重写就是当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类方法 方法的重写(Overriding)和重载(Overloading)是java多态性的不同…

[Linux]:IO多路转接之epoll

1. IO 多路转接之epoll 1.1 epoll概述 epoll是Linux内核为处理大规模并发网络连接而设计的高效I/O多路转接技术。它基于事件驱动模型,通过在内核中维护一个事件表,能够快速响应多个文件描述符上的I/O事件,如可读、可写、异常等,…

从0开始学习Linux——用户管理

往期目录: 从0开始学习Linux——简介&安装 从0开始学习Linux——搭建属于自己的Linux虚拟机 从0开始学习Linux——文本编辑器 从0开始学习Linux——Yum工具 从0开始学习Linux——远程连接工具 从0开始学习Linux——文件目录 从0开始学习Linux——网络配置 从0开…

Docker 安装Immich教程

Immich 是一个开源的自托管照片和视频管理平台,专为帮助用户存储、管理、和分享个人媒体库而设计。Immich 的目标是提供一个类似 Google Photos 的替代方案,但不依赖于第三方服务,用户可以完全控制自己的数据。 本章教程,记录如何用Docker部署安装Immich,使用的操作系统的…

回首遥望-C++内存对齐的思考

这一章节主要巩固一下学习C/C时内存对齐相关的内容! 文章目录 什么是内存对齐?为什么要有内存对齐?如何进行内存对齐?致谢: 什么是内存对齐? 这里不提及一堆啰嗦概念,就结合实际出发&#xff0…

从代码到云端:使用PyCharm打包Python项目并部署至服务器的完整指南

从代码到云端:使用PyCharm打包Python项目并部署至服务器的完整指南 引言 随着云计算技术的发展,越来越多的开发者选择将自己的应用部署到云服务器上。对于Python开发人员来说,如何高效地将本地开发完成的应用程序迁移到远程服务器成为了一个…

【ComfyUI +BrushNet+PowerPaint】图像修复(根据题词填充目标)——ComfyUI-BrushNet

运行代码:https://github.com/nullquant/ComfyUI-BrushNet 源码1:https://github.com/TencentARC/BrushNet 源码2:https://github.com/open-mmlab/PowerPaint 上图,中间未 random_mask.safetensors结果,最右边图未segm…

(时序论文阅读)TimeMixer: Decomposable Multiscale Mixing for Time Series Forecasting

来源论文iclr2024 论文地址:https://arxiv.org/abs/2405.14616 源码地址: https://github.com/kwuking/TimeMixer 背景 数据是有连续性,周期性,趋势性的。我们这篇文章主要围绕的是用MLP结构来预测数据的周期性具体为&#xff…

大数据新视界 -- 大数据大厂之 Impala 性能优化:优化数据加载的实战技巧(下)(16/30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

3196. I’m stuck!-13年12月CCF计算机软件能力认证

关键词 图通路,DFS/BFS 题目 思路 几点想说明的: 为什么要两个DFS;dfs1表示的是求从S出发能到达的所有的点;dfs2是考虑从T出发回溯,能到达的所有点,回溯去走,相当于此时T才是起点check函数&…

若依笔记(九):商城系统apk打包与调试

目录 env修改 nginx修改 apk打包 按照前文所述app版本保持2.2,使用uniapp作为生成工具,因为app版本涉及到登录、商品、支付,微信小程序打包需要企业主权限,所以使用apk打包,使用uniapp自带的云打包,本地…

算法练习记录

dp(完全,线性,树状,状压,数位)> 搜索 基础算法(二分,前缀和,高精度,公约数,公倍数,质数,排序) > 数据结…

深入浅出 ChatGPT 底层原理:Transformer

Transformer 在人工智能和自然语言处理领域,Transformer架构的出现无疑是一个里程碑式的突破。它不仅推动了GPT(Generative Pre-trained Transformer)等大型语言模型的发展,还彻底改变了我们处理和理解自然语言的方式。 GPT与Transformer GPT 近几年,人工智能技…

【C语言】js写一个冒泡顺序

用js写一个冒泡排序 当然可以。在JavaScript中&#xff0c;你可以使用递归的方式来实现冒泡排序算法。这是一个简单的示例&#xff1a; function bubbleSort(arr) { let len arr.length; if(len < 1){ return arr; // 如果数组只有一个元素或为空&#xff0c;直接返回 } //…

Leetcode3345. 最小可整除数位乘积 I

Every day a Leetcode 题目来源&#xff1a;3345. 最小可整除数位乘积 I 解法1&#xff1a;枚举 至多循环 10 次&#xff0c;一定会遇到个位数为 0 的数字&#xff0c;数位乘积是 0&#xff0c;一定是 t 的倍数。 所以暴力枚举即可。 代码&#xff1a; /** lc appleetcod…

element的from表单校验问题 —— 校验内容正确、但触发错误提示

问题&#xff1a;二次封装了el-radio&#xff0c;在选择后触发了form的校验&#xff0c;并提示了错误。 分析&#xff1a;输出radio选择后的value值是正确&#xff0c;但还是触发了错误校验提示&#xff0c;可能纯在以下几个问题 1. v-model 绑定的form参数和rules不一致 2. e…

工业相机选取

1.相机分类&#xff1a; 1.1 在相机曝光方式中&#xff0c;全局曝光和卷帘曝光是两种主流技术。CCD相机通常采用全局曝光方式&#xff0c;而CMOS相机则可能采用卷帘曝光。 面阵相机与全局曝光关联与区别 关联&#xff1a;面阵相机可以使用全局曝光作为曝光方式&#xff0c;但…

使用Windows自带的IIS搭建FTP服务端

1、启用IIS功能 2、打开IIS 3、将默认的站点删除 4、创建FTP服务端 &#xff08;1&#xff09;选中站点&#xff0c;然后点击鼠标邮件&#xff0c;点击添加FTP站点 &#xff08;2&#xff09;指定站点名称和物理路径 物理路径&#xff1a;FTP服务端数据的路径&#xff0c;F…

研界的福尔摩斯——扩增子+qPCR

微生物在生物地球化学循环、动植物健康等多种领域发挥作用&#xff0c;因此&#xff0c;精确测量微生物绝对丰度对理解其与人类健康、植物生长等的关系至关重要。 常规扩增子测序分析只能解析样本中的物种组成和其相对丰度信息&#xff0c;并不能反映样本每种微生物的真实数量…