自动化运维之ansible

一、认识自动化运维

假如管理很多台服务器,主要关注以下几个方面“

1.管理·机与被管理机的连接(管理机如何将管理指令发送给被管理机)

2.服务器信息收集(如果被管理的服务器有centos7.5外还有其它linux发行版,如suse,ubuntu等。当你要做的事情在不同os上有所不同,你需要收集信息,并将其分开处理)

3.服务器分组(因为有些时候我要做的事情不是针对所有服务器,可能只针对某一个分组)

4.管理内容的主要分类

文件目录管理(包括文件的创建,删除,修改,查看状态,远程拷贝等)

用户和组管理

cron时间任务管理

yum源配置与通过yum管理软件包

服务管理

远程执行脚本

远程执行命令

二、ansilble

2.1 ansible环境搭建

1.静态ip

2.主机名及主机名互相绑定

3.关闭防火墙,selinux

4.时间同步

5.确认和配置yum源(需要epel源)

实验过程:

第一步:管理机上安装ansible,被管理节点必须打开ssh服务

yum install epel-release
yum install ansible
ansible --version

第二步:实现master对agent的免密登录。只在master上做。(如果这一步不做,则在后面操作agent时要加-k参数传密码;或者在主机清单里传密码

ssh-keygen
ssh-copy-id -i 192.168.124.131
ssh-copy-id -i 192.168.124.132

第三步:在master上定义主机组,并测试连接性

【group】

192.168.124.131

192.168.124.132

2.2服务器分组

ansible通过一个主机清单功能来实现服务器分组

ansible的默认主机清单配置文件为/etc/ansible/hosts

示例:

[nginx]               组名 
apache[1:10].aaa.com  表示apache1.aaa.com到apache10.aaa.com这10台机器
nginx[a:z].aaa.com    表示nginxa.aaa.com到nginxz.aaa.com共26台机器
10.1.1.[11:15]        表示10.1.1.11到10.1.1.15这5台机器10.1.1.1:2222         设置端口为2222定义10.1.1.12:2222这台服务器的别名为nginx1
nginx1 ansible_ssh_host=10.1.1.12 ansible_ssh_port=2222没有做免密登录的服务器可以指定用户名和密码
nginx1 absible_ssh_host=10.1.1.12 ansible_ssh_port=2222 ansible_ssh_user=root ansible_-ssh_pass="123456"利用别名来分组
nginx1 ansible_ssh_host=10.1.1.12 ansible_ssh_port=2222 ansible_ssh_user=root ansible_ssh_pass="123456"
nginx2 ansible_ssh_host=10.1.1.13[nginx]
nginx1
nginx2

2.3ansible模块

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

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

2.3.1查看所有支持的模块

ansible-doc -l

2.3.2hostname模块

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

将其中一台远程主机名修改为agent1.cluster.com

master# ansible 192.168.124.131 -m hostname -a 'name=agent1.cluster.com'
基本格式为:ansible 操作的机器名或组名 -m 模块名 -a "参数1=值1 参数2=值2"

2.3.3file模块(重点)

创建目录

删除:

2.3.4copy模块(重点)

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

在master上准备一个文件,拷贝此文件到group1的所有机器上

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

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

2.3.5stat模块(了解)

stat模块类似于linux的stat命令,用于获取文件的状态信息

获取/etc/fstab文件的状态信息

2.3.6template模块(扩展)

与copy模块功能几乎一样

template模块首先使用变量渲染jinjia2模版文件成普通文件,然后再复制过去,而copy模块不支持。(jinja2是一个基于python的模版引擎)

master# ansible -m template group1 -a "src=/etc/hosts dest=/tmp/hosts"

template模块不能拷贝目录

master# ansible -m template group1 -a "src=/etc/yum.repos.d/ dest=/etc/yum.repos.d/"

2.3.7fetch模块

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

第一步:在两台被管理机上分别创建一个同名文件(但内容不同)

agent1# echo 12345 > /tmp/1.txt
agent2# echo 54321 > /tmp/1.txt

第二步:从master上fetch文件(因为group1里有2台机器,为了避免同名文件冲突,它使用了不同的目录

master# ansible group1 -m fetch -a 'src=/tmp/1.txt dest=/tmp/'

第三步:先删除上面fetch过来的,然后尝试只fetch其中一台机器的,也会使用名称来做子目录区分

master# rm /tmp/10.1.1.* -rfmaster# ansible 10.1.1.12 -m fetch -a 'src=/tmp/1.txt dest=/tmp/'

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

2.3.8user模块

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

ansible group1 -m user -a "name=zhangsan uid=1004 home=/home/hhh shell=/bin/false command=@_@"

删除用户以及家目录

ansible group1 -m user -a "name=zhangsan state=absent remove=yes"

2.3.9group模块

创建组

ansible group1 -m group -a "name=admins gid=5000"

删除组

ansible group1 -m group -a "name=admins state=absent"

2.3.10cron模块

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

创建一个cron任务,不指定suer的话,默认就是root(因为我这里是用root操作的)

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

master# ansible group1 -m -cron -a 'name="test cron1" user=zhangsan job="touch /tmp/111" minute=*/2'

删除cron任务

master #ansible group1 -m -cron -a 'name="test cron1" state=absent'

2.3.11yum模块(重点)

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

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

master#ansible group1 -m yum -a 'name=vsfpd state=present'

使用yum安装httpd,http-devel软件,state=latest表示安装最新版本

master#ansible group1 -m yum -a 'name=httpd,httpd-devel state=latest'

使用yum卸载httpd,httpd-devel软件

master#ansible group1 -m yum -a 'name=httpd,httpd-devel state=absent'

2.3.12service模块

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

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

master# ansible group1 -m service -a 'name=vsftpd state=started enabled=on'

2.3.13script-command-shell模块

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

master# ansible group1 -m script -a '/tmp/xxx.sh'

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

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

master# ansible -m command group1 -a "useradd user2"
master# ansible -m command group1 -a "id user2"master# ansible -m command group1 -a "cat /etc/passwd |wc -l"  --报错
master# ansible -m shell group1 -a "cat /etc/passwd |wc -l"  --成功

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

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

相关文章

【温室气体数据集】亚洲地区长期空气污染物和温室气体排放数据 REAS

目录 REAS 数据集概述 REAS 数据版本及特点 数据内容(以 REASv3.2.1 为例) 数据形式 数据下载 参考 REAS 数据集(Regional Emission inventory in ASia,亚洲区域排放清单)是由日本国立环境研究所(NIES)及相关研究人员开发的一个覆盖亚洲地区长期空气污染物和温室气体排放…

中州养老项目:利用Redis解决权限接口响应慢的问题

目录 在Java中使用Redis缓存 项目中集成SpringCache 在Java中使用Redis缓存 Redis作为缓存,想要在Java中操作Redis,需要 Java中的客户端操纵Redis就像JDBC操作数据库一样,实际底层封装了对Redis的基础操作 如何在Java中使用Redis呢?先导入Redis的依赖,这个依赖导入后相当于把…

MathJax - LaTeX:WordPress 公式精准呈现方案

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录前言安装 MathJax-LaTeX 插件修改插件文件效果总结互动致谢参考前言 在当今知识传播与…

详细解读Docker

1.概述Docker是一种优秀的开源的容器化平台。用于部署、运行应用程序&#xff0c;它通过将应用及其依赖打包成轻量级、可移植的容器&#xff0c;实现高效一致的运行效果&#xff0c;简单来说&#xff0c;Docker就是一种轻量级的虚拟技术。2.核心概念2.1.容器&#xff08;Contai…

GEE:基于自定义的年度时序数据集进行LandTrendr变化检测

本文记录了使用自己的年度时序数据集,进行 LandTrendr 变化检测的代码。结果输出变化年份、变化幅度以及变化持续时间。 结果如下图所示, 文章目录 一、核心函数 二、代码 三、代码链接 一、核心函数 var eeltgcm = require(users/949384116/lib:LandTrendr/getChangeMap)v…

PostgreSQL收集pg_stat_activity记录的shell工具pg_collect_pgsa

这是一个纯脚本工具&#xff0c;用于从PostgreSQL的pg_stat_activity视图中定期收集数据并保存到本地日志文件。 相关背景&#xff1a; 某个慢SQL打满内存&#xff0c;导致系统kill掉postgres的某个进程&#xff0c;进而导致postgres进程重启&#xff0c;没有现场排查不了具体…

通俗的话语解读《银行保险机构信息科技外包风险监管办法》

这份文件不是 “纸上规矩”&#xff0c;而是银行保险机构做信息科技外包的 “实操手册”—— 从要不要外包、选谁合作&#xff0c;到怎么管过程、防风险&#xff0c;再到出问题怎么应对&#xff0c;都给了明确方向。作为管理者&#xff0c;核心是把这些要求落地到日常决策和系统…

芯片ATE测试PAT(Part Average Testing)学习总结-20250916

目录 一、基本概念 二、静态PAT 三、动态PAT 四、参考链接: 一、基本概念 零件平均测试(Part Average Testing,PAT)是一种基于统计学的质量控制方法,主要用于半导体制造中筛选出与正常参数范围偏差较大的“异常值”芯片,以提高产品质量和可靠性; 二、静态PAT 静态…

【数据结构、java学习】数组(Array)

1&#xff0c;概念 数组一旦定义&#xff0c;其维数和维界就不再改变。 因此除了结构的初始化和销毁之外&#xff0c;数组只有存取元素和修改元素值的操作。Array可以存放对象类型、基本数据类型的数据。数组中元素在内存中按顺序线性存放&#xff0c;通过第一个元素就能访问随…

58-正则表达式

1. 概念正则表达式是一种用来匹配字符串的强有力的武器.设计思想&#xff1a;用一种描述性的语言来给字符串定义一个规则&#xff0c;凡是符合规则的字符串&#xff0c;就认为它"匹配"【合法】否则就是不匹配[不合法]举例&#xff1a;beijinglishao163.com2. 规则 1.…

图片木马制作的三种方法

本文转自&#xff1a;https://www.cnblogs.com/cybersecuritystools/p/14932567.html 0x01什么是图片木马&#xff1f; 图片木马在网络上没有统一的定义&#xff0c;在这里我给出自己的定义。图片木马是一张能正常显示又包含恶意代码&#xff08;比如一句话木马&#xff09;的…

【Redis】缓存的穿透、击穿和雪崩

引言要了解缓存的这几个相关问题&#xff0c;我们先以一个例子来引入&#xff1a;有一个get请求&#xff1a;api/news/getById/1正常情况下对其申请访问的流程如图&#xff1a;但若是如此&#xff0c;访问增多或者受到攻击时很容易受到以下问题1 缓存穿透1.1 造成原因当查询一个…

打造一款高稳定、低延迟、跨平台RTSP播放器的技术实践

一、引言 RTSP&#xff08;Real Time Streaming Protocol&#xff09;作为经典的实时流媒体协议&#xff0c;已经深深嵌入到安防监控、远程教育、工业巡检、低空经济、医疗影像传输等行业之中&#xff0c;可以说是这些场景的视频传输“基础设施”。一个稳定的 RTSP 播放器&…

C++_数据结构

数据结构是计算机存储、组织数据的方式&#xff0c;它使得数据能够被高效地访问和修改。根据数据元素之间关系的不同特性&#xff0c;数据结构可以分为多种类型。主要可以分为两大类&#xff1a;逻辑结构和物理结构&#xff08;也称存储结构&#xff09;。 一、逻辑结构&#x…

一个正常的 CSDN 博客账号,需要做哪些基础准备?

一个正常的 CSDN 博客账号&#xff0c;需要做哪些准备&#xff1f; CSDN&#xff08;中国软件开发网&#xff09;作为国内最具影响力的技术社区之一&#xff0c;不仅是开发者获取信息的重要平台&#xff0c;也是技术人建立个人品牌、输出知识、积累影响力的重要阵地。想要把一…

【Python基础】 17 Rust 与 Python 运算符对比学习笔记

一、算术运算符运算符Rust &#x1f980;Python &#x1f40d;示例 (Rust)示例 (Python)说明加法加法let sum 5 3;sum 5 3-减法减法let diff 5 - 3;diff 5 - 3*乘法乘法let product 5 * 3;product 5 * 3/除法除法let quotient 5 / 3; → 1quotient 5 / 3 → 1.666...…

单链表逆序java

在Java中实现单链表的逆序&#xff0c;可以通过迭代或递归两种方式。以下是两种方法的详细实现&#xff1a; 1. 迭代方法&#xff08;推荐&#xff09; public class ListNode {int val;ListNode next;ListNode(int x) { val x; } }class Solution {public ListNode reverseLi…

(11)用于无GPS导航的制图师SLAM(二)

文章目录 前言 7 构建软件包 8 开始制图 9 配置 ArduPilot 10 测试 11 视频 前言 本页展示了如何使用 RPLidarA2 激光雷达(RPLidarA2 lidar)设置 ROS 和 Google Cartographer SLAM&#xff0c;为 ArduPilot 提供本地位置估计&#xff0c;使其可以在没有 GPS 的情况下运行…

1.5、机器学习-回归算法

1、线性回归模型 线性回归模型(Liner Regression)&#xff0c;是利用线性拟合的方式来探寻数据背后的规律。通过搭建线性回归模型&#xff0c;可以寻找这些散点&#xff08;也称样本点&#xff09;背后的趋势线(也称回归曲线)。 借助回归曲线&#xff0c;我们可以进行一些简单…

eclipse 安装 lombok

好久没有用eclipse&#xff0c;新装eclipse 发现lombok 没有生效&#xff0c;如下安装最省事&#xff0c;无需安装plugin等。 进入maven 本地目录&#xff0c;如&#xff1a;org\projectlombok\lombok\1.18.38&#xff0c;点击lombok jar文件指定eclipse 目录&#xff0c;安装完…