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库的动态管理方法有如下缺点: 占用大量的代码空间,不适合用在资源…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
