产品推广营销网站seo快速排名

news/2025/10/1 5:23:33/文章来源:
产品推广营销,网站seo快速排名,网件路由器维修,网店推广发展趋势有哪些Ansible系列(七)#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://www.mzph.cn/news/923521.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高新建设网站电话手机软件app免费下载

转:http://www.360sps.com/Item/CreatePermissionLevels.aspx 权限级别是SharePoint 2010新增加的功能,使我们对权限的设置又提高了一个层次。SharePoint 2010的权限级别指的是可分配给用户或用户组的单个权限组。SharePoint 2010自带的权限级别有&#…

获取网页 代码 做网站1111wk域名更换

1 游戏发行运营中的主要职能: ​ 一、发行运营通识l 运营介绍:职能分工、发行运营流程、职业发展能力及要求l 品类认知:行业品类布局、品类用户画像、运营节奏及特性,包含不同品类核心打法及长线运营思路l 海外运营:海…

网站建设开票项目是什么意思中企动力科技股份有限公司网站

一、算法思路: KMP模式匹配算法让主串不发生没必要的回溯,即主串的索引值只做递增操作。如果主串的索引值不发生回溯,那么就需要子串索引值的回溯变化。 子串索引值要以一种怎样的形式就行变化呢?子串索引值的变化方式只和子串自身…

分栏型网站济南网站制作企业

List item 值此国庆佳节,深宅家中,闲来无事,就多写几篇博文。本篇详细深入介绍Linux的系统环境管理。 环境变量 linux系统下,如果你下载并安装了应用程序,很有可能在键入它的名称时出现“command not found”的提示…

网站自然排名工具怎样建设邮箱网站

一般的数据绑定有三种:One-Time,One-Way,Two-way。 One-Time绑定模式的意思即为从viewModel绑定至UI这一层只进行一次绑定,程序不会继续追踪数据的在两者中任何一方的变化,这种绑定方式很使用于报表数据,数据仅仅会加…

网站swf怎么做做代理能赚到钱吗

一、题目 题目描述: 微商模式比较典型,下级每赚 100 元就要上交 15 元,给出每个级别的收入,求出金字塔尖上的人收入。 二、输入输出 输入描述; 第一行输入N,表示有N个代理商上下级关系。 接下来输入N行,每行…

2025包装机厂家推荐榜单出炉:拉伸膜真空包装机,全自动真空包装机,滚动式真空包装机,食品真空包装机,气调包装机公司推荐!

在食品加工、生鲜保鲜等领域,真空机作为保障产品品质的关键设备,其性能稳定性与适配性直接影响企业生产效率与市场口碑。当前市场中,部分设备存在真空度不足导致保鲜期缩短、定制能力薄弱难以适配特殊工况、售后服务…

wordpress设置标题大小seo网页优化服务

欢迎来到文思源想的ai空间,这是技术老兵重学ai以及成长思考的第9篇分享! 这篇笔记承接上一篇技术文档的学习,主要是为了做一个记录,记录下openai sora技术介绍文档提到的一些论文,再此特地记录一下! 1 原文…

南昌网站建设服务吴江区住房与建设局网站

目录 一、项目前置知识 二、使用vscode创建 三、vue介绍 四、局部使用vue 1、快速入门 1.1 需求 1.2 准备工作 1.3 操作 1.3.1 创建html 1.3.2 创建初始html代码 1.3.3 参照官网import vue 1.3.4 创建vue应用实例 1.3.5 准备div 1.3.6 准备用户数据 1.3.7 通过…

广州做营销型网站哪家好wordpress更新网站内容

1. 类的概述 1.1 具体示例 类是描述一类事物的特征和行为的统称,抽象的不存在的,泛指的概念,例如:描述一个人,从外观上(特征)和言行举止(行为)上进行描述外观上&#xff…

2025年真空机厂家推荐榜:平台式真空封口机,拉伸膜真空覆膜机,全自动拉伸膜真空包装机,滚动连续式真空包装机,双面拉伸真空包装机公司实力甄选指南

在食品加工、生鲜保鲜等领域,真空机作为保障产品品质的关键设备,其性能稳定性与适配性直接影响企业生产效率与市场口碑。当前市场中,部分设备存在真空度不足导致保鲜期缩短、定制能力薄弱难以适配特殊工况、售后服务…

杭州做网站企业主流网站开发工具

1. 延时任务以及取消延时的应用场景:实时搜索,文字内容变化时候不发送请求,当停止变化指定时间后再发送请求2. 使用方法:// 回到主线程MainThreadHelper.runOnUIthread(new Runnable() {Overridepublic void run() {// pushActivi…

网站成品作业佛山新网站建设价格

1.IT-Tools 仓库名称: CorentinTh/it-tools 截止发稿星数: 16842 (近一个月新增:5744) 仓库语言: Vue 仓库开源协议: GNU General Public License v3.0 引言 CorentinTh/it-tools 是一个开源项目,提供各种对开发者友好的在线工具&#xff0…

玩具网站开发背景有做soho网站的吗

第一类:逻辑型boolean第二类:文本型char第三类:整数型(byte、short、int、long)char类型占2个字节short从-32768到32767int从-2147483648,到2147483647共10位long从-9223372036854775808到9223372036854775807共19位第四类:浮点型(float、double)在数学中0到1有无数个浮点数&am…

做网站专业服务外贸网站建设电话

各层设备 应用层……………….计算机:应用程序,如FTP,SMTP,HTTP 表示层 ……………….计算机:编码方式,图像编解码、URL字段传输编码 会话层 ……………….计算机:建立会话,SESSI…

郑州免费建站搜索引擎快速排名推广

一级浪涌保护器是防雷系统中最重要的一环,它主要用于建筑物总配电柜、低压变压器进线柜等位置,防止浪涌电压直接从外部传导进入内部,使系统设备免遭雷击损坏。一级浪涌保护器的规范要求、应用、作用和原理以及国标,本文将分别进行…

自己做的网站如何加视频教程娄底公司网站建设

首先这个标题不是我取的,是我喂了关键字让AI给取的,果然非常的标题党,让人印象深刻,另外题图也是AI自动生成的。 先简单回顾一下web自动化测试的一些发展阶段 QTP时代 很多年前QTP横空出世的时候,没有人会怀疑这种工…

美食类网站模板绵阳网站建设怎么做

在车载摄像头日益普及的今天,摄像头图像的畸变问题成为了制约图像质量提升的一大瓶颈。畸变不仅影响画面的美观度,更关键的是它可能导致智能驾驶系统对环境的误判,进而威胁到行车安全。美摄科技凭借其在图像处理领域的深厚实力,推…

做图神器的网站商场设计平面布置图

应用场景 当用户登录状态到登出状态时,对应的JWT的令牌需要设置为失效状态,这时可以使用基于 Redis 的黑名单方案来实现JWT令牌失效。 基于 Redis 的黑名单方案 当用户需要登出系统时,将用户携带的Token进行解析,解码出JWT令牌…

net网站开发参考文献抖音做我女朋友好不好网站

由于不同的需求,我们站长朋友们建站所用的网站程序也不尽相同,有PHP、ASP和ASP.NET等。Godaddy美国主机作为全球最大域名主机商,当之无愧成为站长使用最多的主机。不少朋友应该都知道不同的网站程序对于PHP和ASP的版本要求又不一样&#xff0…