我正在尝试使用Ansible-synchronize将一堆文件同时部署到多组服务器。现在我们有一个手工制作的顺序解决方案,可以做SCP,但显然不能很好地伸缩。由于Ansible使用SSH多路复用,我认为这将符合我的目的。这是我设置的代表介绍:Ansible同步并行远程到远程
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
我本来以下剧本设置:
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 }}"
这种技术上的工作,但我的增速只是1.25倍(没有多大的改善),其中,因为我希望在“N/2”加速获得附近“n”或至少东西。我在pull模式下阅读的某处应该更好地工作,因为我们假设在拉模式下(至少在理论上),我们会将复制的责任委托给单个目标主机=>接近'n'加速。
所以我改变了我的剧本到以下几点:
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甚至适合我的目的?
- 我对Ansible的期望是否不正确?
- 我对'同步'的假设是不正确的吗?
- 有什么我可以改变我的剧本,使推模式更快(forks = 20)或修复我的拉模式设置?
- 有没有一种正确的方法可以让Ansible通过ssh使用rsync来提取文件?
- 还有什么我可以做的手工制作我自己的基于自定义Python的并行文件拉解决方案吗?
(不,厨师/木偶/盐没有选择,因为我们不希望在其上运行的目标箱子剂样东西)
谢谢!
你已经明确表示,如果有20个客户试图从同一服务器同步,每一个获取服务器带宽的1/20 ?无论如何,什么是{{src_path}}? –
@GUIDO ** {{src_path}} **是本文开头提到的_remotefileserver.x_上的路径。它是_remotefileserver.x_上的一个文件,我想将rsync/copy复制到所有的目标服务器。例如,在_remotefileserver.x_上,它的路径可以是:'/ storage/path/to/versions/component1/versionid-1/file1'。感谢您查看这个! –