Ansible自动化运维


目录

前言

一、概述

常见的开源自动化运维工具比较

二、ansible环境搭建

三、ansible模块

(一)、hostname模块

(二)、file模块

(三)、copy模块

(四)、fetch模块

(五)、user模块

(六)、group模块

(七)、cron模块

(八)、yum_repository模块

(九)、yum模块

(十)、service模块

(十一)、script模块

总结



前言

公司的服务器越来越多, 维护一些简单的事情都会变得很繁琐。用shell脚本来管理少量服务器效率还行, 服务器多了之后, shell脚本无法实现高效率运维。这种情况下,我们需要引入自动化运维工具, 对多台服务器实现高效运维。

一、概述

ansible是一种由Python开发的自动化运维工具,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

架构图

特点

  • 部署简单

  • 默认使用ssh进行管理,基于python里的==paramiko==模块开发

  • 管理端和被管理端不需要启动服务

  • 配置简单,功能强大,扩展性强

  • 能过playbook(剧本)进行多个任务的编排

常见的开源自动化运维工具比较

  1. puppet(拓展)

    基于ruby语言,成熟稳定。适合于大型架构,相对于ansible和saltstack会复杂些。

  2. saltstack(拓展)

    基于python语言。相对简单,大并发能力比ansible要好, 需要维护被管理端的服务。如果服务断开,连接就会出问题。

  3. ansible

    基于python语言。简单快捷,被管理端不需要启服务。直接走ssh协议,需要验证所以机器多的话速度会较慢。

二、ansible环境搭建

一台管理

192.168.238.129(hd1)

两台被管理

192.168.238.130(hd2)

192.168.238.131(hd3)

防火墙设置、宽容模式(selinux )、NAT模式

所有主机都要配置主机名和 hosts文件

192.168.238.129

yum install -y epel-release
yum install -y ansible

设置免密登录

若不免密操作在后面操作agent时都要加-k参数传密码;或者在主机清单里传密码。

ssh-keygen

ssh-copy-id hd2

ssh-copy-id hd3

vim /etc/ansible/hosts

若不进行免密会失败

免密后进行ping通测试(绿色为成功,红色为失败)

主机清单功能

因为未给自己免密所以129会失败

三、ansible模块

ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。

ansible支持的模块非常的多,我们并不需要把每个模块都记住,而只需要熟悉一些常见的模块,其它的模块在需要用到时再查询即可。

​官网模块文档地址:Ansible Documentation

(一)、hostname模块

hostname模块用于修改主机名(注意: 它不能修改/etc/hosts文件) 

基本格式为: ansible 操作的机器名或组名 -m 模块名 -a "参数1=值1 参数2=值2" argment

例:修改hd3的hostname

(二)、file模块

file模块:用于对文件相关的操作(创建, 删除, 软硬链接等)

stat模块:类似linux的stat命令,用于获取文件的状态信息 。(了解)

创建一个目录

ansible my -m file -a 'path=/test state=directory'

创建一个文件

注意:my组的验证文章中多数只截取了一台机器

ansible my -m file -a 'path=/test/1.txt state=touch'

递归修改owner,group,mode

ansible 192.168.238.130 -m file -a 'path=/root/OK recurse=yes owner=bin group=bin mode=1777'

创建文件并指定owner,group,mode等

ansible my -m file -a 'path=/test/1.txt state=file owner=bin group=daemon mode=1777'

也可以指定其中一项进行创建修改

删除文件

删除目录 absent(缺席的) 会连同目录里的所有文件,删除文件值删除对应文件

ansible my -m file -a 'path=/test/1.txt state=absent '

创建软链接文件

ansible my -m file -a 'src=/etc/fstab path=/opt/fstab state=link'

创建硬链接文件

ansible my -m file -a 'src=/etc/fstab path=/opt/fstab2 state=hard'

(三)、copy模块

copy模块用于对文件的远程拷贝操作(如把本地的文件拷贝到远程的机器上)

echo master > OK

ansible my -m copy -a 'src=/root/OK dest=/opt/word'

content参数

使用content参数直接往远程文件里写内容(会覆盖原内容)

注意:ansible中-a后面的参数里也有引号时,记得要单引双引交叉使用,如果都为双引会出现问题。

ansible my -m copy -a 'content="hello\n" dest=/opt/word'

force参数

使用force参数控制是否强制覆盖

如果目标文件已经存在,则不覆盖
ansible my -m copy -a 'src=/root/OK dest=/opt/word force=no'如果目标文件已经存在,则会强制覆盖
ansible my -m copy -a 'src=/root/OK dest=/opt/word force=yes'

backup参数

使用backup参数控制是否备份文件

backup=yes表示如果拷贝的文件内容与原内容不一样,则会备份一份
my的机器上会将/opt/word备份一份(备份文件命名加上时间),再远程拷贝新的文件为/opt/word
ansible my -m copy -a 'src=/root/OK dest=/opt/word backup=yes owner=daemon group=daemon mode=1777'

"/"符号

copy模块拷贝时要注意拷贝目录后面是否带"/"符号

/etc/yum.repos.d后面不带/符号,则表示把/etc/yum.repos.d整个目录拷贝到/tmp/目录下
ansible my -m copy -a 'src=/etc/yum.repos.d dest=/mnt/'/etc/yum.repos.d/后面带/符号,则表示把/etc/yum.repos.d/目录里的所有文件拷贝到/tmp/目录下
ansible my -m copy -a 'src=/etc/yum.repos.d/ dest=mnt/'

(四)、fetch模块

fetch模块与copy模块类似,但作用相反。用于把远程机器的文件拷贝到本地。

注意: fetch模块不能从远程拷贝目录到本地

创建同名文件

(五)、user模块

user模块用于管理用户账号和用户属性。

创建aaa用户,默认为普通用户,创建家目录

ansible 192.168.238.130 -m user -a 'name=aaa state=present'

创建bbb系统用户,并且登录shell环境为/sbin/nologin

ansible 192.168.238.130 -m user -a 'name=bbb state=present system=yes shell="/sbin/nologin"'

创建ccc用户, 使用uid参数指定uid, 使用password参数传密码密码要用双引号引起来,单引号的话验证时会密码不正确

echo 123123 | openssl passwd -1 -stdin
ansible 192.168.238.130 -m user -a 'name=ccc uid=2000 state=present password="$1$TyI.ymu/$bDnWZc.re9V/37HAZAgrf0"'

删除aaa用户,但家目录默认没有删除

ansible 192.168.238.130 -m user -a 'name=aaa state=absent'

删除bbb用户,使用remove=yes参数让其删除用户的同时也删除家目录

ansible 192.168.238.130 -m user -a 'name=bbb state=absent remove=yes'

创建一个普通用户叫badboy,并产生空密码 密钥对echo

 ansible 192.168.238.130 -m user -a 'name=badboy generate_ssh_key=yes'

产生空密码指的是这个,并非空密码

(六)、group模块

group模块用于管理用户组和用户组属性。

创建组

ansible 192.168.238.130 -m group -a 'name=long gid=3000 state=present'

删除组(如果有用户的gid为此组,则删除不了)

ansible 192.168.238.130 -m group -a 'name=long  state=absent'
ansible 192.168.238.130 -m group -a 'name=ss  state=absent'

(七)、cron模块

cron模块用于管理周期性时间任务。

创建一个cron任务,不指定user的话,默认就是root。

minute,hour,day,month,week不指定的话,默认都为*

ansible 192.168.238.130 -m cron -a 'name="test cron1" user=root job="touch /mnt/mnt.txt"  minute=*/2'

删除cron任务

ansible 192.168.238.130 -m cron -a 'name="test cron1" state=absent'

(八)、yum_repository模块

yum_repository模块用于配置yum仓库。

注意:此模块只帮助配置yum仓库,但如果仓库里没有软件包,安装一样会失败。所以可以手动去挂载光驱。

增加一个/etc/yum.repos.d/local.repo配置文件 。(输入命令注意-a后引号)

ansible 192.168.238.130 -m yum_repository -a "name=local description=localyum baseurl=file:///mnt/ enabled=yes gpgcheck=no"

删除/etc/yum.repos.d/local.repo配置文件

ansible 192.168.238.130 -m yum_repository -a "name=local state=absent"

(九)、yum模块

yum模块用于使用yum命令来实现软件包的安装与卸载。

使用yum安装一个软件前提:被安装的机器上yum配置都已经OK)

ansible 192.168.238.130 -m yum -a 'name=dhcp state=present'

使用yum安装l软件,state=latest表示安装最新版本

ansible 192.168.238.130 -m yum -a 'name=dhcp state=latest'

使用yum卸载一个软件

ansible 192.168.238.130 -m yum -a 'name=dhcp state=absent'

(十)、service模块

service模块用于控制服务的启动,关闭,开机自启动等。

启动vsftpd服务,并设为开机自动启动

ansible 192.168.238.130 -m yum -a 'name=vsftpd state=present'
ansible 192.168.238.130 -m service -a 'name=vsftpd state=started enabled=on'

关闭vsftpd服务,并设为开机不自动启动

(十一)、script模块

script模块用于在远程机器上执行本地脚本。

vim /root/test.sh
ansible 192.168.238.130 -m script -a '/root/test.sh'

command与shell模块

两个模块都是用于执行linux命令的,这对于命令熟悉的工程师来说,用起来非常high。

shell模块与command模块差不多(command模块不能执行一些类似$HOME,>,<,|等符号,但shell可以)

注意: shell模块并不是百分之百任何命令都可以,比如vim或ll别名就不可以。不建议大家去记忆哪些命令不可以,大家只要养成任何在生产环境里的命令都要先在测试环境里测试一下的习惯就好。


总结

今天内容相当于可以舒缓下大脑了,没有zabbix那么繁琐的的流程。与基础命令的使用相似,只是在基础稍微扩展,模版较多,要理解含义再操作更有助于背记。

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

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

相关文章

借助各大模型的优点生成原创视频(真人人声)Plus

【技术背景】 众所周知&#xff0c;组成视频的3大元素&#xff0c;即文本语音图片。接着小编逐一介绍生成原创视频的过程。 【文本生成】 天工AI搜索&#xff08;thttp://iangong.cn&#xff09; 直接手机短信验证就可以使用&#xff0c;该大模型已经接入互联网&#xff0c…

什么是IIFE(Immediately Invoked Function Expression)?它有什么作用?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐IIFE 的基本语法⭐IIFE 的主要作用⭐如何使用 IIFE 来创建私有变量和模块封装⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅…

GOOGLE SRE 运维模式解读

一、SRE核心是什么 我总结下来是&#xff1a;通过软件工程的方式开发&#xff08;GOOGLE规定SRE团队必须将50%的精力花在真实的开发工作上&#xff09;一些自动化的工具系统来解放传统运维工程师大量重复和手工操作&#xff0c;从而让新生代的SRE工程师有更多的时间&#xff1…

五种定时任务方案(Timer+ScheduleExecutorService+spring task+多线程执行+quartz)

方案一&#xff1a;Timer (1)Timer.schedule(TimerTask task,Date time)安排在制定的时间执行指定的任务。 (2)Timer.schedule(TimerTask task,Date firstTime ,long period)安排指定的任务在指定的时间开始进行重复的固定延迟执行&#xff0e; (3)Timer.schedule(TimerTask…

YashanDB:潜心实干,数据库核心技术突破没有捷径可走

都说数据库是三大基础软件中的一块硬骨头&#xff0c;技术门槛高、研发周期长、工程要求高&#xff0c;市场长期被几大巨头所把持。 因此&#xff0c;实现突破一直是中国数据库产业的夙愿。自上个世纪80年代起&#xff0c;中国数据库产业走过艰辛坎坷的四十余载&#xff0c;终…

【数据结构】二叉搜索树——二叉搜索树的概念和介绍、二叉搜索树的简单实现、二叉搜索树的增删查改

文章目录 二叉搜索树1. 二叉搜索树的概念和介绍2. 二叉搜索树的简单实现2.1二叉搜索树的插入2.2二叉搜索树的查找2.3二叉搜索树的遍历2.4二叉搜索树的删除2.5完整代码和测试 二叉搜索树 1. 二叉搜索树的概念和介绍 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&…

【Spring 事务和事务传播机制】

目录 1 事务概述 1.1 为什么需要事务 1.2 事务的特性 1.3 Spring 中事务的实现 2 Spring 声明式事务 2.1 Transactional 2.2 Transactional 的作用范围 2.3 Transactional 的各种参数 2.3.1 ioslation 2.4 事务发生了异常&#xff0c;也不回滚的情况 异常被捕获时 3 事务的传…

通过 Blob 对二进制流文件下载实现文件保存下载

原理&#xff1a;前端将二进制文件做转换实现下载: 请求后端接口->接收后端返回的二进制流(通过二进制流&#xff08;Blob&#xff09;下载,把后端返回的二进制文件放在 Blob 里面)->再通过file-saver插件保存 页面上使用&#xff1a; <span click"downloadFil…

作为产品经理,有必要考PMP或者NPDP么?

产品经理的核心竞争力是什么? 三点&#xff1a;知识、能力和决策 懂得越多&#xff0c;能力越强&#xff0c;决策越正确&#xff0c;核心竞争力越强。一般来说&#xff0c;看的越多&#xff0c;做的越多&#xff0c;实践出经验才是王道&#xff0c;但是&#xff0c;总有看不…

智慧物流发展的重要推动力量:北斗卫星导航系统

随着经济的快速发展和电商的普及&#xff0c;物流行业的规模不断扩大&#xff0c;对物流运输的效率和安全性也提出了更高的要求。传统的物流运输方式存在着效率低下、信息不对称、安全隐患等问题&#xff0c;因此发展智慧物流已经成为物流行业的必然趋势。智慧物流可以通过先进…

立晶半导体Cubic Lattice Inc 专攻音频ADC,音频DAC,音频CODEC,音频CLASS D等CL7016

概述&#xff1a; CL7016是一款高保真USB Type-C兼容音频编解码芯片。可以录制和回放有24比特音乐和声音。内置回放通路信号动态压缩&#xff0c; 最大42db录音通路增益&#xff0c;PDM数字麦克风&#xff0c;和立体声无需电容耳机驱动放大器。 5V单电源供电。兼容USB 2.0全速工…

深度学习面试八股文(2023.9.06持续更新)

一、优化器 1、SGD是什么&#xff1f; 批梯度下降&#xff08;Batch gradient descent&#xff09;&#xff1a;遍历全部数据集算一次损失函数&#xff0c;计算量开销大&#xff0c;计算速度慢&#xff0c;不支持在线学习。随机梯度下降&#xff08;Stochastic gradient desc…

基于vue-cli创建后台管理系统前端页面——element-ui,axios,跨域配置,布局初步,导航栏

目录 引出安装npm install安装element-ui安装axios 进行配置main.js中引入添加jwt前端跨域配置 进行初始布局HomeView.vueApp.vue 新增页面和引入home页面导航栏总结 引出 1.vue-cli创建前端工程&#xff0c;安装element-ui&#xff0c;axios和配置&#xff1b; 2.前端跨域的配…

记录学习--字节码解析try catch

1.示例代码 Testpublic void someTest() {String s "111";try {s "222";int i 1/0;} catch (Exception e){e.printStackTrace();System.out.println(s);}System.out.println(s);}2.示例代码对应的字节码 0 ldc #2 <111>2 astore_13 ldc #3 <22…

“深入理解SpringMVC的注解驱动开发“

目录 引言1. SpringMVC的常用注解2. SpringMVC的参数传递3. SpringMVC的返回值4. SpringMVC页面跳转总结 引言 在现代的Web开发中&#xff0c;SpringMVC已经成为了一个非常流行和强大的框架。它提供了许多注解来简化开发过程&#xff0c;使得我们能够更加专注于业务逻辑的实现…

【python】TCP socket服务器 Demo

目录 一、单线程服务器 二、多线程服务器 三、多线程服务器&#xff08;发送和接收分离&#xff09; 一、单线程服务器 说明&#xff1a;只能连接一个客户端 import socket,binascii# 创建一个 TCP 套接字 server_socket socket.socket(socket.AF_INET, socket.SOCK_STRE…

nas汇编程序的调试排错方法

nas汇编程序的调试排错方法&#xff1a; 1、查找是哪一步错了 2、查看对应的*.lst文件&#xff0c;本例中是"asmhead.lst" 3、根据*.lst文件的[ERROR #002]提示查看源码&#xff0c;改错。 4、重新运行编译&#xff0c;OK 1、查找是哪一步错了&#xff1a; nask.ex…

基于任务队列的机器学习服务实现

将机器模型部署到生产环境的方法有很多。 常见的方法之一是将其实现为 Web 服务。 最流行的类型是 REST API。 它的作用是全天候&#xff08;24/7&#xff09;部署和运行&#xff0c;等待接收来自客户端的 JSON 请求&#xff0c;提取输入&#xff0c;并将其发送到 ML 模型以预测…

SpringBoot / Vue 对SSE的基本使用(简单上手)

一、SSE是什么&#xff1f; SSE技术是基于单工通信模式&#xff0c;只是单纯的客户端向服务端发送请求&#xff0c;服务端不会主动发送给客户端。服务端采取的策略是抓住这个请求不放&#xff0c;等数据更新的时候才返回给客户端&#xff0c;当客户端接收到消息后&#xff0c;…

http请求头部(header)详解

目录 常见的请求头部字段 GET方法的使用方法&#xff1a; POST方法的使用方法&#xff1a; Accept字段的使用方法 Content-Type字段的使用 总结 在互联网协议中&#xff0c;HTTP请求头部&#xff08;header&#xff09;是一个非常重要的组成部分。它们是客户端和服务器之…