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
英文地址,請注明出處:http://en.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;是一種結合機器學習與傳統計量經濟學的因果推斷框架。其核心目標是在高維數據和非…