Unison:在两个服务器上设置并自动执行目录的双向同步


格蒂图片/ iStockphoto的将

与Linux系列板载操作系统的两台服务器同步目录的问题是可以解决的,如果你使用专门的工具更容易。让我们看看如何用 Unison做到这一点

也许您有几台服务器,并且面临着同步这些服务器上某些目录的任务。例如,您需要在每台服务器上同步/ data目录,以便某些应用程序可以访问相关信息。或者,也许您只是需要以同步方式定期将数据从一台服务器备份到另一台服务器。

Unison与rsync同步实用程序类似,但是与它不同,它支持双向同步。也就是说,它允许您同步文件的两个副本,并根据所做的更改更新每个副本。

在服务器上使用Unison时,理想的是安装诸如openssh-server和ssh之类的软件包,因为出于安全原因,最好使用SSH协议来完成同步。但是,如果您对网络的安全性有信心(例如,服务器可以在不使用密码的情况下使用SSH身份验证),则不必费心。

使用Unison还需要什么


我将以两个Ubuntu服务器为例(均为18.04)展示整个过程。您可以将Unison与其他发行版一起安装和使用,但是您将需要更改安装命令,否则可以从标准存储库安装Unison(当然,您的用户必须具有sudo权限)。

我将使用以下服务器:

  • 服务器1-192.168.1.6
  • 服务器2-192.168.1.19

如何安装Unison


首先要注意的是安装Unison。这应该在两个服务器上都完成。转到两个服务器并输入命令:

sudo apt-get install unison unison-all -y

等待Unison安装完成并继续。

如何生成和复制SSH密钥


首先,我们仅为server1生成SSH密钥为此,请使用以下命令:

ssh-keygen -t rsa

当要求您输入密码时,只需按ENTER键。
生成密钥后,使用以下命令将其复制到server2

ssh-copy-id 192.168.1.19

复制密钥后,您可以直接进行业务。

如何使用Unison


为了测试目的,我们为每个服务器创建一个测试目录。server1的命令

sudo mkdir -p /data1

对于server2

sudo mkdir -p /data2

接下来,在两台服务器上,必须更改创建目录的所有者的名称,否则Unison将无法在其中写入任何内容。作为所有者,指定将运行Unison命令的用户:

sudo chown -R $USER.$USER /data2

server1做同样的事情

sudo chown -R $USER.$USER /data1

将一些测试文件放在/ data1中

touch /data1/{test1,test2,test3}

我们将目录与以下命令同步(通过在server1上运行它):

unison /data1 ssh://192.168.1.19//data2

由于您是第一次尝试同步这些根目录,因此您会收到一条警告,提示同步可能会花费一些时间(但是在我们的情况下,这不会发生,因为我们仅向目录中添加了三个最小容量的测试文件)。如果将其作为生产的备份,那么第一次启动确实会花费一些时间。

所以下次再喝茶。同时,按Enter键开始该过程。完成此操作后,将要求您确认每个文件的同步。完成后,输入“ y”继续。

由于我们仅同步三个测试文件,因此这将很快发生,并使您返回到bash shell。要确保文件已同步,请转到server2并输入命令:

ls /data2

此外,系统将报告我们的test1,test2和test3文件位于/ data2目录中



成功:Unison同步了这两个目录。

如何在无需用户交互的情况下启动Unison


我认为您不想每次启动Unison时都不断确认每个目录文件的同步。当您同步带有大量文件的目录时,这尤其令人讨厌。因此,需要自动化。转到server1并输入命令:

nano ~/.unison/default.prf

打开配置文件进行编辑时,请在其中添加两行:

auto=true
batch=true

然后保存并关闭文件。
现在,Unison不会再麻烦您了。但这还不是全部。

如何为Cron Scheduler创建任务


我认为您几乎不需要手动启动同步,因为您可能在某个地方犯了错误,或者例如没有考虑服务器上目录结构的更改。要配置自动化,您需要为server1创建一个cron作业
让我们创建一个脚本来开始同步:

sudo nano /usr/local/bin/unisonsync

以下应添加到此文件:

#!/bin/bash/
unison /data1 ssh://192.168.1.19//data2

接下来,您需要授予脚本执行权:

sudo chmod ugo+x /usr/local/bin/unisonsync

使用以下命令为Cron创建作业:

crontab -e

在那之后键入:

*/5 * * * * /usr/local/bin/unisonsync &> /dev/null

现在,同步将每5分钟自动开始一次。

我已经展示了Unison可以轻松地在两个Linux服务器上同步目录。您可以通过将文件添加到两个服务器上相应的测试目录/ data1/ data2来自己验证确保同步有效后,您可以在生产服务器上的战斗模式下使用它。



作为广告


VDSina始终乐于为任何任务提供可靠的服务器。您可以选择大量用于自动安装的操作系统,可以从自己的映像安装任何操作系统,也可以在同一位置的服务器之间使用高速本地网络


All Articles