2016-10-07 27 views
0

私は、複数のサーバーセットに同時に多数のファイルを展開するためにAnsible-synchronizeを使用しようとしています。現在、私たちはSCPを行う手作業の逐次的なソリューションを持っていますが、明らかに規模が大きくないことは明らかです。 AnsibleはSSHの多重化を使用しているので、私はこれが私の目的に役立つと仮定しました。ここに私のセットアップの代表記述がある:アシスタントパラレルリモートリモート同時実行

hosts: {{ remotetargetservers }} 
 
tasks: 
 
    - name: deploying site-specific files 
 
     synchronize: 
 
     src: "{{ src_path }}" 
 
     dest: "{{ dest_dir }}/{{ item }}" 
 
     checksum: yes 
 
     delegate_to: remotefileserver.x 
 
     with_items: "{{ files_list }}"

remotefileserver.x:

/storage/path/to/versions/component1/versionid-1/{file1,file2,file3,dir1/file1,dir2/file1,...} 
/storage/path/to/versions/component1/versionid-2/{file1,file2,file3,dir1/file1,dir2/file1,...} 
/storage/path/to/versions/component2/versionid-1/{file1,file2,file3,dir1/file1,...} 
/storage/path/to/versions/component3/versionid-1/{file1,file2,file3,dir1/file1,...} 
... 

remotetargetservers:

target1.x 
target2.x 
... 
target10.x 

ansible.cfg:

pipelining = True 
forks = 20 

私はもともと、次の脚本のセットアップを持っていました

これは技術的に働いたが、私は近くを得ることを望ん「N」または「n/2」スピードアップにわたって少なくとも何かたとして、私の高速化だけで1.25倍(改善のあまりない)ところでした。私はどこかでプルモードで同期するほうがうまくいくはずですが、プルモードで(少なくとも論理的に)コピーの責任を個々のターゲットホストに委ねるので、私はそのように思っていました。

だから私は、次のように私の脚本を変更:

hosts: {{ remotetargetservers }} 
 
tasks: 
 
    - name: deploying site-specific files 
 
     synchronize: 
 
      mode: pull 
 
      src: "rsync://remotefileserver.x/{{ src_path }}" 
 
      dest: "{{ dest_dir }}/{{ item }}" 
 
      checksum: yes 
 
     delegate_to: "{{ inventory_hostname }}" 
 
     with_items: "{{ files_list }}"

を私はこれを実行すると、私は次のエラーを取得:インターネット上の他の場所

"..., msg": "rsync: failed to connect to remotefileserver.x: Connection refused (111)\nrsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.6]\n", "rc": 10}

を、誰かrsyncデーモンが両方のホストで実行されていることを確認することをお勧めします。システム管理者はrsyncデーモンを実行せず、rsyncのrsync-over-ssh機能を使用することを提案します。

rsync -av remotefileserver.x:/path/to/files /my/destination 

ターゲットサーバのいずれかから首尾よく働いていた:私は、このコマンドは、ことを確認しました。

そして私が試した:

src: "remotefileserver.x/{{ path }}" 

ここで他のセキュリティエラー

"POSSIBLE BREAK-IN ATTEMPT! failed: No such file or directory (2)\nrsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1505) [receiver=3.0.6]\n", "rc": 23

の全体の束を得たが、私の質問です:

  • は私の目的のためにも適してAnsibleです?
  • 私のAnabilitiesからの期待は間違っていますか?
  • 「同期する」という私の前提は間違っていますか?
  • プッシュモードを高速化(フォーク= 20)したり、プルモード設定を修正したりするために、私のプレイブックで変更できるものはありますか?
  • ssh上でrsyncを使用してファイルをプルすることをアシスタントに求める正しい方法はありますか?
  • 独自のカスタムPythonベースの並列ファイルプルソリューションを手作業で作ることができますか?

(私たちは、ターゲットボックスにエージェント様なものを実行したくないので、いいえ、シェフ/人形/塩はオプションではありません)

ありがとうございます!

+0

同じサーバーから同期しようと20台のクライアントを持っている場合は、それぞれがサーバーの帯域幅の1/20明確になっていることを?とにかく、{{src_path}}は何ですか? –

+0

@GUIDO ** {{src_path}} **は、記事の冒頭で説明した_remotefileserver.x_上のパスです。 _remotefileserver.x_上のファイルで、rsync /すべてのターゲットサーバにコピーしたいと思っています。たとえば、_remotefileserver.x_で、そのパスは '/ storage/path/to/versions/component1/versionid-1/file1'です。これを見てくれてありがとう! –

答えて

0

rsyncにsshを強制することで、この問題を解決できるはずです。 rsync_opts:「-e sshの-p 22」

hosts: {{ remotetargetservers }} 
 
tasks: 
 
    - name: deploying site-specific files 
 
     synchronize: 
 
      mode: pull 
 
      src: "rsync://remotefileserver.x/{{ src_path }}" 
 
      dest: "{{ dest_dir }}/{{ item }}" 
 
      checksum: yes 
 
      rsync_opts: "-e ssh -p 22" 
 
     delegate_to: "{{ inventory_hostname }}" 
 
     with_items: "{{ files_list }}"