网站集群批量管理-Ansible(playbook)

news2024/10/10 7:28:03

1.剧本概述

1. playbook 文件,用于长久保存并且实现批量管理,维护,部署的文件. 类似于脚本存放命令和变量

2. 剧本yaml格式,yaml格式的文件:空格,冒号

2. 区别

ans-playbookans  ad-hoc
共同点批量管理,使用模块批量管理,使用模块
区别重复调用不是很方便,不容易重复
场景部署服务,多个步骤的任务测试使用

3. 剧本书写格式

##书写剧本
---
- hosts: all
  tasks:
   - name: 这是第1个
     shell: echo '1' >/tmp/xzb66.txt
   - name: 这是第2个
     shell: echo '2'>/tmp/xzb66.txt
   - name: 这是第3个
     shell: echo '3'>/tmp/xzb66.txt
##执行剧本 -i 指定你的/etc/ansible/hosts的文件地址
ansible-playbook -i hosts 01-playbook-yml 

执行的时候有奶牛:

可以删除软件或修改ansible.cfg配置进行关闭 #nocows = 1 去掉注释即可 

书写Ans playbook注意事项:

1. 同一个层级的内容对齐的 

2. 不同层级的通过2个空格对齐

3. 不能使用tab键

3.剧本案例 

案例01: 创建目录并分发文件

##1. 创建目录/server/files/
##2. /etc/hosts文件发送过去/server/files/
---
- hosts: all
  tasks:
   - name: 01创建目录
     file:
      path: /server/file/
      state: directory
   - name: 02创建文件
     copy:
      src: /etc/hosts
      dest: /server/file/
##3. 执行剧本,查看结果
ansible-playbook -i hosts 02-playbook.yml

案例02: 分发软件包,安装软件包,启动服务 

- hosts: all
  tasks:
    - name: 01 下载软件包
      get_url:
        url: https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/6.0/rhel/7/x86_64/zabbix-agent2-6.0.7-1.el7.x86_64.rpm
        validate_certs: no
        dest: /tmp/

    - name: 02 安装软件包
      yum:
        name: /tmp/zabbix-agent2-6.0.7-1.el7.x86_64.rpm
        state: present

    - name: 03 配置
      debug:
        msg: "进行配置zabbix-agent"

    - name: 04 开机自启
      systemd:
        name: zabbix-agent2
        enabled: yes
        state: started
##运行剧本
ansible-playbook -i hosts 03-playbook.yml 
##查看结果
ansible all -i hosts -m shell -a 'ps -ef|grep zabbix'

案例03: 部署NFS服务

##nfs服务端:在backup上部署nfs服务,共享/backup-nfs目录,all_squash,匿名用户:nfsnobody 
##nfs客户端:web挂载 /ans-upload目录挂载nfs服务端共享的/backup-nfs(永久挂载)
- hosts: backup
  tasks:
    - name: 01 在backup上部署nfs,rpcbind服务端
      yum:
        name: nfs-utils,rpcbind
        state: present
    - name: 02 修改配置文件 
      lineinfile: 
        path: /etc/exports
        line: "backup-nfs 172.16.1.0/24(rw,all_squash)"
        create: true
    - name: 03 创建共享目录并修改所有者
      file:
        path: backup-nfs
        owner: nfsnobody
        group: nfsnobody
        state: directory
    - name: 04-1 启动服务(注意顺序)
      systemd:
        name: rpcbind
        enabled: yes
        state: started
    - name: 04-02 启动服务
      systemd:
         name: nfs
         enabled: yes
         state: started

- hosts: nfs
  tasks:
    - name: 01 部署nfs-utils
      yum:
        name: nfs-utils
        state: present
    - name: 02 挂载
      mount:
        src: 172.16.1.41:/backup-nfs
        path: /ans-upload
        fstype: nfs
        state: mounted
##运行剧本,查看结果
ansible-playbook -i hosts 05-playbook-yml
##查看
ansible nfs -i hosts -a 'df -h'

 4. Ansible中的变量

1. 变量无处不在,在ans中大部分地方都可以定义变量

2. 比较常用的创建变量的地方:剧本中,类似于命令行 ` `(反引号)的 功能,共用的变量文件.

可以定义变量的地方说明
在剧本文件中定义比较常用. 仅仅限于当前的play使用
register变量(注册变量)

ip=`hostname -I`

实现脚本中反引号的功能,可以获取命令结果

变量文件(根据主机清单分分组进行定义变量)如果多个剧本,使用相同的变量,大型的剧本roles
inventory主机清单中定义变量未来可以用于批量修改主机使用,其他很少用了
facts变量

一般用于获取主机基本信息:ip,主机名,系统 (centos/ubuntu)

如果不需要可以关闭,用于加速剧本的执行

 4.1 剧本中使用变量

批量创建/oldboy/xzb/upload/
- hosts: all
  vars:
    dir: /oldboy/xzb996/upload/
  tasks:
    - name: 创建目录
      file:
        path: "{{dir}}"
        state: directory
##运行剧本,查看结果
ansible-playbook -i hosts 05-vars-yml

提示:

1. 使用变量的时候如果变量是某个选项的开头,则变量引用的时候需要加上双引号 

2. 在剧本play中定义变量应用:仅仅在当前play生效,一般用来存放路径,用户名,ip地址,类似于之前使用的脚本,注意引号使用

dir: /oldboy/xzb/upload/
file:
  path: "{{ dir }}"#这种要添加,变量是开头.
file:
  path: /oldboy-new/{{ dir }}  #这种可以不加引号,变量不是开头.

 4.2 共用变量-变量文件

##创建变量文件
dir: /tmp/
file: xzb.txt
user: xzb996
##创建剧本
- hosts: all
  vars_files: ./vars.yml  ##也可以写变量文件的绝对路径
  tasks:
    - name: 变量文件
      file:
        path: "{{dir}}/{{user}}-{{file}}"
        state: touch

##运行剧本,查看结果
ansible-playbook -i hosts 06-vars.yml

4.3 共用变量-根据主机组使用变量 

group_vars/

     lb/vars.yml  #存放lb组的变量

     web/vars.yml #存放web组的变量

     data/vars.yml #存放xxx组的变量

     all/vars.yml  #所有主机共用的变量

未来一般使用all分组即可,把所有变量存放在一起,供剧本使用

##在剧本的统计目录下创建group_vars/all/vars.yml
[root@ansible_xing /server/scripts/playbook]# mkdir -p /group_vars/all/
vim vars.yml
user: www
nfs_dir: /nfs_backup
web_mount_dir: /web_nfs
nfs_server: 172.16.1.41
rsync_pass: 1
##创建剧本
[root@ansible_xing /server/scripts/playbook]# vim 07-group-vars.yml
- hosts: all
  tasks:
   - name: 测试group变量
     debug:
       msg: "变量内容 {{user}} {{rsync_pass}}"

- hosts: backup
  tasks:
   - name: 测试web组是否被识别到
     debug:
        msg: "web组识别的变量内容为{{user}} {{rsync_pass}}"
##运行剧本
ansible-playbook -i hosts 07-group-vars.yml 

4.4 register变量注册变量

1. 本质上就是用来实现脚本中的反引号功能. ip=`hostname -I`

2. 用户通过命令获取的内容都存放到Register变量中

- hosts: all
  tasks:
   - name: get data
     shell: date +%F
     register: result

   - name: print result 变量内容
     debug: 
       msg: "register变量的全部内容是{{result.stdout}}"
##运行脚本查看结果
ansible-playbook -i hosts 08-reg-vars.yml 

4.5 facts变量

1. 运行剧本的时候ans会收集每个主机的基本信息,这些信息形成的变量叫做facts变量.

2. facts变量setup模块获取,可以通过ansible -i hosts nfs  -m setup查看.

##常用fact变量
ansible_hostname               #主机名 
ansible_memtotal_mb            #内存大小(总计) 单位mb 
ansible_processor_vcpus        #cpu数量 
ansible_default_ipv4.address   #默认的网卡ip eth0
ansible_distribution           #系统发行版本名字
- hosts: all
  tasks:
    - name: 显示系统信息
      debug:
        msg: |
           你的系统是:{{ansible_hostname}}
           内存大小:{{ansible_memtotal_mb}}
           cpu数量:{{ansible_processor_vcpus }}
           默认网卡ip:{{ansible_default_ipv4.address}}
           系统发行版本:{{ansible_distribution}}
##运行脚本,查看结果
ansible-playbook -i hosts  09-facts.yml

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

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

相关文章

视频流媒体解决方案,Liveweb国标GB28181视频监控汇聚平台

Liveweb视频监控国标平台指的是基于GB/T 28181协议的视频联网平台,可以对接各种符合国标GB/T 28181协议的视频平台、NVR录像机、网络监控摄像头、执法记录仪、应急布控球、移动单兵、无人机等设备。通过国标平台的联网,方便管理分布在不同地点的视频监控…

股指期货和股指期权有什么区别?

在金融衍生品的世界里,股权类衍生品无疑是其中的佼佼者,而股指期货和股指期权更是其中的佼佼者。尽管它们之间有着千丝万缕的联系,但它们之间的区别同样不容忽视。本文衍生股指君将详细解析股指期货和股指期权的核心区别。 一、交易的东西不…

【安装JDK和Android SDK】

安装JDK和Android SDK 1 前言2 下载2.1 下载途径2.2 JDK下载和安装2.2.1 下载2.2.2 安装并配置环境变量2.2.3 验证 2.3 SDK下载和安装2.3.1 下载2.3.2 安装2.3.3 环境变量配置2.3.4 验证 1 前言 在软件开发中,Android应用开发通常使用Android Studio,但…

进程守护化

文章目录 概念引入ps细节展示什么是进程组什么是会话细节演示有关指令的处理 用户级任务和进程组的关系关系不同 什么是守护进程如何创建守护进程 代码说明如何关闭守护进程 问题 概念引入 我们在之前的章节中已将看过进程相关的概念, 本篇介绍守护进程 进程还有进程组, 作业,…

Vue脚手架项目创建 --保姆级教程

Vue-项目创建 这里我默认已经安装好了脚手架,没装得可以看我上篇博客的安装教程。脚手架安装教程 脚手架提供了两种创建方式,我们以 vue ui 作为示例…… 1.输入 vue ui 进入图形界面进行项目配置 选择 一个你 的项目的存放路径,各自都不相…

[算法] 数组

1 二分查找 . - 力扣(LeetCode). - 备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/binary-search/submissions/570732311/ 前闭后闭 class …

Word 中脚注和尾注的区别有哪些?如何正确使用它们?

在撰写学术论文、报告或其他需要引用资料的文章时,脚注和尾注是两种常用的标注方法。它们不仅可以为读者提供额外的背景信息,还能帮助整理文章中的引用来源。下面我们就来详细的了解一下什么是脚注和尾注。 脚注 脚注(Footnote)…

大学离散数学:开启逻辑与思维的奇妙之旅

在大学的知识殿堂中,离散数学犹如一颗璀璨的明珠,散发着独特的魅力。 离散数学是现代数学的一个重要分支,它主要研究离散对象的结构及其相互关系。与连续数学不同,离散数学处理的是离散的、可数的对象,如整数、图、集…

Kubernetes简介与部署+Pod管理与优化

一、简介 1.基础信息 在Docker 作为高级容器引擎快速发展的同时,在Google内部,容器技术已经应用了很多年Borg系统运行管理着成干上万的容器应用。Kubernetes项目来源于Borg,可以说是集结了Borg设计思想的精华,并且吸收了Borg系统…

动态线程池设计与实现

为什么要有动态线程池 ThreadPoolExecutor 核心线程参数对某些业务不知到设置多少合适调整参数需要重新启动服务没有告警功能 设计思路 流程设计 库表抽象 更新操作流程图 代码实现 GitCode - 全球开发者的开源社区,开源代码托管平台

C++ 内部类

个人主页:Jason_from_China-CSDN博客 所属栏目:C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目:C知识点的补充_Jason_from_China的博客-CSDN博客 概念概述 如果一个类定义在另一个类的内部,这个内部类就叫做内部类。内部类…

(02)python-opencv图像处理——更改颜色空间HSV

前言 1、更改颜色空间 1.1BGR 到 Gray 的示例 1.2 BGR 到 HSV 的示例: ​编辑 1.3 通过HSV进行颜色追踪 1.3.1hsv cv.cvtColor(frame, cv.COLOR_BGR2HSV) 1.3.2 BGR vs HSV: 1.3.3 为什么使用 HSV 颜色空间? 1.3.4 cv.inRange(hsv…

oracle-函数-instr()的妙用以及相似功能like

INSTR(C1,C2[,I[,J]]) 【功能】在一个字符串中搜索指定的字符,返回发现指定的字符的位置; 【说明】多字节符(汉字、全角符等),按1个字符计算 【参数】 C1 被搜索的字符串 C2 希望搜索的字符串 I 搜索的开始位置,默认为1 J 第J次出现的位置,默认为1 【…

安全帽未佩戴预警系统 劳保防护用品穿戴监测系统 YOLO

在建筑、矿山、电力等高危行业中,工人面临着各种潜在的危险,如高空坠物、物体打击等。安全帽能够有效地分散和吸收冲击力,大大降低头部受伤的严重程度。一旦工人未正确佩戴安全帽,在遭遇危险时,头部将直接暴露在危险之…

Linux网络编程 -- 网络套接字预备与udp

本文主要介绍网络编程的相关知识,在正式介绍网络编程之前,我们得先了解一些前置的知识。 1、端口号 我们上网其实就是两种动作,一个是将远处的数据拉取到本地,另一个是把我们的数据发送给远端。其实大部分的网络通信行为都是用户…

基于springboot vue3 工商局商家管理系统设计与实现

博主介绍:专注于Java(springboot ssm springcloud等开发框架) vue .net php phython node.js uniapp小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆…

【公共祖先】二叉树专题

里面涉及多个plus题 前言1.二叉树的最近公共祖先2.二叉搜索树的最近公共祖先3.二叉树的最近公共祖先II4.二叉树的最近公共祖先III5.二叉树的最近公共祖先IV 前言 公共祖先这一类题目,难度不大,但是非常实用,也是面试问到概率比较大的一类题目…

夜间数据库IO负载飙升?MySQL批量删除操作引发的问题排查

目录 问题现象 问题分析 修改建议 总结 问题现象 近日,某用户反馈他们的MySQL数据库实例在凌晨时段会频繁出现IO负载急剧上升的情况,这种状态会持续一段时间,随后自行恢复正常。为了查明原因,该用户通过DBdoctor工具收集了相…

DLL中函数导出时的注意事项

1.使用.def文件导出函数 1.1示例代码:使用stdcall 关键字 和 extern "C" 关键字修饰 dll中函数 BOOL APIENTRY DllMain( HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) {switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:case DLL_THREAD_ATT…

sahi密集检测的推理技巧

最近在做一些计数的项目,样本中存在一些非常密集的目标,如果混杂一起训练指标很难达到要求,所以考虑在训练时不加入密集目标,训练使用正常的样本,在推理时使用密集检测方案。 在高分辨率图像中检测小目标一直是一个技…