我正在尝试使用Ansible-synchronize同时将一组文件部署到多个服务器上。现在,我们有一个手工制作的顺序解决方案,它可以实现SCP,而且显然不能很好地扩展。由于Ansible使用SSH多路复用,所以我认为这将达到我的目的。下面是对我的设置的代表性描述:
远程文件erver.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,...}
...远程目标服务器:
target1.x
target2.x
...
target10.xansible.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‘,或者至少比'n/2’加速比更快一些。我在某个地方读到,在拉模式下同步应该工作得更好,我假设是这样的,因为(至少在理论上)在拉模式下,我们将复制的责任委托给在'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:未能连接到远程文件erver.x:连接拒绝(111)\n rsync错误: clientserver.c(124) receiver=3.0.6\n处socket IO (代码10)中的错误”,"rc":10}
在互联网的其他地方,有人建议我确保rsync守护进程在这两台主机上运行。我的系统管理员不会运行rsync守护进程,建议我使用rsync的rsync over ssh特性。我已经证实,这个命令:
rsync -av remotefileserver.x:/path/to/files /my/destination在其中一个目标服务器上成功工作。
于是我试着:
src: "remotefileserver.x/{{ path }}" 还有一大堆其他的安全错误
“可能的侵入尝试!失败:没有这样的文件或目录(2)\n nrsync错误:一些文件/吸引子没有在main.c(1505) receiver=3.0.6\n上传输(见先前的错误)(代码23)”,"rc":23
以下是我的问题:
(不,主厨/木偶/盐不是选项,因为我们不想在目标框上运行类似代理的东西)
谢谢!
发布于 2017-07-05 06:24:57
通过强制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 }}"
发布于 2019-06-16 10:09:12
确保在远程节点之间启用了基于SSH密钥的身份验证。
必须在远程节点之间启用密码较少的登录。否则,同步任务将被卡住,您的Ansible play也会被卡住。
https://stackoverflow.com/questions/39925156
复制相似问题