用rsync镜像您的网站
版本1.0
作者:Falko Timme
本教程将介绍如何将您的网站从主Web服务器镜像到主服务器发生故障时可以接管的备份服务器。 我们使用这个工具rsync
,我们使它运行在一个cron作业,检查每x
分钟,如果有更新的镜像上。 因此,如果备份服务器必须接管,通常应该是最新的。
rsync
只会更改已更改的文件,因此,只要运行rsync
,就不需要传输5 GB的数据。 它只反映新的/已更改的文件,并且还可以从主服务器上已删除的镜像中删除文件。 除此之外,它可以保留镜像文件和目录的权限和所有权; 为了保护所有权,我们需要以root身份运行rsync
,这是我们在这里做的。 如果主服务器上的权限和/或所有权更改, rsync
也将在备份服务器上进行更改。
在本教程中,我们将通过更安全的SSH来隧道rsync
; 这也意味着您不必在防火墙中为rsync
打开另一个端口 - 只要端口22(SSH)打开就足够了。 问题是SSH需要用于登录的密码,如果要作为cron作业运行rsync
,则不太好。 需要密码需要人为的互动,这不是我们想要的。
但幸运的是有一个解决方案:使用公钥 。 我们创建一对密钥(在我们的备份服务器mirror.example.com上 ),其中一个密钥保存在远程系统( server1.example.com )上的文件中。 之后,当我们运行rsync
时,我们将不再提示输入密码。 这也包括正是我们想要的cron工作。
正如您可能已经从我迄今为止所写的那样猜到的,这个概念是我们直接从mirror.example.com启动server1.example.com的镜像 ; server1.example.com不需要做任何事情来镜像。
我将在这里使用以下设置:
- 主服务器:
server1.example.com
(server1
) - IP地址:192.168.0.100
- 镜像/备份服务器:
mirror.example.com
(镜像
) - IP地址:192.168.0.175
- 要镜像的
网站
位于server1.example.com
上的/ var / www
中。
rsync
仅用于镜像文件和目录; 如果要镜像您的MySQL数据库,请查看这些教程:
我想先说说这不是建立这样一个系统的唯一途径。 实现这一目标有很多方法,但这是我所采取的方式。 我不会保证这将为您工作!
1安装rsync
首先我们必须在server1.example.com
和mirror.example.com
上安装rsync
。 对于Debian系统,它看起来像这样:
server1 / mirror:
(我们做root!)
apt-get install rsync
在其他Linux发行版上,您可以使用yum
(Fedora / CentOS)或yast
(SuSE)来安装rsync
。
2在server1.example.com上创建一个非特权用户
现在,我们在server1.example.com上创建一个名为someuser的
非特权用户,将由rsync
在mirror.example.com
上使用镜像目录/ var / www
(当然, someuser
必须在server1
上的/ var / www
上具有读取权限.example.com
)。
server1:
(我们做root!)
useradd -d /home/someuser -m -s /bin/bash someuser
这将创建一个用户的主目录/ home / someuser
和登录shell / bin / bash的用户
(重要的是someuser
具有有效的登录shell - 像/ bin / false
不起作用)。 现在给一些用户
一个密码:
passwd someuser
3测试rsync
接下来我们在mirror.example.com
上测试rsync
。 作为根我们这样做:
镜子:
rsync -avz -e ssh someuser@server1.example.com:/var/www/ /var/www/
你应该看到这样的东西。 回答是
:
The authenticity of host 'server1.example.com (192.168.0.100)' can't be established. |
<-- yes
然后输入一些
用户的密码,您应该看到server1.example.com
的/ var / www
目录镜像到mirror.example.com上的/ var / www
。
您可以在两台服务器上检查:
server1 / mirror:
ls -la /var/www
您应该看到所有的文件和目录已镜像到mirror.example.com
,文件和目录应该具有与server1.example.com上相同的权限/ 所有权
。
4在mirror.example.com上创建密钥
现在我们在mirror.example.com
上创建私钥/公钥对:
镜子:
(我们做root!)
mkdir /root/rsync
ssh-keygen -t dsa -b 1024 -f /root/rsync/mirror-rsync-key
你会看到这样的东西:
Generating public/private dsa key pair. |
重要的是,您不要输入密码,否则在没有人工交互的情况下,镜像将无法正常工作,因此只需按Enter键即可 。
接下来,我们将公钥复制到server1.example.com
:
镜子:
(但是,我们以root身份执行此操作)
scp /root/rsync/mirror-rsync-key.pub someuser@server1.example.com:/home/someuser/
公共密钥mirror-rsync-key.pub
现在应该可以在server1.example.com上的/ home / someuser
中使用。