自动化运维工具-----Ansible

news2024/9/23 5:17:05

一、主流自动

1.1 Puppet

Puppet 是早期的 Linux 自动化运维工具,是一种 Linux、Unix、Windows 平台的集中配置管理系统,发展至今目前已经非常成熟,可以批量管理远程服务器,模块丰富,配置复杂,基于 Ruby 语言编写。最典型的 C/S 模式,需要安装服务端与客户端。puppet 采用 C/S 星状的结构,所有的客户端和一个或几个服务器交互,每个客户端周期的(默认半个小时)向服务器发送请求,获得其最新的配置信息,保证和该配置信息同步。
每个 puppet 客户端每半小时(可以设置)连接一次服务器端,下载最新的配置文件,并且严格按照配置文件来配置客户端,配置完成以后,puppet 客户端可以反馈给服务器端一个消息,如果出错也会给服务器端反馈一个消息。
Puppet 适用于服务器管理的整个过程,比如初始安装、配置、更新以及系统下线。

1.2 Saltstack

Saltstack 与 Puppet 均是 C/S 模式,需安装服务端与客户端,基于 Python 编写,加入 MQ 消息同步,可以使执行命令和执行结果高效返回,但其执行过程需等待客户端全部返回,如果客户端未及时返回或未响应的话,可能会导致部分机器没有执行结果。

1.3 Ansible

Ansible 与 Saltstack 均是基于 Python 语言开发,Ansible只需要在一台普通的服务器上运行即可,不需要在客户端服务器上安装客户端。因为 Ansible 是基于 SSH 远程管理,而Linux服务器大都离不开SSH,所以Ansible不需要为配置工作添加额外的支持。Ansible 安装使用非常简单,而且基于上千个插件和模块实现各种软件、平台、版本的管理,支持虚拟容器多层级的部署。很多读者在使用 Ansible 工具时,认为 Ansible比 Saltstatck 执行效率慢,其实不是软件本身慢,是由于 SSH 服务慢,可以优化 SSH 连接速度及使用 Ansible 加速模块,满足企业上万台服务器的维护和管理。

Ansible可以实现在多台主机上实行应用的部署,

二、Ansible 运维工具原理

Ansible分为控制端和被控制端,主要是基于SSH协议去管理客户端,被控制端是无需安装Agent插件的,Ansible会读取控制端hosts文件,根据文件中定义IP列表信息,调取本地的各个模块对被控端机器实现批量、并发的配置管理和维护,如果任务比较复杂可以写成PlayBook剧本进行分发管理。

市面上自动化运维工具都是cs架构,都是需要安装客户端 ,而ansible不同他不是cs架构不需要安装客户端,只要你这台主机安装了ssh服务即可。ansible,是基于模块工作的,他本身只是提供一个运行的框架,他本身是没有完成任务的能力,anible,需要模块加载到他的框架里来完成任务。(只需要一台主机安装anible,他就可以通过ssh协议来远程操作其他主机,也可以通过ssh免密交互,连密码也不需要输入了)

例如copy模块可以加载到ansible用来拷贝文件到远程主机上,service模块适用于管理应用服务的启动,或者停止。

2.1ansible的执行流程

使用在管理的那台服务器终端输入命令或者playbook,会通过预定好的规则将playbook拆解为play,在组织成ansible可以识别的任务,调用模块和插件,根据主机清单通过将临时文件发送给远程的客户端执行和返回结果,执行后删除。而且ansible执行的时候,如果这个服务打开了,他并不会重新在打开这个服务,这个是模块的幂等性。

化运维工具简介

Ansible 自动运维管理工具优点

  • 轻量级,更新时,只需要在操作机上进行一次更新即可;
  • 采用 SSH 协议;
  • 不需要去客户端安装 agent;
  • 批量任务执行可以写成脚本,而且不用分发到远程就可以执行;
  • 使用 python 编写的,维护更简单;
  • 支持 sudo 普通用户命令;
  • 去中心化管理。

机器管理工具选择的考量可以包含以下三个方面:

  1. 是否简单,是否需要每台机器安装agent(客户端)
  2. ansible是python开发的是比较简单的
  3. 可以操作主机的数量来说,ansible可以接受十几二十多台主机的操作,如果一次操作上千台主机salt会好一些

总结:ansible就是一个自动化运维的工具,可以批量处理多台主机(成百上千),不需要安装客户端,ansible是通过ssh协议通讯的,不需要在控制节点上安装客户端,同时他还具备幂灯性,如果多次执行结果没有发生改变,他不会再去执行。ansible是基于模块在被控制节点上干活的,他本身只是一个框架。ansible,他就是一个应用级别的跨主机编排工具

三、Ansible安装

主机名IP
控制端192.168.195.100
被控制端192.168.195.200
被控制端192.168.195.101

3.1下载软件包

客户端安装ansible

yum install -y epel-release         #安装在线源的扩展包
yum install -y ansible                 ##yum安装ansible

##如果下载错误,在重新安装几遍就好了,因为有的时候因为网络原因

下载完之后在 /etc/ansible 目录下有三个配置文件

ansible.cfg     ## 一般默认配置即可

hosts             ## ansible自动化运维的主机清单,用于存储需要管理远程的相关信息

roles/              ## 公共角色目录

3.2修改/etc/ansible/hosts

四、ansible常用的模块

4.1查看ansible所有的模块

ansible-doc -l                     ## q 可以退出

查看ansible模块的参数

ansible-doc -s <模块名>

4.2ansible的命令格式:

ansible<组名> -m <模块名> -a <参数列表>

4.3command模块(如果不指定模块,默认使用command模块   )

作用:在默认远程主机上执行命令,不支持管道,重定向等shell的特性

使用command模块出现问题,需要实现免交互

 需要生成密钥对并且推送给对方主机

然后我们在用command模块就没有问题的(查看对方主机的ip地址)

[root@localhost .ssh]# ansible 192.168.195.200 -m command -a 'ifconfig'

 另外一台也没有问题

用这个方法可以实现ssh秘钥的免交互推送

通过主机组名也可以使用command模块

我在webservers组又加了一台主机方便试验

查看/etc/ansible/hosts下所有的主机组下面主机的主机名

[root@localhost ansible]# ansible all -a 'hostname'

command一些的常用参数 

chdir

chdir                       ### 可以实现切换目录 在执行命令

[root@localhost ansible]# ansible dbservers -a 'chdir=/var ls ./'   ##先切换到var目录然后在查看目录

creates                        ##判断指定文件是否存在,如果存在,不执行后面的操作

先在101这台主机的opt目录上创建一个123.txt文件

 

removes                     ##判断指定文件是否存在,如果存在,执行后面的操作

配置文件目录在/etc/ansible/ansible.cfg 

后面的命令也要执行在opt目录下

[root@localhost ansible]# ansible dbservers -a 'removes=/opt/123.txt touch /opt/^Cc123.txt'

 

4.4shell模块

## 在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell环境下执行命令

 [root@localhost ansible]# ansible dbservers -m shell -a 'ifconfig ens33 | awk "NR==2 {print \$2}"'   ###查看ip地址

 重定向也是可以使用的

查看101的123.txt文件是否输入内容

4.5 cron模块

##在远程主机定义任务计划,启动有两种状态,present表示添加(可以省略),absent表示移除

cron: 参数说明

minute:   分

hour   :   时

day     : 日

month :月

weekday: 周

user :指定某个用户执行

name :这个计划性任务的名字

job  :表示执行这个计划的命令

指定一个计划性任务

[root@localhost ansible]# ansible dbservers -m cron -a 'minute=30 hour=0 job="/usr/bin/cp -f /var/log/messages /root/backuper/messages-$(date +%Y/%m/%d)" name=backup'

##  创建一个名叫backup的计划 计划内容是每天凌晨三点把/var/log/messages复制到/root/backuper/文件名字叫messages-$(date +%Y/%m/%d)"

 去101这台机器上查看计划性任务

crontab -l    ###查看计划性任务

 周一到周五 上午酒店到下午五点期间,每隔半个小时执行一次同步任务

 删除任务 

[root@localhost ansible]# ansible dbservers -m cron -a 'name="backup" state=absent

##  absent   表示状态删除

4.6user 模块

常用参数

name 用户名,必选参数

present表示添加(可以省略),absent表示移除

system=yes/no 是否为系统账号

uid:用户uid

group:用户基本组

shell :默认使用的shell环境

move_home=yes|no

passwd:设置用户密码(不建议使用 因为是明文加密)

comment:用户的注释信息

remove=yes/no:当状态为state=absent 表示删除家目录

添加一个名叫zhangsan的用户

[root@localhost ansible]# ansible dbservers -m user -a 'name=zhangsan'
192.168.195.101 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "comment": "", 
    "create_home": true, 
    "group": 1001, 
    "home": "/home/zhangsan", 
    "name": "zhangsan", 
    "shell": "/bin/bash", 
    "state": "present", 
    "system": false, 
    "uid": 1001
}

 

 删除一个用户和他的家目录

[root@localhost ansible]# ansible dbservers -m user -a 'name=zhangsan state=absent remove=yes'

##     删除一个用户和他的家目录

 101主机上

张三的家目录也没了

把lisi这用户放到某组里面

[root@localhost ansible]# ansible dbservers -m user -a "name=lisi uid=1024 groups=sjl"

 

4.7group  

管理用户组的模块

添加一个组

[root@localhost ansible]# ansible dbservers -m group -a "name=sjl gid=1024 system=yes"

 101主机上看

 创建李四用户放到sjl组里面

group代表基本组   

groups代表附加组

 

4.8copy模块

##复制文件复制到远程主机

常用参数:

dest:指出复制文件的目标及位置,使用绝对路径,如果源是目录,值目标也要是目录,如果目标文件以及存在会覆盖原有的内容

src:指出源文件的路径,可以使用相对路径或绝对路径,支持指定目录,如果源是目录则目标也要上目录

mode:指出复制时,目标文件的权限

owner:指出复制时,目标文件的属主

group:指复制时候,目标文件的属组,groups代表附加组

content:指出复制到目标主机上的内容,不能与src一起使用

复制本机文件当前目录下hosts复制到webserver主机组的所有主机上并且修改属主和权限

[root@localhost ansible]# ansible webservers -m copy -a 'src=hosts dest=/opt/myhosts owner=root mode=700'  

250主机上查看

复制整个目录

[root@localhost ansible]# ansible webservers -m copy -a 'src=/opt/ dest=/opt/ ' 

 

 

4.9file模块

默认 带表创建文件,或者目录,或者修改文件的属性

参数:

path : 指定目标路径

src:指定原路径

owner:指定属主

group:指定属组

mode:指定权限

state=touch  为创建文件

state=directory 为创建目录

state=link 为创建软连接

absent表示移除

修改文件属组和属主

[root@localhost /]# ansible dbservers -m file -a 'path=/opt/123.txt owner=zhangsan group=zhangsan mode=700 '

查看源文件属性 myhosts

修改文件属性

 

 文件属性权限已经变化

 创建新文件sjl.txt

[root@localhost /]# ansible dbservers -m file -a 'path=/opt/sjl.txt state=touch owner=lisi group=lisi mode=777 '

 101查看一下

 为某个文件创建一个软连接

[root@localhost etc]# ansible dbservers -m file -a 'path=/opt/fstab.link state=link src=/etc/fstab  '
 

 查看一下

 

4.10hostname

修改目标主机的主机名

[root@localhost etc]# ansible dbservers -m hostname -a 'name=ansible02'

 查看主机名

 

4.11ping模块

检测与目标主机的连通性

我把101这台主机事先先关机了

 

4.12yum模块

远程yum安装(目标主机需要由yum源)

state=absent 表示删除这个服务 不加默认是安装

[root@localhost etc]# ansible dbservers -m yum -a 'name=httpd'

##指定dbserver主机组 安装 httpd

4.13service/systemd

参数:

name 指定服务名称

state:表示服务的状态   started | stopped | restarted

enabled=yes | no 表示是否开机自启

runlevel:如果设定了enabled开机自启去,则要定义在哪运行目标下自启动

(1)运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动。其实就是关机。

(2)运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆.在忘记root密码时一般用这个运行级别,进去修改root密码。

(3)运行级别2:多用户状态(没有NFS),没有网络连接。

(4)运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式。 linux很常见的运行级别

(5)运行级别4:系统未使用,保留。

(6)运行级别5:X11控制台,登陆后进入图形GUI模式。就是图形模式。

(7)运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动。

关闭200这台机器的httpd服务 

原本200这台主机

 

 [root@localhost etc]# ansible webservers -m service -a 'name=httpd state=stopped'

在来看看200这台机器,httpd服务已经关闭了

 

 systemctl  is-enabled httpd                                 ##查看httpd是否开机自启

4.14 script

实现远程批量运行本地的shell脚本

首先创建一个创建用户的脚本并且给他执行权限

 给webservers主机组 都执行这个users.sh这个脚本

 去webserver主机组的主机上看看

4.15 setup模块

facts组件是用来手机被管理节点信息,setup模块可以获取这些信息

参数

查看dbservers主机组的信息

[root@localhost opt]# ansible dbservers -m setup

 参数

filter :过滤信息可以配合通配符

查看Ipv4结尾的信息显示出来

[root@localhost opt]# ansible dbservers -m setup -a 'filter=*ipv4'

 

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

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

相关文章

[附源码]Python计算机毕业设计Django楼盘销售管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Netty系列(四):源码解读 backlog 参数作用

sun.nio.ch.ServerSocketChannelImpl#bind方法 在ServerSocketChannel接口中&#xff0c;有一个bind方法&#xff0c;这个方法的作用是将通道的套接字绑定到本地地址并配置套接字以侦听连接。即用于在套接字和本地地址之间建立关联。而一旦建立关联&#xff0c;套接字将保持绑…

html5期末大作业——HTML+CSS公益关爱残疾人( 6个页面)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Metabase学习教程:系统管理-3

保持条理化 当用户、问题和仪表盘的数量不可避免地增加时&#xff0c;如何保持分析的组织性。 如果您想保持竞争力&#xff0c;您需要让组织中的人员访问他们需要的数据&#xff0c;以便做出更好的决策。然而&#xff0c;这种数据自主化的代价是不可避免的大量分析——这会使…

CentenOS安装使用Docker

1 先更新一下yum 执行 yum -y update 这样算完成 2 清理一下&#xff0c;原来可能安过的docker yum remove docker docker-common docker-selinux docker-engine 3 安装所需软件包 yum install -y yum-utils device-mapper-persistent-data lvm2 安装过的可以跳过 4 配置yum中…

Qt OpenGL 光照和键盘控制

这次教程中&#xff0c;我们将添加光照和键盘控制&#xff0c;它让程序看起来更美观。我将教大家如何使用键盘来移动场景中的对象&#xff0c;还会教大家在OpenGL场景中应用简单的光照&#xff0c;让我们的程序更加视觉效果更好且受我们控制。 程序运行时效果如下&#xff1a;…

java项目_第168期ssm二手车交易网站-_计算机毕业设计

java项目_第168期ssm二手车交易网站-_计算机毕业设计 【源码请到资源专栏下载】 今天分享的项目是《ssm二手车交易网站》 该项目分为2个角色&#xff0c;管理员和用户。 用户可以浏览前台,包含功能有&#xff1a; 首页、商品信息、论坛信息、新闻资讯 、留言反馈、购物车、跳转…

目的:ubuntu配置使用opengl - 初探-创建一个空窗口

目的&#xff1a;ubuntu配置使用openGL - 初探-创建一个空窗口 环境&#xff1a; 系统&#xff1a;Ubuntu18.04 环境&#xff1a;g步骤&#xff1a; Ubuntu下使用openGL&#xff0c;搭建配置环境并测试窗口 1、openGL库&#xff0c;需要单独安装&#xff0c;由于本机是vmwar…

萌新源api管理系统更新教程

前言 萌新源API管理系统旨在大家提供一个更为方便的管理api的方法&#xff0c;经过几个月的时间&#xff0c;目前已经迭代到v4.41版本 那么这篇文章呢&#xff0c;也是想要教一下大家怎样去更新我们最新版本的管理系统&#xff0c;我最近也是在研究自动化更新&#xff0c;但是…

【CVPR2022】Detecting Camouflaged Object in Frequency Domain

【CVPR2022】Detecting Camouflaged Object in Frequency Domain 论文有一个非官方的实现&#xff1a;https://github.com/VisibleShadow/Implementation-of-Detecting-Camouflaged-Object-in-Frequency-Domain 感觉这个论文是CVPR2022 Learning in the frequency domain 论文…

具有 1 个射频链的 OFDM-MIMO 系统的波束训练(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

基于多能互补的热电联供型微网优化运行(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

特征缩放是强制性的吗? 什么时候使用标准化? 什么时候使用归一化?数据的分布会发生什么变化?对异常值有什么影响?模型的准确性会提高吗?

以上问题也是面试中经常被问到的问题,我将在本博客中尝试通过提供合适的例子来回答上述问题。我们将使用 sklearn 的 StandardScaler 和 MinMaxScaler。 让我们考虑一个数据集,其中Age和Estimated Salary是输入特征,我们必须预测产品是否已购买(输出标签)或未购买。 看看…

【1796. 字符串中第二大的数字】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你一个混合字符串 s &#xff0c;请你返回 s 中 第二大 的数字&#xff0c;如果不存在第二大的数字&#xff0c;请你返回 -1 。 混合字符串 由小写英文字母和数字组成。 示例 1&#xff1a; 输入…

Spring - BeanFactoryAware扩展接口

文章目录Preorg.springframework.beans.factory.BeanFactoryAware扩展点说明Aware接口Spring内建Aware接口的执行时机及顺序源码解析 &#xff08;直接调用&#xff09;源码分析 _ BeanPostProcessor调用执行顺序扩展点示例Pre Spring Boot - 扩展接口一览 org.springframewor…

Kotlin Flow 背压和线程切换竟然如此相似

前言 上篇分析了Kotlin Flow原理&#xff0c;大部分操作符实现比较简单&#xff0c;相较而言背压和线程切换比较复杂&#xff0c;遗憾的是&#xff0c;纵观网上大部分文章&#xff0c;关于Flow背压和协程切换这块的原理说得比较少&#xff0c;语焉不详&#xff0c;鉴于此&…

5G无线技术基础自学系列 | 5G上行功率控制

素材来源&#xff1a;《5G无线网络规划与优化》 一边学习一边整理内容&#xff0c;并与大家分享&#xff0c;侵权即删&#xff0c;谢谢支持&#xff01; 附上汇总贴&#xff1a;5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 5G上行功率控制是针对每个UE的不同信道…

CS224W 8 GNN Augmentation andTraining

目录 Graph Augmentation for GNNs 引入 Why Graph Augmentation Graph Augmentation Approaches Feature Augmentation on Graphs Input graph没有node features GNN很难学习的一些特定结构 Graph Structure augmentation Augment sparse graphs——添加虚拟节点或边…

不同平台下运行历程代码

不同平台下运行历程代码 所谓的大端模式,是指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放; 所谓的小端模式,是指数据…

【Mysql】索引

文章目录一.索引的价值1.1. mysql与磁盘交互的基本单位建立共识1.2. 为什么IO交互的基本单位为Page理解单个Page理解多个Page提高在单个Page中的查找效率针对多页情况的页目录为什么选择B树,而不是其他数据结构&#xff1f;没有主键会怎么创建索引为什么推荐使用自增ID作为主键…