1.开启ssh长连接ansible.cfg
ssh_args = -C -o ControlMaster=auto -o ControlPersist=7d
ControlPersist=7d整个长连接保持时间;通过ssh连接过的设备都会在当前ansible/cp/目录下生成一个socket文件,通过netstat命令查看会发现一个ESTABLISHED状态的链接一直与远端设备进行TCP链接(SSH版本5.6或之上)
2.开启pipeliningansible.cfg
将本地生成好的python脚本put到远端服务器开启pipelining大大提高整个执行效率;开启pipelining需要被控制机/etc/sudoers 文件编辑当前ansible ssh用户配置为requiretty
pipelining = True
3.开启accelerate模式
依赖ansible中控制机和远端机器有一个长链接,accelerate使用python程序在远端机器上运行一个守护进程;开启accelerate,只要在playbook中配置accelerate:true即可;如果开启这个模式,则需要在控制机和远端机器上安装python-keyzar软件包。ansible.cfg中定义一些accelerate参数,例如远端机器监听端口以及一些timeout设置
[accelerate]
accelerate_port = 5099
accelerate_timeout = 30
accelerate_connect_timeout = 5.0
4.设置facts缓存
在执行playbook的时候,默认第一个task都是gather_facts,这个过程就是手机每台主机的facts信息,如果不需要这些信息则设置为False提高playbook效率。如果既想每次执行playbook的时候都能收集facts,又想加速收集过程,那么就需要配置facts缓存了。
gathering = smart
fact_caching_timeout = 86400
fact_caching = jsonfile
fact_caching_connection = /dev/shm/ansible_fact_cache
可以通过redis存储facts信息
gathering = smart
fact_caching_timeout = 86400
fact_caching = redis
支持memcached存储facts信息

ansible统一目录结构:
production #production环境的inventory文件
stage #stage环境的inventory文件
group_vars/
group #定义变量的文件
group2
host_vars/
hostname1 #定义hostname1的变量文件
hostname2 #定义hostname2的变量文件
library/ #自定义模块存放目录
filter_plugins #自定义filter 插件存放目录
site.yml #playbook统一入口文件
webservers.yaml #特殊任务playbook文件
roles #role存放目录
common/ #common角色目录
tasks/
main.yml #common角色task入口文件
handlers/ #common 角色 handlers入口文件
main.yml
templates/
ntp.conf.j2
file/
bar.txt #file资源文件
foo.sh #files资源文件
vars/
main.yml #common 角色变量定义文件
defaults/
main.yml #common 角色变量定义文件(优先级低)
meta/
main.yml #common 角色依赖文件
webtier/ #webtier角色目录
monitoring/
fooapp/

目录维护方便与管理方便,其中几个主要目录定义好

灰度发布与检测
1.语法检测:
ansible-playbook命令的--syntax-check
2.灰度发布
意思是先挑选一台机器进行测试,这样才知道是否是我们需要的结果
进行预运行是需要把一个或多个task使用delegate_to参数指定到一台设备上进行测试,通过后再进行接下来的工作
3.检查结构是否达到预想
运行playbook的时候使用--check和--diff参数对比生成后的文件是否为我们所需的文件

统一管理
使用gitlab或者GitHub私有仓库进行管理

使用ansible-shell交互命令行
ansible-shell 是GitHub上的一个开源项目,通过交互式的模式把所有ansible的命令Ad-Hoc命令都引入了,支持tab键补齐方式;目前ansible-shell 只支持Ad-Hoc命令不支持playbook.
安装:
git clone https://github.com/dominis/ansible-shell.git
cd ansible-shell/
python setup.py install
安装后/usr/bin/生成一个ansible-shell命令,可以通过运行ansible-shell命令进入ansible-shell ,默认不跟任何参数, 但ansible-shell会引入ansible.cfg里面的参数,当然也可以指定参数,比如指定inventory、ansible-shell -i hosts、sudo模式ansible-shell -s ,还可以指定用户信息等等。还可以在ansible.cfg文件中添加对ansible-shell参数定义
[ansible-shell]
cwd = 172.19.95.175
forks = 4
默认ansible-shell有几个内置命令
cd 切换inventory对象,支持正则表达式
list 显示当前目录下的主机和主机组列表
forks 临时设置并发数
become 设置become模式,例如su或sudo
! 强制调用shell模块

hellp shell