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信息python
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/git
目录维护方便与管理方便,其中几个主要目录定义好github
灰度发布与检测
1.语法检测:
ansible-playbook命令的--syntax-check
2.灰度发布
意思是先挑选一台机器进行测试,这样才知道是不是咱们须要的结果
进行预运行是须要把一个或多个task使用delegate_to参数指定到一台设备上进行测试,经过后再进行接下来的工做
3.检查结构是否达到预想
运行playbook的时候使用--check和--diff参数对比生成后的文件是否为咱们所需的文件web
统一管理
使用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模块redis
hellp shellshell