Asible学习笔记——优化ansible速度

  

优化ansible速度

  

简单介绍和说明下,优化ansible执行速度的方法,具体如下~

  

常规优化方法

  

ansible的- t选项妙用

  

ansible的“-t"或“——tree"选项是将ansible的执行结果按主机名保存在指定目录下的文件中。

  

<代码> ansible测试- m ping - o - f 6 - t/tmp/树

  

至于保存的内容为何?实际上仅仅只是保存了普通的输出内容而已。

  
 <代码> # pwd/tmp/树
  #猫192.168.246.187
  {" ansible_facts ": {“discovered_interpreter_python”:“/usr/bin/python”},“改变”:假的,“萍”:“乒乓球”} 
  

设置ansible开启ssh长连接

  

如要开启ssh长连接,要求ansible端的openssh版本高于或等于5.6。使用ssh - v <代码> 可以查看版本号。然后设置ansible使用ssh连接被控端的连接参数,此处修改<代码>/和c/可能/ansible.cfg> ControlPersist=5 d 是控制ssh连接会话保持时长为5天。

  

<代码> ssh_args=- c - o ControlMaster=auto - o ControlPersist=5 d

  

除此之外直接设置<代码>/etc/ssh/ssh_config> 中>   

开启长连接后,在会话过期前会一直建立连接,在<代码> netstat> 状态,且会在当前用户家目录的<代码>。ans可能/cp 目录下生成一些套接字文件,每个会话一个文件。

  

例如:执行一次特别<代码> 操作:

  

<代码> ansible测试- m ping

  

查看netstat,发现ssh进程的会话一直是建立状态。

  

<代码> netstat -lnpta

  

且家目录下<代码> ~/.ansible/cp/>   

? ?关于ssh保持长连接的方法:

  

(1)修改服务器端的等sshd_config

/ssh/
 <代码> ClientAliveInterval 60 #服务器每隔60秒发送一次请求给客户,然后端响应,从而保持连接
  ClientAliveCountMax 3 #服务器发出请求后,客户端没有响应得次数达到3,就自动断开连接,正常情况下,客户端不会不响应
  
  systemctl重载sshd  
  

(2)修改客户端的etc/ssh/ssh_config添加以下:(在没有权限改服务器配置的情形下)

  
 <代码> ServerAliveInterval 60 #客户每隔60秒发送一次请求给服务器,然后服务器响应,从而保持连接
  ServerAliveCountMax 3 #客户发出请求后,服务器端没有响应得次数达到3,就自动断开连接,正常情况下,服务器不会不响应 
  

(3)命令行临时修改

  

在命令参数里<代码> ssh - o ServerAliveInterval=60>   

开启流水线

  

管道也是openssh的一个特性。在ansible执行每个任务的流程中,有一个过程是将临时任务文件放置到一个ansible端的一个临时文件中,然后sftp传输到远端,然后通过ssh连接过去远程执行这个任务。

  

如果开启了<代码>流水线>   

开启流水线的方式是配置文件(如ansible。cf g)中设置<代码>流水线=true>   

但是要注意,如果在ansible中使用sudo命令的话(ssh user@host sudo cmd),需要在被控节点的<代码>/etc/sudoers>   

之所以要设置/etc/sudoers中的requiretty,是因为ssh远程执行命令时,它的环境是非登录式非交互式外壳,默认不会分配tty,没有tty, ssh的sudo就无法关闭密码回显(使用“-tt"选项强制ssh分配tty)。

  

所以出于安全考虑,/etc/sudoers中默认是开启requiretty的,它要求只有拥有tty的用户才能使用sudo,也就是说ssh连接过去不允许执行sudo。可以通过visudo/vim编辑配置文件,注释该选项来禁用它。

  
 <代码> grep requiretty/etc/sudoers
  #默认requiretty  
  

修改设置/etc/sudoers是在被控节点上进行的(或者ansible连接过去修改),其实在ansible端也可以解决sudo的问题,只需在ansible的ssh参数上加上“- tt“选项即可。

  

<代码> ssh_args=- c - o ControlMaster=auto - o ControlPersist=5 d tt

  

开启管道后,每次执行任务时都大量减少了ssh连接次数(只需要一次ssh连接),且省去了sftp传输任务文件的过程,因此在管理大量节点时能极大提升执行效率。

Asible学习笔记——优化ansible速度