同样的配置(8c16G), ansible在x86_64机器上安装, 以前需要半个多小时, 优化后大概花费10分钟时间,在arm64架构上安装大概需要15分钟

首先优化ansible.cfg配置文件:

相比之前修改的地方:

测量任务执行速度:profile_tasks 插件
Ansible 官方提供了几个可用于计时的回调插件:

(1).profile_tasks:该回调插件用于计时每个任务的执行时长
(2).profile_roles 插件用于计时每个 Role 的执行时长
(3).timer 插件用于计时每个 play 执行时长
要使用这些插件,需要在 ansible.cfg 配置文件中的 callback_whitelist 中加入各插件

使用 forks、serial、strategy 等指令可以改变 Ansible 的执行策略。

默认情况下 forks=5,这表明在某一时刻最多只有 5 个执行任务的工作进程 (还有一个主进程),也即最多只能挑选 5 个节点同时执行任务。

serail 是 play 级别的指令,用于指定几个节点作为一批去执行该 play,该 play 执行完后才让下一批节点执行该 play 中的任务。如果不指定 serial,则默认的行为等价于将所有节点当作一批。

strategy 指令用于指定节点执行任务时的策略,其侧重点在于节点而在于任务,默认情况下其策略为 linear,表示某个节点先执行完一个任务后等待其余所有节点都执行完该任务,才统一进入下一个任务。另一种策略是 free 策略,表示某节点执行完一个任务后不等待其它节点,而是毫不停留的继续执行该 play 中的剩余任务,直到该 play 执行完成,才释放节点槽位让其它未执行任务的节点开始执行任务。

下面是优化的点:

1。 增大forks的值至100 –>某一时刻最多有100个执行任务的工作进程
2。 对部分无依赖任务修改strategy策略改为free –> 让大部分节点快速首先完成任务
3。 对部分tasks修改为async异步执行 –> 减少等待任务的时间
4。 开户ssh长连接,增大controlpersist时间 –> 以后只要有了一次ssh连接,ansible就可以保留下来进行复用
5。 开户pipelineing –> 一个任务的所有动作都在一个ssh 会话中完成,也会省去 sftp 到远端的过程,直接将要执行任务涉及到的指令 (比如 python 语句) 通过远程 shell 的方式发送到目标节点的标准输入 (stdin) 中,然后在目标节点执行这些代码
6。 关闭facts默认收集 –> 减少收集的数据量,提升效率
7. 使用第三方策略插件Mitogen for Ansible,以及使用mitogen_free策略 –> 可使主机使用一个连接执行,渲染的执行代码暂存于内存中;减少多路复用ssh隧道的时间消耗;减少临时文件传输的带宽;代码重用,避免代码的重新编译成本
8。 使用libyaml解析yaml –> 可以协助PyYAML加快解析速度(arm架构上效果明显)
优化后效果:
单节点:
单节点安装在arm上从之前的25分钟下降到12分钟, x86上从10分钟下降到8分钟
三节点集群:
在arm上从40分钟下降到20分钟

Categories: HANDBOOK

0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *