首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不可同步并行远程到远程

不可同步并行远程到远程
EN

Stack Overflow用户
提问于 2016-10-07 20:17:15
回答 2查看 4.7K关注 0票数 1

我正在尝试使用Ansible-synchronize同时将一组文件部署到多个服务器上。现在,我们有一个手工制作的顺序解决方案,它可以实现SCP,而且显然不能很好地扩展。由于Ansible使用SSH多路复用,所以我认为这将达到我的目的。下面是对我的设置的代表性描述:

远程文件erver.x

代码语言:javascript
复制
/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,...}
...

远程目标服务器:

代码语言:javascript
复制
target1.x
target2.x
...
target10.x

ansible.cfg:

代码语言:javascript
复制
pipelining = True
forks = 20

我最初有以下的剧本设置:

代码语言:javascript
复制
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‘加速比附近的单个目标主机=>。

因此,我把我的剧本改为:

代码语言:javascript
复制
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特性。我已经证实,这个命令:

代码语言:javascript
复制
rsync -av remotefileserver.x:/path/to/files /my/destination

在其中一个目标服务器上成功工作。

于是我试着:

代码语言:javascript
复制
src: "remotefileserver.x/{{ path }}" 

还有一大堆其他的安全错误

“可能的侵入尝试!失败:没有这样的文件或目录(2)\n nrsync错误:一些文件/吸引子没有在main.c(1505) receiver=3.0.6\n上传输(见先前的错误)(代码23)”,"rc":23

以下是我的问题:

  • 是否适合我的目的?
  • 我对“理性”的期望是否不正确?
  • 我关于“同步”的假设是否不正确?
  • 在我的游戏手册中有什么可以使推送模式更快(叉= 20)或者修复我的拉模式设置吗?
  • 是否有正确的方法要求Ansible使用rsync在ssh上提取文件?
  • 除了手工制作我自己定制的基于Python的并行文件-拉解决方案之外,还有什么可以做的吗?

(不,主厨/木偶/盐不是选项,因为我们不想在目标框上运行类似代理的东西)

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2017-07-05 06:24:57

通过强制rsync使用ssh,您应该能够克服这个问题。rsync_opts:"-e ssh -p 22“

代码语言:javascript
复制
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 }}"

票数 0
EN

Stack Overflow用户

发布于 2019-06-16 10:09:12

确保在远程节点之间启用了基于SSH密钥的身份验证。

必须在远程节点之间启用密码较少的登录。否则,同步任务将被卡住,您的Ansible play也会被卡住。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39925156

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档