我有一些设备,正在考虑让它们与齐奏。
这些设备并不是一直在运行,它们每天会关闭几个小时,不一定是同时关闭。没有一个设备是 24 小时运行的。所以我需要真正的点对点,例如查看更改(标记为*
)如何从 A 传播到 B、C、D,即使在所有同步期间都没有运行:
A-on* B-on C-off D-off
A-on* B-on* C-off D-off
A-off* B-on* C-off D-off
A-off* B-on* C-on D-off
A-off* B-on* C-on* D-off
A-off* B-off* C-on* D-off
A-off* B-off* C-on* D-on
A-off* B-off* C-on* D-on*
不幸的是,统一用户手册推荐一个星形拓扑对于 2 台以上机器:
使用 Unison 同步两台以上的机器
Unison 设计用于同步副本对。但是,可以使用它通过执行多个成对同步来保持更大的机器组同步。如果您需要这样做,最可靠的设置方法是将机器组织成“星形拓扑”,其中一台机器指定为“集线器”,其余机器指定为“辐条”,并且每台辐条机器仅与集线器同步。星型拓扑的一大优点是它消除了“混淆的可能性”虚假冲突这是因为 Unison 为其同步的每对主机维护一个单独的存档。
尽管如此,有没有什么办法能够与Unison实现真正的点对点呢?
答案1
我一直在星形拓扑中使用 Unison 来同步我的四台机器。原因是它不是一个版本控制文件系统(例如 git),而是一个同步工具。
如果您确实选择分布式拓扑(您必须通过为每个设备创建配置文件并同步所有设备来设置),那么您无疑最终会进行大量的手动冲突解决,这将是严峻的。情况肯定会如此,除非您仅对系统上的文件进行极其基本的更改,并且一次仅在一台设备上进行更改。
所以,建议:
- 租用一台便宜的虚拟服务器,该服务器具有足够的存储空间来存储您要同步的数据。
- 尝试一下分布式拓扑,看看是否会导致太多问题而无法使用。
答案2
Unison 本质上是点对点的。这正是建议使用星形拓扑的原因:该工具没有任何中央服务器的概念,因此由用户强制实施。
您当然可以以点对点方式使用 Unison,但这并不奇怪:对于每对机器(A,B),您需要选择其中一台机器(例如 A)并创建一个配置文件以与 B 同步因此,如果您有 n 台机器,则需要 n*(n-1)/2 个配置文件。
除了需要大量配置文件之外,您还可能会遇到相互冲突的更改。这是您的要求的内在问题。特别是,您的网络可能会被分区:如果最终 D1 = D2 ≠ D3 = D4,则 {D1, D2} 和 {D3, D4} 之间存在冲突;如果您通过同步 D1 和 D3 来协调该冲突,那么您最终会在 D1 和 D3 上得到一个新版本,而在 D2 和 D4 上得到不同的旧版本:混乱往往会蔓延。
如果你真的想要纯粹的点对点,我建议使用一个维护历史并且擅长合并的工具,比如git。即使在那里,星形拓扑(即中央存储库)也是最好的,因为它提供了一个拥有权威最新版本的地方。但是如果你没有中央存储库,因此你的历史记录很容易产生冲突,那么至少 git 会给你更好的工具来记录合并历史记录,以便你可以看到哪些部分发生冲突(当你'正在尝试解决冲突)。