让你的ansible飞起来
一、SSH Multiplexing
1 配置
vim /etc/ssh/ssh_config Host *
GSSAPIAuthentication yes
# If this option is set to yes then remote X11 clients will have full access
# to the original X11 display. As virtually no X11 client supports the untrusted
# mode correctly we set this to yes.
ForwardX11Trusted yes
# Send locale-related environment variables
SendEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
SendEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
SendEnv LC_IDENTIFICATION LC_ALL LANGUAGE
SendEnv XMODIFIERS
ControlMaster yes # 这个是新增的
ControlPath /tmp/%r@%h:%p # 这个是新增的
ControlPersist 10m # 这个是新增的
2 测试
[root@host-172-20-6-120 playbooks]# ssh -O check 172.20.6.121
root@172.20.6.121's password:
Master running (pid=16802) # 有这个说明开启成功 上面的不是”零“ 而是大写的0
测试速度
[root@host-172-20-6-120 playbooks]# time ssh 172.20.6.121 /bin/true
root@172.20.6.121's password:
ControlSocket /tmp/root@172.20.6.121:22 already exists, disabling multiplexing real 0m2.137s
user 0m0.032s
sys 0m0.005s
1 开启SSH长连接
ansible是通过使用ssh和远程主机进行通信,所以对ssh有这很强的依赖。在OpenSSH 5.6以后支持Multiplexing这个特性,可以通过在ansible配置中设置以支持该特性。
如下是配置参数,设置长连接保持时间为5天;control_path指定socket文件所保存的位置。
ssh_args = -o ControlMaster=auto -o ControlPersist=5d
control_path = /etc/ansible/ssh-socket/%%h-%%p-%%r
通过上面配置后,ansible中控机上执行一次与远程主机的连接之后,这个连接会持久保持设定时间之久。可以通过netstat命令查看到ESTABLISHED状态的连接信息。
注意1:OpenSSH需要5.6以上版本,低版本需要升级才能使用。
Centos7系统上安装的OpenSSH版本是较新的,可以直接支持;对于Centos6的系统,自带的OpenSSH版本较低,可以用下面这个yum源进行升级yum update openssh-clients:
# /etc/yum.repos.d/openssh.repo
[CentALT]
name=CentALT Packages for Enterprise Linux 6
baseurl=http://mirror.neu.edu.cn/CentALT/6/$basearch/
enabled=1
gpgcheck=0
注意2:control_path指定的目录不存在,或执行ansible命令的用户没有写权限的话是会报错的。
2 开启pipelining
默认情况下,ansible的执行流程是把生成好的本地python脚本PUT到远程服务器然后运行。如果开启了pipelining,整个流程少了一个PUT脚本到远程服务器的步骤,直接在SSH的会话中进行,可以提高整个执行效率。
# 在ansible.cfg配置文件中设置pipelining为True
pipelining = True
需要注意的是:如果开启pipelining,需要被控的远程服务器将/etc/sudoers中的”Defaults requiretty”注释掉,否则会出现类似如:you must have a tty to run sudo 的报错。
3 开启accelerate模式
accelerate模式类似于SSH的Multiplexing功能,都是使ansible控制服务器和远程服务器之间保持长连接。accelerate模式是使用python程序在远程服务器上运行一个守护进程,ansible通过这个守护进程监听的端口进行通信。
accelerate模式的开启方法很简单,只要在playbook中配置accelerate: true即可。ansible.cfg配置文件中需要配置一些accelerate参数,如:
[accelerate]
accelerate_port = 5099
accelerate_timeout = 30
accelerate_connect_timeout = 5.0
注意:使用accelerate模式,需要控制服务器和远程服务器都安装python-keyczar包
4 对facts设置优化
ansible playbook默认第一个task是Gathering Facts收集各主机的facts信息,以方便我们在paybook中直接引用facts里的信息。
如果不需要用到facts信息的话,可以设置gather_facts: false,来省去facts采集这一步以提高playbook效率。
如果既想用facts信息,有希望能提高playbook的效率的话,可以采用facts缓存来实现。
facts缓存支持多种方式:json文件方式,redis方式,memcache方式等。各种方式的配置都是在ansible.cfg中配置。
1)json文件方式
vim /etc/ansible/ansible.cfg [defaults]
gathering=smart
fact_caching_timeout=86400
fact_caching=jsonfile
fact_caching_connection=/path/to/ansible_fact_cache
这里的86400单位为秒,表示缓存的过期时间。保存facts信息的json文件保存在/path/to/ansible_fact_cache下面,文件名是按照inventory hostname来命名的。
2)redis方式
gathering=smart
fact_caching_timeout=86400
fact_caching=redis
需要注意的是,facts存储不支持远端的redis,需要在ansible的控制服务器上安装redis;同时,还需要安装python的redis模块。
3)memcache方式
gathering=smart
fact_caching_timeout=86400
fact_caching=memcached
与redis方式类似,需要运行memcached服务,同时,安装python的memcached依赖包。
让你的ansible飞起来的更多相关文章
- 自动化运维工具之 Ansible 介绍及安装使用
一.初识Ansible 介绍: Absible 使用 模块(Modules)来定义配置任务.模块可以用标准脚本语言(Python,Bash,Ruby,等等)编写,这是一个很好的做法,使每个模块幂等.A ...
- Ansible之 Inventory 资源清单介绍
一.Inventory 库存清单文件 1.Inventory 作用 Ansible 可以在同一时间针对多个系统设施进行管理工作.它通过选择Ansible 资源清单文件中列出的系统,该清单文件默认是在/ ...
- Ansible 系列之 Ad-Hoc介绍及使用
Ad-Hoc 介绍 一.什么是ad-hoc 命令? ad-hoc 命令是一种可以快速输入的命令,而且不需要保存起来的命令.就相当于bash中的一句话shell.这也是一个好的地方,在学习ansible ...
- Ansible 系列之 Playbooks 剧本 (1)
一.Playbooks 介绍 1.Playbooks是Ansible的配置,部署和编排语言.它们可以描述您希望远程系统执行的策略,或一般IT流程中的一组步骤. 如果说ansible 模块 是你车间里的 ...
- Ansible 系列之 Patterns
Ansible 之 Patterns 1.Ansible中的Patterns决定了我们要管理哪个主机,意思是与哪些主机进行交互. 我们将在Ad-Hoc(Ad-Hoc 是指 临时执行的命令,要结合着模块 ...
- ansible学习笔记三:playbook和roles
参考博客: Ansible 系列之 Playbooks 剧本 -飞走不可(博客园) linux运维学习之ansible的playbook及roles的使用 - 51CTO博客 nginx 基于uwsg ...
- ansible学习笔记二
Ad-Hoc命令: 所谓Ad-Hoc,简而言之是"临时命令",英文中作为形容词有"特别的,临时"的含义.Ad-Hoc只是官方对Ansible命令的一种称谓. 从 ...
- Ansible 系列之 Inventory 资源清单介绍
一.Inventory 库存清单文件 1.Inventory 作用 Ansible 可以在同一时间针对多个系统设施进行管理工作.它通过选择Ansible 资源清单文件中列出的系统,该清单文件默认是在/ ...
- [转] Ansible 系列之 Playbooks 剧本
[From] https://www.cnblogs.com/hanyifeng/p/6435875.html 一.Playbooks 介绍 1.Playbooks是Ansible的配置,部署和编排语 ...
随机推荐
- 图层的使用要点(CALayer)
A,图层和路径 基本图层 CALayer 动画的主角 形状图层 CAShapeLayer 绘制不规则图形 渐变图层 CAGradientLayer 颜色渐变.阴影 复制图层 CAReplicatorL ...
- SQL Server DDL触发器
DDL 触发器作用: DDL 触发器主要用于防止对数据库架构.视图.表.存储过程等进行的某些修改. DDL 触发器事件: DDL 触发器在创建用来监视并响应该数据库或服务器实例中的活动的事件通知时,可 ...
- iOS 个人所得税 app 基础解析实践
前言:2019年 新个税实施在即,全国几乎所有在职员工都会下载“个人所得税”app来使用,并且 注册使用过程需要填写身份证号等相当私密重要的个人信息. 至今,各大app平台应用下载榜首仍然“无人能出其 ...
- Docker+.Net Core 的那些事儿-3.创建容器并运行
1.根据镜像运行容器 上篇文章建立了一个镜像: 我们以此开始,执行以下命令: docker run -d -p 5000:5000 hwapp:latest 如果返回以上结果表示建立成功. 此时如果你 ...
- java命令--jmap命令使用(查找内存泄漏对象)
转自:https://www.cnblogs.com/kongzhongqijing/articles/3621163.html jdk安装后会自带一些小工具,jmap命令(Java Memory M ...
- centos上传下载文件
1.在windows上安装SecureCRT 2.在centos上安装rzsz软件:yum install lrzsz 3.rz命令上传文件到centos 4.sz命令发送文件到windows
- SQL学习笔记之MySQL索引知识点
0x00 概述 之前写过一篇Mysql B+树学习,简单的介绍了B+数以及MySql使用B+树的原因, 有了这些基础知识点,对MySql索引的类型以及索引使用的一些技巧,就比较容易理解了. 0x01 ...
- FTP 两种工作模式
主动模式port FTP主动模式:TCP链接客户端访问FTP,客户端会开启一个大于1024的端口N访问FTP的21端口(控制端口),并通过21端口发送port命令与N+1的端口,服务端收到命令后会使用 ...
- mfc配置CAN通信
配置:把kerneldlls文件夹.ControlCAN.dll.ControlCAN.lib放在工程下面(debug和Release下面,最后需要exe和这些文件在一起):右键工程属性,链接器-&g ...
- Codeforces - 828E DNA Evolution —— 很多棵树状数组
题目链接:http://codeforces.com/contest/828/problem/E E. DNA Evolution time limit per test 2 seconds memo ...