ansible环境搭建
任务背景
公司的服务器越来越多, 维护⼀些简单的事情都会变得很繁琐。⽤ shell脚本来管理少量服务器效率还⾏, 服务器多了之后, shell脚本⽆ 法实现⾼效率运维。这种情况下,我们需要引⼊⾃动化运维⼯具, 对 多台服务器实现⾼效运维。
任务要求
通过管理服务器能够按照需求灵活⾼效地管理所有应⽤服务器的运维 操作
任务拆解
1, 需要⼀台服务器做管理端, 来连接管理所有的应⽤服务器
2, 考虑如果只针对⼀部分应⽤服务器进⾏运维操作如何实现(服务器 分组)
3, 学会将平台烂熟于⼼的linux操作命令转化为⾃动化运维的⽅式(常 ⻅模块的学习)
4, 如果操作⾮常的冗⻓, 学会使⽤playbook和role的⽅式来管理
学习⽬标
能够使⽤file模块做基本的⽂件操作
能够安装ansible服务器和客户端
能够定义ansible主机清单进⾏服务器分组
能够使⽤hostname模块修改主机名
⼀、认识⾃动化运维
问题:
假设我要去1000台服务上做⼀个操作(如nginx服务器修改配置⽂件 ⾥的某⼀个参数), 下⾯两种⽅法缺点明显:
1. 按传统的⽅法, ⼀台连着⼀台服务器的ssh上去⼿动操作。
缺点:
效率太低。
2. 写个shell脚本来做。
缺点:
管理的机器平台不⼀致,脚本可能不具备通⽤性。
传密码麻烦(在⾮免密登录的环境下, 需要expect来传密码)
效率较低,循环1000次也需要⼀个⼀个的完成,如果⽤ & 符 放到后台执⾏,则会产⽣1000个进程。
⾃动化运维: 将⽇常IT运维中⼤量的重复性⼯作,⼩到简单的⽇常检 查、配置变更和软件安装,⼤到整个变更流程的组织调度,由过去的 ⼿⼯执⾏转为⾃动化操作,从⽽减少乃⾄消除运维中的延迟,实现 “零延时”的IT运维。
⾃动化运维主要关注的⽅⾯
假如管理很多台服务器,主要关注以下⼏个⽅⾯:
1. 管理机与被管理机的连接(管理机如何将管理指令发送给被管理 机)
2. 服务器信息收集 (如果被管理的服务器有centos7.5外还有其它 linux发⾏版,如suse,ubuntu等。当你要做的事情在不同OS上有 所不同,你需要收集信息,并将其分开处理)
3. 服务器分组(因为有些时候我要做的事情不是针对所有服务器, 可能只针对某⼀个分组)
4. 管理内容的主要分类
⽂件⽬录管理(包括⽂件的创建,删除,修改,查看状态,远程拷⻉等)
⽤户和组管理
cron时间任务管理
yum源配置与通过yum管理软件包
服务管理
远程执⾏脚本
远程执⾏命令
常⻅的开源⾃动化运维⼯具⽐较
1. puppet(拓展)
基于ruby语⾔,成熟稳定。适合于⼤型架构,相对于ansible和 saltstack会复杂些。
2. saltstack(拓展)
基于python语⾔。相对简单,⼤并发能⼒⽐ansible要好, 需要维 护被管理端的服务。如果服务断开,连接就会出问题。
3. ansible
基于python语⾔。简单快捷,被管理端不需要启服务。直接⾛ ssh协议,需要验证所以机器多的话速度会较慢。
⼆、ansible
ansible是⼀种由Python开发的⾃动化运维⼯具,集合了众多运维⼯ 具(puppet、cfengine、chef、func、fabric)的优点,实现了批量 系统配置、批量程序部署、批量运⾏命令等功能。
特点:
部署简单
默认使⽤ssh进⾏管理,基于python⾥的paramiko模块开发
管理端和被管理端不需要启动服务
配置简单,功能强⼤,扩展性强
能过playbook(剧本)进⾏多个任务的编排
ansible环境搭建
实验准备: 三台机器,⼀台管理,两台被管理
1. 静态ip
2. 主机名及主机名互相绑定
3. 关闭防⽕墙, selinux
4. 时间同步
5. 确认和配置yum源(需要epel源)
实验过程:
第1步:
管理机上安装ansible,被管理节点必须打开ssh服务.
第2步: 实现master对agent的免密登录,只在master上做。(如果这 ⼀步不做,则在后⾯操作agent时都要加-k参数传密码;或者在主机清 单⾥传密码)
第3步: 在master上定义主机组,并测试连接性
服务器分组
ansible通过⼀个主机清单功能来实现服务器分组。
Ansible的默认主机清单配置⽂件为/etc/ansible/hosts.
示例:
示例: 定义10.1.1.12:2222这台服务器的别名为nginx1
示例: 利⽤别名来分组
⼩结:
主机清单的作⽤: 服务器分组。
主机清单的常⻅功能:
1. 可以通过IP范围来分, 主机名名字的范围来分
2. 如果ssh端⼝不是22的,可以传⼊新的端⼝。
3. 没有做免密登录,可以传密码。
ansible模块
ansible是基于模块⼯作的,本身没有批量部署的能⼒。真正具有批 量部署的是ansible所运⾏的模块,
ansible只是提供⼀种框架。 '参数'ansible⽀持的模块⾮常的多,我们并不需要把每个模块都记住,⽽ 只需要熟悉⼀些常⻅的模块,其它的模块在需要⽤到时再查询即可。
查看所有⽀持的模块
hostname模块
hostname模块⽤于修改主机名(注意: 它不能修改/etc/hosts⽂件) https://docs.ansible.com/ansible/latest/modules/hostname_modul e.html#hostname-module
将其中⼀远程机器主机名修改为agent1.cluster.com
file模块(重点)
file模块⽤于对⽂件相关的操作(创建, 删除, 软硬链接等) https://docs.ansible.com/ansible/latest/modules/file_module.html#f ile-module
创建⼀个⽬录
创建⼀个⽂件
递归修改owner,group,mode
删除⽬录(连同⽬录⾥的所有⽂件)
创建⽂件并指定owner,group,mode等
删除⽂件
创建软链接⽂件
创建硬链接⽂件
相关文章:

ansible环境搭建
任务背景 公司的服务器越来越多, 维护⼀些简单的事情都会变得很繁琐。⽤ shell脚本来管理少量服务器效率还⾏, 服务器多了之后, shell脚本⽆ 法实现⾼效率运维。这种情况下,我们需要引⼊⾃动化运维⼯具, 对 多台服务器实现⾼效运维。 任务要求 通过管理服务器能够…...

在线陪玩App小程序源码开发:技术挑战与解决方案
随着互联网技术的飞速发展和用户需求的多样化,在线陪玩App小程序逐渐在游戏娱乐领域占据了一席之地。这类小程序不仅为用户提供了丰富的娱乐体验,也为开发者带来了新的机遇。然而,在开发过程中,数据处理、性能优化、系统扩展性和安…...

iOS profiles文件过期如何更新
创建发布用的Certificates 首先进入到https://developer.apple.com/account页面选择【证书】进入【新建证书】页面 点击【新建证书】按钮: 根据需求选中对应的【证书类型】,我选的是【Apple Distribution】, 开发者证书选择【Apple Devel…...
C/C++|C++标准库 string 流之std::ostringstream 和 std::istringstream 流
我们在 sstream 头文件中定义了三个类型来支持内存IO(ostringstream\istringstream\stringstream),这些类型可以向 string 写入数据,这里我们主要讲: std::ostringstream 和 std::istringstream( C Primer 中文版第五版) 以上的两个类型都继…...

Java-Redis
文章目录 基础基础内容使用场景/功能常见数据类型下载与安装可视化(多个)发布订阅功能事务两种持久化主从模式哨兵模式集群模式Cluster缓存淘汰过期删除缓存一致 Cache Aside缓存击穿缓存穿透缓存雪崩 实战内容配置文件配置Redis的BeanRedis为什么这么快…...
requests快速入门
1 安装requests库 如果你还没有安装requests库,可以通过pip安装: pip install requests 2 GET请求 GET请求通常用于从服务器请求数据。使用requests.get()函数可以发送GET请求。 2.1 基本使用 import requests url https://api.example.com/da…...

企业高性能web服务器——Nginx
# 企业高性能web服务器 1、Nginx 编译安装 1.1 编译安装 Nginx 这里下载nginx-1.24.0.tar.gz和nginx-1.26.1.tar.gz可以在官方网站上下载:https://nginx.org/en/download.html 示例:nginx-1.24.0.tar.gz #提前将编译安装出现问题的安装包下载好&…...
FreeSWITCH Java ESL Client Demo
1简介 在开启Java ESL Client编程之前,请先阅读《FreeSWITCH权威指南》学习什么是FreeSWITCH Event Socket。 Java连接FreeSWITCH的ESL可以采用两种模式:inbound和outbound。 Inbound模式:Java应用作为客户端主动连接到FreeSWITCH的内置TCP…...

手摸手系列之Linux下根据自己的jdk包构建docker镜像
项目在本地导出PDF文件正常,部署到Linux服务器docker容器中导出就报错,百撕不得姐,经查,docker依赖的openjdk版本是8u112版本,而我本地是8u421版本,那就升级jdk的小版本试试。 在docker的中央仓库[点我直达…...

tomcat相关
一、部署安装tomcat 在10和20上安装tomcat [root10 ~]# dnf install java-1.8.0-openjdk.x86_64 -y #安装java环境 [root10 ~]# tar zxf apache-tomcat-9.0.93.tar.gz -C /usr/local/ #安装并启动tomcat [root10 ~]# ln -s /usr/local/apache-tomcat-9.0.93/ /usr/local/tomcat…...

20240821给飞凌OK3588-C的核心板刷Rockchip原厂的Buildroot并启动
20240821给飞凌OK3588-C的核心板刷Rockchip原厂的Buildroot并启动 2024/8/21 15:22 viewproviewpro-ThinkBook-16-G5-IRH:~/repo_RK3588_Buildroot20240508$ viewproviewpro-ThinkBook-16-G5-IRH:~/repo_RK3588_Buildroot20240508$ ./build.sh lunch 3. rockchip_rk3588_evb7_…...
服务优雅上下线优雅停机
一、目的 服务发生线程锁住,需要下线服务时,保证请求中的接口不受影响,执行完后,再下线服务 二、步骤 *kill -15时执行改钩子函数 优雅停机 1.当线程锁住 2.运维那边监控到,然后进行kill -15 进程ID 3.代码这边监…...

什么是生信分析?深入探讨生物信息学的技术、方法与广泛应用
介绍 生物信息学分析,简称生信分析,是一个结合了生物学、计算机科学、信息学和统计学的多学科领域,旨在处理、分析和解释海量的生物数据。随着现代生物技术的发展,尤其是高通量测序(Next-Generation Sequencing, NGS&…...
JavaScript判断数组是否包含某个值
目录: 1.for循环/while循环2.数组的some方法3.数组的filter方法4.array.indexOf5.array.findIndex6.array.includes7.array.find8.set中的has方法 1.for循环/while循环 for循环: function contains(arr, val) {for (var i 0; i < arr.length; i) {if (arr[i] …...
C# - 如何在Windows系统中通过C#添加新的PATH条目至系统和用户环境变量
编写系统环境变量-->系统变量-->path-->添加新的列 01:直接写 using Microsoft.Win32; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace updatesystempath01 {class Program{stati…...

Unity | Shader基础知识(第二十二集:两次渲染)
目录 一、前言 二、“渲染两次” 三、本次成品介绍 四、第一次渲染代码 五、第二次渲染代码 六、截止目前的所有代码 七、调整代码 八、总结 一、前言 之前一直讲的shader文件中,都只写了一次CG代码。 为了大家对这部分的整体理解,我们这次渲…...

鸿蒙Harmony实战开发:Arkts构造函数
构造函数 类声明可以包含用于初始化对象状态的构造函数。 构造函数定义如下: constructor ([parameters]) {// ... } typescript 如果未定义构造函数,则会自动创建具有空参数列表的默认构造函数,例如: class Point {x: numbe…...
@vueuse/core使用useColorMode实现主题颜色切换
useColorMode 是一个在前端开发中常用的自定义钩子(Hook),尤其在需要支持深色模式和浅色模式切换的场景下。这个钩子可以根据用户的选择或系统设置动态调整页面样式。 一、安装和引入 npm install vueuse/core # 或者 yarn add vueuse/…...

生信分析入门:从基础知识到实践操作的全方位指南
随着生物学研究的数字化转型,生物信息学(简称生信)分析已经成为现代生命科学研究中的关键工具。对于刚开始接触生信分析的初学者来说,这个领域可能看起来复杂而陌生。然而,通过系统的学习和实践,生信分析可…...
【STM32 FreeRTOS】内存管理
除了FreeRTOS提供的动态内存管理方法,标准的C库也提供了函数malloc()和函数free()来实现动态的申请和释放内存。 为啥不用标准的C库自带的内存管理算法?因为标准C库的动态管理方法有如下缺点: 占用大量的代码空间,不适合用在资源…...

(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...

2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...