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

1.剧本概述

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

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

2. 区别

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

3. 剧本书写格式

##书写剧本
---
- hosts: alltasks:- 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: alltasks:- name: 01创建目录file:path: /server/file/state: directory- name: 02创建文件copy:src: /etc/hostsdest: /server/file/
##3. 执行剧本,查看结果
ansible-playbook -i hosts 02-playbook.yml

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

- hosts: alltasks:- 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.rpmvalidate_certs: nodest: /tmp/- name: 02 安装软件包yum:name: /tmp/zabbix-agent2-6.0.7-1.el7.x86_64.rpmstate: present- name: 03 配置debug:msg: "进行配置zabbix-agent"- name: 04 开机自启systemd:name: zabbix-agent2enabled: yesstate: 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: backuptasks:- name: 01 在backup上部署nfs,rpcbind服务端yum:name: nfs-utils,rpcbindstate: present- name: 02 修改配置文件 lineinfile: path: /etc/exportsline: "backup-nfs 172.16.1.0/24(rw,all_squash)"create: true- name: 03 创建共享目录并修改所有者file:path: backup-nfsowner: nfsnobodygroup: nfsnobodystate: directory- name: 04-1 启动服务(注意顺序)systemd:name: rpcbindenabled: yesstate: started- name: 04-02 启动服务systemd:name: nfsenabled: yesstate: started- hosts: nfstasks:- name: 01 部署nfs-utilsyum:name: nfs-utilsstate: present- name: 02 挂载mount:src: 172.16.1.41:/backup-nfspath: /ans-uploadfstype: nfsstate: 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: allvars: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: allvars_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: alltasks:- name: 测试group变量debug:msg: "变量内容 {{user}} {{rsync_pass}}"- hosts: backuptasks:- 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: alltasks:- name: get datashell: date +%Fregister: 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: alltasks:- 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.rhkb.cn/news/443434.html

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

相关文章

LeetCode讲解篇之377. 组合总和 Ⅳ

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 总和为target的元素组合个数 可以由 总和为target - nums[j]的元素组合个数 转换而来,其中j为nums所有元素的下标 而总和target - nums[j]的元素组合个数 可以由 总和为target - nums[j] - nums[k]的…

物联网:一种有能力重塑世界的技术

物联网(IoT)近年来对我们的日常生活产生了如此积极的影响,以至于即使是不懂技术的人也开始相信它所带来的便利以及敏锐的洞察力。 物联网是一场数字技术革命,其意义甚至比工业革命更为重大。物联网是仍处于起步阶段的第四次工业革…

【数据结构】栈和队列 + 经典算法题

目录 前言 一、栈 二、栈的实现 三、栈的循环遍历演示 四、栈的算法题 // 一、队列 二、队列的实现 三、使用演示 四、队列的算法题 总结 前言 本文完整实现了栈和队列的数据结构,以及栈和队列的一些经典算法题,让我们更加清楚了解这两种数据…

(Django)初步使用

前言 Django 是一个功能强大、架构良好、安全可靠的 Python Web 框架,适用于各种规模的项目开发。它的高效开发、数据库支持、安全性、良好的架构设计以及活跃的社区和丰富的文档,使得它成为众多开发者的首选框架。 目录 安装 应用场景 良好的架构设计…

关于AOT、JIT编译模式以及基于静态编译构建微服务应用

JDK 9 引入了一种新的编译模式 AOT(Ahead of Time Compilation) 。和 JIT 不同的是,这种编译模式会在程序被执行前就将其编译成机器码,属于静态编译(C、 C,Rust,Go 等语言就是静态编译)。AOT 避免了 JIT 预…

洛谷P5648

洛谷P5648 这题花了很长时间,是在线段树题单里找到的( )。有线段树做法,但是我感觉可能比倍增做法更难看懂。以后有空再看看吧。感觉线段树现在只会板子题,绿稍微难点可能就不会。 花了很久时间之后,就觉得…

如何让你的Mac右键菜单栏更加的丰富多样

Mac电脑的右键菜单栏不如Windows的丰富,虽然可以在系统设置一些常用功能,但是种类不够丰富,这对于一些用惯了Windows的人来说可以说是非常的不习惯,不管是工作使用还是日常使用来说都有一些影响,如何才能让Mac的右键菜…

Vite + Vue3 使用 cdn 引入依赖,并且把外部 css、js 文件内联引入

安装插件 pnpm i element-plus echarts axios lodash -S在 vite.config.js 引用 注意事项:element-plus 不能在 vite.config.js 中使用按需加载,需要在 main.js 中全局引入; import { resolve } from path import { defineConfig } from v…

跟李沐学AI:使用注意力机制的seq2seq

动机 机器翻译中,每个生成的单词可能相关于源句子中的不同词。但Seq2sqe模型不能对此直接建模。 简单的Seq2Seq模型存在一个问题,即它将整个输入序列的信息压缩到了一个固定长度的向量中,这可能导致信息丢失,尤其是当输入序列很…

linux自用小手册

一、GDB常用命令 想用gdb调试C或C程序,编译时需要加-g选项,编译出的文件为debug状态(如果不加则是release状态),且不可以加-O选项进行优化。 命令简写解释set args 设置程序传递的参数 例:./demo -v value…

PCL 计算点云OBB包围盒(PCA)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.1.1 计算协方差矩阵和质心 2.1.2 计算特征值和特征向量 2.1.3 构建包围盒并可视化 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接: PCL点云算法与…

Renesas R7FA8D1BH (Cortex®-M85)的PWM控制小车

目录 概述 1 软硬件 1.1 软硬件环境信息 1.2 开发板信息 1.3 调试器信息 2 硬件架构 2.1 硬件框架结构 2.2 小车控制原理 3 软件功能实现 3.1 FSP配置参数 3.2 代码实现 3.3 源代码文件 源代码下载地址: https://www.firebbs.cn/forum.php?modviewthre…

社工字典生成工具 —— CeWL 使用手册

GitHub - digininja/CeWL: CeWL is a Custom Word List GeneratorCeWL is a Custom Word List Generator. Contribute to digininja/CeWL development by creating an account on GitHub.https://github.com/digininja/CeWL/ 0x01:CeWL 简介 CeWL(Cust…

MySQL 联合索引底层存储结构及索引查找过程解读

前言 大家好,我是 Lorin ,联合索引(Composite Index)又称复合索引,它包括两个或更多列。与单列索引不同,联合索引可以覆盖多个列,这有助于加速复杂查询和过滤条件的检索。联合索引的列顺序非常…

从零开始学cv-17:图像绘制基本图形

文章目录 前言一、绘制直线与箭头二、绘制矩形三、绘制圆形椭圆形 前言 随着计算机视觉技术的不断发展,OpenCV作为一款强大的开源图像处理库,受到了越来越多开发者的喜爱。本文将带领读者走进OpenCV的世界,从基础入手,详细介绍如…

冷热数据分离

优质博文:IT-BLOG-CN 一、背景 随着机票业务的快速发展,订单量持续增长对业务性能带来影响,需要进行冷热数据分离。目前机票订单模块主要使用Mysql(InnoDB)作为数据库存储,历史订单信息状态修改频率低并占用大量数据库存储空间&…

腾讯IM SDK:TUIKit发送多张图片

一、问题描述 在使用腾讯IM DEMO&#xff08;https://github.com/TencentCloud/chat-uikit-vue.git&#xff09;时发现其只支持发送一张图片&#xff1a; 二、解决方案 // src\TUIKit\components\TUIChat\message-input-toolbar\image-upload\index.vue<inputref"inp…

AcWing 802. 区间和(离散化算法,python)

本篇博客详细讲解一下离散化知识点&#xff0c;通过讲解和详细列题带大家掌握离散化。 题目&#xff1a; 原题链接&#xff1a;https://www.acwing.com/problem/content/description/804/ 假定有一个无限长的数轴&#xff0c;数轴上每个坐标上的数都是 0。 现在&#xff0c;…

记一次pyc逆向

.py文件   源代码文件。   这是开发者编写的 Python 源代码文件&#xff0c;包含了可执行的 Python 代码。 .pyc文件   字节码文件。   Python 源文件&#xff08;.py&#xff09;在执行时会被编译为字节码&#xff0c;并存储在 __pycache__ 目录下&#xff0c;文件名通…

PHP变量(第④篇)

本栏目教学是php零基础到精通&#xff0c;如果你还没有安装php开发工具请查看下方链接&#xff1a; Vscode、小皮面板安装-CSDN博客 今天来讲一讲php中的变量&#xff0c;变量是用于存储信息的"容器"&#xff0c;这些数据可以在程序执行期间被修改&#xff08;即其…