rsync实现网站镜像和备份

rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了--remote sync。它的特性如下:

可以镜像保存整个目录树和文件系统。

可以很容易做到保持原来文件的权限、时间、软硬链接等等。

无须特殊权限即可安装。

优化的流程,文件传输效率高。

可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。

支持匿名传输,以方便进行网站镜象。

应用场景:

LVS负载均衡,需要所有从服务器网站内容相同,镜像

远程备份等

####服务器架构:

Image1.png

B客户端主动去请求A服务端的文件,进行同步文件,谁主动谁是客户端,谁被动谁是服务端。

Image2.png

##实例分析
这里假设有两台服务器:A和B。其中A是主web服务器(155.28.81.0),B服务器是从服务器(155.28.82.0)。我们要将A服务器的/home/test/备份到B服务器的/home/test/目录下。

##服务器A 配置
####服务器A编译安装
rsync的编译安装非常简单,只需要以下简单的几步:

[root@www ~]# cd /usr/local/src/ [root@www src]# wget [root@www src]# tar zxvf rsync-3.0.9.tar.gz [root@www src]# cd rsync-3.0.9 [root@www rsync-3.0.9]# ./configure --prefix=/usr/local/rsync/ [root@www rsync-3.0.9]# make [root@www rsync-3.0.9]# make install

但是需要注意的是必须在服务器A和B上都安装rsync,其中A服务器上是以服务端模式(被动)运行rsync,而B上则以客户端模式(主动)运行rsync。这样在web服务器A上运行rsync守护进程,在B上定时运行客户程序来备份web服务器A上需要备份的内容。

####建立用户与密码认证文件

[root@www rsync-3.0.9]# echo "backup:bk_passwd" > /usr/local/rsync/rsyncd.passwd

请记住,在server端建立的密码文件,包含用户名与密码,而在client端建立的密码文件只有密码,没有用户名。

####设置权限为只读

[root@www rsync-3.0.9]# cd /usr/local/rsync [root@www rsync]# chmod 600 rsyncd.passwd

否则可能会报错:
@ERROR: auth failed on module ***
rsync error: error starting client-server protocol (code 5) at main.c(1503)

####建立rsync配置文件

[root@www rsync]# vi /usr/local/rsync/rsyncd.conf uid = nobody gid = nobody use chroot = no max connections = 4 strict modes = yes hosts allow = 121.42.46.213 #可以空格,允许多个 port = 873 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log [test] path = /home/test ignore errors read only = true list = false auth users = backup secrets file = /usr/local/rsync/rsyncd.passwd

####以守护进程方式启动rsync服务器

[root@www rsync]# rsync --daemon --config=/usr/local/rsync/rsyncd.conf

rsync默认服务端口为873,服务器在该端口接收客户的匿名或者认证方式的备份请求。

####如果要让服务设置为自启动,可以加入rc.local

编辑/etc/rc.d/rc.local,在最后添加:

/usr/local/rsync/bin/rsync --daemon --config=/etc/rsyncd.conf

##客户端B 配置

编译安装同上,一般错误都会发生在服务器B

####建立访问服务端A的密码认证文件

[root@www rsync]# echo "bk_passwd" > /usr/local/rsync/rsync.passwd

####设置权限为只读

[root@www rsync]# chmod 0600 rsync.passwd

####在rsync安装之后,运行以下指令同步备份

[root@www rsync]# rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/rsync.passwd backup@115.28.81.0::test /home/test

其中地址backup@115.28.81.0::test,backup为服务器A用户,115.28.81.0为服务器A IP地址或者域名,test为服务器A配置模块。

上面这个命令行中-vzrtopg里的v是verbose,z是压缩,r是recursive,topg都是保持文件原有属性如属主、时间的参数,--progress是指显示出详细的进度情况,--delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。--password-file=/usr/local/rsync/rsync.passwd来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有root可读。

这里将备份的内容存放在备份机的/home/test/目录下。

####FAQ:
rsync:mkstemp failed:Permission denied
修改服务端/usr/local/rsync/rsyncd.conf配置文件

uid=nobody gid=nobody

修改为

uid = root gid = root

不过建议还是一开始就设置为root,省得遇到一堆问题。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/fa41201e0d1f4a75bd4c338958372dd3.html