rsync install

rsync介绍

1
2
3
4
5
6
7
8
rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync
它的特性如下:
1.可以镜像保存整个目录树和文件系统
2.可以很容易做到保持原来文件的权限、时间、软硬链接等等
3.无须特殊权限即可安装
4.优化的流程,文件传输效率高
5.可以使用rcp,ssh等方式来传输文件,当然也可以通过直接的socket连接
6.支持匿名传输,以方便进行网站镜象

rsync 安装

  1. 安装

    1
    [root@localhost ~]# yum -y install rsync* inotify-tools*
  2. 创建rsyncd用户

    1
    [root@localhost ~]# useradd -M -s /sbin/nologin rsyncd
  3. 创建配置文件目录

    1
    [root@localhost ~]# mkdir -p /etc/rsyncd
  4. 创建配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [root@localhost ~]# touch /etc/rsyncd/rsyncd.conf
    [root@localhost ~]# touch /etc/rsyncd/rsyncd.secrets
    [root@localhost ~]# touch /etc/rsyncd/rsyncd.motd
    说明:
    rsyncd.conf 主配置文件
    rsyncd.secrets 用户名密码文件,一组用户一行,用户名和密码使用:分割
    rsyncd.motd 非必须,连接上rsyncd显示的欢迎信息

    [root@localhost ~]# chmod 600 /etc/rsyncd/rsyncd.secrets
    注意: rsyncd.secrets权限必须是600
  5. 编辑配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    [root@localhost ~]# vim /etc/rsyncd/rsyncd.conf
    #rsyncd 守护进程运行系统用户全局配置,也可在具体的块中独立配置,
    uid = root
    gid = root
    # 守护进程监听ip
    address = 0.0.0.0
    # 护进程监听端口
    port = 873
    # 守护进程pid文件
    pid file = /var/run/rsyncd.pid
    # 守护进程lock文件
    lock file = /var/run/rsyncd.lock
    #允许chroot,提升安全性,客户端连接模块,首先chroot到模块path参数指定的目录下
    #chroot为yes时必须使用root权限,且不能备份path路径外的链接文件
    use chroot = yes
    #只读
    read only = no
    #只写
    write only = no
    #允许访问rsyncd服务的ip,ip端或者单独ip之间使用空格隔开
    hosts allow = 0.0.0.0/0
    #不允许访问rsyncd服务的ip,*是全部(不涵盖在hosts allow中声明的ip,注意和hosts allow的先后顺序)
    hosts deny = *
    #客户端最大连接数
    max connections = 20
    #欢迎文件路径,可选的
    #motd file = /etc/rsyncd/rsyncd.motd
    # 是否记录传输文件日志
    transfer logging = yes
    # 日志文件格式
    log format = %t %a %m %f %b
    # 指定rsync发送消息日志文件,而不是发送给syslog,如果不填这个参数默认发送给syslog
    log file = /var/log/rsyncd.log
    # syslog facility rsync发送消息给syslog时的消息级别
    syslog facility = local3
    # timeout连接超时时间
    timeout = 300

    # 模块 模块名称必须使用[]环绕
    # 比如:要访问data1,则地址应该是data1user@192.168.1.2::data1
    [test]
    #模块根目录,必须指定
    path = /home/vsftpduser/ftpdata/test
    #只读
    read only = yes
    #是否允许列出模块里的内容
    list=no
    # 忽略错误
    # ignore errors
    # 模块验证用户名称,可使用空格或者逗号隔开多个用户名
    auth users = testsync
    # 模块验证密码文件 可放在全局配置里
    secrets file = /etc/rsyncd/rsyncd.secrets
    # 注释
    comment = test ftp data
    # 排除目录,多个之间使用空格隔开
    exclude = test/
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    补充:
    # 主要定义符及含义:
    # %h远程主机名
    # %a远程IP地址
    # %l文件长度字符数
    # %p该次rsync会话的进程id
    # %o操作类型:"send"或"recv"
    # %f文件名
    # %P模块路径
    # %m模块名
    # %t当前时间
    # %u认证的用户名(匿名时是null)
    # %b实际传输的字节数
    # %c当发送文件时,该字段记录该文件的校验码
    #默认log格式为:"%o %h [%a] %m (%u) %f %l",一般来说,在每行的头上会添加"%t [%p] "。
    log format=%o %h [%a] %m (%u) %f %l
  6. 启动rsyncd服务

    1
    [root@localhost ~]# /usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf
  7. 客户端测试

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    方式一: 通过SSH同步
    1.将当前key拷贝到服务端用户目录
    [ec2-user@god ~]$ ssh-keygen
    [ec2-user@god ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@1.1.1.1 -p22

    2.通过客户端进行同步
    //表示同步目录
    [ec2-user@god ~]$ rsync -avzHP --delete --progress --bwlimit=1000000 -e "ssh -p 22" root@1.1.1.1:/home/vsftpduser/ftpdata/test ./test
    //表示同步目录下的文件(不包含目录本身)
    [ec2-user@god ~]$ rsync -avzHP --delete --progress --bwlimit=1000000 -e "ssh -p 22" root@1.1.1.1:/home/vsftpduser/ftpdata/test/ ./test
    注意:
    a 保留文件原有权限,用户,用户组,时间且递归的copy包括链接文件,块设备在内的所有文件
    v 显示传输信息
    P 显示传输进度
    H 保留硬链接
    z 压缩传输内容进行传输
    --delete 删除那些DST中SRC没有的文件
    --progress 显示备份过程
    --bwlimit 限制带宽,字节/秒
    1
    2
    3
    4
    5
    6
    7
    8
    方式二:通过rsync账号和密码同步
    客户端:
    [ec2-user@god ~]$ vim rsync.pass //注意文件中只保存密码
    qxn9fav
    [ec2-user@god ~]$ chmod 600 rsync.pass //密码文件必须是600

    //表示同步目录下的文件
    [ec2-user@god ~]$ rsync -avzHP --delete --progress --bwlimit=1000000 --port 52003 --password-file=rsync.pass sspsync@1.1.1.1::test ./test

inotify-tools安装

  1. 安装后文件存放在:

    1
    2
    /usr/local/bin/inotifywait
    /usr/local/bin/inotifywatch
  2. 修改内核参数:

    1
    2
    3
    4
    5
    vim /etc/sysctl.conf
    fs.inotify.max_queued_events=99999999
    fs.inotify.max_user_watches=99999999
    fs.inotify.max_user_instances=65536
    sysctl -p
    1
    2
    3
    4
    说明:
    max_queued_events inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确
    max_user_watches 要同步的文件包含多少目录,可以用:"find /home/www.osyunwei.com -type d | wc -l"统计,必须保证max_user_watches值大于统计结果
    max_user_instances 每个用户创建inotify实例最大值
  3. 编写脚本进行实时推送

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    rsync_inotify.sh
    #!/bin/bash
    src=/opt/test/
    /usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $src | while read file;do
    /usr/bin/rsync -arzuq $src 192.168.0.2::www/
    echo " ${file} was rsynced" >>/opt/soft/log/rsync.log 2>&1
    done

    chmod +x rsync_inotify.sh

    ./rsync_inotify.sh &
  4. 拓展

    1
    2
    3
    4
    -m 是保持一直监听
    -r 是递归查看目录
    -q 是打印出事件
    -e create,move,delete,modify,attrib 是指"监听 创建 移动 删除 写入 权限"事件