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

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

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

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

1初步说明

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

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

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

我使用root权限运行本教程中的所有步骤,因此请确保以root用户身份登录:

sudo su

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中。
关键指纹是:
32:0f:f5:49:f0:32:f8:d0:63:8d:44:88:a5:12:f9:73 root@server1.example.com
关键的randomart形象是:
+ - [DSA 1024] ---- +
| .. o.o + |
| ..... + = |
| ... o O + |
| .o E = *。 |
| o + S o |
| = |
| |
| |
| |
+ ----------------- +
root @ server1:〜#

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

接下来,我们将公钥复制到server2.example.com (请注意,必须在server2.example.com上启用root帐户,并且必须允许root登录。要启用Ubuntu系统上的root登录,请运行

sudo passwd root

要检查root登录是否允许,请检查/ etc / ssh / sshd_config中的指令PermitRootLogin - 您可能需要重新启动SSH守护程序。):

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)'的真实性无法建立。
ECDSA键指纹为a2:38:f3:df:7a:6c:b6:3c:d6:c3:9c:88:93:e2:f0:63。
您确定要继续连接(是/否)? < - 是(只有这是您第一次连接到server2时才会看到)
警告:永久添加“192.168.0.101”(ECDSA)到已知主机列表。
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 AAAAB3NzaC1kc3MAAACBAJgYGqpkEPBIV/Uiygz2FbOwCE9ggjXQK8anG/VxaTqH0KhZR+oL1i+Av2aZmK/D3msUQEkqClO51jarQXbm9i7ie7Y6OwQ4G8DBZXzy8A8nQ6V1bEikqif8xmmSayqVKPvHXMv3yINteUdCNYBHAuci1NB5iAf3Gmt/bo5SRpU1AAAAFQDJnh+a6lODf+zSF2eX1L4HvQgtxwAAAIAIOdjsJkzBDseOdTMD5oVZqrrp6cy0e1846DZ4C0PKQSeT9RQqKmbOICa8t94FF8MRLdV0p4x+R8I8VHRloErQ5v1CIVvrtzOGIGAR//Bo5wPI+8lsfbsOj8ZyZI6+bF6wHKjzNFLbgFpZjnIf/CisP87GtPp8MXq3bH7SI/7i6gAAAIAfByiUkqQZ7fOM18BHTqQhopxMjhJhvrATt0PJ/k2JzQp0lQm/Z31azpvccK5GF61AwWbfQSFAGy4AOKtVXZ6ztz80sKZeDwECNFJpT6rubjsbaSX2PvacrV8sAuJI1XZPAgQTl06mJLL9dC7rNrY+2QgXoJqFtgjiFGWhCC+UjQ== 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] < - ENTER
file ----> index.html [f] < - ENTER
链接----> ispconfig [f] < - ENTER
dir ----> php-fcgi-scripts / apps [f] < - ENTER
dir ----> webalizer [f] < - ENTER
link ----> webmail [f] < - ENTER

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


UNISON 2.32.52于2011年12月9日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年12月9日14:25:03完成传播变更


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

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

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

vi /root/.unison/default.prf
# Unison preferences file
# 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

找出你的位置。

6链接

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏