运维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模块,可以批量让所有被管理的机器执行脚本,且该脚本不需要在被管理的客户端上存在

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

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

相关文章

Linux权限详解

Linux权限 文章目录 Linux权限一、root账号与普通账号二、Linux权限管理三、权限权值表示方法四、文件访问权限的设置方法五、粘滞位六、权限总结 前言&#xff1a; 我们在学习Linux的时候&#xff0c;我们知道在Linux下一切皆文件&#xff0c;而不同的文件对于不同的用户有不同…

回味童年经典游戏的项目

目录 1.超级玛丽2.坦克大战3.吃豆人游戏4.贪吃蛇游戏 1.超级玛丽 项目地址&#xff1a;超级马里奥游戏源码 在线试玩网址在资源描述中 在线试玩&#xff1a;http://martindrapeau.github.io/backbone-game-engine/super-mario-bros/index.html 主要语言&#xff1a;JavaScript…

《ReactJS实践入门》:引领JavaScript前端开发的革新之旅

在当今的软件开发世界中&#xff0c;ReactJS无疑是最为引人注目的JavaScript库之一。对于初学者来说&#xff0c;如何深入理解并掌握这一强大的前端工具&#xff0c;进而应用到实际开发中&#xff0c;一直是他们所面临的问题。而《ReactJS实践入门》一书&#xff0c;正是为了解…

使用Caliper对Fabric地basic链码进行性能测试

如果你需要对fabric网络中地合约进行吞吐量、延迟等性能进行评估&#xff0c;可以使用Caliper来实现&#xff0c;会返回给你一份网页版的直观测试报告。下面是对test-network网络地basic链码地测试过程。 目录 1. 建立caliper-workspace文件夹2. 安装npm等3. calipe安装4. 创建…

type property can‘t be changed 报错问题解决

问题 在使用 jQuery的 attr 方法对 input 输入框的 type 类型进行修改的时候报 type property can’t be changed 这个错误。 $psd.attr(type,text)原因 jQuery 的版本问题&#xff0c;当前使用的 jQuery 版本不允许修改 input 的 type属性所以报错。 解决方法 换原生 js …

使用消息队列遇到的问题—kafka

目录 1 分区2 消费者3 Kafka 如何保证消息的消费顺序&#xff1f;3.1 方案一3.2 方案二 4 消息积压 在项目中使用kafka作为消息队列&#xff0c;核心工作是创建生产者—包装数据&#xff1b;创建消费者----包装数据。 欠缺一些思考&#xff0c;特此梳理项目中使用kafka遇到的一…

15、lambda表达式、右值引用、移动语义

前言 返回值后置 auto 函数名 (形参表) ->decltype(表达式) lambda表达式 lambda表达式的名称是一个表达式 (外观类似函数)&#xff0c;但本质绝非如此 语法规则 [捕获表] (参数表) 选项 -> 返回类型 { 函数体; }lambda表达式的本质 lambda表达式本质其实是一个类…

列表标签的介绍与使用

列表的作用&#xff1a; 整齐、整洁、有序&#xff0c;它作为布局会更加自由和方便。 根据使用情景不同&#xff0c;列表可以分为三大类&#xff1a;无序列表、有序列表和自定义列表 无序列表 <ul> 标签表示 HTML 页面中项目的无序列表&#xff0c;一般会以项目符号呈…

小黑子——springBoot基础

springBoot简单学习 一、SpringBoot简介1.1 springBoot快速入门1.1.1 开发步骤1.1.2 对比1.1.3 官网构建工程1.1.3 SpringBoot工程快速启动 1.2 springBoot概述1.2.1 起步依赖I. 探索父工程II. 探索依赖III. 小结 1.2.2 程序启动1.2.3 切换web服务器-jetty 二、配置文件2.1 配置…

Multisim电路仿真软件使用教程

安装直接参考这篇文章&#xff1a;Multisim 14.0安装教程 软件管家公众号里有很多软件&#xff0c;需要的可以去找下然后安装&#xff0c;这里用的是14.0版本。 这里有个大神的详细教程&#xff0c;可以参考&#xff1a; Multisim软件使用详细入门教程&#xff08;图文全解&…

DiffiT

本文首发于AIWalker&#xff0c;欢迎关注。 https://arxiv.org/abs/2312.02139 https://github.com/NVlabs/DiffiT 扩散模型以其强大的表达能力和高样本质量在许多领域得到了新的应用。对于样本生成&#xff0c;这些模型依赖于通过迭代去噪生成图像的去噪神经网络。然而&#x…

es6 相关面试总结

1、es6 是什么 新一代的js 语言标准&#xff0c;对其核心做了升级优化&#xff0c;更加适合大型应用开发。 2、箭头函数优缺点 优点&#xff1a; 1.代码优化 2.this 指向不会变动&#xff0c;永远指向其父元素 缺点&#xff1a; 1.没有arguments 参数 2.不能通过 appl…

2023年11月10日 Go生态洞察:十四年Go的成长之路

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

[山东大学操作系统课程设计]实验四+实验五

0.写在前面&#xff1a; 为什么这次把两个实验放在一起写了&#xff0c;因为实验五的要求就是在实验四的基础上完成实现的。但是我得实现说明&#xff0c;我的实验四虽然完成了要求&#xff0c;但是无法在我自己的实验四的基础上完成实验五&#xff0c;这是一个很大的问题&…

免费的SEO外链发布工具,提升排名的利器

互联网已经成为信息传播和商业发展的重要平台。而对于拥有网站的个人、企业来说&#xff0c;如何让自己的网站在搜索引擎中脱颖而出&#xff1f;SEO&#xff08;Search Engine Optimization&#xff09;作为提高网站在搜索引擎中排名的关键手段. 什么是SEO外链&#xff1f; S…

class064 Dijkstra算法、分层图最短路【算法】

class064 Dijkstra算法、分层图最短路【算法】 算法讲解064【必备】Dijkstra算法、分层图最短路 code1 743. 网络延迟时间 // Dijkstra算法模版&#xff08;Leetcode&#xff09; // 网络延迟时间 // 有 n 个网络节点&#xff0c;标记为 1 到 n // 给你一个列表 times&…

Linux(centos)学习笔记(初学)

[rootlocalhost~]#:[用户名主机名 当前所在目录]#超级管理员标识 $普通用户的标识 Ctrlshift放大终端字体 Ctrl缩小终端字体 Tab可以补全命令 Ctrlshiftc/V复制粘贴 / &#xff1a;根目录&#xff0c;Linux系统起点 ls&#xff1a; #list列出目录的内容&#xff0c;通常用户查看…

Word插件-好用的插件-一键设置字体--大珩助手

常用字体 整理了论文、公文常用字体 整理了常用的论文字体&#xff0c;可一键设置当前节或选择的文字的字体 字体设置 包含字体选择、字体颜色 特殊格式 包含首字下沉、段落分栏、统一宽度、双行合一、上标切换、下标切换、转为全角、转为半角、挖词填空、当前日期、大写金…

思科最新版Cisco Packet Tracer 8.2.1安装

思科最新版Cisco Packet Tracer 8.2.1安装 一. 注册并登录CISCO账号二. 下载 Cisco Packet Tracer 8.2.1三. 安装四. 汉化五. cisco packet tracer教学文档六. 正常使用图 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新…

uniApp项目的创建,运行到小程序

一、项目创建 1. 打开 HBuilder X 2. 右击侧边栏点击新建&#xff0c;选择项目 3. 填写项目名&#xff0c;点击创建即可 注&#xff1a;uniapp中如果使用生命周期钩子函数&#xff0c;建议使用哪种 ?(建议使用Vue的) 二、运行 1. 运行前先登录 2. 登录后点击 manifest.js…