运维05:自动化

人工运维时代
运维人员早期需要维护众多的机器,因此需要执行很多重复的劳动,很多机器需要同时部署相同的服务或者是执行相同的命令,还得反复地登录不同的机器,执行重复的动作
自动化运维时代
早期运维人员会结合ssh免密登录,以及shell脚本来完成自动化的部署操作
系统管理员面临的问题主要是:配置管理系统、远程执行命令、批量安装服务,启停服务等等
后来也诞生了众多的自动化运维软件,比如 Ansible
自动化运维的好处
- 减少重复的操作,提高工作效率
- 减少了人为出错的可能性
- ansible支持数据化管理,数据化追源,找到问题的源头
Ansible介绍
ansible是一个同时管理多个远程主机的软件,必须是任意可以通过ssh登录的机器,因为ansible可以管理的机器,包括:
- 远程虚拟机
- 物理机
- 本机机器

ansible通过ssh协议实现了,管理节点(安装了ansible服务的机器)和被管理节点的通信。
只要是通过ssh协议登录的主机,就可以完成ansible自动化部署操作
- 批量文件分发
- 批量数据复制
- 批量数据修改、删除
- 批量自动化安装软件服务
- 批量服务启动、停止
- 脚本化,自动批量服务部署
ansible特点
- 安装部署简单
- 管理主机便捷、支持多台主机并行管理
- 无须安装被管理节点的客户端(no agent),且无需占用客户端的其他端口,仅仅使用ssh服务即可
- 不仅仅支持python,还支持其他语言的二次开发
- 不用root用户也可执行,降低系统权限

Ansible实践部署
- 准备好虚拟机
准备好3个Linux虚拟机,配置在同一个局域网内,然后设置好静态ip地址
childA 192.168.xxx.129 被管理机器
childB 192.168.xxx.130 被管理机器(配置好ssh服务,以及关闭防火墙等等)
master01 192.168.xxx.128 管理机器(安装了ansible的服务器)
- 先准备ansible管理机器
#选择yum自动化安装(前提:已经安装好了阿里云yum、epel源)
yum install epel-release
yum install ansible#检查ansible软件安装情况,查询配置文件和可执行命令
rpm -ql ansible | grep -E '^/etc|^/usr/bin'#检查ansible版本
ansible --version
- 再准备ansible被管理机器
yum install epel-release libselinux-python -y
Ansible管理方式
ansible管理主机的方式有2种
- 传统的输入ssh密码验证
- 密钥管理
配置好ansible的配置文件,添加被管理机器的ip地址,或者主机名
#主节点备份现有的配置文件
cp /etc/ansible/hosts /etc/ansible/hosts.ori#添加ansible需要管理的机器地址(节点A和节点B的ip地址)
[root@192 ansible]# vim hosts
[root@192 ansible]# tail -3 /etc/ansible/hosts
[qiujie]
192.168.xxx.129
192.168.xxx.130
ssh密码认证方式管理机器
ansible是直接利用linux本地的ssh服务,以及一些远程的ssh操作,一般情况下客户端的ssh服务默认都是开启的,无须额外管理
步骤:
①在master01机器上,执行如下命令
#在主机器上,告诉其他被管理的机器,你要执行什么命令,以及用什么用户去执行
ansible qiujie -m command -a 'hostname' -k -u root
qiujie /etc/ansible/hosts 文件中定义的主机组,还可以写主机的ip地址,以及通配符
-m 指定功能模块,默认就是command模块
-a 告诉模块需要执行的参数
-k 询问密码验证
-u 指定运行的用户
运行命令之后报错了:
报错原因:
使用了密码方式登录,在主机Host Key检查激活情况下,sshpass不支持该用法,得在master01机器的 ~/.ssh/known_hosts 文件中,添加客户端机器的指纹密钥
②手动ssh登录,对主机进行连接,即可使用ansible命令操作了
ssh root@192.168.xxx.129
ssh root@192.168.xxx.130
连接之后,再查看 ~/.ssh/known_hosts 文件,发现

③此时可以在master01机器上,再次执行ansible命令
ansible qiujie -m command -a 'hostname' -k -u root
配置免密登录
每次执行ansible命令的时候,都需要输入ssh的认证密码,也就是root密码,如果不同的主机密码不一样,那你还得输入多次才行。因此,我们可以配置如下的快捷登录方式
- ansible自带的密码认证参数
#可以在 /etc/ansible/hosts文件中,定义密码即可实现快速认证,远程管理主机
#修改后的内容如下:
[qiujie]
192.168.186.129 ansible_user=root ansible_ssh_pass=111111
192.168.186.130 ansible_user=root ansible_ssh_pass=111111
ansible_host 主机地址
ansible_port 端口,默认是22端口
ansible_user 认证的用户
ansible_ssh_pass 用户认证的密码
执行ansible命令(这次后面 -k -u root 那段参数就不用加了,它会自动执行配置文件中设置的账号和密码)
ansible qiujie -m command -a 'hostname'
- ssh密钥方式批量管理主机
这个方式比起hosts文件的密码参数来的更安全放心
#在master01机器上创建ssh密钥对
ssh-keygen -f ~/.ssh/id_rsa -P "" > /dev/null 2>&1#检查公私钥文件
[root@master01 ~]# cd ~/.ssh/
[root@master01 .ssh]# ls
id_rsa id_rsa.pub known_hosts
编写公钥分发脚本
创建公钥分发脚本mkdir /myshcd /myshtouch ssh_key_send.shvim ssh_key_send.sh
脚本具体内容如下:
#!/bin/bash
rm -rf ~/.ssh/id_rsa*
ssh-keygen -f ~/.ssh/id_rsa -P "" > /dev/null 2>&1
SSH_Pass=123123
Key_Path=~/.ssh/id_rsa.pub
for ip in 129 130
dosshpass -p$SSH_Pass ssh-copy-id -i $Key_Path "-o StrictHostKeyChecking=no" 192.168.xxx.$ip
done
#非交互式分发公钥命令需要用sshpass指定SSH密码,通过 -o StrictHostKeyChecking=no 跳过SSH确认连接信息
#执行
sh ssh_key_send.sh#然后直接使用以下命令连接childA和childB节点,这样不需要输入密码
ssh -o ' StrictHostKeyChecking=no' '192.168.xxx.129'
ssh -o ' StrictHostKeyChecking=no' '192.168.xxx.130'
ansible模式
ansible实现批量化管理主机的模式,主要有2种
- ad-hoc模式:利用ansible的纯命令行实现批量管理
- playbook剧本模式:利用ansible的playbook剧本实现批量管理
ansible-doc命令
列出ansible支持的所有模块
ansible-doc -l
查看某个模块的具体用法参数
ansible-doc -s command
Ansible模块精讲
1、command模块
- 作用:在远程节点上执行一个命令

chdir 在执行命令之前,先通过cd进入该参数指定的目录
creates 在创建一个文件之前,判断该文件是否存在,如果存在了则跳过前面的动作,如果不存在,则执行前面的动作
free_form 该参数可以输入任何的系统命令,实现远程执行和管理
removes 定义一个文件是否存在,如果存在则执行前面的动作,如果不存在则跳过
command模块是ansible默认的基本模块,也可以省略不写,但是要注意如下的坑:
使用command模块,不得出现shell变量,比如$name,也不得出现特殊符号,比如 > < | ; & 这些符号command模块都不认识,如果你想用前面指定的变量、特殊符号,请使用shell模块
- command模块案例
获取所有被管理机器的负载信息
ansible qiujie -m command -a 'uptime'
让客户端机器,先切换到 /tmp 目录下,然后打印当前的工作目录
ansible qiujie -m command -a "pwd chdir=/tmp"
让客户端机器,判断 /qiujie 文件是否存在,如果不存在就打印当前路径,存在就跳过
ansible qiujie -m command -a "pwd creates=/qiujie"
让客户端机器,判断/aaa目录是否存在,如果存在就列出/aaa目录下的所有东西,不存在就跳过
ansible qiujie -m command -a "ls /aaa removes=/aaa"
warn参数,是否提供警告信息
#执行命令,并且不提示报错信息
ansible qiujie -m command -a "chmod 000 /etc/hosts warn=false"

shell模块
批量查询进程信息
ansible qiujie -m shell -a "ps -ef | grep vim"
批量在客户端机器,创建写入文件信息
ansible qiujie -m shell -a "echo 你真棒 > /tmp/heihei.txt"
批量执行脚本
#需要执行的这个脚本,必须在客户端机器上存在,否则会报错,这是shell模块的特点
#因为还有一个专门执行脚本的script模块1.创建文件夹
2.创建sh脚本文件,还要写入脚本内容
3.赋予脚本可执行权限
4.执行脚本,并且忽略warning信息ansible qiujie -m shell -a "mkdir -p /server/myscripts; echo 'hostname' > /server/myscripts/hostname.sh; chmod +x /server/myscripts/hostname.sh warn=false"
script 模块
功能:把 master01 管理机器上的脚本,远程地传输到被管理的节点上执行
比起shell模块,script模块功能更强大,在master01机器本地有一份脚本,就可以在所有被管理节点上去运行
1.在管理节点上创建脚本
[root@master01 /]# mkdir /myscripts
[root@master01 /]# cd /myscripts
[root@master01 myscripts]# echo -e "pwd\nhostname" > /myscripts/local_hostname.sh
[root@master01 myscripts]# cat /myscripts/local_hostname.sh
pwd
hostname2.授权
[root@master01 myscripts]# chmod +x /myscripts/local_hostname.sh
远程地批量执行脚本,并且在客户端上不需要存在该脚本
myscripts]# ansible qiujie -m script -a "/myscripts/local_hostname.sh"
利用script模块,可以批量让所有被管理的机器执行脚本,且该脚本不需要在被管理的客户端上存在
相关文章:
运维05:自动化
人工运维时代 运维人员早期需要维护众多的机器,因此需要执行很多重复的劳动,很多机器需要同时部署相同的服务或者是执行相同的命令,还得反复地登录不同的机器,执行重复的动作 自动化运维时代 早期运维人员会结合ssh免密登录&…...
OpenCL学习笔记(一)开发环境搭建(win10+vs2019)
前言 异构编程开发,在高性能编程中有重要的,笔者本次只简单介绍下,如何搭建简单的开发环境,可以供有需要的小伙伴们开发测试使用 一、获取opencl的sdk库 1.使用cuda库 若本机有Nvidia的显卡,在安装cuda库后&#x…...
寻找两个正序数组的中位数
更好的阅读体验,请点击 YinKai s Blog。 题目:寻找两个正序数组的中位数 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 …...
探索低代码的潜力、挑战与未来展望
低代码开发作为一种新兴的开发方式,正在逐渐改变着传统的编程模式,低代码使得开发者无需编写大量的代码即可快速构建各种应用程序。然而,低代码也引发了一系列争议,有人称赞其为提升效率的利器,也有人担忧其可能带来的…...
unity 2d 入门 飞翔小鸟 小鸟碰撞 及死亡(九)
1、给地面,柱体这种添加2d盒装碰撞器,小鸟移动碰到就不会动了 2、修改小鸟的脚本(脚本命名不规范,不要在意) using System.Collections; using System.Collections.Generic; using UnityEngine;public class Fly : Mo…...
实时最优控制(Real-Time Optimal Control)工具
系列文章目录 前言 许多现代控制方法,如模型预测控制(model-predictive control),在很大程度上依赖于实时解决优化问题。特别是,高效解决优化控制问题的能力使复杂机器人系统在实现高动态行为(highly dyna…...
(env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
应公司需求,在特定情况下需要修改ip 在开发过程中出现的小插曲 1、第一种情况:重复声明 2、第二种情况: 应官方要求,需要跳转的 tabBar 页面的路径(需在 pages.json 的 tabBar 字段定义的页面)࿰…...
go-zero开发入门-API服务开发示例
接口定义 定义 API 接口文件 接口文件 add.api 的内容如下: syntax "v1"info (title: "API 接口文件示例"desc: "演示如何编写 API 接口文件"author: "一见"date: "2023年12月07日"version: "…...
NVIDIA Jetson NX ubuntu20.04删除多余版本冲突的Boost库
参考Ubuntu16.04 卸载旧版本Boost库并安装新版本 卸载 删除/usr/local/include/boost文件夹,删除/usr/local/lib中和boost有关的文件,以及/usr/local/lib/cmake/中boost的cmake文件 cd /usr/local/lib/ ls | grep boost sudo rm -rf /usr/local/include/boost su…...
【蜗牛到家】获南明电子信息产业引导基金战略投资
智慧社区生活服务平台「蜗牛到家」已于近期获得贵阳南明电子信息产业引导基金、华科明德战略投资。 贵阳南明电子信息产业引导基金属于政府旗下产业引导基金,贵州华科明德基金管理有限公司擅长电子信息产业、高科技产业、城市建设及民生保障领域的投资,双…...
基于ubuntu nc指令实现远程传输文件到嵌入式设备中
背景: 最近在使用nc进行远程文件传输的时候发现在文件传输完成时,没有正确的反馈,而是界面一直停留在传输阶段,加上使用nc传输需要设置一些诸如-l、 -p等参数,于是想将这些参数包裹在sh脚本中,一键执行脚本…...
蓝桥杯 day01 奇怪的数列 特殊日期
奇怪的数列 题目描述 奇怪的数列 从 X 星截获一份电码,是一些数字,如下: 13 1113 3113 132113 1113122113 ⋯⋯ YY 博士经彻夜研究,发现了规律: 第一行的数字随便是什么,以后每一行都是对上一行…...
properties配置和读取
如何配置和读取属性文件 1.属性文件介绍1.1 什么是属性文件1.2属性文件规范1.3 属性文件优缺点 2.属性文件读取4.spring和属性文件4.1利用注解读取4.2配置文件里直接引用 4.属性文件写入5.注意事项5.总结 1.属性文件介绍 1.1 什么是属性文件 Java开发中,我们经常需…...
如何利用人工智能+物联网技术实现自动化设备生产
随着科技的发展与行业竞争的日益激烈,制造业也逐渐走向智能化发展。制造业的改革是利用物联网技术和自动化设备,实现生产线的智能化和自适应生产,优化生产流程,提高生产效率和质量,为企业创造更大的价值。 方案概述 智…...
STM32CubeMx+MATLAB Simulink串口输出实验
STM32CubeMxMATLAB Simulink串口输出实验 📌《STM32CubeMxMATLAB Simulink点灯程序》📍相关篇《MATLAB Simulink STM32硬件在环 (HIL)实现例程测试》🔖需要的软件支持包:Embedded Coder Support Package fo…...
React中每次渲染都会传入一个新的props.children到子组件?
传入props.children后, 为什么会导致组件的重新渲染? 问题描述 在 react 中, 我想要对组件的渲染进行优化, 遇到了一个非常意思的问题, 当我向一个组件中传入了 props.children 之后, 每次父组件重新渲染都会导致这个组件的重新渲染; 它看起来的表现就像是被memo包…...
Qt 通过命令行编译程序
前言 从服务器拉代码到编译成可执行文件一个脚本解决问题。使用的项目文件见上一个文章 Qt生成动态链接库并使用动态链接库 脚本代码 为了方便易懂这是一个很简单的Qt编译脚本 call E:\vs2015\VC\vcvarsall.bat x86 rmdir /s /q my-project git clone gitgitee.com:wenbai1…...
WireShark监控浏览器登录过程网络请求
软件开发中经常前后端扯皮。一种是用Chrome浏览器的开发者工具 来看网络交互,但是前提是 网络端口的确是通的。 WireShark工作在更低层。 这个工具最大的好处,大家别扯皮,看网络底层的log,到底 你的端口开没开, 数据…...
202301209将RK3399的挖掘机开发板在Android10下设置系统默认为24小时制
202301209将RK3399的挖掘机开发板在Android10下设置系统默认为24小时制 2023/12/9 22:07 应该也可以适用于RK3399的Android12系统 --- a/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/frameworks/base/packages/SettingsProvider/res/values/default…...
智能优化算法应用:基于法医调查算法无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于法医调查算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于法医调查算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.法医调查算法4.实验参数设定5.算法结果6.参考…...
工厂MES数据自动采集怎样用AI完成?资深架构师的非侵入式集成落地指南
摘要: 我是架构师老王。在2026年工业数字化转型的深水区,工厂MES数据自动采集已不再是简单的“连线接口”,而是演变为一场关于“感知、决策与执行”的架构革命。面对老旧系统API缺失、烟囱式架构林立以及信创环境下严苛的安全合规要求&#x…...
如何快速入门Play框架:5分钟搭建你的第一个Java Web应用
如何快速入门Play框架:5分钟搭建你的第一个Java Web应用 【免费下载链接】play1 Play framework 项目地址: https://gitcode.com/gh_mirrors/pl/play1 Play框架是一个轻量级的Java Web开发框架,它采用了MVC架构模式,提供了快速开发、热…...
为什么选择AdoptOpenJDK HomeBrew Tap?10个理由告诉你它曾是macOS最佳JDK解决方案
为什么选择AdoptOpenJDK HomeBrew Tap?10个理由告诉你它曾是macOS最佳JDK解决方案 【免费下载链接】homebrew-openjdk AdoptOpenJDK HomeBrew Tap 项目地址: https://gitcode.com/gh_mirrors/ho/homebrew-openjdk AdoptOpenJDK HomeBrew Tap曾是macOS系统下管…...
AI动态认知地图:从Llama 4传闻到MCIP验证的闭环实践
1. 这不是一份普通 newsletter:它是一张AI领域的动态认知地图“This AI newsletter is all you need #91”——光看标题,你可能以为这只是又一份堆砌链接的AI资讯合集。但作为连续追踪该系列超过两年、亲手拆解过前87期原始内容、并用其指导过6个真实AI产…...
Source Han Serif CN:7款开源字体打造完美中文排版体验
Source Han Serif CN:7款开源字体打造完美中文排版体验 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 在数字内容创作日益普及的今天,你是否曾为寻找一款既美观…...
戴森球计划工厂蓝图仓库技术架构深度探索
戴森球计划工厂蓝图仓库技术架构深度探索 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints 在《戴森球计划》这款深受玩家喜爱的自动化工厂建造游戏中,工厂蓝图的…...
戴森球计划工厂蓝图:革命性工厂配置架构的5大技术突破
戴森球计划工厂蓝图:革命性工厂配置架构的5大技术突破 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints FactoryBluePrints蓝图仓库代表了戴森球计划游戏中最先进…...
动态阻抗匹配增益单元:破解脑电前端 “弱信号放大” 难题
通过上一篇文章的学习,相信大家对自研脑机接口模拟前端的整体框架有了一定的了解,其中动态阻抗匹配增益单元是解决 “微弱脑电信号无法稳定放大” 这一核心难题的关键。今天这篇文章,蔡哥就带大家来聊聊这项技术的设计背景、实现思路和实际效…...
从开发者反馈看taotoken api密钥管理与访问控制功能的实用性
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 从开发者反馈看taotoken api密钥管理与访问控制功能的实用性 在构建基于大模型的应用时,API密钥的管理与访问控制是保障…...
FANUC机器人摆焊+电弧跟踪实战:从参数详解到避坑指南(ROBOGUIDE仿真)
FANUC机器人摆焊与电弧跟踪协同优化实战解析 在厚板焊接与复杂轨迹加工领域,正弦摆焊与电弧跟踪技术的协同应用已成为提升焊接质量的关键手段。资深工程师们常常面临这样的挑战:如何在坡口焊接中精准配置那二十余项电弧传感器参数,使机器人既…...
