Linux之Ansible自动化运维(二)

一、ansible Playbook应用

由于服务器数量很多,配置信息比较多,因此可以利用Ansible Playbook编写任务自动化与流程化脚本

Playbook 由一个或多个play组成的列表,play的主要功能Ansible中Task定义好的角色,指定剧本对应的服务器组

二、Ansible实战演练

  • yaml语法特点

Ansible Playbook可以收集命令、可以创建多个任务集,Playbook采用YAML语法结构

YAML语言特性:可读性强、脚本语言交互性好、实现语言的数据类型、信息模型、易于实现,可扩展性强

ansible-playbook组件

Target 						定义playbook的远程主机组;
Variable 					    定义playbook使用的变量;
Task  						定义远程主机上执行的任务列表;
Handler 					    定义task执行完成以后需要调用的任务,例如配置文件被改动,则启动handler任务重启相关联的服务。

ansible批量创建用户

- hosts: allremote_user: roottasks:- name: create useruser: name={{item}} state=presentwith_items:- halo1- halo2- halo3- halo4

nginx之v1版本中play-book剧本

使用了taget模块、task模块构建

## 创建剧本文件
touch install_nginx.yaml ## 编写剧本
#!/bin/bash
#2025年8月20日10:14:06
# auto install nginx web
# by author www.hxd666.com
- hosts: 192.168.101.7remote_user: roottasks:- name: download_nginxshell: wget -c http://nginx.org//download/nginx-1.26.1.tar.gz -P /usr/src/- name: extract nginx softwareshell: cd /usr/src/;tar -xzf nginx.1.26.1.tar.gz- name: install gcc and pcre-develyum: name=gcc,pcre-devel,zlib-devel state=install- name: install nginxshell: cd /usr/src/nginx.1.26.1/;./confirgure;make;make install- name: start nginxshell: /usr/local/nginx/sbin/nginx## 启动剧本
[root@localhost ~]# ansible-playbook install_nginx.yaml 

nginx之v2版本中play-book剧本

优化了版本v1模块,如涉及到了版本handler模块处理,判断了是否已经安装nginx模块

notify模块前写执行条件,后面写执行哪些模块,并指明顺序,而handler模块后面写task模块任务板块内容

- hosts: 192.168.101.7remote_user: roottasks:- name: nginx server installfile: path=/usr/local/nginx state=directorynotify:- download_nginx- extract nginx- install tools- install_nginx- start nginxhandlers:- name: download_nginxshell: wget "http://nginx.org/download/nginx-1.26.1.tar.gz" -P /usr/src- name: extract nginxshell: cd /usr/src;tar -zxf nginx-1.26.1.tar.gz- name: install toolsyum: name=pcre,pcre-devel,zlib-devel state=installed- name: install_nginxshell: cd /usr/src/nginx-1.26.1; ./configure;make;make install- name: start nginxshell: /usr/local/nginx/sbin/nginx

nginx之v3版本中play-book剧本

引入变量简化书写,易于观察(vars模块)

- hosts: allremote_user: rootvars:NGX_SOFT: nginx-1.26.1.tar.gzNGX_DIR: /usr/local/nginxtasks:- name: install nginx_toolsyum: name=gcc,pcre-devel,zlib-devel- name: check nginxfile: path={{ NGX_DIR }} state=directorynotify:- download nginx- extract nginx- install nginx- start nginxhandlers:- name: download nginxshell: wget http://nginx.org/download/{{ NGX_SOFT }} -P /usr/src- name: extract nginxshell: cd /usr/src;tar -zxf {{ NGX_SOFT }};- name: install nginxshell: cd /usr/src/nginx-1.26.1;./configure; make; make install;- name: start nginxshell: "{{ NGX_DIR }}/sbin/nginx"

nginx之v4版本中play-book剧本

自定义template.yaml模块,根据设置ansible主机端口管理远程机器

## 根据远程的ansible设置端口
[nginx]
192.168.101.5 httpd_port=80
[web]
192.168.101.6 httpd_port=81
192.168.101.7 httpd_port=82## 设置模版nginx文件,修改模版配置文件中的内容
listen {{httpd_port}}## 在ansible添加templete模块进行远程控制
template: src=/data/sh/nginx.bak dest=/usr/local/nginx/conf/nginx.conf

三、ansible配置文件和优化

ansible默认的配置文件为/etc/ansible/ansible.cfg,那么咱们下面来详细聊聊ansible各项参数,包括用户、模块路径、配置优化等

  • ansible配置文件

下面来看一下defaults默认配置端常见参数

[defaults]                                             通用默认配置段;

inventory      = /etc/ansible/hosts             被控端IP或者DNS列表;

library        = /usr/share/my_modules/       Ansible默认搜寻模块的位置;

host_key_checking = False                      不检查远程主机的公钥和密钥

#sudo_exe = sudo                                   sudo远程执行命令;

#sudo_flags = -H                                   传递sudo之外的参数;

timeout = 10                                          SSH超时时间;

remote_user = root                                  远程登陆用户名;

log_path = /var/log/ansible.log               日志文件存放路径;

module_name = shell                              Ansible命令执行默认的模块;

#executable = /bin/bash                           执行的Shell环境,用户Shell模块;

#system_warnings = False                         禁用系统运行ansible潜在问题警告;

#command_warnings = False                        command模块Ansible默认发出警告;

nocolor = 0                                         输出带上颜色区别,开启/关闭:0/1;

pipelining = True                                   开启pipe SSH通道优化;

ansible性能优化

ansible在企业环境中,随着被管理 的服务器越来越多,ansible的执行效率会越来越慢,可以通过优化openssh协议提高,提高后台管理的效率

Anisble SSH关闭密钥检测

ssh 远程登录客户端,会检查客户端主机的公钥,并将公钥的情况记录在~/.ssh/know_hosts文件中,若openssh公钥不同,openssh会发出警告,而当openssh 公钥相同,则会提示输出密码

## 关闭ssh检查
host_key_checking = False

OpenSSH连接优化

使用OpenSSH服务时,默认SShd配置文件UseDNS=yes状态,该选项会导致SSH服务根据客户端的IP进行DNS PTR反向解析,得到客户端主机名,然后将根据取到的主机名进行正向DNS解析,从而验证该IP是否与原始IP一致。

sed  -i  '/^GSSAPI/s/yes/no/g;/UseDNS/d;/Protocol/aUseDNS no' 
/etc/ssh/sshd_config
/etc/init.d/sshd restart

SSH pipelineing加速Ansible

SSH pipelining默认是关闭的,关闭是为了兼容不同sudo问题,主要是requiretty选项(使用sudo操作必须将其禁止)

sed    -i    '/^pipelining/s/False/True/g'    /etc/ansible/ansible.cfg

Ansible Facts缓存优化

Ansible-playbook在执行过程中,默认会执行Gather facts,如果不需要获取fact基础数据(客户端IP、掩码、Mac、主机名信息),关闭之后可以加快ansible-play-book效率

gather_facts: no

Facts信息可以作为Ansible Play-book变量信息进行引用,当然可以的话我们也可以考虑使用Redis存放Facts信息

  • 安装Redis和Python-Redis服务中间价
## 1.部署Redis服务
wget  	http://download.redis.io/releases/redis-2.8.13.tar.gz tar  -zxf redis-2.8.13.tar.gzcd redis-2.8.13make PREFIX=/usr/local/redis  installcp redis.conf /usr/local/redis/export PATH=/usr/local/redis/bin:$PATH
source /etc/profile## 启动
nohup /usr/local/redis/bin/redis-server  /usr/local/redis/redis.conf  &## 2.安装Python-Redis模块
yum -y install python-redis
  • Ansible整合Redis配置

在ansible.cfg的defaults段加如下代码,如果admin有密码,则开启admin密码行

gathering = smart
fact_caching = redis
fact_caching_timeout = 86400
fact_caching_connection = localhost:6379
#fact_caching_connection = localhost:6379:0:admin

ControlPersist SSH优化(要求centos6以上高版本ssh)

ControlPersist即持久化Socket,即一次验证多次通信,并且只需要修改ssh客户端配置即可

ansible以root身份登录客户端,在机器的/root/.ssh/config(低版本用yum升级openssh)文件中加入如下代码

Host *     ## 表示适用于所有主机Compression yes    ## SSH连接压缩数据流ServerAliveInterval 60    ## 客户端发送心跳包时间ServerAliveCountMax 5     ## 客户端发送心跳包间隔时间ControlMaster auto        ## 启用连接复用,减少断开次数ControlPath ~/.ssh/%r@%h-%p    ## 开启复用的文件路径ControlPersist 4h           ## 复用的持续时间

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

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

相关文章

ArrayList线程不安全问题及解决方案详解

问题背景在多线程编程中&#xff0c;我们经常会遇到集合类的线程安全问题。Java中的ArrayList是一个常用的集合类&#xff0c;但它不是线程安全的。当多个线程同时操作同一个ArrayList实例时&#xff0c;可能会出现各种不可预料的问题。问题演示List<String> list new A…

车辆方向数据集 - 物体检测

关于数据集 包含超过50,000 张图像中具有方向的车辆的 50,000 多万个注释。它通过同时提供车辆类别和方向来减少对方向进行分类的辅助神经网络的需求。 预训练权重 我们将继续添加在车辆方向数据集和合成车辆方向数据集上训练的各种对象检测模型。如果您需要一些特定的预训练权…

Nextcloud搭建教程:使用Docker在腾讯云服务器上自建私人云盘

更多云服务器知识&#xff0c;尽在hostol.com你那百兆光纤的宽带。你是否也曾看着自己最珍贵的家庭照片、最私密的个人文档&#xff0c;静静地躺在某个科技巨头的服务器上&#xff0c;感到过一丝丝的不安&#xff1f;你的数据&#xff0c;到底被如何“阅读”和“分析”&#xf…

【操作记录】MNN Chat Android App 构建笔记(二)

&#x1f4d2; MNN Chat Android App 构建笔记 一、背景知识MNN 简介 MNN 是阿里开源的轻量级深度学习框架&#xff0c;支持 Android / iOS / Linux / Windows。提供推理、LLM、Vision、Audio 等模块。Android App 里用到的是 Java JNI 调用 MNN 库。CMake NDK 的作用 CMake&…

如何在 Axios 中处理多个 baseURL 而不造成混乱

网罗开发&#xff08;小红书、快手、视频号同名&#xff09;大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等方…

AP服务发现PRS_SOMEIPSD_00255 的解析

[PRS_SOMEIPSD_00255 ] 「SOME/IP-SD头部的重启标志&#xff0c;对于重启后发出的所有报文&#xff0c;都应设置为 1&#xff0c;直至 SOME/IP头部中的会话 ID (Session-ID) 回绕并因此再次从 1 开始。在此回绕之后&#xff0c;重启标志应设置为 0。」(RS_SOMEIPSD_00006)核心含…

纯手撸一个RAG

纯手撸一个RAGRAG基本流程第一阶段&#xff1a;数据预处理&#xff08;索引&#xff09; - 构建知识库第二阶段&#xff1a;查询与生成&#xff08;推理&#xff09; - 回答问题总结Chunk介绍Chunk框架的介绍Chunk核心概念选择分块策略和框架如何选择分块框架Python代码实现第一…

视觉语言对比学习的发展史:从CLIP、BLIP、BLIP2、InstructBLIP(含MiniGPT4的详解)

前言 本文一开始是属于此文《图像生成(AI绘画)的发展史&#xff1a;从CLIP、BLIP、InstructBLIP到DALLE、DALLE 2、DALLE 3、Stable Diffusion(含ControlNet详解)》的&#xff0c;后独立成本文 第一部分 从CLIP、BLIP1、BLIP2到InstructBLIP 1.1 CLIP&#xff1a;基于对比文本…

HTTP代理与SOCKS代理的区别、应用场景与选择指南

在互联网日常使用与跨境业务中&#xff0c;HTTP代理 和 SOCKS代理 是两种常见的网络代理方式。无论是跨境电商、社交媒体账号运营、数据采集&#xff0c;还是科学访问海外资源&#xff0c;都需要选择合适的代理协议。什么是HTTP代理&#xff1f;定义HTTP代理 是基于 HTTP协议 的…

AI重塑职业教育:个性化学习计划提效率、VR实操模拟强技能,对接就业新路径

职业教育长期面临着一系列问题&#xff0c;包括“统一课程难以适配不同基础学员”、“实操反馈滞后”和“就业技能与企业需求脱节”等。随着人工智能技术的应用&#xff0c;这些传统教学模式正在发生变化。个性化技能培养得以实现&#xff0c;甚至可以提前识别学员的就业短板。…

主题配色下的背景透明度

用 CSS color-mix() 解决背景透明度的痛点 在设计卡片组件时&#xff0c;经常遇到这样的需求&#xff1a;卡片背景需要80%透明度&#xff0c;鼠标悬浮在内部某项时&#xff0c;修改背景色但保持同样的透明度。 问题场景 .card {background: rgba(59, 130, 246, 0.8); /* 蓝色80…

【Python代码】谷歌专利CSV处理函数

以下是一个重构后的高可用、可配置、低耦合的专利CSV处理函数&#xff0c;包含清晰的注释和结构&#xff1a; import csv import pandas as pd from datetime import datetime import os from typing import List, Dict, Any, Optional, Tuple import logging# 配置日志 loggin…

3-2〔OSCP ◈ 研记〕❘ WEB应用攻击▸WEB安全防护体系

郑重声明&#xff1a; 本文所有安全知识与技术&#xff0c;仅用于探讨、研究及学习&#xff0c;严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任&#xff0c;本人不承担任何责任。 如需转载&#xff0c;请注明出处且不得用于商业盈利。 …

PCIe 5.0相比顶级PCIe 4.0有何提升?

还在为PCIe 4.0固态硬盘那7000MB/s的速度沾沾自喜&#xff1f;醒醒&#xff0c;朋友。当很多人还在讨论PCIe 4.0是否“性能过剩”时&#xff0c;真正面向未来的PCIe 5.0已经带着碾压级的实力&#xff0c;来到了我们面前。这不是一次常规的“升级”&#xff0c;更不是英特尔式的…

23种设计模式——适配器模式(Adapter)​详解

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。 &#x1f34e;个人主页&#xff1a;Meteors.的博客 &#x1f49e;当前专栏&#xff1a; 设计模式 ✨特色专栏&#xff1a; 知识分享 &…

Vue3源码reactivity响应式篇之Reactive

概览 vue3中reactive用于将普通对象转换为响应式对象&#xff0c;它的实现原理是通过Proxy和Reflect来实现的。具体的实现文件参见packages\reactivity\src\reactive.ts。本文会介绍reactive的相关api如下&#xff1a; reactive&#xff1a;将普通对象转换为响应式对象readonly…

初识数据结构——Map和Set:哈希表与二叉搜索树的魔法对决

数据结构专栏 ⬅(click) 大家好&#xff01;我是你们的老朋友——想不明白的过度思考者&#xff01;今天我们要一起探索Java中两个神奇的数据结构&#xff1a;Map和Set&#xff01;准备好了吗&#xff1f;让我们开始这场魔法之旅吧&#xff01;&#x1f3a9; &#x1f3af; 先…

Unreal Engine UStaticMeshComponent

UnrealUnreal Engine - UStaticMeshComponent&#x1f3db; 定义&#x1f3db; 类继承⚡ 关键特性⚙️ 常见配置&#x1f6e0;️ 使用方法&#x1f4da; 在 C 中使用&#x1f4da; 在蓝图中使用&#x1f3ae; 典型应用场景&#x1f4da; 常见子类与用途&#x1f4dd; 小结Unrea…

demo 汽车之家(渲染-筛选-排序-模块抽离数据)

效果图展示&#xff1a;代码截图注释详情实现笔记总体目标&#xff08;按需求点对照代码&#xff09;数据模块化、整体渲染框架、筛选/排序的高亮与行为&#xff0c;全部已在 Index.ets CarData.ets 落地。下面按图片需求 2~4 点逐条总结&#xff0c;并给出关键代码定位与“为…

双重机器学习DML介绍

本文参考&#xff1a; [1]文心一言回答&#xff1b; 一、核心原理与数学框架 双重机器学习&#xff08;Double Machine Learning, DML&#xff09;由Chernozhukov等学者于2018年提出&#xff0c;是一种结合机器学习与传统计量经济学的因果推断框架。其核心目标是在高维数据和非…