如何用Unison同步Ubuntu服务器目录
你可能在你的数据中心里有几台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数据中心服务器上的目录保持同步。确保通过将文件添加到两个服务器上的两个数据目录中来进行测试。确定同步正常后,您可以在生产服务器上进行设置。