一、软件说明 (内容来自网络)
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 同步,这样刚好解决了同步数据的实时性问题。
注:
rsync inotify 需要逆向思考,当只做rsync不实时同步时,我们一般是从rsync服务端向rsync客户端同步数据。当需要添加inotify实现实时同步数据时,我们就需要从rsync客户端向各rsync服务端同步数据,这样rsync客户端就变成了主服务器,而rsync服务端就变成了副服务器。
原理:当inotify监测的本地目录,也就是需要同步的目录发生变化时,比如有文件改名、更新、删除、权限变化,此时就使用inotify命令查找这些变化,进行相应的同步工作。
二、系统环境:
|
操作系统 |
rsync |
inotify |
|
Centos6.5 |
系统自带 |
3.1.3 |
三、拓扑图
四、配置过程
Rsync服务端安装在备份服务器上,千万不要弄错(教训!!!)
4.1、配置rsync服务端
检查服务器是否安装rsync。
[[email protected]]# rpm -qa |grep rsync
rsync-3.0.6-12.el6.x86_64
(centos6.5默认已经安装好,没有安装的可以用yum或者编译安装,在此不详细写了)
rsync服务器主要有三个配置文件:rsync.conf,rsync.passwd和rsyncd.motd。而rsync安装后并没有自动创建相关配置文件,因此我们还需手动创建:
[[email protected]]# mkdir /etc/rsync #创建主配置文件目录
[[email protected]]# touch /etc/rsync/rsync.conf #创建主配置文件
[[email protected]]# touch /etc/rsync/rsync.passwd #创建用户密码文件
[[email protected]]# chmod 600 /etc/rsync/rsync.passwd #修改用户密码文件权限
[[email protected]]# touch /etc/rsync/rsync.motd #创建定义服务信息的文件
4.2、配置rsync文件,我配置了2个节点
[[email protected]]# vi /etc/rsync/rsync.conf
uid = root
gid = root
use chroot = no #是否使用chroot
max connections = 10 #最大连接数为10
pid file = /var/run/rsyncd.pid #rsync pid存放位置
lock file = /var/run/rsync.lock #支持max connections参数的锁文件
log file = /var/log/rsyncd.log #LOG存放位置
[databak] #自定义节点名称
path = /data/bak/ #rsync服务端备份数据存的储路径
ignore errors #忽略错误
read only = no #设置rsync服务端权限
comment = databak #设置的和节点名称一样
hosts allow = 192.168.1.0/24 #允许的号段
hosts deny = * #拒绝的主机号段,*号表示不拒绝
auth users = bak #自动连接的账户名称
secrets file = /etc/rsync/rsync.passwd #用户名密码存放位置
[zmmisbak]
path = /data/bak/
ignore errors
read only = no
comment = zmmisbak
hosts allow = 192.168.1.0/24
hosts deny = *
auth users = bak
secrets file = /etc/rsync/rsync.passwd
4.3、配置rsync服务端用户名和密码
添加用户和密码
[[email protected]]# vi etc/rsync/rsync.passwd
bak:bak #格式为前面为用户名,后面为密码
4.4、启动rsync服务端
[[email protected]]# /usr/bin/rsync --daemon --config=/etc/rsync/rsync.conf #以守护进程启动rsync
[[email protected]]# echo "/usr/bin/rsync --deamon --config=/etc/rsync/rsync.conf" >> /etc/rc.d/rc.local #添加到开机启动
这里的启动方式比较特殊,如果你要重启,需要kill掉rsync的进程,再重新运行!
另外还有另外一种启动rsync的方式,CentOS 默认以 xinetd 方式运行 rsync 服务。
要配置以 xinetd 运行的 rsync 服务需要执行如下的命令:
[[email protected]]# vi /etc/xinetd.d/rsync
disable = no #默认是yes,改成no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync #路径改为自己路径
server_args = --daemon --config=/etc/rsyncd/rsyncd.conf # 这里添加rsync的服务选项!
log_on_failure += USERID
}
[[email protected]]# service xinetd restart #重启xinetd服务
[[email protected]]# chkconfig xinetd on #添加到开机启动
4.5、配置rsync客户端+inotify
rsync客户端安装在主服务器上,千万不要弄错。
rsync的客户端配置比较简单,只需要添加一个密码文件,配置好开机启动就可以了。
[[email protected]]# mkdir /etc/rsync #创建rsync客户端目录
[[email protected]]# touch /etc/rsync/rsync.conf #创建rsync主文件
[[email protected]]# echo "bak" > /etc/rsync/rsync.passwd #创建密码文件
#这里只需配置密码即可,不用配置用户名。密码和服务端的一样。
[[email protected]]# chmod 600 /etc/rsync/rsync.password #为了安全权限设置为600
[[email protected]]# /usr/bin/rsync --daemon --config=/etc/rsync/rsync.conf #启动rsync
[[email protected]]# echo "/usr/bin/rsync --daemon --config=/etc/rsync/rsync.conf" >> /etc/rc.d/rc.local #配置rsync客户端开机启动
4.6、测试rsync
从主服务器推送文件到备份服务器
在主服务器上执行:
[[email protected]]# rsync -avP --password-file=/etc/rsync/rsync.passwd /data/dbf [email protected]::databak
参数说明 -a , --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD;
-v, --verbose 详细模式输出;
-P ,--progress 显示备份过程;
-z, --compress 对备份的文件在传输时进行压缩处理(可选)。
更多参数请参考:http://www.2cto.com/os/201309/241285.html
--password-file=/etc/rsync/rsync.passwd #指定密码文件位置
/data/dbf #本地主服务器的数据存储路径
bak #rsync用户名
@192.168.1.2 #目的主机:备份服务器的IP地址
::databak #::分隔符后是备份服务器rsync服务端中配置的节点名称,对应的是备份服务器的数据存储路径。
意思为:把本地目录/data/dbf下的数据上传到192.168.1.2服务器的databak节点下对应/data/bak目录下
4.7、创建一个脚本,加到crontab定时执行一下
/usr/local/bin/rsync -avP --password-file=/etc/rsync/rsync.passwd /backup/databak [email protected]::databak
echo "${files} was rsynced" >> /var/log/databak.log 2>&1
4.8、测试,先在主服务器建一个文件夹,然后执行下脚本文件,最后看下备份服务器有内容的话,同步成功
备份服务器已经有文件夹了