Chinaunix首页 | 论坛 | 博客
  • 博客访问: 64924
  • 博文数量: 8
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 60
  • 用 户 组: 普通用户
  • 注册时间: 2014-09-02 11:26
文章分类

全部博文(8)

文章存档

2015年(3)

2014年(5)

我的朋友

分类: LINUX

2014-10-31 16:36:59

一,使用rsync远程同步
 1,简介:
    rsync(Remote Sync) 是一个Unix/linux系统下的文件同步和传输工具。Rsync通过“rsync算法”提供了一个客户机和远程文件服务器的文件同步的快速方法。每次只传送两个文件的不同  部分(即支持增量备份),而不是每次都整份传送
    rsync   包括如下的一些特性:
            能更新整个目录树和文件系统;  
            有选择性的保持符号链链、硬链接、文件属性、权限、设备以及时间等;
            传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。
            能用rsh、ssh 或直接端口做为传输端口;
            支持匿名rsync 同步文件,是理想的镜像工具; 
    Rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时Rsync server会打开一个873端口,等待客户端去连         接。
    Rsync的官方站点位于
    rsync 服务器架设比较简单,可能我们安装好rsync后,并没有发现配置文件,以及rsync服务器启动程序,因为每个管理员可能对rsync 用途不一样,所以一般的发行版只是安装好软件  就完事了,让管理员来根据自己的用途和方向来自己架设rsync服务器;因为这个rsync应用比较广,能在同一台主机进行备份工作,还能在不同主机之间进行工作。在不同主机之间的进行备  份,是必须架设rsync 服务器的。
    Rsync在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客机的rsync同步操作的服务器称为备份源。在       下行同步(下载)中,备份源负责提供文档的原始 位置  ,发起端应对该位置具有读取权限;在上行同步(上传)中,备份源负责提供文档的目标位置,发起端应对该位置具有写入权限。


 2.配置rsync同步
   2.1 规划:服务节点(rsync服务端)               192.168.0.13   /rsync_test_dir
                                                 192.168.0.15   /rsync_test_dir
                                                 192.168.0.124  /rsync_test_dir
             内容发布节点(rsync客户端)         192.168.0.14   /rsync_test_dir
   PS: 这样设计的目的是为了方便后面使用inotify 实现自动同步
   2.2 服务节点以192.168.0.13的配置为例(0.14和0.124的配置方法相同):
       # yum -y install rsync
       # vim /etc/rsyncd.conf (默认没有此文件,需要手动创建,也可以放在其他位置,启动服务时指定位置即可)
         添加如下内容(仅供参考)
          uid = root                                   
          gid = root                                  
          port = 873                                
          use chroot = no
          maxconnections = 100             
          timeout = 600                               
          pid file = /var/run/rsyncd.pid           
          lock file = /var/run/rsyncd.lock         
          log file = /var/log/rsyncd.log                                                                                     
       
         [rsync]                                            
          path = /rsync_test_dir/                       
          ignore errors        
          read only = no                                
          list = no                                                                                                            
          hosts allow = 192.168.0.0/24          
          auth users = rsync                
          secrets file = /etc/rsync.pwd        

  2.3 # vim /etc/rsync.pwd 
        添加 rsync:12345678
       # chmod -R 600 /etc/rsync.pwd
   2.4 启动rsync服务程序,执行”rsync  --daemon”命令就可以启动rsync服务,以独立监听服务的方式运行,若要关闭rsync服务,可以采用            kill进程的方式
       # rsync --daemon
       # echo "rsync --daemon" >>/etc/rc.local
   2.5 在发布节点(192.168.0.14)上进行同步测试
        rsync  选项  用户名@备份源服务器IP::共享模块名   目标目录
       # vim /etc/rsync.pwd 
         12345678  (此处只写密码就可以了)
       # chmod -R 600 /etc/rsync.pwd
       # rsync -vzrtopg --delete --progress /rsync_test_dir/ rsync@192.168.0.124::rsync --password-file=/etc/rsync.pwd
         出现 “sending incremental file list
               ./
               1/
               sent 46 bytes  received 15 bytes  122.00 bytes/sec
              total size is 0  speedup is 0.00”  则说明同步成功 ,也可以新建目录或文件测试能否同步过去
       PS: sync命令的基本用法:
           格式:rsync 【选项】 源文件 目标文件
         常见的选项:
         -a,--archive 归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于-rlptgoD
         -r,–recursive 对子目录以递归模式处理
         -l,--links 表示拷贝链接文件
         -p , --perms 表示保持文件原有权限
         -t , --times 表示保持文件原有时间
         -g , --group 表示保持文件原有属用户组
         -o , --owner 表示保持文件原有属主
         -D , --devices 表示块设备文件信息
         -z , --compress 表示压缩传输
         -H 表示硬连接文件
         -A 保留ACL属性信息
         -P 显示传输进度
         -u, --update 仅仅进行更新,也就是跳过所有已经存在于目标位置,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
         --port=PORT 指定其他的rsync服务端口
         --delete 删除那些目标位置有而原始位置没有的文件
         --password-file=FILE 从FILE中得到密码
         --bwlimit=KBPS 限制I/O带宽,KBytes /second
         --filter “- 文件名”需要过滤的文件
         --exclude= :需要过滤的文件
         -v 显示同步过程的详细信息
         --exclude=files       指定名称的文件将不会被同步
         --exclude-from=dir    指定的目录将不会被同步


二,安装inotify 配合rsync自动同步
  1.inotify-tools是用来监控文件系统变化的工具,因此必须安装在内容发布节点,服务节点无需安装inotify-tools
    源码包下载地址
  PS: 由于inotify特性需要Linux内核的支持,在安装inotify-tools前要先确认Linux系统内核是否达到了2.6.13以上,如果Linux内核低于2.6.13版本,就需要重新编译内核加入inotify          的支持,也可以用如下方法判断,内核是否支持inotify:
  # uname -r
    2.6.18-164.11.1.el5PAE
  # ll /proc/sys/fs/inotify
    总计 0
    -rw-r--r-- 1 root root 0 04-13 19:56 max_queued_events
    -rw-r--r-- 1 root root 0 04-13 19:56 max_user_instances
    -rw-r--r-- 1 root root 0 04-13 19:56 max_user_watches 
    如果有上面三项输出,表示系统已经默认支持inotify,接着就可以开始安装inotify-tools了。
     
   1.1 # tar zxvf inotify-tools-3.14.tar.gz
       # cd inotify-tools-3.14
           ./configure
           make && make install
       # ll /usr/local/bin/inotifywa*
         -rwxr-xr-x 1 root root 37264 04-14 13:42 /usr/local/bin/inotifywait
         -rwxr-xr-x 1 root root 35438 04-14 13:42 /usr/local/bin/inotifywatch
         inotify-tools安装完成后,会生成inotifywait和inotifywatch两个指令,其中,inotifywait用于等待文件或文件集上的一个特定事件,它可以监控任何文件和目录设置,并且可以递归地监控整个目录树。
         inotifywatch用于收集被监控的文件系统统计数据,包括每个inotify事件发生多少次等信息。


   1.2 inotify相关参数
       inotify定义了下列的接口参数,可以用来限制inotify消耗kernel memory的大小。由于这些参数都是内存参数,因此,可以根据应用需求,实时的调节其大小。下面分别做简单介绍.
        /proc/sys/fs/inotify/max_queued_evnets     
          表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。
        /proc/sys/fs/inotify/max_user_instances
          表示每一个real user ID可创建的inotify instatnces的数量上限。
        /proc/sys/fs/inotify/max_user_watches
          表示每个inotify instatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小,例如:
          echo 30000000 > /proc/sys/fs/inotify/max_user_watches

  1.3 inotifywait相关参数
       Inotifywait是一个监控等待事件,可以配合shell脚本使用它,下面介绍一下常用的一些参数:
       -m, 即--monitor,表示始终保持事件监听状态。
       -r, 即--recursive,表示递归查询目录。
       -q, 即--quiet,表示打印出监控事件。
       -e, 即--event,通过此参数可以指定要监控的事件,常见的事件有modify、delete、create、attrib等。
         更详细的请参看man  inotifywait。
   1.4 编写脚本实现自动同步
       # vim rsync.sh 
         #!/bin/bash
         #Create Date: 2014-10-30
          host1=192.168.0.13
          host2=192.168.0.15
          host3=192.168.0.124
          user=rsync
          src=/rsync_test_dir/
          des=rsync
          /usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib ${src} |while read file
          do
          rsync -vzrtopg --delete --progress ${src} ${user}@${host1}::${des} --password-file=/etc/rsync.pwd
          rsync -vzrtopg --delete --progress ${src} ${user}@${host2}::${des} --password-file=/etc/rsync.pwd
          rsync -vzrtopg --delete --progress ${src} ${user}@${host3}::${des} --password-file=/etc/rsync.pwd
          echo "${file} was rsynced" >> /tmp/rsync.log 2>&1
          done


         # nohup sh /usr/local/src/rsync.sh & (将脚本放在后台运行,脚本位置随意,注意一定要加nohup,否则断开ssh连接脚本就会停止运行)
         # echo "/usr/local/src/rsync.sh &" >>/etc/rc.log (开机自动运行)

   1.5 在/rsync_test_dir/  创建或者删除文件,查看其他三个节点是否同步

  PS: 菜鸟上路,不足之处请多指教,谢过先;


阅读(1866) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~