一、软件说明 (内容来自网络)

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

三、拓扑图

Linux下rsync实现数据实时同步

 

四、配置过程

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、测试,先在主服务器建一个文件夹,然后执行下脚本文件,最后看下备份服务器有内容的话,同步成功

Linux下rsync实现数据实时同步

备份服务器已经有文件夹了

Linux下rsync实现数据实时同步

相关文章: