当前位置: 首页 > news >正文

阿里云申请域名后网站衡水城乡建设局网站

阿里云申请域名后网站,衡水城乡建设局网站,舟山市定海区建设规划局网站,c 登录 wordpressAnsible系列(七)#xff1a;执行过程分析、异步模式和速度优化 分类: Linux服务篇 undefined 我写了更完善的Ansible专栏文章#xff1a;一步到位玩儿透Ansible Ansible系列文章#xff1a;http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1.1 ansible执行过程分析 …Ansible系列(七)执行过程分析、异步模式和速度优化 分类: Linux服务篇 undefined 我写了更完善的Ansible专栏文章一步到位玩儿透Ansible Ansible系列文章http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1.1 ansible执行过程分析 使用ansible的-vvv或-vvvv分析执行过程。以下是一个启动远程192.168.100.61上httpd任务的执行过程分析。其中将不必要的信息都是用.....替换了。 # 读取配置文件然后开始执行对应的处理程序。 Using /etc/ansible/ansible.cfg as config file META: ran handlers# 第一个任务默认都是收集远程主机信息的任务。 # 第一个收集任务加载setup模块 Using module file /usr/lib/python2.7/site-packages/ansible/modules/system/setup.py# 建立连接获取被控节点当前用户的家目录用于存放稍后的临时任务文件此处返回值为/root。 # 在-vvv的结果中第一行属于描述性信息第二行为代码执行段第三行类似此处的host_node()为上一段代码的返回结果。后同 192.168.100.61 ESTABLISH SSH CONNECTION FOR USER: None 192.168.100.61 SSH: EXEC ssh -C .......................... 192.168.100.61 (0, /root\n, )# 再次建立连接在远端创建临时任务文件的目录临时目录由配置文件中的remote_tmp指令控制 192.168.100.61 ESTABLISH SSH CONNECTION FOR USER: None 192.168.100.61 SSH: EXEC ssh -C .......................... /bin/sh -c ( umask 77 mkdir -p echo /root/.ansible/tmp/ansible-tmp-1495977564.58-40718671162202 echo ansible-tmp-1495977564.58-40718671162202 echo /root/.ansible/tmp/ansible-tmp-1495977564.58-40718671162202 ) sleep 0 192.168.100.61 (0, ansible-tmp-1495977564.58-40718671162202/root/.ansible/tmp/ansible-tmp-1495977564.58-40718671162202\n, )# 将要执行的任务放到临时文件中并使用sftp将任务文件传输到被控节点上 192.168.100.61 PUT /tmp/tmpY5vJGX TO /root/.ansible/tmp/ansible-tmp-1495977564.58-40718671162202/setup.py 192.168.100.61 SSH: EXEC sftp -b - -C ............. [192.168.100.61] 192.168.100.61 (0, sftp put /tmp/tmpY5vJGX /root/.ansible/tmp/ansible-tmp-1495977564.58-40718671162202/setup.py\n, )# 建立连接设置远程任务文件其所有者有可执行权限 192.168.100.61 ESTABLISH SSH CONNECTION FOR USER: None 192.168.100.61 SSH: EXEC ssh -C ......................... /bin/sh -c chmod ux /root/.ansible/tmp/ansible-tmp-1495977564.58-40718671162202/ /root/.ansible/tmp/ansible-tmp-1495977564.58-40718671162202/setup.py sleep 0 192.168.100.61 (0, , )# 建立连接执行任务执行完成后立即删除任务文件并返回收集到的信息给ansible。到此为止setup收集任务结束关闭共享连接 192.168.100.61 ESTABLISH SSH CONNECTION FOR USER: None 192.168.100.61 SSH: EXEC ssh -C ............ /bin/sh -c /usr/bin/python /root/.ansible/tmp/ansible-tmp-1495977564.58-40718671162202/setup.py; rm -rf /root/.ansible/tmp/ansible-tmp-1495977564.58-40718671162202/ /dev/null 21 sleep 0 192.168.100.61 (0, \r\n{invocation: {..........., Shared connection to 192.168.100.61 closed.\r\n)# 进入下一个任务此处为服务管理任务所以加载service模块 Using module file /usr/lib/python2.7/site-packages/ansible/modules/system/service.py# 建立连接获取被控节点当前用户的家目录用于存放稍后的临时任务文件此处返回值为/root 192.168.100.61 ESTABLISH SSH CONNECTION FOR USER: None 192.168.100.61 SSH: EXEC ssh -C ......................... 192.168.100.61 (0, /root\n, )# 建立连接将要执行的任务放入到临时文件中并传输到远程目录 192.168.100.61 ESTABLISH SSH CONNECTION FOR USER: None 192.168.100.61 SSH: EXEC ssh -C .............. /bin/sh -c ( umask 77 mkdir -p echo /root/.ansible/tmp/ansible-tmp-1495977564.97-137863382080241 echo ansible-tmp-1495977564.97-137863382080241 echo /root/.ansible/tmp/ansible-tmp-1495977564.97-137863382080241 ) sleep 0 192.168.100.61 (0, ansible-tmp-1495977564.97-137863382080241/root/.ansible/tmp/ansible-tmp-1495977564.97-137863382080241\n, )192.168.100.61 PUT /tmp/tmpn5uZhP TO /root/.ansible/tmp/ansible-tmp-1495977564.97-137863382080241/service.py 192.168.100.61 SSH: EXEC sftp -b - -C .............. [192.168.100.61] 192.168.100.61 (0, sftp put /tmp/tmpn5uZhP /root/.ansible/tmp/ansible-tmp-1495977564.97-137863382080241/service.py\n, )# 建立连接设置远程任务文件其所有者有可执行权限 192.168.100.61 ESTABLISH SSH CONNECTION FOR USER: None 192.168.100.61 SSH: EXEC ssh -C ........................ /bin/sh -c chmod ux /root/.ansible/tmp/ansible-tmp-1495977564.97-137863382080241/ /root/.ansible/tmp/ansible-tmp-1495977564.97-137863382080241/service.py sleep 0 192.168.100.61 (0, , )# 建立连接执行任务执行完成后立即删除任务文件并将执行的结果返回到ansible端。到此为止service模块任务执行结束关闭共享连接 192.168.100.61 ESTABLISH SSH CONNECTION FOR USER: None 192.168.100.61 SSH: EXEC ssh -C .............. /bin/sh -c /usr/bin/python /root/.ansible/tmp/ansible-tmp-1495977564.97-137863382080241/service.py; rm -rf /root/.ansible/tmp/ansible-tmp-1495977564.97-137863382080241/ /dev/null 21 sleep 0 192.168.100.61 (0, \r\n{msg: ............, Shared connection to 192.168.100.61 closed.\r\n)将上面的进行总结执行过程将是这样的 读取配置文件加载inventory文件。包括主机变量和主机组变量执行第一个任务收集远程被控节点的信息 建立连接获取家目录信息将要执行的收集任务放到临时文件中将临时任务文件传输到被控节点的临时目录中ssh连接到远端执行收集任务删除任务文件将收集信息返回给ansible端关闭连接执行第二个任务此为真正的主任务 建立连接获取家目录信息将要执行的任务放到临时文件中将临时任务文件传输到被控节点的临时目录中ssh连接到远端执行任务删除任务文件将执行结果返回给ansible端ansible输出到屏幕或指定文件中关闭连接执行第三个任务执行第四个任务 如果是多个被控节点那么将同时在多个节点上并行执行每一个任务例如同时执行信息收集任务。不同节点之间的任务没有先后关系主要依赖于性能。每一个任务执行完毕都会立即将结果返回给ansible端所以可以通过ansible端结果的输出顺序和速度判断执行完毕的先后顺序。 如果节点数太多ansible无法一次在所有远程节点上执行任务那么将先在一部分节点上执行一个任务(每一批节点的数量取决于fork进程数量)直到这一批所有节点上该任务完全执行完毕才会接入下一个批节点(数量取决于fork进程数量)直到所有节点将该任务都执行完毕然后重新回到第一批节点开始执行第二个任务。依次类推直到所有节点执行完所有任务ansible端才会释放shell。这是默认的同步模式也就是说在未执行完毕的时候ansible是占用当前shell的任务执行完毕后释放shell了才可以输入其他命令做其他动作。 如果是异步模式假如fork控制的并发进程数为5远程控制节点为24个则ansible一开始会将5个节点的任务扔在后台并每隔一段时间去检查这些节点的任务完成情况当某节点完成不会立即返回而是继续等待直到5个进程都空闲了才会将这5个节点的结果返回给ansible端ansible会继续将下一批5个节点的任务扔在后台并每隔一段时间进行检查依次类推直到完成所有任务。 在异步模式下如果设置的检查时间间隔为0在将每一批节点的任务丢到后台后都会立即返回ansible并立即将下一批节点的任务丢到后台直到所有任务都丢到后台完成后会返回ansible端ansible会立即释放占用的shell。也就是说此时ansible是不会管各个节点的任务执行情况的不管执行成功还是失败。 因此在轮训检查时间内ansible仍然正在运行(尽管某批任务已经被放到后台执行了)当前shell进程仍被占用处于睡眠状态只有指定的检查时间间隔为0才会尽快将所有任务放到后台并释放shell。 需要注意3点 1 .按批(例如每次5台全部完成一个任务才进入下一批的5台)完成任务的模式在ansible 2.0版本之后可以通过修改ansible的执行策略来改变(见后文)改变后会变成前赴后继的执行模式当一个节点执行完一个任务会立即接入另一个节点不再像默认情况一样等待这一批中的其他节点完成该任务。 2 .上面执行过程是默认的执行过程如果开启了pipelining加速ansible执行效率会省去sftp到远端的过程。 3 .信息收集任务是默认会执行的但是可以设置禁用它。 1.2 ansible并发和异步 上面已经对ansible的执行过程进行了很详细的分析也解释了同步和异步的模式是如何处理任务的。所以此处简单举几个例子。 ansible默认只会创建5个进程并发执行任务所以一次任务只能同时控制5台机器执行。如果有大量的机器需要控制例如20台ansible执行一个任务时会先在其中5台上执行执行成功后再执行下一批5台直到全部机器执行完毕。使用-f选项可以指定进程数指定的进程数量多一些不仅会实现全并发对异步的轮训poll也会有正面影响。 ansible默认是同步阻塞模式它会等待所有的机器都执行完毕才会在前台返回。可以采取异步执行模式。 异步模式下ansible会将节点的任务丢在后台每台被控制的机器都有一个job_idansible会根据这个job_id去轮训该机器上任务的执行情况例如某机器上此任务中的某一个阶段是否完成是否进入下一个阶段等。即使任务早就结束了但只有轮训检查到任务结束后才认为该job结束。可以指定任务检查的时间间隔默认是10秒。除非指定任务检查的间隔为0否则会等待所有任务都完成后ansible端才会释放占用的shell。 如果指定时间间隔为0则ansible会立即返回(至少得连接上目标主机任务发布成功之后立即返回)并不会去检查它的任务进度。 ansible centos -B200 -P 0 -m yum -a namedos2unix -o -f 6 192.168.100.61 | SUCCESS {ansible_job_id: 986026954359.9166, changed: true, finished: 0, results_file: /root/.ansible_async/986026954359.9166, started: 1} 192.168.100.59 | SUCCESS {ansible_job_id: 824724696770.9431, changed: true, finished: 0, results_file: /root/.ansible_async/824724696770.9431, started: 1} 192.168.100.60 | SUCCESS {ansible_job_id: 276581152579.10006, changed: true, finished: 0, results_file: /root/.ansible_async/276581152579.10006, started: 1} 192.168.100.64 | SUCCESS {ansible_job_id: 237326453903.72268, changed: true, finished: 0, results_file: /root/.ansible_async/237326453903.72268, started: 1} 192.168.100.63 | SUCCESS {ansible_job_id: 276700021098.73070, changed: true, finished: 0, results_file: /root/.ansible_async/276700021098.73070, started: 1} 192.168.100.65 | SUCCESS {ansible_job_id: 877427488272.72032, changed: true, finished: 0, results_file: /root/.ansible_async/877427488272.72032, started: 1}关于同步、异步以及异步时的并行数、轮训间隔对ansible的影响通过以下示例说明 当有6个节点时仅就释放shell的速度而言以下几种写法 # 同步模式大约10秒返回。 ansible centos -m command -a sleep 5 -o # 异步模式分两批执行。大约10秒返回。 ansible centos -B200 -P 1 -m command -a sleep 5 -o -f 5 # 异步模式和上一条命令时间差不多但每次检查时间长一秒所以可能会稍有延迟。大约11-12秒返回。 ansible centos -B200 -P 2 -m command -a sleep 5 -o -f 5 # 异步模式一批就执行完大约5-6秒返回。 ansible centos -B200 -P 1 -m command -a sleep 5 -o -f 6 # 异步模式一批就完成大约5-6秒完成。 ansible centos -B200 -P 2 -m command -a sleep 5 -o -f 6 # 异步模式分两批且检查时间过长。即使只睡眠5秒但仍需要10秒才能判断该批执行结束。所以大约20秒返回。 ansible centos -B200 -P 10 -m command -a sleep 5 -o -f 5 # 异步模式一批执行完成但检查时间超过睡眠时间因此大约10秒返回。 ansible centos -B200 -P 10 -m command -a sleep 5 -o -f 6在异步执行任务时需要注意那些有依赖性的任务。对于那些对资源要求占有排它锁的任务如yum不应该将Poll的间隔设置为0。如果设置为0很可能会导致资源阻塞。 总结来说,大概有以下一些场景需要使用到ansible的异步特性 某个task需要运行很长的时间,这个task很可能会达到ssh连接的timeout没有任务是需要等待它才能完成的即没有任务依赖此任务是否完成的状态需要尽快返回当前shell 当然也有一些场景不适合使用异步特性 这个任务是需要运行完后才能继续另外的任务的申请排它锁的任务 当然对于有任务依赖性的任务也还是可以使用异步模式的只要检查它所依赖的主任务状态已完成就可以。例如要配置nginx要求先安装好nginx在配置nginx之前先检查yum安装的状态。 - name: YUM - fire and forget taskyum: namenginx stateinstalledasync: 1000poll: 0register: yum_sleeper- name: YUM - check on fire and forget taskasync_status: jid{{ yum_sleeper.ansible_job_id }}register: job_resultuntil: job_result.finishedretries: 301.3 ansible的-t选项妙用 ansible的-t或--tree选项是将ansible的执行结果按主机名保存在指定目录下的文件中。 有些时候ansible执行起来的速度会非常慢这种慢体现在即使执行的是一个立即返回的简单命令(如ping模块)也会耗时很久且不是因为ssh连接慢导致的。如果使用-t选项将第一次执行得到的结果按inventory中定义的主机名保存在文件中下次执行到同一台主机时速度将会变快很多即使之后不再加上-t选项也可以在一定时间内保持迅速执行。即使执行速度正常如执行一个Ping命令0.7秒左右使用-t选项也可以在此基础上变得更快。 除了使用-t选项使用重定向将结果重定向到某个文件中也是一样的效果。至于为何会如此我也不知道是在无意中测试出来的。有必要指出我在CentOS 6.6上遇到过这样的问题但并不是总会如此且在CentOS 7上正常。因此如果你也出现了这样的问题可以参考这种偏方。 以CentOS 6.6安装的ansible 2.3为例正常执行ansible会非常慢使用-t可以解决这个问题。如下。 没有使用-t时移除dos2unix包所需时间为13秒多。 time ansible centos -B200 -P 0 -m yum -a namedos2unix stateremoved -o -f 6 192.168.100.60 | SUCCESS {ansible_job_id: 987125400759.10653, changed: true, finished: 0, results_file: /root/.ansible_async/987125400759.10653, started: 1} 192.168.100.63 | SUCCESS {ansible_job_id: 735153954362.74074, changed: true, finished: 0, results_file: /root/.ansible_async/735153954362.74074, started: 1} 192.168.100.61 | SUCCESS {ansible_job_id: 192721090554.9813, changed: true, finished: 0, results_file: /root/.ansible_async/192721090554.9813, started: 1} 192.168.100.64 | SUCCESS {ansible_job_id: 494724112239.73269, changed: true, finished: 0, results_file: /root/.ansible_async/494724112239.73269, started: 1} 192.168.100.59 | SUCCESS {ansible_job_id: 2259915341.10078, changed: true, finished: 0, results_file: /root/.ansible_async/2259915341.10078, started: 1} 192.168.100.65 | SUCCESS {ansible_job_id: 755223232484.73025, changed: true, finished: 0, results_file: /root/.ansible_async/755223232484.73025, started: 1}real 0m13.746s user 0m1.288s sys 0m1.417s使用-t选项后安装dos2unix只需1.9秒左右。 time ansible centos -B200 -P 0 -m yum -a namedos2unix stateinstalled -o -f 6 -t /tmp/a real 0m1.933s user 0m0.398s sys 0m0.900s之后即使不再使用-t选项对同样的主机进行操作速度也会变得非常快。 time ansible centos -B200 -P 0 -m yum -a namedos2unix stateremoved -o -f 6real 0m1.730s user 0m0.892s sys 0m0.572s至于保存的内容为何实际上仅仅只是保存了普通的输出内容而已。 ll /tmp/a/ total 24 -rw-r--r-- 1 root root 145 May 28 15:54 192.168.100.59 -rw-r--r-- 1 root root 145 May 28 15:54 192.168.100.60 -rw-r--r-- 1 root root 143 May 28 15:54 192.168.100.61 -rw-r--r-- 1 root root 143 May 28 15:54 192.168.100.63 -rw-r--r-- 1 root root 145 May 28 15:54 192.168.100.64 -rw-r--r-- 1 root root 145 May 28 15:54 192.168.100.65cat /tmp/a/192.168.100.59 {ansible_job_id: 659824383578.10145, changed: true, finished: 0, results_file: /root/.ansible_async/659824383578.10145, started: 1}1.4 优化ansible速度 最初ansible的执行效率和saltstack(基于zeromq消息队列的方式)相比要慢的多的多特别是被控节点量很大的时候。但是ansible发展到现在它的效率得到了极大的改善。在被控节点不太多的时候默认的设置已经够快即使被控节点数量巨大的时候也可以通过一些优化极大的提高其执行效率。 前面-t选项也算是一种提速方式但算是bug式的问题所以没有通用性。 1.4.1 设置ansible开启ssh长连接 ansible天然支持openssh默认连接方式下它对ssh的依赖性非常强。所以优化ssh连接在一定程度上也在优化ansible。其中一点是开启ssh的长连接即长时间保持连接状态。 要开启ssh长连接要求ansible端的openssh版本高于或等于5.6。使用ssh -V可以查看版本号。然后设置ansible使用ssh连接被控端的连接参数此处修改/etc/ansible/ansible.cfg在此文件中启动下面的连接选项其中ControlPersist5d是控制ssh连接会话保持时长为5天。 ssh_args -C -o ControlMasterauto -o ControlPersist5d除此之外直接设置/etc/ssh/ssh_config(不是sshd_config因为ssh命令是客户端命令)中对应的长连接项也是可以的。 开启长连接后在会话过期前会一直建立连接在netstat的结果中会看到ssh连接是一直established状态且会在当前用户家目录的.ansible/cp目录下生成一些socket文件每个会话一个文件。 例如执行一次ad-hoc操作。 ansible centos -m ping查看netstat发现ssh进程的会话一直是established状态。 shell netstat -tnalpActive Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1143/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2265/master tcp 0 0 192.168.100.62:58474 192.168.100.59:22 ESTABLISHED 31947/ssh: /root/.a tcp 0 96 192.168.100.62:22 192.168.100.1:8189 ESTABLISHED 29869/sshd: rootpt tcp 0 0 192.168.100.62:37718 192.168.100.64:22 ESTABLISHED 31961/ssh: /root/.a tcp 0 0 192.168.100.62:38894 192.168.100.60:22 ESTABLISHED 31952/ssh: /root/.a tcp 0 0 192.168.100.62:48659 192.168.100.61:22 ESTABLISHED 31949/ssh: /root/.a tcp 0 0 192.168.100.62:33546 192.168.100.65:22 ESTABLISHED 31992/ssh: /root/.a tcp 0 0 192.168.100.62:54824 192.168.100.63:22 ESTABLISHED 31958/ssh: /root/.a tcp6 0 0 :::22 :::* LISTEN 1143/sshd tcp6 0 0 ::1:25 :::* LISTEN 2265/master且家目录下~/.ansible/cp/下会生成对应的socket文件。 ls -l ~/.ansible/cp/ total 0 srw------- 1 root root 0 Jun 3 18:26 5c4a6dce87 srw------- 1 root root 0 Jun 3 18:26 bca3850113 srw------- 1 root root 0 Jun 3 18:26 c89359d711 srw------- 1 root root 0 Jun 3 18:26 cd829456ec srw------- 1 root root 0 Jun 3 18:26 edb7051c84 srw------- 1 root root 0 Jun 3 18:26 fe17ac7eed1.4.2 开启pipelining pipeline也是openssh的一个特性。在ansible执行每个任务的流程中有一个过程是将临时任务文件put到一个ansible端的一个临时文件中然后sftp传输到远端然后通过ssh连接过去远程执行这个任务。如果开启了pipelining一个任务的所有动作都在一个ssh会话中完成也会省去sftp到远端的过程它会直接将要执行的任务在ssh会话中进行。 开启pipelining的方式是配置文件(如ansible.cfg)中设置pipeliningtrue默认是false。 shell grep ^pipelining /etc/ansible/ansible.cfg pipelining True但是要注意如果在ansible中使用sudo命令的话(ssh userhost sudo cmd)需要在被控节点的/etc/sudoers中禁用requiretty。 之所以要设置/etc/sudoers中的requiretty是因为ssh远程执行命令时它的环境是非登录式非交互式shell默认不会分配tty没有ttyssh的sudo就无法关闭密码回显(使用-tt选项强制SSH分配tty)。所以出于安全考虑/etc/sudoers中默认是开启requiretty的它要求只有拥有tty的用户才能使用sudo也就是说ssh连接过去不允许执行sudo。可以通过visudo编辑配置文件注释该选项来禁用它。 grep requiretty /etc/sudoers # Defaults requiretty修改设置/etc/sudoers是在被控节点上进行的(或者ansible连接过去修改)其实在ansible端也可以解决sudo的问题只需在ansible的ssh参数上加上-tt选项即可。 ssh_args -C -o ControlMasterauto -o ControlPersist5d -tt以下是开启pipelining前ansible执行过程其中将很多不必要的信息使用......来替代了。 ######## 开启pipelining前执行ping模块的过程 ######## Using /etc/ansible/ansible.cfg as config file Loading callback plugin minimal of type stdout, v2.0 from /usr/lib/python2.7/site-packages/ansible/plugins/callback/__init__.pyc META: ran handlers Using module file /usr/lib/python2.7/site-packages/ansible/modules/system/ping.py# 首先建立一次ssh连接获取远端当前用户家目录用于存放稍后的临时任务文件 192.168.100.65 ESTABLISH SSH CONNECTION FOR USER: None 192.168.100.65 SSH: EXEC ssh -vvv -C ................ 192.168.100.65 /bin/sh -c echo ~ sleep 0 192.168.100.65 (0, /root\n, ................)# 再次建立ssh连接创建临时文件目录 192.168.100.65 ESTABLISH SSH CONNECTION FOR USER: None 192.168.100.65 SSH: EXEC ssh -vvv -C ..................... 192.168.100.65 /bin/sh -c ( umask 77 mkdir -p ....... ) sleep 0 192.168.100.65 (0, ansible-tmp-1496489511.13-10633592020239/root/.ansible/tmp/ansible-tmp-1496489511.13-10633592020239\n, .............)# 将任务放入到本地临时文件中然后使用sftp传输到远端 192.168.100.65 PUT /tmp/tmp2_VKGo TO /root/.ansible/tmp/ansible-tmp-1496489511.13-10633592020239/ping.py 192.168.100.65 SSH: EXEC sftp -b - -vvv -C ................. [192.168.100.65] 192.168.100.65 (0, sftp put /tmp/tmp2_VKGo /root/.ansible/tmp/ansible-tmp-1496489511.13-10633592020239/ping.py\n, .....................)# 又一次建立ssh连接对任务文件进行授权 192.168.100.65 ESTABLISH SSH CONNECTION FOR USER: None 192.168.100.65 SSH: EXEC ssh -vvv -C ............. 192.168.100.65 /bin/sh -c chmod ux .......... /ping.py sleep 0 192.168.100.65 (0, , ........................)# 最后执行任务完成任务后删除任务文件并返回ansible端信息注意ssh -tt选项它强制为ssh会话分配tty这样可以执行sudo命令 192.168.100.65 ESTABLISH SSH CONNECTION FOR USER: None 192.168.100.65 SSH: EXEC ssh -vvv -C .............. -tt 192.168.100.65 /bin/sh -c /usr/bin/python .........../ping.py; rm -rf .......... /dev/null 21 sleep 0 192.168.100.65 (0, \r\n{invocation: {...............) 以下是开启pipelining后ansible执行过程。 ########### 开启pipelining后执行ping模块的过程 ######## Using /etc/ansible/ansible.cfg as config file Loading callback plugin minimal of type stdout, v2.0 from /usr/lib/python2.7/site-packages/ansible/plugins/callback/__init__.pyc META: ran handlers Using module file /usr/lib/python2.7/site-packages/ansible/modules/system/ping.py# 只建立一次ssh连接所有动作都在这一个ssh连接中完成由于没有使用-tt选项所以需要在被控主机上禁用requiretty选项 192.168.100.65 ESTABLISH SSH CONNECTION FOR USER: None 192.168.100.65 SSH: EXEC ssh -vvv -C ............ 192.168.100.65 /bin/sh -c /usr/bin/python sleep 0 192.168.100.65 (0, \n{.............)从上面的过程对比中可以看到开启pipelining后每次执行任务时都大量减少了ssh连接次数(只需要一次ssh连接)且省去了sftp传输任务文件的过程因此在管理大量节点时能极大提升执行效率。 1.4.3 修改ansible执行策略 默认ansible在远程执行任务是按批并行执行的一批控制多少台主机由命令行的-f或--forks选项控制。例如默认的并行进程数是5如果有20台被控主机那么只有在每5台全部执行完一个任务才继续下一批的5台执行该任务即使中间某台机器性能较好完成速度较快它也会空闲地等待在那直到所有20台主机都执行完该任务才会以同样的方式继续下一个任务。如下所示 h1 h2 h3 h4 h5(T1)--h6 h7 h8 h9 h10(T1)...--h16 h17 h18 h19 h20(T1)--h1 h2 h3 h4 h5(T2)--..... 在ansible 2.0中添加了一个策略控制选项strategy默认值为linear即上面按批并行处理的方式。还可以设置strategy的值为free。 在free模式下ansible会尽可能快的切入到下一个主机。同样是上面的例子首先每5台并行执行一个任务当其中某一台机器由于性能较好提前完成了该任务它不会等待其他4台完成而是会跳出该任务让ansible切入到下一台机器来执行该任务。也就是说这种模式下一台主机完成一个任务后另一台主机会立即执行任务它是前赴后继的方式。如下所示 h1 h2 h3 h4 h5(T1)--h1 h2 h3 h4 h6(T1)--h1 h3 h4 h6 h7(T1)--......--h17 h18 h19 h20(T1) h1(T2)--h18 h19 h20(T1) h1 h2(T2)--... 设置的方式如下 - hosts: allstrategy: freetasks:...1.4.4 设置facts缓存 ansible或ansible-playbook默认总是先收集facts信息。在被控主机较少的情况下收集信息还可以容忍如果被控主机数量非常大收集facts信息会消耗掉非常多时间。 可以设置gather_facts: no来禁止ansible收集facts信息但是有时候又需要使用facts中的内容这时候可以设置facts的缓存。例如在空闲的时候收集facts缓存下来在需要的时候直接读取缓存进行引用。 ansible的配置文件中可以修改gathering的值为smart、implicit或者explicit。smart表示默认收集facts但facts已有的情况下不会收集即使用缓存factsimplicit表示默认收集facts要禁止收集必须使用gather_facts: Falseexplicit则表示默认不收集要显式收集必须使用gather_facts: Ture。 在使用facts缓存时(即设置为smart)ansible支持两种facts缓存redis和jsonfile。 例如以下是/etc/ansible/ansible.cfg中jsonfile格式的缓存配置方法。 [defaults] gathering smart fact_caching_timeout 86400 fact_caching jsonfile fact_caching_connection /path/to/cachedir这里设置的缓存过期时间为86400秒即缓存一天。缓存的json文件放在/path/to/cachedir目录下各主机的缓存文件以主机名命名。缓存文件是一个json文件要查看缓存文件如/path/to/cachedir/192.168.100.59中的内容使用如下语句即可。 cat /path/to/cachedir/192.168.100.59 | python -m json.tool
http://wiki.neutronadmin.com/news/178974/

相关文章:

  • 十大不收费看盘网站网站内容规范
  • 做网站的五要素网站开发获取本地ip
  • 网站建设记在哪个科目wordpress禁止自动保存
  • 如何做学校网站app安徽鸿顺鑫城建设集团网站
  • 网站开发用软件百度广告投放价格表
  • 网页制作公司介绍合肥seo培训
  • 网站建设首选沈阳高端网站建设开发公司工程管理中心管理制度
  • thinkphp 企业网站linux wordpress 下载文件
  • 定制网站开发费用多少怎么进不了深圳市建设局网站
  • 如何做微信电子书下载网站杭州网站建设费用价格
  • 营销型网站源码现在网站尺寸
  • 桥头做网站百度大数据搜索引擎
  • dw做的网站怎么招标网站建设招标方案
  • wordpress导航栏跟随长沙网站推广seo
  • 毕业设计可以做自己的网站吗资源下载WordPress主题
  • soho做网站要写品牌吗网站开发的项目实战
  • 珠海网站建设推广南京和筑建设有限公司网站
  • 网站建设与运营公司的市场开发方案网络运维从入门到精通
  • 所有的网站都要用htmlu做吗合肥做的比较好的网站有那几家
  • 用wordpress建站会不会显得水平差58同城网站建设
  • 昆明著名网站建设公司管理系统软件
  • 工信部个人网站备案网络加速器
  • 只做二手奢侈品的网站flat movie wordpress
  • 好的网站特点百事通做网站
  • 婚介 东莞网站建设苏州园区
  • 海口制作网站软件东莞市建设规划局网站
  • 西安做网站需要多少钱全网推广
  • 做网站时搜索的代码是什么wordpress ssh
  • 沈阳建设厅官方网站wordpress 餐饮主题
  • 招聘网站费用怎么做分录杭州互联网网站公司