5.1 优化Ansible速度

Ansible的执行效率低于SaltStack : 原因,使用默认的SSH方式通信,效率低于SaltStack 的 zeromq消息队列

  1 开启SSH 长连接

# ssh -V
OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.8, OpenSSL 1.0.1f 6 Jan 2014 # 需要大于5.6# cat .ansible.cfg
[defaults]
host_key_checking = False
module_name = shell
remote_port = 22
remote_tmp = $HOME/.ansible/tmp
record_host_keys= False
sh_args= -o ControlMaster=auto -o ControlPersist-5d

  

# netstat | grep ssh
tcp        0      0 172.17.150.51:34030     172.17.150.21:ssh       ESTABLISHED
tcp        0      0 172.17.150.51:52852     172.17.150.42:ssh       ESTABLISHED
tcp        0      0 172.17.150.51:41904     172.17.150.100:ssh      ESTABLISHED
tcp        0      0 172.17.150.51:53620     172.17.150.21:ssh       ESTABLISHED
tcp        0      0 172.17.150.51:53620     172.17.150.21:ssh       ESTABLISHED
unix  3      [ ]         STREAM     CONNECTED     21402633 /root/.ansible/cp/ansible-ssh-testslave5-22-jenkins.PaagQPMKpFYk0nXz

  

  2 开启pipeling

   也是OpenSSH的一个特性,优化了之前的将生成好的本地的Python脚本PUT到远端服务器,如果开启了pipelining = True ,这个过程降噪SSH 会话中执行,大大提供了效率

# piplinling= True 之前<TestSlave5> ESTABLISH CONNECTION FOR USER: jenkins
<TestSlave5> REMOTE_MODULE ping
<TestSlave5> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/root/.ansible/cp/ansible-ssh-%h-%p-%r" -o StrictHostKeyChecking=no -o Port=22 -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=jenkins -o ConnectTimeout=10 TestSlave5 /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1484645825.18-280957036779280 && echo $HOME/.ansible/tmp/ansible-tmp-1484645825.18-280957036779280'
<TestSlave5> PUT /tmp/tmpj3c5YY TO /home/jenkins/.ansible/tmp/ansible-tmp-1484645825.18-280957036779280/ping
<TestSlave5> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/root/.ansible/cp/ansible-ssh-%h-%p-%r" -o StrictHostKeyChecking=no -o Port=22 -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=jenkins -o ConnectTimeout=10 TestSlave5 /bin/sh -c 'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /home/jenkins/.ansible/tmp/ansible-tmp-1484645825.18-280957036779280/ping; rm -rf /home/jenkins/.ansible/tmp/ansible-tmp-1484645825.18-280957036779280/ >/dev/null 2>&1'
TestSlave5 | success >> {"changed": false,"ping": "pong"
}<TestSlave6> ESTABLISH CONNECTION FOR USER: jenkins
<TestSlave6> REMOTE_MODULE ping
<TestSlave6> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/root/.ansible/cp/ansible-ssh-%h-%p-%r" -o StrictHostKeyChecking=no -o Port=22 -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=jenkins -o ConnectTimeout=10 TestSlave6 /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1484645825.18-266544730254906 && echo $HOME/.ansible/tmp/ansible-tmp-1484645825.18-266544730254906'
<TestSlave6> PUT /tmp/tmpVvNM_K TO /home/jenkins/.ansible/tmp/ansible-tmp-1484645825.18-266544730254906/ping
<TestSlave6> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/root/.ansible/cp/ansible-ssh-%h-%p-%r" -o StrictHostKeyChecking=no -o Port=22 -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=jenkins -o ConnectTimeout=10 TestSlave6 /bin/sh -c 'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /home/jenkins/.ansible/tmp/ansible-tmp-1484645825.18-266544730254906/ping; rm -rf /home/jenkins/.ansible/tmp/ansible-tmp-1484645825.18-266544730254906/ >/dev/null 2>&1'
TestSlave6 | success >> {"changed": false,"ping": "pong"
}

  

# piplinling = True 时 <TestSlave5> ESTABLISH CONNECTION FOR USER: jenkins
<TestSlave5> REMOTE_MODULE ping
<TestSlave5> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/root/.ansible/cp/ansible-ssh-%h-%p-%r" -o StrictHostKeyChecking=no -o Port=22 -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=jenkins -o ConnectTimeout=10 TestSlave5 /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1484645805.57-70490925643456 && echo $HOME/.ansible/tmp/ansible-tmp-1484645805.57-70490925643456'
<TestSlave5> PUT /tmp/tmp8BYUur TO /home/jenkins/.ansible/tmp/ansible-tmp-1484645805.57-70490925643456/ping
<TestSlave5> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/root/.ansible/cp/ansible-ssh-%h-%p-%r" -o StrictHostKeyChecking=no -o Port=22 -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=jenkins -o ConnectTimeout=10 TestSlave5 /bin/sh -c 'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /home/jenkins/.ansible/tmp/ansible-tmp-1484645805.57-70490925643456/ping; rm -rf /home/jenkins/.ansible/tmp/ansible-tmp-1484645805.57-70490925643456/ >/dev/null 2>&1'
TestSlave5 | success >> {"changed": false,"ping": "pong"
}<TestSlave6> ESTABLISH CONNECTION FOR USER: jenkins
<TestSlave6> REMOTE_MODULE ping
<TestSlave6> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/root/.ansible/cp/ansible-ssh-%h-%p-%r" -o StrictHostKeyChecking=no -o Port=22 -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=jenkins -o ConnectTimeout=10 TestSlave6 /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1484645805.57-26177483349407 && echo $HOME/.ansible/tmp/ansible-tmp-1484645805.57-26177483349407'
<TestSlave6> PUT /tmp/tmpQrSPOP TO /home/jenkins/.ansible/tmp/ansible-tmp-1484645805.57-26177483349407/ping
<TestSlave6> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/root/.ansible/cp/ansible-ssh-%h-%p-%r" -o StrictHostKeyChecking=no -o Port=22 -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=jenkins -o ConnectTimeout=10 TestSlave6 /bin/sh -c 'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /home/jenkins/.ansible/tmp/ansible-tmp-1484645805.57-26177483349407/ping; rm -rf /home/jenkins/.ansible/tmp/ansible-tmp-1484645805.57-26177483349407/ >/dev/null 2>&1'
TestSlave6 | success >> {"changed": false,"ping": "pong"
}

  

[defaults]
host_key_checking = False
module_name = shell
remote_port = 22
remote_tmp = $HOME/.ansible/tmp
record_host_keys= False
sh_args= -o ControlMaster=auto -o ControlPersist-5d
pipelinling = True

  3 开启 accelerate 模式

    与 Multiplexing 有点类似,都依赖与Ansible中控制机与远端机有一个长连接,但是accelerate 是使用python程序在远端机上运行一个守护进程,然后Ansible 会通过这个守护进程监听的端口进行通信 。 如果使用accelerate 则需要在控制机和远端机上都安装python-keyczar软件包,

    在写 playbook时指定

  4 设置facts缓存

    playbook 的默认第一个task是GATHERING FACTS

    gathering = smart

    fact_caching_timeout = 86400

    fact_caching = jsonfile

    fact_caching_connection = /tmp/ansible_fact_cache

    

5.4 灰度发布与检测

5.4.1 语法检测

5.4.2 灰度发布

5.4.3 是否达到预想

5.5 同意管理

5.6 使用ansible-shell 交互命令行

目前ansible-shell只支持Ad-Hoc 命令不支持playbook

  

转载于:https://www.cnblogs.com/zsr0401/p/6294076.html

Char05 Ansible 最佳实践相关推荐

  1. Ansible最佳实践

    原文在这里哈! 这篇最佳实践是官网给出的一个Ansible结构的示例,非常的实用,节约代码.看完后,你可能会惊诧于ansible居然这么强大?! 翻译中有一些关键字使用的是原文英文,因为不好翻,如有疑 ...

  2. 数人云牵手红帽Ansible:七大最佳实践解锁DevOps落地姿势

    2018年1月23日,红帽联合至顶网在上海举办了以"智能 自动 规范--迎接自动化运维新时代"为主题的"Ansible Automates"大会. 这是国内首届 ...

  3. Ansible — 示例与最佳实践

    目录 文章目录 目录 最佳实践示例 Playbook Project 的目录结构 区分 Production 和 Stage Inventory 清单文件 区分 Group 和 Host Variab ...

  4. 《DevOps实战:VMware管理员运维方法、工具及最佳实践》——2.3 配置管理

    本节书摘来自华章计算机<DevOps实战:VMware管理员运维方法.工具及最佳实践>一书中的第2章,第2.3节,作者:小特雷弗 A. 罗伯茨(Trevor A. Roberts Jr.) ...

  5. 基于python技术的自动化运维是干嘛的_《Python自动化运维 技术与最佳实践》.pdf...

    [实例简介]Python自动化运维 技术与最佳实践 [刘天斯著][机械工业出版社][2014.12][291页].pdf [实例截图] [核心代码] 目 录 本书赞誉 前 言 第一部分 基础篇 第1章 ...

  6. 持续集成与持续部署实践_持续集成和部署的3个最佳实践

    持续集成与持续部署实践 本文涵盖了三个关键主题:自动化CI / CD配置,将Git存储库用于常见的CI / CD工件以及对Jenkins管道进行参数设置. 术语 首先是第一件事: 让我们定义一些术语. ...

  7. 智能化运维最佳实践-自动化

    伴随着互联网以及大数据时代的到来,IT信息系统已经成为最重要的数据载体和信息来源, IT系统在企业内部的重要性日益突出:但是随着企业信息化程度的提高.IT环境规模的扩大和IT环境复杂度的增加.行业内服 ...

  8. 微服务架构深度解析与最佳实践

    微服务架构深度解析与最佳实践 微服务架构的概念,现在对于大家应该都不陌生,无论使用 Apache Dubbo.还是 Spring Cloud,都可以去尝试微服务,把复杂而庞大的业务系统拆分成一些更小粒 ...

  9. Java 的最佳实践

    Java 是在世界各地最流行的编程语言之一, 但是看起来没人喜欢使用它.而 Java 事实上还算是一门不错的语言,随着 Java 8 最近的问世,我决定编制一个库,实践和工具的清单,汇集 Java 的 ...

最新文章

  1. Loader的load方法和loadBytes方法LoaderContext参数
  2. 推荐11个实用Python库
  3. form表单的一个页面多个上传按钮实例
  4. java读取resouces目录下文件
  5. 数据结构1-树及常用算法
  6. Spring Boot 2.x 启动全过程源码分析(上)入口类剖析
  7. threejs加载3D模型例子
  8. Android sqlite数据库操作通用框架AHibernate(二)源码-用于交流
  9. eclipse字体颜色设置
  10. ORACLE expdp/impdp导出实例
  11. 本周小结!(二叉树系列之四)
  12. DisplayTag详解
  13. 小游戏开发引擎CocosCreator
  14. Restful API设计指南
  15. HSV对应不同颜色的灰度空间
  16. 树与二叉树基本概念与性质
  17. HTML+CSS(精灵图)实现微信滑动门技术
  18. 大数据平台,Hadoop集群架构,概述及原理
  19. 面试改掉呃呃呃_呃...税
  20. GPS-BEIDOU-GLONASS-GALILEO

热门文章

  1. linux代替ps的软件,Photoshop的开源替代品 图像编辑器GIMP迎来25岁生日
  2. python中matplotlib库饼图_python 使用 matplotlib.pyplot来画柱状图和饼图
  3. 详解面试手撕过的那些排序算法
  4. linux下tomcat启动后出现多个java进程
  5. [smali] This Handler class should be static or leaks might occur
  6. 为什么要设计好目录结构?
  7. liunx安装Lamp
  8. I.MX6 mfgtool2-android-mx6q-sabresd-emmc.vbs hacking
  9. KeyMob聚合平台:为开发者塑造广告变现形式
  10. mysql隐藏文件一定要删除彻底