【Linux】Ansible集中化运维工具(详解)安装、常用模块、playbook脚本

文章目录

  • 一、Ansible安装及远程控制
    • 1、关闭防火墙和SELinux
    • 2、安装ansible
    • 3、配置SSH无密码登录
      • 1、在管理机上生成一对密钥
      • 2、将公钥下发到远程主机
      • 3、保管密钥
    • 4、主机目录
  • 二、常用模块
    • 1、setup模块
    • 2、copy模块
    • 3、file模块
    • 4、shell模块
    • 5、script模块
    • 6、ping模块
    • 7、group模块
    • 8、yum模块
    • 9、service模块
  • 三、playbook脚本
    • 1、指定节点和用户
    • 2、任务列表
    • 3、handlers
    • 4、基本语法
      • 1、变量
      • 2、条件语句
      • 3、循环
      • 4、include
  • 四、谢谢观看!

一、Ansible安装及远程控制

前提:要有两台主机(我这里是两台虚拟机)
如下:
在这里插入图片描述

ansible只需在管理机上安装即可。
被管理机要设置静态IP 设置方法可参考此篇博客
被管理机也被称为节点。
下文中,将被管理机centos_7_1简称为被控主机1

1、关闭防火墙和SELinux

systemctl status firewalld   #查看防火墙状态

在这里插入图片描述
防火墙状态参数为active即为开启。

sudo systemctl stop firewalld  #临时关闭防火墙

参数改为inactive即关闭状态。
在这里插入图片描述
关闭SELinux
查看:

getenforce

在这里插入图片描述
关闭:

sudo setenforce 0

在这里插入图片描述

2、安装ansible

1、安装Ansible软件包的EPEL源

yum install epel-release

在这里插入图片描述
2、安装ansible

yum -y install ansible

在这里插入图片描述
3、查看ansible版本

ansible --version

在这里插入图片描述

3、配置SSH无密码登录

需要使用到两个命令:ssh-keygen(生成一对密钥)、ssh-copy-id(把本地主机的公钥复制到目标主机上)。

1、在管理机上生成一对密钥

ssh-keygen -t rsa

遇到询问,一路回车
在这里插入图片描述
执行完毕后会在/root/.ssh下生成一对密钥,其中id_rsa为私钥,id_rsa.pub为公钥。
在这里插入图片描述

2、将公钥下发到远程主机

ssh-copy-id root@192.168.58.132 #该地址为被控主机1的ip地址

在这里插入图片描述

3、保管密钥

ssh-add .ssh/id_rsa
ssh 192.168.58.132 #被控机ip

在这里插入图片描述
此时就处于被控主机1的家目录下。
回到管理机,只需输入ssh命令

ssh 管理机ip

在这里插入图片描述

4、主机目录

主机目录又称主机清单,保存了ansible所管理的远程主机信息及一些连接参数,也可用来对远程主机进行分类。

主机目录的配置文件默认是/etc/ansible/hosts
查看该文件:

vi /etc/ansible/hosts

可看到以下内容:
在这里插入图片描述
将该文件清空,输入一下内容:

[webservers]
192.168.58.132  #被控主机1的ip地址

测试被控主机1是否能被ping通

ansible webservers -m ping

在这里插入图片描述

二、常用模块

查看ansible中已加载的模块

ansible-doc -l

通过ansible命令可以调用这些模块

ansible [节点] -m [模块] -a [参数]

1、setup模块

用于获取节点的详细信息。
例,使用setup模块查看webservers组的节点信息。

ansible webservers -m setup

2、copy模块

可实现从管理机向节点复制静态文件,并设置合理的文件权限。
常用参数:

dest      #文件复制的目的地
src       #复制的源文件
backup    #是否备份原始文件
validate  #复制前是否检验需要复制目的地的路径

例:
将/root/demo/demol.txt复制到所以节点的/root目录下(若没有该文件可换成其它文件):

cd /root/demo
ansible all -m copy -a 'dest=/root src=/root/demo/demol.txt

3、file模块

可用来定义文件或目录属性、权限,创建、删除文件或目录。
常用参数:

mode   #文件的读/写权限
path   #文件路径
src    #文件链接路径
stat   #默认值:file  #选项:file  #创建文件  link  #创建链接sbsent#删除文件

4、shell模块

可以执行远程主机的shell脚本文件,也支持管道。
例:
检查mysql进程是否存在:

ansible all -m shell -a 'ps -ef|grep mysql'

在这里插入图片描述
由图可知,节点192.168.58.132下有mysql进程。

5、script模块

用于将管理机上的shell脚本发送到节点上执行。
例,
写一个脚本:

vi hello.sh//脚本内容为:
#!/bin/bash
echo "hello ansible"

不会写shell脚本可参考这两篇博客:
Shell概念、命令、操作(重定向、管道、变量)
Shell脚本编写基本语法
将该脚本发送到webservers组的节点上执行:

ansible webservers -m script -a '/root/hello.sh'

在这里插入图片描述

6、ping模块

检查连通性。

ansible webservers -m ping

7、group模块

可以在节点上创建组。
常用参数

gid   #用户组的GID
name  #用户组的名字
state    #默认值;present   #选项:present #新增#     absent  #删除

例:
在webservers组的节点上创建一个组名为test、GID为2017的组:

ansible webservers -m group -a 'gid=2017 name=test'

在这里插入图片描述

8、yum模块

从指定服务器自动下载安装RPM包,并且可自动处理依赖性关系。
常用参数:

name       #包名
state   选项:present   #安装latest    #更新absent    #卸载

例:
在被控主机1上安装命令tree:

ansible 192.168.58.132 -m yum -a "name=tree state=present"

在这里插入图片描述

9、service模块

管理节点上的服务,可开启、关闭、重启服务等。

参数		选项		含义
enabled     yes/no      是否开机自启动
name         --         服务名称state      started      启动stopped      关闭restarted    重启reloaded     重新下载

例:
开启被控节点192.168.58.132端的firewalld服务:

ansible 192.168.58.132 -m service -a "name=firewalld state=started"

可在对应节点使用systemctl status firewalld命令来查看firewalld状态。

三、playbook脚本

在学习ansible模块的时候,都是使用命令在节点上执行任务,命令使用比较复杂,且每执行一次均要重复输入,为避免重复输入命令,ansible提供了playbook脚本。一个能被ansible执行的YAML文件叫做playbook。

1、指定节点和用户

每个playbook都需要指定针对那些节点进行运维,并且以哪个用户来执行任务。
指定节点:hosts
指定用户:users

-hosts: webservers      #指定webservers组中的所有节点users: root            #指定用户为root

注:hosts的值可以是主机或组,也可以是关键字all,全部节点。

2、任务列表

即要执行的任务的队列,关键字为tasks。任务列表中的每个任务都通过调用ansible模块完成。按定义的先后顺序执行。
例:

tasks:- name: running nginx               #启动nginx服务service: name=nginx state=running  #调用service模块

name标签是对任务的描述,也可以不加,但一般是会使用name标签。

3、handlers

对ansible模块进行调用,用于处理一些动态事件。
handlers中的模块调用与任务列表中的任务不同,任务默认按定义顺序执行,而handlers只有被触发时才会执行。

4、基本语法

1、变量

在playbook文件中,是通过字段vars来定义变量的。
例:

- hosts: all       #指定节点为所有节点vars:http_port: 80   #定义http_port变量,值为80

2、条件语句

由字段when声明。
例:
当操作系统为Red Hat时执行重启命令:

task:- name: reboot Red Hat hostcommand: /usr/sbin/rebootwhen: ansible_os_family=="Red Hat"

执行顺序:先判断when条件。如果成立,返回True,则执行上一条语句command:;
如果不成立,返回False,不会触发上一条语句

3、循环

常见的循环由字段with_items声明。
例:
在指定节点上同时安装多个软件;

task:- name: install LAMPyum: name={{item}} state=presentwith_items:- nginx- mysql-server- php

代码功能:安装nginx、mysql-server、php 3个软件。with_items会自动循环执行上面的语句:name={{item}} state=present,会用软件名替换item,循环次数为元素个数。

4、include

当多个playbook需要重复使用任务列表时,可以将任务内容抽离出来写入独立文件中,要调用时只需用include将文件包含进来。
例:有单独的任务列表文件tasks/nignx.yml,文件内容为:

---
- name: install nginxyum: name=nginx state=present   #安装nginx

此后,如果有playbook要执行该操作,只需写入以下代码:

tasks:- include: tasks/nginx.yml     #将该文件包含进来

用例演示:
通过编写一个playbook实现Apache的安装与启动。
1、创建目录:

mkdir /root/ansible

在该目录下添加apache.yml文件,此文件就是一个playbook

cd /root/ansible
touch apache.yml

编写playbook内容为:

---
- hosts: 192.168.58.132users: rootvars:http_port: 80max_clients: 200tasks:- name: ensure apache is latestyum: pkg=httpd state=latest- name: write the apache config filetemplate: src=/srv/httpd.j2 dest=/etc/httpd.confnotify:- restart apache- name: ensure apache is runningservice: name=httpd state=startedhandlers:- name: restart apacheservice: name=httpd state=restarted

使用以下命令调用:

ansible-playbook /root/ansible/apache.yml

四、谢谢观看!

参考书籍:《Linux系统管理与自动化运维》黑马程序员/编著

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 RNN 的语言模型

基于 RNN 的语言模型 循环神经网络(Recurrent Neural Network, RNN)是一类网络连接中包含环路的 神经网络的总称。 给定一个序列,RNN 的环路用于将历史状态叠加到当前状态上。沿着时间维度,历史状态被循环累积,并作为…

Flink处理无界数据流

Apache Flink 是一个专为处理无界和有界数据流而设计的流处理框架。处理无界数据流的关键在于能够实时处理不断到达的数据,并且保证处理的正确性和高效性。以下是Flink处理无界数据流的主要步骤和技术: 1. 数据源 (Source) 无界数据流的第一个步骤是从…

oracle服务器意外宕机数据库启动失败故障处理记录

客户反馈由于服务器意外宕机,导致数据库业务不能正常运行,经过一番努力后通过redo日志恢复成功! 故障描述:ORA-00600: 内部错误代码, 参数: [krctcr_4], [1179922061], [1179942042], [], [], [], [], [], [], [], [], [] 现将主要…

第二十九篇——线性代数:“矩阵”到底怎么用?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 数学中的线性代数,再生活中的落地和应用,是我这个…

nodejs:下载,安装,系统环境配置,更换镜像

​​​​下载 地址:https://nodejs.org/zh-cn/download/prebuilt-installer 安装包 开始安装 安装完成 给文件夹添加权限 创建两个文件夹 node_cache node_global 更新环境变量 修改环境变量,新的全局模块路径,这样在任何位置运行命令时都…

AMD显卡低负载看视频掉驱动(chrome edge浏览器) 高负载玩游戏却稳定 解决方法——关闭MPO

2024.11.9更新 开关mpo ulps 感觉有用但是还是掉驱动,现在确定是window顶驱动问题 按网上的改注册表和组策略会让自己也打不上驱动 目前感觉最好的办法就是,重置此电脑,然后你就摆着电脑挂个十分钟半小时别动,一开始他是不显示…

案例精选 | 河北省某检察院安全运营中异构日志数据融合的实践探索

河北省某检察院是当地重要的法律监督机构,肩负着维护法律尊严和社会公平正义的重要职责。该机构依法独立行使检察权,负责对犯罪行为提起公诉,并监督整个诉讼过程,同时积极参与社会治理,保护公民权益,推动法…

srs http-flv处理过程

目录 处理tcp请求,创建HttpConn 解析 http request创建consumer 读取consumer数据转封装为flv 处理tcp请求,创建HttpConn 调用堆栈如下: srs!SrsHttpConn::SrsHttpConn(ISrsHttpConnOwner*, ISrsProtocolReadWriter*, ISrsHttpServeMux*, std::__1::basic_string<ch…

解题--多数元素

给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&#xff1a;3 此算法用…

【论文阅读】火星语义分割的半监督学习

【论文阅读】火星语义分割的半监督学习 文章目录 【论文阅读】火星语义分割的半监督学习一、介绍二、联系工作3.1Deep Learning for Mars3.2 数据集可以分为三类&#xff1a;3.3 半监督学习 三、提出的火星图像分割数据集四、方法四、实验 S 5Mars: Semi-Supervised Learning …

springboot集成onlyoffice(部署+开发)

前言 最近有个项目需求是实现前端页面可以对word文档进行编辑&#xff0c;并且可以进行保存&#xff0c;于是一顿搜索&#xff0c;找到开源第三方onlyoffice&#xff0c;实际上onlyOffice有很多功能&#xff0c;例如文档转化、多人协同编辑文档、文档打印等&#xff0c;我们只用…

蓝桥杯 懒洋洋字符串--字符串读入

题目 代码 #include <iostream>using namespace std;int main(){int n;cin>>n;char s[210][4];int ans0;for(int i0;i<n;i){scanf("%s",s[i]);}for(int i0;i<n;i){char as[i][0];char bs[i][1];char cs[i][2];// cout<<a<< <<b…

免费送源码:Java+ssm+MySQL 在线购票影城 计算机毕业设计原创定制

摘要 随着互联网趋势的到来&#xff0c;各行各业都在考虑利用互联网将自己推广出去&#xff0c;最好方式就是建立自己的互联网系统&#xff0c;并对其进行维护和管理。在现实运用中&#xff0c;应用软件的工作规则和开发步骤&#xff0c;采用Java技术建设在线购票影城。 本设计…

Git删除本地已经merge到远程的分支

要清理那些已经合并到远程仓库主分支&#xff08;例如 main 或 master&#xff09;的本地分支&#xff0c;可以按照以下步骤进行&#xff1a; 更新本地仓库&#xff1a; 确保本地仓库是最新的&#xff0c;以便能够准确判断哪些分支已经被合并。 git fetch --all列出所有已合并的…

Qt 软键盘设计

最近有客户用的电脑是触屏的&#xff0c;所以不用键盘与鼠标&#xff0c;系统的键盘不好看&#xff0c;所以自己设计一个键盘显示&#xff0c;先看下效果图&#xff1b; 设计思路&#xff0c;构建一个软键盘设计界面并重写输入框&#xff0c;然后做界面提升,直接上代码 class …

94.【C语言】数据结构之双向链表的初始化,尾插,打印和尾删

目录 1.双向链表 2.结构体的定义 3.示意图 3.代码示例 1.双向链表的尾插 示意图 代码 main.c List.h List.c 详细分析代码的执行过程 双向链表的初始化 2.双向链表的打印 代码 3.双向链表的尾删 1.双向链表 以一种典型的双向链表为例:带头双向循环链表(带头:带…

区块链技术入门:以太坊智能合约详解

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 区块链技术入门&#xff1a;以太坊智能合约详解 区块链技术入门&#xff1a;以太坊智能合约详解 区块链技术入门&#xff1a;以太…

系统架构设计师论文:论软件维护方法及其应用

试题二 论软件维护方法及其应用 软件维护是指在软件交付使用后,直至软件被淘汰的整个时间范围内,为了改正错误或满足新的需求而修改软件的活动。在软件系统运行过程中,软件需要维护的原因是多种多样的,根据维护的原因不同,可以将软件维护分为改正性维护、适应性维护、完善…

详解Windows 11 上 CUDA 与 PyTorch 版本的兼容性

详解Windows 11 上CUDA 与 PyTorch 版本的兼容性 引言 在使用 NVIDIA GPU 的 Windows 11 系统上&#xff0c;理解 CUDA 版本和 PyTorch 的兼容性是至关重要的。nvidia-smi 命令提供了驱动支持的 CUDA 版本信息&#xff0c;但这与实际安装的 CUDA Toolkit 版本并不相同。本文将…

NestJS 项目中如何使用 class-validator 进行数据验证

前言 在现代Web开发中&#xff0c;数据验证是必不可少的一环&#xff0c;它不仅能够确保数据的准确性&#xff0c;还能提高系统的安全性。在使用NestJS框架进行项目开发时&#xff0c;class-validator与class-transformer这两个库为我们提供了方便的数据验证解决方案。 本文将…