Accelerated Mode
New in version 1.3.
你也许不需要这个!
你在使用 Ansible 1.5 或者 之后的版本吗? 如果是的话,因为被称之为 “SSH pipelining” 的新特性,你也许就不需要加速模式了.详情请阅读:ref:pipelining 部分的章节.
对于使用 1.5 及之后版本的用户,加速模式只在以下情况下有用处: (A) 管理红帽企业版 Linux 6 或者更早的那些依然使用 paramiko 的版本 或者 (B) 像在文档中描述的那样:无法在 TTYs 中使用 sudo.
如果你能够使用pipelining,Ansible 将会降低通过 wire 传输文件的总量来提升有效率,并且在几乎所有情况下(甚至可能包括了传输大型文件)都能与加速模式相匹敌.归功于更少的移动文件块,管道几乎在所有的情况下优于加速模式.
加速模式将为了支持那些仍使用红帽企业版 Linux 6 做主控机或因其他环境因素受限制而保留.
加速模式详解
尽管 OpenSSH 使用的 ControlPersist 特性既快速又可伸缩,但这会在 SSH 连接时造成少量的开销.虽然很多人不会遇到这样一个需求,但是如果你当前运行的平台不支持 ControlPersist (如 一台 EL6 control machine),你大概会对 tuning 选项更感兴趣.
加速模式只是使用来加速连接的,它仍需使用 SSH 来进行初始安全密钥交换.它没有额外增加需要管理的基础设施的公共key,也不需要诸如 NTP 或 DNS.
加速模式在任何情况下将比启用 ControlPersist 特性的 SSH 快2-6倍,10倍于 paramiko.
加速模式通过启动一个临时的 SSH 守护进程来工作.只要这个守护进程在运行,Ansible 将会直接通过 socket 来连接.Ansible 通过在连接时交换临时的 AES key 来确保安全(这个秘钥对每个主机都是不同的并且会定期重新生成).
默认配置下,Ansible 会为加速模式开启5099端口(此配置可修改).一旦运行了,守护进程将会维持连接 30 分钟,过了时限后该连接将会自动终结,你需要重启一个 SSH.
加速模式对它所基于的 fireball 模式(已被废弃)做了许多改进:
- 不需要 bootstrapping,仅需在你想要运行加速模式的playbook上添加一行代码.
- 支持 sudo 命令(下文参见详情)
- 更少的依赖需求.ZeroMQ 不在需要,除了 python-keyczar 外再无其他依赖包需要安装.
- Python 版本必须大于等于 2.5
只需在你的 play 中添加 accelerate: true 即可使用加速模式:
- ---
- - hosts: all
- accelerate: true
- tasks:
- - name: some task
- command: echo {{ item }}
- with_items:
- - foo
- - bar
- - baz
如果你希望改变 Ansible 用于加速模式的端口,你只需添加 accelerated_port 选项:
- ---
- - hosts: all
- accelerate: true
- # default port is 5099
- accelerate_port: 10000
accelerate_port 选项也同样能通过指定环境变量 ACCELERATEPORT 或者在你的 _ansible.cfg 中配置:
- [accelerate]
- accelerate_port = 5099
如先前所述,加速模式同样支持通过 sudo 命令来运行任务.但是有两点需要予以提醒:
- 你必须移除 sudoers 选项中的 requiretty.
- 目前仍不支持 sudo 密码提示,所以 NOPASSWD 选项是必须的.
如果是 Ansible 版本是 1.6,你同样可以允许多个连接多个秘钥来连接多个 Ansible 管理节点.你可以通过在你的 ansible.cfg 中添加如下配置:
- accelerate_multi_key = yes
当启用时,守护进程将会打开一个 UNIX socket 文件(默认位于 $ANSIBLE_REMOTE_TEMP/.ansible-accelerate/.local.socket).来自 SSH 的新的连接能够通过这个 socket 文件来上载新的秘钥给守护进程.