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

devtools/2024/10/11 2:24:09/

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.ppmy.cn/devtools/123933.html

相关文章

SpringBoot高级并发实践:自定义线程池与@Async异步调用深度解析

文章目录 同步编程&异步编程线程池为什么要使用线程池?Spring自定义线程池SpringBoot轻松调用线程池总结 测试demo链接 同步编程&异步编程 在Java并发编程中,同步和异步是两种常见的处理方式。 同步是指多个任务按顺序执行,一个任务的…

毕设 大数据抖音短视频数据分析与可视化(源码)

文章目录 0 前言1 课题背景2 数据清洗3 数据可视化地区-用户观看时间分界线每周观看观看路径发布地点视频时长整体点赞、完播 4 进阶分析相关性分析留存率 5 深度分析客户价值判断 0 前言 🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕…

算法学习4

学习目录 一.荷兰国旗1.问题一2.问题二(荷兰国旗问题) 二.快排1.快排版本11.快排版本2 一.荷兰国旗 1.问题一 一个数组,选择其中一个数作为对照,把小于等于对照数的放在数组的左边,大于对照数的放在右边;…

Java之方法

方法&#xff08;函数&#xff09; Java中的方法必须定义在类或接口中。 package day2;import java.util.Scanner;public class way {public static void main(String[] args) {int arr[] new int[5];Scanner sc new Scanner(System.in);for (int i 0; i < arr.length;…

智能路由器hack技术

openwrt-智能路由器hack技术&#xff08;1&#xff09;—“DNS劫持” 1 导读 本文提到的两个基于网络的hack技术&#xff1a; DNS劫持数据抓包 基本本质上就是路由器设备的两个主要网络功能&#xff1a; 网关配置功能网关数据中转功能 但是用于软件开发的正途&#xff0c…

JavaScript 命令模式实战:打造可撤销的操作命令

一. 前言 在前端开发中&#xff0c;命令模式&#xff08;Command Pattern&#xff09;作为一种行为型设计模式&#xff0c;可以帮助我们将请求封装成一个对象&#xff0c;从而实现调用对象和执行对象之间的解耦&#xff0c;方便扩展和修改。 本文将和大家分享 JavaScript 中的…

MyBatis 数据表与实体映射的隐藏陷阱

这两天在处理一个线上问题时&#xff0c;发现Mybatis数据表和实体映射的时候会埋一个坑。这个问题看似微小&#xff0c;但却可能在关键时刻给我们带来不小的困扰。接下来&#xff0c;让我们深入剖析这个问题&#xff0c;并探究其发生的根源。 一、问题描述 我们在使用 Mybati…

记录Android.bp里如何添加jar/aar文件

在项目libs目录下放入需要的jar/aar 文件&#xff0c;并新建Android.bp文件 android_library_import {name: "libaums_aar",aars: ["libaums-0.6.0.aar"],}java_import {name: "gson_jar",jars: ["gson-2.11.0.jar"]} 注意: aar 文件…