問題:
假如有A、B、C、D....等機器,
機器A為Ansible服務器,
機器B、C、D...等為Ansible管理的
節點服務器,A機器與其他機器都不在同一個網絡,也就是A機器必須添加VPN之后才能與其他機器通信,我要上傳文件夾到節點服務器;
普通的上傳文件方法是用Ansible的copy模塊把放在files里的文件上傳上去,這個昨天部署的時候,4台並發,打包上傳,用了42分鍾,平時手動拷貝一下分把鍾的事情,這樣就讓自動部署失去意義了
name: put the latest api to server
copy: src=api.tar.gz dest=/usr/local/tomcat/webapps/
上
傳慢的原因分析:(我自己這么想的)
1:Ansible是通過VPN連接上去的,上傳速度慢
2:Ansible文件上傳本身速度就慢
解決辦法:
我先手動上傳到一台B機器,然后由B機器用scp的形式分發給C、D、E....等機器
解決過程遇到的問題:
也就是Ansible要把寫好的scp拷貝腳本在B機器上執行,然后就動手干,先把文件夾手動上傳到B機器的/home/lile目錄下,先做單台測試:
---
- hosts: B機器
remote_user: lile
sudo: yes
tasks:
- name: from B機器 put the api to other node
shell: scp -r -P 34110 /home/lile/api lile@C機器:/home/lile/
這里執行的結果就是,一直卡着不動,然后在B機器上去查看ps -ef|grep scp 是可以看得到Ansible在B機器上執行scp腳本的一些東西,比如:
他卡在那里,那我就在B機器上自己手動執行這幾條命令,看行不行,能不能執行成功,因為ansible的原理是把腳本拷貝在遠程節點的tmp下,然后執行嗎,既然他卡着了,肯定有問題,那我手動執行一下,問題就找到了,執行tmp的那個腳本的時候,提示要輸入密碼,那么怎么解決scp不需要密碼呢,那就是把自己的公鑰拷過去,也就是
ssh-copy-id -i B機器的id_rsa.pub C機器,這樣B機器拷貝東西過去就不用密碼了,再來執行一遍這個yml,還是卡着,這又是為啥呢,我按照前面的辦法,手動執行他傳過來的腳本,是可以成功scp過去的,后來想了一想,因為ansible是用普通用戶執行的,用了sudo,sudo加scp是必須得要輸入密碼的,那我怎么把sudo這個東西去掉呢,反過來看了一下yml,
sudo用了yes,那么我把這一句去掉就可以了,但是其他的還是的要sudo才能行,就直能把這個拷貝的yml做一個單獨的執行過程了。
最后的那個模型大概就是這樣:
---
- hosts: B機器
remote_user: lile
tasks:
- name: from B機器 put the api to other node
shell: scp -r -P 34110 /home/lile/api lile@{{ item }}:/home/lile/
with_items:
- C機器
- D
機器
- E
機器
- F
機器
......
