Rsysnc安装、配置教程:实现VPS主机文件备份同步
通常我们备份网站数据的做法,就是打包网站文件和MysqL数据库,然后下载到本地或者放在网盘中。一旦需要恢复网站数据时,重新将网盘或者本地的打包文件和MysqL数据库上传到网站服务器。这个网站备份的方法,对于中小型的博客网站基本上没有任何问题的。
但是大型的网站数据不仅数量上众多,并且由于数据处于动态的更新变化中,对于数据的备份要求更高的,加上本地带宽的限制不可能将服务器上的文件全部下载到本地再上传进行一系列的操作了。于是,很多人就想到了搭建一个网站的镜像服务器,同步更新服务器上的文件。
为你的网站服务器搭建一个用于同步和备份的镜像服务器,有两大好处:
一是可以实现24小时不间断备份,如果有服务器集群的话可以极大地提升安全性能;
二是确保网站不宕机,一旦某台服务器被攻击瘫痪了可以立即启用备用服务器,整个切换过程用户完全不知,保证了良好的用户体验。
当然要想实现上述效果,不能仅仅靠Rsysnc就可以实现,inotify+rsync是我们常用的搭配组合,这些我们都在以后的文章中逐步分享到。本文就来分享一下Rsysnc基本的使用方法,以及如何在VPS主机上配置和使用。
Rsysnc实现VPS主机文件备份同步-Rsysnc安装、配置和操作实例
一、Rsysnc安装方法
1、Rsysnc官网:
官方网站:https://rsync.samba.org/ftp/rsync/
2、VPS主机上安装Rsysnc命令:
apt-get install rsync #Ubuntu安装yum install rsync #centos安装pacman -S rsync #archlinux安装//源码安装wget https://download.samba.org/pub/rsync/rsync-3.1.2.tar.gztar xf rsync-3.1.2.tar.gzcd rsync-3.1.2./configure --prefix=/usr/local/rsyncmakemake install
3、Rsysnc启动服务:
rsync --daemon#指定配置文件/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf
4、如果你的Rsysnc配置文件有问题,就会报错误。
5、在VPS主机的防火墙中开启873端口。
iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
二、Rsysnc配置文件
1、Rsysnc配置文件主要有三个:
1)rsyncd.conf 是rsync服务器主要配置文件。
2)rsyncd.secrets是登录rsync服务器的密码文件。
3)rsyncd.motd是定义rysnc 服务器信息的,也就是用户登录信息。
2、执行以下命令,创建rsyncd目录和建立这三个配置文件:
mkdir /etc/rsyncdtouch /etc/rsyncd/rsyncd.conftouch /etc/rsyncd/rsyncd.secretschmod 600 /etc/rsyncd/rsyncd.secrets #设置权限touch /etc/rsyncd/rsyncd.motd
3、接下来就是修改rsyncd.conf 、rsyncd.secrets 、rsyncd.motd文件了。首先rsyncd.conf 配置示例代码说明:
# Minimal configuration file for rsync daemon# See rsync(1) and rsyncd.conf(5) man pages for help# This line is required by the /etc/init.d/rsyncd scriptpid file = /var/run/rsyncd.pid #进程写到 /var/run/rsyncd.pid 文件中port = 873 #默认端口address = 192.168.1.171 #指定服务器IP地址#uid = nobody#gid = nobody uid = root gid = root use chroot = yesread only = no #只读 不让客户端上传文件到服务器上#limit access to private LANshosts allow=192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0 #允许的IP 即白名单,中间用空格隔开hosts deny=*max connections = 5 #最大允许的连接数motd file = /etc/rsyncd/rsyncd.motd #用户登录时会看到rsyncd.motd 中的信息#This will give you a separate log filelog file = /var/log/rsync.log #rsync 服务器的日志#This will log every file transferred - up to 85,000+ per user, per sync#transfer logging = yeslog format = %t %a %m %f %b #日志格式syslog facility = local3timeout = 300[freehao123] #模块名称 path = /home #同步路径list=yesignore errorsauth users = root #授权VPS登录用户,此用户必须是VPS已经存在的secrets file = /etc/rsyncd/rsyncd.secrets #密码存储位置comment = freehao123 home #注释 随便填写exclude = beinan/ samba/ #排除上面的同步路径下的目录 用空格隔开
4、rsyncd.secrets 就是存放密码的文件,设置格式如下:
root:128138148 #即用户名:密码
5、rsyncd.motd这是显示你连接rsyncd时的看到信息,不是很重要,可以自己随便写点。
++++++++++++++++++++++++++++
freehao123.com rsync 2002-2007
++++++++++++++++++++++++++++
三、Rsysnc使用操作方法
1、rsync 是一个功能非常强大的工具,它可以镜像保存整个目录树和文件系统,保持原来文件的权限、时间、软硬链接等,可以使用 rsh、s-s-h 方式来传输文件,当然也可以通过直接的 socket 连接。支持匿名传输,以方便进行网站镜象。
2、无论本地同步目录还是远程同步数据,首次运行时将会把全部文件拷贝一次,以后再运行时将只拷贝有变化的文件(对于新文件)或文件的变化部分(对于原有文件),即增量同步备份。先来看一下你的VPS是不是成功开启了873端口,使用命令:iptables -L -n。
3、“推送”数据,即从主服务器主动将数据推送到备份服务器上,这里使用了SSH登录备份服务器,推送数据。命令:
rsync -avz -e ‘ssh -p1563′ /home/test/ root@192.168.1.150:/oracle/data/
4、-p1563是指定备份服务器端口,如果你的备份VPS的端口有修改的话,可以在这里指定。192.168.1.150是备份服务器的IP地址,/home/test/是主服务器的目录,后面就是备份存储的文件目录。
5、“拉取”数据。换另一个VPS主机,按照上面的方法安装rsync ,然后执行以下命令,输入你刚刚设置的rsync 用户密码,即可实现文件同步备份。
rsync -avzP root@107.191.105.136::freehao123 freehao123k
6、上面的root就是用来登录的VPS用户,107.191.105.136是我的VPS主机服务器,freehao123这是模块名称,freehao123k是我搬瓦工VPS的目录,即用来存储备份的,该目录如果没有会自动创建。
7、完成后,你就可以在备份VPS上看到同步的目录了。
8、上面我们使用了avzP参数,详细使用说明如下:
-a –archive归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD-r –recursive 对子目录以递归模式处理-l –links 保留软链-p –perms 保持文件权限-t –times 保持文件时间信息-g –group 保持文件属组信息-o –owner 保持文件属主信息-D –devices 保持设备文件信息-z –compress 对备份的文件在传输时进行压缩处理-P –partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输-v –verbose 详细模式输出-e –rsh=COMMAND 指定替代rsh的shell程序-u –update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。 (不覆盖更新的文件)–progress 显示备份过程–delete 是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。
9、 想要保持服务器与备份服务器之间的文件目录保持一致,我们可以加入–delete 选项,这样当你的备份服务器上的文件目录与主服务器的文件目录存在不一致的文件时,就会直接删除。
rsync –avzP --delete root@107.191.105.136::freehao123 freehao123k
四、Rsysnc自动定时同步
1、通过上面我们已经知道如何使用rsync,利用VPS的定时工具我们可以实现rsync自动定时备份。首先,我们要在备份服务器上创建一个密码文件,这样rsync自动同步时就可以不需要输入密码。
touch rsync.passwordchmod 600 rsync.passwordecho "12345678"> rsync.passwordrsync -avzP --delete --password-file=rsync.password root@107.191.105.136::freehao123 freehao123k
2、 --password-file是用来指定密码文件路径的,执行:crontab -e,编辑定时任务,加入以下代码,即表示每天1点10分执行rsync同步备份任务。
10 1 * * * rsync -avzP --delete --password-file=rsync.password root@107.191.105.136::freehao123 freehao123k
五、使用inotify-tools实现实时同步
1、上面还只是实现了自动定时同步,对于一些要求的高网站可能还需要实时同步,这里我们就可以利用上了inotify-tools了。你需要确保内核支持inotify,并安装inotify-tools和rsync。判断内核是否支持inotify方法有如下:
###确保内核版本高于2.6.13,低于则需重新编译内核###root@mon11:~# uname -r3.2.0-64-generic###查看内核是否默认支持inotify—API###root@mon11:~# ll /proc/sys/fs/inotify/-rw-r--r-- 1 root root 0 Sep 18 18:06 max_queued_events-rw-r--r-- 1 root root 0 Oct 20 10:24 max_user_instances-rw-r--r-- 1 root root 0 Sep 18 18:06 max_user_watches###相关说明max_queued_events 表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值, 超出这个值的事件被丢弃max_user_instances 表示每一个real user ID可创建的inotify instatnces的数量上限max_user_watches 表示每个inotify instatnces可监控的最大目录数量。如果监控的文件数目巨大, 需要根据情况,适当增加此值的大小,例如:echo "9000000" > /proc/sys/fs/inotify/max_user_watches
2、安装inotify-tools的方法有(在安装过程中如果遇到“configure: error: no acceptable C compiler found in $PATH”的错误,你需要安装gcc:yum install gcc):
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gztar xf inotify-tools-3.14.tar.gzcd inotify-tools-3.14/./configure --prefix=/usr && make && su -c 'make install'
3、inotify-tools监控某一个文件目录的变化的命令是:
/usr/bin/inotifywait -mrq --timefmt '%Y/%m/%d-%H:%M:%S' --format '%T %w %f' \ -e modify,delete,create,move,attrib /root/tmp/
4、上面的命令表示,持续监听/root/tmp目录及其子目录的文件变化,监听事件包括文件被修改、删除、创建、移动、属性更改,显示到屏幕。执行完上面的命令后,在/root/tmp下创建或修改文件都会有信息输出信息。
5、如果遇到错误:/usr/bin/inotifywait: error while loading shared libraries: libinotifytools.so.0: cannot open shared object file: No such file or directory,则采用下列方法解决:
32位系统:ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib/libinotifytools.so.064位系统:ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0
6、通过inotifywait监控目标文件上的相应事件,并在事件触发时启动同步,操作命令如下:
root@mon11:/data/rsyncd# vim inotifyrsync.sh#!/bin/bashhost=10.168.23.101src=/home/git/dst=Git_rsyncuser=git/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src | while read filesdo/usr/bin/rsync -avzP --exclude".gitolite/logs/*" --progress --password-file=/etc/rsync.passwd $src $user@$host::$dst &>/dev/null && echo "${files} was rsynced" >> /data/rsyncd/rsync.log 2>&1doneroot@mon11:/data/rsyncd#chmod 755 inotifyrsync.shroot@mon11:/data/rsyncd# bash inotifyrsync.sh &
六、Rsysnc使用小结
1、Rsysnc安装还是挺方便的,linux内核从2.6.13起便加入了Inotify支持,通过Inotify可以监控文件系统中添加、修改、移动等各种细微事件,Inotify-tools第三方软件就可以监控文件系统下文件的各种变化情况。
2、Rsysnc同步备份的速度很快,如果是内网的话基本上不用考虑带宽的事情,Rsysnc与Inotify-tools搭配可以实现不同的VPS主机之间的数据同步镜像,对网站数据安全性要求的集群网站可以采用这种方式。