首页 > 其他分享 >Ansible - 7 - 性能优化

Ansible - 7 - 性能优化

时间:2022-11-04 22:34:42浏览次数:41  
标签:主机 性能 ansible 任务 Ansible cfg facts serial 优化


性能优化

在默认设置的情况下,Ansible的执行效率已经可以满足大多数场景。
面对巨量目标主机时,可以通过一些配置优化去再提高ansible的执行效率。

基本设置

# 通过 time 命令统计执行时间
time <ansible-command>


# 关闭SSH密钥检测
- 以SSH登录远程设备时,默认该设备会检查远程主机的公钥,并且将该公钥记录在~/.ssh/known_hosts文件中
- 当下次该主机访问时会核对公钥,如果公钥不同则会发出警告,如果公钥相同,则会提示输入密码
- 对主机公钥的检查是根据StrictHostKeyChecking变量的检查级别确定:no(不检查)、ask(是否检查要询问)、yes(每次都检查)、False(关闭检查)
- 设置 /etc/ansible/ansible.cfg 中参数 host_key_checking = False


# 并发数forks
- Ansible默认只会创建5个进程并发执行任务,所以在任务中只能同时控制5台主机执行
- forks是线程数,受限于CPU的核心数,加大forks值能让CPU尽量提升并发数量,一定程度上提高执行效率
- 设置 /etc/ansible/ansible.cfg 中 forks 参数,默认值为5
- 在执行命令时通过 -f 参数指定并发数


# 关闭 gather_facts
- playbook默认执行第一个tasks是gather_facts,用于收集主机信息
- 如果任务并不需要调用主机信息变量,建议关闭可以减少Ansible在收集客户端信息的时间,提高运行速度
- 可以在playbook文件中设置gather_facts参数为false或no(不区分大小写)
gather_facts: False 
gather_facts: no
- 也可以设置 /etc/ansible/ansible.cfg 中参数
gather_facts: no


# 设置 facts缓存
- 不过禁用facts,可以采用facts缓存保证一定的运行效率来使用facts信息
- 在ansible.cfg中可以配置多种facts缓存的方式:json文件,redis,memcache等
- 使用redis存储facts文件需安装redis和响应的python库
- 以json文件方式为例
gathering=smart
fact_caching_timeout=86400
fact_caching=jsonfile
fact_caching_connection=/path/to/ansible_fact_cache


# serial滚动更新
- 并发可以在ansible.cfg里修改配置,也可以在playbook中限制服务端的并发数量
- Ansible默认将尝试并行管理playbook中所有的机器,可以使用serial关键字定义一次应管理多少主机
- 常应用与负载均衡环境下,不能一次性停止所有主机的场景
- 在play或者task下都可以设置serial参数,但其值对应的主机数不应大于forks值 
serial: "30%"  # 按百分比执行
serial: 2      # 指定单次执行数量


# OpenSSH链接优化(非必要,不建议)
- 默认情况下,使用OpenSSH时,服务器端会根据客户端的IP地址进行DNS反向解析,然后根据获取到的主机名再次进行DNS查询得到IP地址,比较这两个IP地址是否一致
- 可以在一定程度上提高安全性,但会花费更多时间,可以关闭这一特性来实现加速SSH链接速度
- 设置 /etc/ssh/sshd_config 中参数 UseDNS no


# 开启pipeling
- 发送执行命令代替命令临时文件(针对不使用sudo的场景,建议以单独ansible.cfg文件方式开启)
- 设置 /etc/ansible/ansible.cfg 中参数 pipelining = True

异步async与轮询polling特性

# Ansible的异步async与轮询polling特性
# 适合使用到ansible的polling特性的场景
# - task需要运行很长的时间,这个task很可能会达到timeout
# - 任务需要在大量的机器上面运行
# - 任务是不需要等待它完成的

# 不适合使用polling特性的场景
# - task任务是需要运行完后才能继续另外的任务的
# - task任务能很快的完成

# 注意:需在ansible服务端的/etc/ansible/ansible.cfg文件里配置"host_key_checking = False"  

- hosts: all
  max_fail_percentage: 30  # 主机数最大失败百分比,只有在大于时中止tasks的执行,结合serial参数则以serial值为基准
  serial: 7  # 定义同时执行操作的主机数,一般要小于forks的值,否则会按forks值进行“分片”执行任务
  tasks:
    - name: test-1
      shell: sleep 5 && echo "test-1 done" && hostname && date
      async: 9  # 任务执行时间的上限值,超时则任务失败,建议设置为略大于任务正常实际执行时长,设置为0时表示一直等待任务结束
      poll: 2  # 检查任务结果的间隔时长,建议设置为小于任务实际执行时长,设置为0表示不用等待结果继续执行后续任务
      register: script_result
    - name: test-2
      async_status: jid={{ script_result.ansible_job_id }}  # 通过模块async_status查看轮询结果
      register: job_result
      until: job_result.finished  #  
      retries: 10  # 重试10次
    - name: test-3  # 将在所有主机执行完成后一次性返回结果
      shell: echo "test-3 done" && hostname && date

标签:主机,性能,ansible,任务,Ansible,cfg,facts,serial,优化
From: https://www.cnblogs.com/anliven/p/16857814.html

相关文章

  • Ansible - 9 - 技巧提示
    Ansible技巧提示1-免密登录#通过秘钥方式连接ssh-keygen-trsassh-copy-id-i/vipxf/.ssh/[email protected]/vipxf/.ssh/id_rsa......
  • Ansible - 8 - 图形界面
    Ansible图形界面AnsibleWebUI目前主要有AnsibleTower、AnsibleAWX、semaphore。AnsibleTowerAnsible官方WebUI文档:https://docs.ansible.com/ansible-tower/......
  • 【Android Gradle 插件】自定义 Gradle 插件优化图片 ③ ( 识别 png 图片中的 alpha
    文章目录​​一、识别png图片中的alpha通道信息​​​​1、png图片的文件头信息​​​​2、png图片的数据块​​​​3、png图片的IHDR类型数据块​​​​4、IHDR......
  • Ansible - 2 - 命令讲解
    Ansible命令命令集#以下所有命令均可使用`-h`参数获取帮助信息ansible#Defineandrunasingletask'playbook'againstasetofhosts#常用命......
  • Ansible - 3 - 变量使用
    变量(variable)Ansible的变量名仅能由字母、数字和下划线组成,且只能以字母开头。Python关键字和playbook关键字都不能作为有效的变量名。Ansible的变量可以被定义在play......
  • 基于GA优化的竞价博弈频谱分配算法的matlab仿真
    目录​​一、理论基础​​​​二、核心程序​​​​三、仿真测试结果​​作者ID:fpga和matlab擅长技术:1.无线基带,无线图传,编解码2.机器视觉,图像处理,三维重建3.人工智......
  • Visual Studio:优化了复制/移动省略
    蝎子为了能发文,标题中的复制/移动省略是Copy/MoveElision的硬翻译,请各位大大海涵。下文中我会同时使用这两种术语。VisualStudio中Copy/MoveElision的变化在Visual......
  • CS149笔记03并行程序性能优化
    Part1:WorkDistributionandScheduling为了高性能优化目标:在所有可执行资源上达到负载均衡降低communication,避免stalls减少额外的overhead负载均衡在assign1......
  • Ansible 安装并简单使用
    Ansible简介Ansible是一款IT自动化工具。主要应用场景有配置系统、软件部署、持续发布及不停服平滑滚动更新的高级任务编排。Ansible本身非常简单易用,同时注重安全和可......
  • 分布式事务的性能设计
    分布式事务的性能设计,主要包含吞吐量和相应延迟两方面。分布式事务更适合对吞吐量要求高,对相应延迟要求不苛刻的应用。性能设计有三个层面,分别为代码优化层、算法逻辑层以及......