Ansible 调整连接数

Ansible调整连接数量和同时运行的任务数量

调整连接数forks

Ansible在处理Playbook时会按照顺序运行每一个play。确定受管主机列表后,Ansible将按照顺序在受管主机上运行任务。通常只有会在全部受管主机完成当前任务后才会继续往下执行其他任务。

Ansible可以同时连接到play中的所有主机以执行每项任务,这种方式适用于小规模的主机列表。如果对着数百台受控主机同时进行操作的话,控制节点会面临着巨大的性能压力。

所以,为了避免这种情况发生导致控制节点压力过大或出现异常,Ansible在执行任务时默认最大连接数为5。这个默认值是由Ansible配置文件中的forks参数控制。如果你的控制节点性能强劲,你可以在配置文件中手动配置该参数调整为更大的数值,这样在执行任务时可以同时连接到更多的受控节点,进而加快任务的执行速度。

1
2
3
4
[defaults]
inventory=inventory
remote_user=devops
forks=5

当然ansibleansible-playbook命令都提供了-f--forks选项来覆盖ansible在配置文件中读取到的forks值。

分批次完成任务

通常情况下Ansible会在执行下一个任务前,要求全部的受控主机都完成当前的任务。但是要求全部的主机同时完成某一个任务可能会带来麻烦,特别是在处理Web负载均衡的机器时,如果任务要求集群内的全部主机同时重启Web服务,那么业务就会中断。所以在playbook中使用serial关键字可以解决这个问题,它能够控制play批量的完成任务,而不是让全部主机同时都完成一个任务。

下面的例子是使用serial关键字来控制一批只能2台受控主机完成这个Play,假设我们一共有6台机器,那么剩下的四台机器分别要等前面的两台受控主机执行完成全部的Play后才会完成到它们执行Play,6台节点两两一组,分批次执行任务。这样不会导致我们的业务因为重启全部的机器而终止。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
---
- name: Update web server
hosts: webservers
serial: 2
tasks:
- name: Latest version of apache installed
yum:
name: httpd
state: latest
notify:
- Restart apache

handlers:
- name: Restart apache
service:
name: httpd
enabled: yes
state: restarted
...

serial关键字也可以设置为百分比。此百分比应用于该play中主机的总数,已确定每次批量执行play的主机个数。