安装:

#wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz
#tar xf rsync-3.0.9.tar.gz
# cd rsync-3.0.9
# ./configure && make && make install

参数

-v,--verbose  详细模式输出;
-a,--archive  归档模式,表示以递归的方式传输文件,并保持所有文件属性不变,相当于使用了组合参数-rlptgoD;
-r, --recursive 对子目录以递归模式处理;
-l, --links 保留软链结;
-p, --perms 保持文件权限;
-t, --times 保持文件时间信息;
-g, --group 保持文件属组信息;
-o, --owner 保持文件属主信息;
-D, --devices 保持设备文件信息;
-H, --hard-links 保留硬链结;
-S, --sparse 对稀疏文件进行特殊处理以节省DST的 空间;
--delete 删除那些DST中SRC没有的文件;
-z, --compress 对备份的文件在传输时进行压缩处理;

rsync六种不同的工作模式:

拷贝本地文件,将/home/coremail目录下的文件拷贝到/cmbak目录下

rsync -avSH /home/coremail/ /cmbak/

拷贝本地机器的内容到远程机器

rsync -av /home/coremail/ 192.168.11.12:/home/coremail/

拷贝远程机器的内容到本地机器

rsync -av 192.168.11.11:/home/coremail/ /home/coremail/

拷贝远程rsync服务器(daemon形式运行rsync)的文件到本地机

这种形式:配置文件secrets file指向的文件 需要进行600授权处理如下:
chmod 600 /etc/rsyncd.passwd
然后如下形式启动:
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf

rsync -av root@172.16.78.192::www /databack

拷贝本地机器文件到远程rsync服务器(daemon形式运行rsync)中。当DST路径信息包含”::”分隔符时启动该模式

rsync -av /databack root@172.16.78.192::www

显示远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可

rsync -v rsync://192.168.11.11/data

# cat/etc/rsyncd.conf  //内容如下
port = 873   //端口号
uid = nobody  //指定当模块传输文件的守护进程UID
gid = nobody  //指定当模块传输文件的守护进程GID
use chroot = no  //使用chroot到文件系统中的目录中
max connections = 10  //最大并发连接数
strict modes = yes  //指定是否检查口令文件的权限

pid file = /usr/local/rsyncd/rsyncd.pid  //指定PID文件
lock file = /usr/local/rsyncd/rsyncd.lock  //指定支持max connection的锁文件,默认为/var/run/rsyncd.lock
motd file = /usr/local/rsyncd/rsyncd.motd  //定义服务器信息的,自己写 rsyncd.motd 文件内容
log file = /usr/local/rsyncd/rsync.log  //rsync 服务器的日志

log format = %t %a %m %f %b
syslog facility = local3
timeout = 300

[conf]  //自定义模块
path = /usr/local/nginx/conf  //用来指定要备份的目录
comment = Nginx conf
ignore errors  //可以忽略一些IO错误
read only = no  //设置no,客户端可以上传文件,yes是只读
write only = no  //no为客户端可以下载,yes 不能下载
hosts allow = 192.168.2.0/24  //可以连接的IP
hosts deny = *  //禁止连接的IP
list = false  //客户请求时,使用模块列表
uid = root
gid = root
auth users = backup  //连接用户名,和linux系统用户名无关系
secrets file = /etc/rsyncd.pass  //验证密码文件

鸣谢:酷喃|COOLNULL
参考来源:http://coolnull.com/1899.html


接下来参考性比较高:

安装rsync (两台服务器都要安装)
  yum在线:
        yum install -y rsync
        
    离线:
    cd /usr/local
    wget https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz
    tar -zxvf rsync-3.1.2.tar.gz
    cd rsync-3.1.2
    ./configure --prefix=/usr/local/rsync
    make
    make install
创建rsync配置文件
    yum在线:
    vi /etc/rsyncd.conf
    离线:
    vi /usr/local/rsync/rsyncd.conf
配置文件内容

#rsync通用配置文件,配置的注释不要写在配置后面,否则会有问题
uid = root
gid = root
use chroot = 0
port = 873
#允许ip访问设置,请根据实际需要进行配置,这里为了方便设为全网段 *
# hosts allow = 192.168.0.1/255.255.255.0 198.162.145.1 10.0.1.0/255.255.255.0
hosts allow = *
max connections = 0
timeout = 300
pid file = /var/run/rsyncd.pid
ock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
log format = %t %a %m %f %b
transfer logging = yes
syslog facility = local3
#方括号中为模块声明,对应命名,这里master_web对应了主web机配置
[master_web]
#指定当前模块在rsync服务器上的同步路径,该参数是必须指定的
path = /app/web/data-share/static/
#注释,可以同模块名一样,从服务器可都为slave_web
comment = master_web
ignore errors
#是否允许客户端上传文件
read only = no
list = no
#指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块 这里的用户就是文件设置的用户!!!下面会有说明
auth users = rsync
#保存密码和用户名文件,需要自己生成
secrets file = /etc/rsyncd.passwd

创建用户名密码文件
   yum在线:
   vi /etc/rsyncd.passwd    这里被配置文件引用 即:本机的模块账号密码
   vi /root/rsyncd.passwd   这里是访问远程是命令引用 即:远程的密码
    离线:
    vi /usr/local/rsync/rsyncd.passwd
   vi /root/rsyncd.passwd

文件内容:

说明:/etc/rsyncd.passwd中内容格式 用户名:密码 ,两台服务器设置相同的用户名密码
内容如下:
rsync:123456

说明:/root/rsyncd.passwd中内容只需要填写从服务器的密码,两台服务器设置相同的密码
内容如下:
123456

注意授权600这个特殊的权限

Yum在线:
chmod 600 /etc/rsyncd.passwd
chmod 600 /root/rsyncd.passwd

离线:
chmod 600 /usr/local/rsync/rsyncd.passwd
chmod 600 /root/rsyncd.passwd

注意这个运行方式

虽然可以用

service rsyncd start 启动
service rsyncd stop 关闭

但是,如果想用命令单行直接完成一次同步命令
(说明:普通模式下的启用,对远程同步或者获取远程文件 在执行
rsync -av /home/coremail/ 192.168.11.12:/home/coremail/ 需要命令输入远程的密码才能执行成一次文件合并) 不适合定时任务。
如果放在定时任务时,需要单命令执行操作:需要把远程进行模块权限封装 如:www模块path=/home/test/ 设置权限文件账号文件 自动读取权限密码后,完成一个合并的单命令操作
所以采用以下方式启动服务:

以守护进程方式启动rsync服务

Yum在线:
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf

离线:
/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf

验证是否可以手动同步

rsync -vzrtopg --delete --progress /home/test/t1/ rsync@192.168.2.99::www --password-file=/root/rsyncd.passwd

 rsync -vzrtopg --delete --progress /home/test/t1/ rsync@192.168.2.99::www --password-file=/root/rsyncd.passwd

rsync常用命令以及部署实战体验rsync_守护进程

添加开机自启动

yum在线:
echo “/usr/bin/rsync --daemon --config=/etc/rsyncd.conf”>>/etc/rc.local

离线:
echo “/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf”>>/etc/rc.local

定时任务

echo ‘*/1 * * * * rsync -vzrtopg --delete --progress /home/test/t1/ rsync@192.168.2.99::www --password-file=/root/rsyncd.passwd > /dev/null 2>&1 &’ >> /var/spool/cron/root

echo '*/1 * * * * rsync -vzrtopg --delete --progress /home/test/t1/ rsync@192.168.2.99::www --password-file=/root/rsyncd.passwd > /dev/null 2>&1 &' >> /var/spool/cron/root

安装inotify(两台服务器都要安装)
   wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz --no-check-certificate
    tar -zxvf inotify-tools-3.14.tar.gz
    makedir /usr/local/inotify
    cd inotify-tools-3.14.tar.gz
    ./configure --prefix=/usr/local/inotify
    make && make install
    # 查看是否安装成功
    ls -alh /usr/local/inotify/bin/inotify*
    # 建立软连接
    ln -s /usr/local/inotify/bin/inotifywait /usr/bin/inotifywait
    ln -s /usr/local/inotify/bin/inotifywatch /usr/bin/inotifywatch
创建并配置inotify_back.sh同步监控脚本
  vi /usr/local/inotify/inotify_back.sh

    配置文件内容:

    78服务器:
    #!/bin/bash
    src=/app/web/data-share/static/
    /usr/local/inotify/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
    rsync -vzrtopg --delete --progress /usr/local/data-share/static/ rsync@172.20.14.79::master_web --password-file=/root/rsyncd.passwd
    echo "${file} was rsynced" >> /tmp/rsync.log 2>&1
    done

    79服务器:
    #!/bin/bash
    src=/app/web/data-share/static/
    /usr/local/inotify/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
    rsync -vzrtopg --delete --progress /usr/local/data-share/static/ rsync@172.20.14.78::master_web --password-file=/root/rsyncd.passwd
    echo "${file} was rsynced" >> /tmp/rsync.log 2>&1
    done
给inotify_back.sh脚本赋可执行权限

chmod +x inotify_back.sh

运行inotify_back.sh同步监控脚本和配置守护进程

nohup ./inotify_back.sh &
#建立守护进程运行inotify_back.sh脚本
echo “nohup ./inotify_back.sh &” >> /etc/rc.local