rsync 手册页说“可以使用多播传输协议将批量更新文件同时并行传输到多台主机,而不是将相同的数据分别发送到每台主机。”但我找不到有关如何执行此操作的任何信息。有人可以回复如何执行此操作的示例或提供信息的 URL 吗?
答案1
rsync
本身不支持多播,它仅仅建议使用多播作为传输批处理(增量)文件的方法:
批处理模式
批处理模式可用于将同一组更新应用于许多相同的系统。假设有一棵树在多台主机上复制。现在假设对这棵源树进行了一些更改,这些更改需要传播到其他主机。为了使用批处理模式执行此操作,rsync 使用 write-batch 选项运行,以将对源树所做的更改应用于其中一个目标树。write-batch 选项使 rsync 客户端将对其他相同的目标树重复此操作所需的所有信息存储在“批处理文件”中。
一次生成批处理文件可以节省在更新多个目标树时多次执行文件状态、校验和以及数据块生成的麻烦。可以使用多播传输协议将批量更新文件同时并行传输到多台主机,而不是将相同的数据单独发送到每台主机。
使用多播的一种方法是使用具有实验性多播选项的 TFTP。
在 Linux 上,支持多播选项的一个工具是atftp
(客户端) / atftpd
(服务器)。
例如,在 IP 地址为 192.0.2.2 的主机上手动启动服务器:
/usr/sbin/atftpd --daemon --no-fork --port 69 --tftpd-timeout 300 --retry-timeout 5 --mcast-port 1758 --mcast-addr 239.255.0.0-255 --mcast-ttl 1 --maxthread 100 /srv/tftp
将允许它/srv/tftp
使用多播来提供文件服务。
命令可以包含通过 TFTP 服务器提供批处理的rsync
选项,然后多个客户端可以使用以下多播同时下载文件(如):--only-write-batch=/srv/tftp/foo
foo
/srv/tftp/foo
atftp --option multicast --get --remote-file foo 192.0.2.2
如果满足条件,服务器将一次性将文件提供给多个多播对等方。然后可以使用选项将下载的文件应用于客户端系统rsync
(--read-batch=foo
或者如果仍然适用,复制并使用foo.sh
随 一起创建的脚本foo
,如中所述批处理模式。
注意:默认 Linux 设置systemd可能会阻止多播工作。systemd 套接字必须只监听 IPv4 0.0.0.0:69,而不是双栈 IPv6 端口 69,这就是我提供一个手动启动示例的原因(可能应该在前面加上systemctl stop atftpd.service atftpd.socket
)。atftpd
不支持 IPv6 多播。