如何在 80 台服务器上将大型存档 (~16GB) 从一个安装点快速传输到另一个安装点?挂载点位于不同的分区上。我尝试了 ansible (使用 -f 100 选项)和循环中使用 rsync 的 bash 脚本,但这两种方法都非常慢,而且看起来都不优雅。
答案1
我会安装PDSHpdsh
并将其配置为允许我在所有服务器(或选定的单个主机或服务器组 - 如中所定义)上并行运行命令/etc/性别文件)。
例如,安装后pdsh
,将其配置为使用 ssh (而不是奇怪的默认值 rsh)并定义一个all
包含所有服务器的组:
pdsh -g all mv /old /new |& tee /tmp/pdsh.log
您可以使用 less(等)查看日志文件,或者使用 的pdsh
实用程序对每个主机一个部分进行良好格式化dshbak
:
dshback /tmp/pdsh.log
每个输出行都以它来自的主机名作为前缀(这是dshbak
用于按主机名对输出进行分组的):
# pdsh -g all uptime
hanuman: 22:24:53 up 60 days, 1:38, 8 users, load average: 0.05, 0.03, 0.05
indra: 22:24:16 up 14 days, 25 min, 3 users, load average: 0.22, 0.40, 0.44
ganesh: 22:24:53 up 49 days, 7:56, 6 users, load average: 0.73, 0.79, 0.79
kali: 22:25:05 up 3 min, 0 users, load average: 0.01, 0.03, 0.02
pdsh
还包括一个有用的pdcp
命令,可以将文件并行复制到许多服务器。例如/etc/genders
从本地主机复制到所有服务器:
pdcp -g all /etc/genders /etc/
pdsh
最初设计用于 HPC 集群,但在任何服务器组上都同样有用,包括 Web 服务器场、复制数据库服务器等。为任何服务器组分配任意标签的能力在这里很有用,例如,将某些机器组标记为web
、mysql
、dns
,并将它们放入 中all
。
还有其他几个集群 ssh 工具,但根据我的经验,pdsh
这是最简单使用和最容易配置的。
Puppet、Ansible 等非常适合大规模部署和更新,pdsh 非常适合大规模命令行服务器管理。
答案2
考虑尝试在局域网上多播或广播文件,并在所有客户端上从同一流接收文件。然后需要时间来复制一份......
例如参见:
http://linux.die.net/man/1/udp-sender
祝你好运,格哈德