在Debian Squeeze上设置两个服务器之间的Unison文件同步

在Debian Squeeze上设置两个服务器之间的Unison文件同步 本教程将介绍如何在两个Deb ...之间设置文件同步。

在Debian Squeeze上设置两个服务器之间的统一文件同步

本教程将介绍如何使用Unison在两台Debian Squeeze服务器之间设置文件同步。 Unison是一个类似于rsync的文件同步工具,但最大的区别在于它会跟踪/同步两个方向的更改,即在server1上更改的文件将被复制到server2,反之亦然。

我不会保证这将为您工作!

1初步说明

在本教程中,我使用以下两个Debian Squeeze服务器:

  • server1.example.com ,IP地址为192.168.0.100
  • server2.example.com ,IP地址为192.168.0.101

我想同步两个服务器之间的目录/ var / www 。 我将在本教程中以root用户身份运行Unison,以便Unison具有足够的权限来同步用户和组权限。

2安装Unison

server1 / server2:

Unison必须安装在server1server2上 ; 因为我们使用SSH从server1连接到server2 ,我们还需要SSH包。 这可以实现如下:

apt-get install unison openssh-server ssh

3在服务器1上创建私钥/公钥对

server1:

现在我们在server1.example.com上创建一个私钥/公钥对:

ssh-keygen -t dsa

root @ server1:〜#ssh-keygen -t dsa
生成公共/私有dsa密钥对。
输入要保存密钥的文件(/root/.ssh/id_dsa): < - ENTER
创建目录“/root/.ssh”。
输入密码(无密码为空): < - ENTER
再次输入相同的密码: < - ENTER
您的身份已保存在/root/.ssh/id_dsa中。
您的公钥已保存在/root/.ssh/id_dsa.pub中。
关键指纹是:
1b:95:bc:4a:f4:9f:d8:ea:24:31:0f:c9:72:d5:a7:80 root@server1.example.com
关键的randomart形象是:
+ - [DSA 1024] ---- +
| |
| o o |
| E *。 |
| o = o o |
| S o。 |
| + O +。 |
| + + + |
| o。 |
| .o |
+ ----------------- +
root @ server1:〜#

重要的是,您不要输入密码,否则在没有人工交互的情况下镜像将无法正常工作,因此只需按ENTER键

接下来,我们将公钥复制到server2.example.com

ssh-copy-id -i $HOME/.ssh/id_dsa.pub root@192.168.0.101

root @ server1:〜#ssh-copy-id -i $ HOME / .ssh / id_dsa.pub root@192.168.0.101
主机'192.168.0.101(192.168.0.101)'的真实性无法建立。
RSA钥匙指纹为25:d8:7a:ee:c2:4b:1d:92:a7:3d:16:26:95:56:62:4e。
您确定要继续连接(是/否)? < - 是(只有这是您第一次连接到server2时才会看到)
警告:将“192.168.0.101”(RSA)永久添加到已知主机列表中。
root@192.168.0.101的密码: < - server2 root password
现在尝试使用“ssh”root@192.168.0.101“登录机器,并签入:

.ssh / authorized_keys

以确保我们没有添加您不期望的额外密钥。

root @ server1:〜#

现在检查server2的 server1的公钥是否正确传输:

server2:

cat $HOME/.ssh/authorized_keys

ssh-dss AAAAB3NzaC1kc3MAAACBAPhiAexgEBexnw0rFG8lXwAuIsca/V+lhmv5lhF3BqUfAbL7e2sWlQlGhxZ8I2UnzZK8Ypffq6Ks+lp46yOs7MMXLqb7JBP9gkgqxyEWqOoUSt5hTE9ghupcCvE7rRMhefY5shLUnRkVH6hnCWe6yXSnH+Z8lHbcfp864GHkLDK1AAAAFQDddQckbfRG4C6LOQXTzRBpIiXzoQAAAIEAleevPHwi+a3fTDM2+Vm6EVqR5DkSLwDM7KVVNtFSkAY4GVCfhLFREsfuMkcBD9Bv2DrKF2Ay3OOh39269Z1rgYVk+/MFC6sYgB6apirMlHj3l4RR1g09LaM1OpRz7pc/GqIGsDt74D1ES2j0zrq5kslnX8wEWSHapPR0tziin6UAAACBAJHxgr+GKxAdWpxV5MkF+FTaKcxA2tWHJegjGFrYGU8BpzZ4VDFMiObuzBjZ+LrUs57BiwTGB/MQl9FKQEyEV4J+AgZCBxvg6n57YlVn6OEA0ukeJa29aFOcc0inEFfNhw2jAXt5LRyvuHD/C2gG78lwb6CxV02Z3sbTBdc43J6y root@server1.example.com

4跑步统一

server1:

我们现在可以首次运行Unison来同步两个服务器上的/ var / www目录。 在server1上运行:

unison /var/www ssh://192.168.0.101//var/www

输出将类似于这一个 - 您可能必须回答几个问题,因为这是第一次Unison正在运行:

root @ server1:〜#unison / var / www ssh://192.168.0.101//var/www
联系服务器...
已连接[//server1.example.com//var/www - > //server2.example.com//var/www]
寻找变化
警告:没有找到这些根的归档文件,其规范名称是:
/ var / www
//server2.example.com//var/www
这也可能发生
因为这是你第一次同步这些根,
或者因为您将Unison升级到具有其他版本的新版本
存档格式。

如果副本是,更新检测可能需要一段时间
大。

Unison会假设这两个副本的“最后同步状态”
完全是空的 这意味着任何不同的文件
将被报告为冲突,以及只存在于一个的任何文件
复制品将被判断为新的,并被传播到另一个副本。
如果两个副本相同,则不会有任何更改。

如果您重复看到此消息,可能是因为您的一台机器
正在从DHCP获取其地址,这导致其主机名更改
在同步之间。 请参阅UNISONLOCALHOSTNAME的文档
环境变量,建议如何纠正这一点。

非常感谢对Unison项目的捐款:
http://www.cis.upenn.edu/~bcpierce/unison

等待服务器的更改| webalizer
协调变更

本地server2.e ...
dir ----> apps [f]
file ----> index.html [f]
链接----> ispconfig [f]
dir ----> php-fcgi-scripts / apps [f]
dir ----> webalizer [f]
链接----> webmail [f]

继续传播更新? [] < - y
传播更新


UNISON 2.32.52于2011年7月26日14:25:02开始传播变更
[BGN]将应用从/ var / www复制到//server2.example.com //var/www
[BGN]将index.html从/ var / www复制到//server2.example.com //var/www
[BGN]将ispconfig从/ var / www复制到//server2.example.com//var/www
[BGN]将php-fcgi-scripts / apps从/ var / www复制到//server2.example.com //var/www
[BGN]将webalizer从/ var / www复制到//server2.example.com //var/www
[BGN]将webmail从/ var / www复制到//server2.example.com //var/www
[END]复制ispconfig
[END]复制网页邮件
[END]复制应用程式
[END]复制webalizer
[END]复制index.html
[END]复制php-fcgi-scripts / apps
UNISON 2.32.52于2011年7月26日14:25:03完成传播变更


保存同步器状态
同步在14:25:03完成(传送6个项目,0跳过0个失败)
root @ server1:〜#

现在检查server1server2上的/ var / www目录,你应该会发现它们现在在同步。

当然,我们不想以交互方式运行Unison,因此我们可以创建一个首选项文件( /root/.unison/default.prf ),其中包含我们在命令行上必须指定的所有设置:

vi /root/.unison/default.prf

# Roots of the synchronization
root = /var/www
root = ssh://192.168.0.101//var/www

# Paths to synchronize
#path = current
#path = common
#path = .netscape/bookmarks.html

# Some regexps specifying names and paths to ignore
#ignore = Path stats    ## ignores /var/www/stats
#ignore = Path stats/*  ## ignores /var/www/stats/*
#ignore = Path */stats  ## ignores /var/www/somedir/stats, but not /var/www/a/b/c/stats
#ignore = Name *stats   ## ignores all files/directories that end with "stats"
#ignore = Name stats*   ## ignores all files/directories that begin with "stats"
#ignore = Name *.tmp    ## ignores all files with the extension .tmp

#          When set to true, this flag causes the user interface to skip
#          asking for confirmations on non-conflicting changes. (More
#          precisely, when the user interface is done setting the
#          propagation direction for one entry and is about to move to the
#          next, it will skip over all non-conflicting entries and go
#          directly to the next conflict.)
auto=true

#          When this is set to true, the user interface will ask no
#          questions at all. Non-conflicting changes will be propagated;
#          conflicts will be skipped.
batch=true

#          !When this is set to true, Unison will request an extra
#          confirmation if it appears that the entire replica has been
#          deleted, before propagating the change. If the batch flag is
#          also set, synchronization will be aborted. When the path
#          preference is used, the same confirmation will be requested for
#          top-level paths. (At the moment, this flag only affects the
#          text user interface.) See also the mountpoint preference.
confirmbigdel=true

#          When this preference is set to true, Unison will use the
#          modification time and length of a file as a `pseudo inode
#          number' when scanning replicas for updates, instead of reading
#          the full contents of every file. Under Windows, this may cause
#          Unison to miss propagating an update if the modification time
#          and length of the file are both unchanged by the update.
#          However, Unison will never overwrite such an update with a
#          change from the other replica, since it always does a safe
#          check for updates just before propagating a change. Thus, it is
#          reasonable to use this switch under Windows most of the time
#          and occasionally run Unison once with fastcheck set to false,
#          if you are worried that Unison may have overlooked an update.
#          The default value of the preference is auto, which causes
#          Unison to use fast checking on Unix replicas (where it is safe)
#          and slow checking on Windows replicas. For backward
#          compatibility, yes, no, and default can be used in place of
#          true, false, and auto. See the section "Fast Checking" for more
#          information.
fastcheck=true

#          When this flag is set to true, the group attributes of the
#          files are synchronized. Whether the group names or the group
#          identifiers are synchronizeddepends on the preference numerids.
group=true

#          When this flag is set to true, the owner attributes of the
#          files are synchronized. Whether the owner names or the owner
#          identifiers are synchronizeddepends on the preference
#          extttnumerids.
owner=true

#          Including the preference -prefer root causes Unison always to
#          resolve conflicts in favor of root, rather than asking for
#          guidance from the user. (The syntax of root is the same as for
#          the root preference, plus the special values newer and older.)
#          This preference is overridden by the preferpartial preference.
#          This preference should be used only if you are sure you know
#          what you are doing!
prefer=newer

#          When this preference is set to true, the textual user interface
#          will print nothing at all, except in the case of errors.
#          Setting silent to true automatically sets the batch preference
#          to true.
silent=true

#          When this flag is set to true, file modification times (but not
#          directory modtimes) are propagated.
times=true

评论应该使文件自我解释,除了路径指令。 如果不指定路径指令,则指令中的目录将被同步。 如果指定路径指令,则路径是相对于路径(例如, root = / var / wwwpath = current转换为/ var / www / current ),只有这些子目录将被同步,而不是指定的整个目录在指令中。

通过查看Unison的手册页,可以找到有关可用选项的更多信息:

man unison

现在我们把所有的设置放在一个首选项文件(特别是root (和可选的路径 )指令)中,我们可以运行Unison而不用任何参数:

unison

5创建Cron作业

server1:

我们希望自动化同步,这就是为什么我们在server1.example.com上创建一个cron作业的原因

crontab -e

*/5 * * * * /usr/bin/unison &> /dev/null

这将每5分钟运行一次; 根据您的需要进行调整(见

man 5 crontab

)。 我在这里使用完整的路径( / usr / bin / unison ),以确保cron知道在哪里找到一致 。 您的一致位置可能不同。 跑

which unison

找出你的位置。