帮助中心

立即注册 咨询客服

当前位置:首页 > 帮助中心> 如何用Unison同步Ubuntu服务器目录

如何用Unison同步Ubuntu服务器目录

发布时间:2020年05月06日 09:07:21    来源: A5互联

你可能在你的数据中心里有几台Linux服务器。你也可能需要保持这些服务器中的某些目录同步。例如,假设你需要在这些服务器之间同步保持一个/data目录,这样一个应用程序就可以访问最新的信息。或者你只是需要将一个服务器同步备份到另一个服务器。

无论你有什么需求,Unison都能帮你解决。

Unison是一个类似于rsync的工具,唯一的区别是它可以跟踪和同步两个目录,而不仅仅是一个目录。Unison 的一个注意事项是,它需要你创建一个无密码的 SSH 身份验证密钥 (否则镜像将无法工作),所以如果这对你来说是个障碍,你会想放弃这个工具。不过,如果你对自己的网络安全有信心,(比如服务器可以在没有密码的情况下使用SSH密钥验证),那就继续进行下面的操作。

你需要什么

这里将演示如何使用两个Ubuntu Server(均为18.04)。您可以在不同的发行版上安装和使用Unison,只需修改安装命令,因为Unison可以从标准存储库中安装。

您还需要一个具有sudo特权的用户。

我将使用以下内容:

服务器1-192.168.1.6

服务器2-192.168.1.19

1、如何安装Unison

首先要注意的是Unison的安装。这必须在两个服务器上都完成。登录到两个服务器并发出命令:

sudo apt-get install unison unison-all -y

一旦安装了Unison,您就可以继续了。

2、如何生成和复制SSH密钥

现在,我们仅在server1上生成一个SSH密钥。对于此问题,命令:

ssh-keygen -t rsa

当提示您输入密码时,只需按键盘上的Enter键即可。

生成密钥后,使用以下命令将其复制到server2:

ssh-copy-id 192.168.1.19

复制SSH密钥后,就可以开始使用Unison了。

3、如何使用Unison

为了进行测试,让我们在两个服务器上都创建目录。在server1上,发出以下命令:

sudo mkdir -p /data1

在server2上,发出以下命令:

sudo mkdir -p /data2

在这两台服务器上,你要改变新目录的所有权----否则Unison将无法向其写入。将所有权变更为运行Unison命令的用户名,如下所示:

sudo chown -P $USER.$USER /data2

使用以下命令在server1上执行相同的操作:

sudo chown -P $USER.$USER /data1

使用以下命令将几个测试文件放在/ data1中:

touch /data1/{test1,test2,test3}

现在,使用命令(在server1上运行)同步两个目录:

unison /data1 ssh://192.168.0.19//data2

因为这是您第一次尝试同步这些根文件夹,所以将警告您同步可能需要一些时间(不会,因为我们仅将三个空文件添加到目录中)。如果这是生产备份,则第一次运行可能需要一些时间。

按键盘上的Enter键以启动该过程。完成此操作后,将提示您完成每个文件的同步。完成此操作后,键入y继续。

键入y时,将立即进行同步。因为我们仅同步三个新文件,所以它将很快发生,并返回到bash提示符。要确保文件已同步,请转到server2并发出以下命令:

ls /data2

您应该看到列出了test1,test2和test3。

4、如何在没有交互的情况下运行Unison

您不需要每次运行Unison时都必须回答问题,尤其是在同步包含大量文件的目录时。为防止交互,发出命令(在server1上):

nano ~/.unison/default.prf

在该配置文件中,添加以下行:

auto=true

batch=true

保存并关闭文件。

现在,当您运行Unison sync命令时,不会提示您进行任何输入。

5、如何为Unison创建一个cron作业

您当然不希望必须手动运行这些同步作业,否则您可能最终会忘记数据中心服务器中的目录并使其失去同步。要自动设置,必须在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

使用以下命令创建cronjob:

crontab -e

在生成的文件中,添加以下行(以每5分钟运行一次脚本):

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

现在,您正在运行一个文件同步系统,该系统将每隔五分钟使两个Linux数据中心服务器上的目录保持同步。确保通过将文件添加到两个服务器上的两个数据目录中来进行测试。确定同步正常后,您可以在生产服务器上进行设置。