Rsync是一种可以将本地或者远程的数据以全量或增量的方式进行同步与备份的方式,  它可以使用rcpssh等方式来传输文件,当然也可以通过直接的socket连接。


优点:rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如使用定时任务定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。


缺点:1、每次同步时都需要扫描全部数据进行比对,然后对增量数据进行同步或备份,比较耗时


     2rsync不能实时的去监测、同步数据,这样服务端与客户端之间必然存在数据差异,无法在应用故障时及时


        的恢复数据。







一、检查有无安装rsync服务


    [root@echarge2 soft]# rpm -qa|grep rsync


     rsync-2.6.8-3.1


二、将阿里云做客户端做a50服务器做服务端b,即实现a数据实时同步到b服务器


1、首先配置服务端配置文件


vim /etc/rsyncd.conf


uid = rsync


gid = rsync


use chroot = no


max connections = 5


pid file = /var/run/rsyncd.pid


lock file = /var/run/rsync.lock


log file = /var/log/rsyncd.log


[fang]


path=/fang/


ignore errors


read only = no


list = no


hosts allow = 112.124.7.132/255.255.255.0


auth users = rsync_backup


secrets file = /etc/rsyncd.password


 2、其次配置密码文件


echo rsync_backup:fang  /etc/rsyncd.password


chmod 600 /etc/rsyncd.password


[root@echarge2 ~]# ll /etc/rsyncd.password


-rw------- 1 root root 20 11-22 09:41 /etc/rsyncd.password


 3、为项目包路径赋权


Chown -R rsync.rsync /fang


[root@echarge2 ~]# rsync --daemon


三、启动服务端rsync服务,并检查启动是否正常,默认端口873


[root@echarge2 ~]# rsync --daemon


[root@echarge2 ~]# lsof -i:873


command   pid user   fd   type   device size node name


rsync   21103 root    4u  ipv6 33342657       tcp *:rsync (listen)


rsync   21103 root    5u  ipv4 33342658       tcp *:rsync (listen)


四、配置客户端。主要是密码文件与赋权


Touch /etc/rsyncd.conf


echo oldboy >/etc/rsyncd.password


chmod 600 /etc/rsyncd.password


[root@echarge2 ~]# ll /etc/rsyncd.password


-rw------- 1 root root 20 11-22 09:41 /etc/rsyncd.password


[root@echarge2 ~]# rsync --daemon


五、常用两种方式


  1rsync [OPTION]... [USER@]HOST::SRC   DEST
从远程rsync服务器中拷贝文件到本地机,即拉取服务端数据


如:rsync -avzP root@172.16.78.192::fang/
  2rsync [OPTION]... SRC   [USER@]HOST::DEST
从本地机器拷贝文件到远程rsync服务器中。即推送客户端数据到服务端


如:rsync -avzP /oldboy rsync_backup@172.16.78.192::fang


六、进行数据推送与备份


  Rsync -avzP .  rsync_backup@192.168.1.44::fang   --password-file=/etc/rsyncd.password


  (表示将本地目录下的数据全部推送到192.168.1.44模块下)


  rsync -avzP   rsync_backup@192.168.1.44::oldboy  /oldboy/  --password-file=/etc/rsyncd.password


(表示将远程服务器模块下的数据下拉取到本地/oldboy目录下


七、常见报错


  1rsync: mkstemp "/.hanshu.sql.mSHqf6" (in fang) failed: Permission denied (13)


sent 446 bytes  received 38 bytes  322.67 bytes/sectotal size is 1226  speedup is 2.53


rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]


  原因:配置了rsync服务的守护用户,但项目地址fang路径没有赋予用户权限,只需要操作


        Chown -R rsync.rsync /fang


  2@ERROR: auth failed on module fangrsync error: error starting client-server protocol (code 5) at main.c(1530) [sender=3.0.6]


  原因:验证项目时失败,经检查是由于客户端密码文件密码与服务端密码不相同,更改即可
















  当需要对 Linux文件系统进行高效率、细粒度、异步地监控时,可以采用 inotify,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性,所以学习inoftiy对运维来说相当重要


优点:可以实时监控服务器文件系统的各种变化,当文件有任何变化时直接触发rsync同步,以保证数据的实时同步。


一、检查系统版本是否支持inotify,从linux 2.6.13内核开始支持inotify


   [root@hrd ~]# uname -r


      2.6.18-164.el5


二、检查系统是否安装inotify并进行下载安装


wget --no-check-certificate http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz


1013  tar xzvf inotify-tools-3.14.tar.gz


1014  cd inotify-tools-3.14


1015  ls


1016  ./configure  --prefix=/usr/local/inotify-tools-3.14


1017  make && make install


1018  ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify


1019  ll /usr/local/inotify


      lrwxrwxrwx 1 root root 30 11-22 15:55 /usr/local/inotify -> /usr/local/inotify-tools-3.14/


[root@echarge2 ~]# ll /usr/local/inotify/bin/


总计 76


-rwxr-xr-x 1 root root 37276 11-22 15:55 inotifywait


-rwxr-xr-x 1 root root 35466 11-22 15:55 inotifywatch


  安装完成后inotify有如下两个指令:


   inotifywait用于等待文件或文件集上的一个特定事件,它可以监控任何文件和目录设置,并且可以递归地监控整个目录树


inotifywatch用于收集被监控的文件系统统计数据,包括每个inotify事件发生多少次等信息


三、inotify参数


   [root@echarge2 ~]# ll /proc/sys/fs/inotify/


总计 0


-rw-r--r-- 1 root root 0 11-22 16:10 max_queued_events  最大队列数


-rw-r--r-- 1 root root 0 11-22 16:10 max_user_instances  可以创建的实例数


-rw-r--r-- 1 root root 0 11-22 16:10 max_user_watches   可以同时同步的文件数目


四、建立脚本进行监控目录变化,监控系统对文件的创建、删除


脚本内容如下:


[root@hrd soft]# cat inotify.sh


#!/bin/bash


host1=58.63.225.50


src=/root/test


dst1=fang


user1=rsync_backup


/usr/local/inotify/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.password $src $user1@$host1::$dst1


echo "${files} was rsynced" >>/tmp/rsync.log 2>&1


Done


五、执行脚本观察同步情况,发现文件同步正常



Chmod 755 inotify.sh


/bin/sh  -x inotify.sh &


有时会遇到这样的情况:向inotify监控的目录(这里是/root/test/)写入一个很大文件时,由于写入这个大文件需要一段时间,此时inotify就会持续不停的输出该文件被更新的信息, 这样就会持续不停的触发rsync去执行同步操作,占用了大量系统资源,那么针对这种情况,最理想的做法是等待文件写完后再去触发rsync同步。 在这种情况下,可以修改inotify的监控事件,即:“-e close_write,delete,create,attrib”。
接着,将这个脚本命名为inotify.sh,然后给定可执行权限,放到后台运行,如果需要时时同步数据,可以直接添加到开机自启动程序echo '/bin/sh /opt/soft/inotify.sh &' >>/etc/rc.local