1、rsync
与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。
随着应用系统规模的不断扩大,对数据的安全性和可靠性也提出的更好的要求,rsync在高端业务系统中也逐渐暴露出了很多不足,首先,rsync同步数据时,需要扫描所有文件后进行比对,进行差量传输。如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的。而且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。基于以上原因,rsync+inotify组合出现了!
2、inotify
Inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。
在上面章节中,我们讲到,rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样刚好解决了同步数据的实时性问题。
正式配置:
基础环境:
主服务器:192.168.1.222 操作系统:Ubuntu 14.04
备份服务器:192.168.1.110 操作系统:ubuntu16.04
大致配置流程:
备份服务器:
1.安装rsync同步软件
2.拷贝/etc/rsyncd.conf
3.配置/etc/default/rsync
4.配置/etc/rsyncd.secrects
5.编辑/etc/rsyncd.conf
6.启动rsync
主服务器:
1.安装rsync同步软件和inotify-tools
2.配置/etc/rsyncd.secrects
3.配置/usr/bin/inotify2rsync
4.将脚本添加到开机加载文件中:
5.创建同步目录和赋予权限
备份服务器(192.168.1.110):
1.安装rsync同步软件:
sudo apt-get install rsync
2.拷贝/etc/rsyncd.conf
守护进程需要调用配置文件来预先加载相关信息参数,文件默认为/etc/rsyncd.conf,但是软件安装后没有这个文件,不过我们可以从/usr/share/doc/rsync/examples/rsyncd.conf复制一份到/etc/rsyncd.conf。
sudo cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/rsyncd.conf
3.配置/etc/default/rsync
vim /etc/default/rsync
配置
RSYNC_ENABLE=true
RSYNC_CONFIG_FILE='/etc/rsyncd.conf'
4.配置/etc/rsyncd.secrects
在/etc/下建立rsyncd.secrects
vim /etc/rsyncd.secrects
yxw:123456
然后赋予权限:sudo chmod 600 /etc/rsyncd.secrects
保存退出
5.编辑/etc/rsyncd.conf
然后vim /etc/rsyncd.conf
# sample rsyncd.conf configuration file # GLOBAL OPTIONS #motd file=/etc/motd #开户log日志 log file=/var/log/rsyncd # for pid file, do not use /var/run/rsync.pid if # you are going to run rsync out of the init.d script. # The init.d script does its own pid file handling, # so omit the "pid file" line completely in that case . #指定pid pid file=/var/run/rsyncd.pid #syslog facility=daemon #socket options= # MODULE OPTIONS [ftp] comment = common #指定同步目录 path = /var/www/ public use chroot = yes # max connections= 10 lock file = /var/lock/rsyncd # the default for read only is yes... #不只是读,还要写权限 read only = no list = yes uid = root gid = root # exclude = # exclude from = # include = # include from = #指定同步校验用户(与主服务中用于同步时用户相同) auth users = yxw #指定同步校验用户时的密码文件 secrets file = /etc/rsyncd.secrects strict modes = yes #指定host hosts allow = 192.168 . 1.222 / 255.255 . 255.0 hosts deny = * ignore errors = no ignore nonreadable = yes transfer logging = no log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes. timeout = 600 refuse options = checksum dry-run dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz |
保存退出
6.启动rsync
我们现在启动rsync服务:
rsync --daemon --config=/etc/rsyncd.conf
好了,执行ps -aux | grep rsync
来查看一下软件运行情况:
好 启动成功(注意--config=/etc/rsyncd.conf,启动时必须要有这个)
备份服务器启动完之后,则可进行下一步
主服务器(192.168.1.222):
1.安装rsync同步软件和inotify-tools
首先在服务器上面安装软件:
sudo apt-get install rsync inotify-tools
2.配置/etc/rsyncd.secrects
建立rsync运行所需要的密码文件,并更改运行权限:
sudo echo -ne 123456 > /etc/rsyncd.secrects
chmod 600 /etc/rsyncd.secrects
3.配置/usr/bin/inotify2rsync
在/usr/bin/下面编辑脚本文件,使得inotify-tool检测到文件变化后可以自动运行rsync程序:
sudo touch /usr/bin/inotify2rsync
sudo vim /usr/bin/inotify2rsync
#!/bin/bash src=/var/www/ public dst=yxw @192 .168. 1.110 ::ftp /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src | while read files do /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.secrects $src $dst echo "${files} was rsynced" >> /var/log/rsync.log 2 >& 1 done exit 0 |
src是需要同步的目录,dst是进行备份服务器的认证用户和主机ip,
--password-file=/etc/rsyncd.secrects是主服务器的密码文件
注意ftp对应备份服务器的
sudo chmod 755 /usr/bin/inotify2rsync
4.将脚本添加到开机加载文件中:
将脚本添加到开机加载文件中:
sudo vim /etc/rc.local
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. inotify2rsync exit 0 |
保存退出
5.创建同步目录和赋予权限
同样建立同步数据所需要的文件夹,并对文件夹授权:
sudo mkdir
/var/www/public
sudo chown -R yxw:123456
/var/www/public
重启服务器,完成配置。(不重启的话在后台运行命令inotify2rsync)
测试:
在主服务器的/var/www/public文件夹中添加文件或者文件夹,看看备份服务器上面的data文件夹是否发生改变