一.rsync介绍
rsync参数 
-v, --verbose             #显示输出
-z, --compress            #压缩
-a, --archive             #多参数集合(-rtopgDl)
-r, -- recursive          #递归
-t, --time                #保持修改时间属性
-o, --owner               #保持归属属性
-p, --perms               #保持权限
-g, --group               #保持用户组
-l, --links               #保持拷贝软连接
-q, --quiet               #安静模式
--bwlimit-KBPS            #限制I/O带宽
--delete                  #无差异备份
--exclude                 #排除
--exclude-from            #从文件中排除
常用: -avz或者-vzrtopg
二.服务端配置
- 安装rsync
 - 检查selinux是否关闭
 - 添加rsync用户
 - 配置rsyncd.conf
 - 配置rsync.password
 
1.安装rsync
yum install rsync -y
2.检查selinux是否关闭
getenforce 
setenforce 0                                                             #临时关闭selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config       #永久关闭selinux
3.添加rsync用户
useradd rsync
mkdir /backup                                            #创建同步目录
chown -R rsync.rsync /backup
4.配置rsyncd.conf
rsyncd.conf典型配置
cat >>/etc/rsyncd.conf <<EOF
uid = rsync                                             #管理备份目录的用户
gid = rsync                                             #管理备份目录的用户组
fake super = yes                                        #不需要root账号
use chroot = no                                         #安全功能,确认数据是否锁定到备份目录
max connections = 200                                   #最大连接数
timeout = 600                                           #超时时间
pid file = /var/run/rsyncd.pid                          #进程文件
lock file =  /var/run/rsync.lock                        #锁文件
log file = /var/log/rsyncd.log                          #日志
Ignore errors                                           #忽略错误
read only = false                                       #可读写
hosts allow = 172.16.1.0/24                             #可访问网段
host deny = 0.0.0.0/32                                  #拒绝网段
auth users = rsync_backup                               #远程虚拟连接用户
secrets file = /etc/rsync.password                      #存放密码的文件     格式{虚拟用户名:密码}权限600
incoming chmod = Du=rwx,Dgo=r,Fu=rwx,Fgo=r              #修改同步后的权限。D表示目录,F表示文件,u=user,g=group,o=other
[backup]                                                #模块名(远程访问时使用)
path = /backup/                                         #服务器端用于备份的目录,用户和组一般为rsync
EOF
以下直接复制
cat >>/etc/rsyncd.conf <<EOF
uid = rsync
gid = rsync
fake super = yes
use chroot = no
max connections = 200
timeout = 600
pid file = /var/run/rsyncd.pid
lock file =  /var/run/rsync.lock
log file = /var/log/rsyncd.log
Ignore errors
read only = false
hosts allow = 172.16.1.0/24
host deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
path = /backup/
EOF
5.配置rsync.password
#文件路径/etc/rsync.password
echo "rsync_backup:123456" > /etc/rsync.password
chmod 600 /etc/rsync.password                            #所属用户和组是root
6.启动rsyncd
systemctl start rsyncd.service 
systemctl enable rsyncd.service 
三.客户端配置
方法1:
使用上面的密码文件(只要密码不要用户)
echo "123456" > /etc/rsync.password
chmod 600 /etc/rsync.password
方法2:
echo "export RSYNC_PASSWD=123456" >> /etc/bashrc
source /etc/bashrc
客户端同步语法
push:      rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
           
           语法1:
           rsync      [OPTION...]     DEST               [USER@]HOST::SRC                   
           rsunc       参数选项        本地路径           [虚拟用户]@[主机名]::[模块名]    
           
           语法2:  
           rsync      [OPTION...]     DEST               rsync://[USER@]HOST/SRC       
           rsync       参数选项        本地路径           rsync://[虚拟用户]@[主机名]/[模块名]    
pull:    
           语法1:
           rsync      [OPTION...] [USER@]HOST::SRC                    [DEST]
           rsunc       参数选项    [虚拟用户]@[主机名]::[模块名]          本地路径
           
           语法2:  
           rsync      [OPTION...] rsync://[USER@]HOST/SRC             [DEST]
           rsync       参数选项    rsync://[虚拟用户]@[主机名]/[模块名]   本地路径
四.Example
#客户端上传
rsync -avz /etc rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
#客户端下载
rsync -avz rsync_backup@172.16.1.41::backup /download --password-file=/etc/rsync.password
五.企业级应用例子
生产需求:
- 共有3台服务器:web01、nfs、backup
 - backup运行rsync守护进程
 - web01和nfs周期性将数据备份到backup
 - web01需要备份
- /var/spoof/cron/root
 - /etc/rc.local
 - /server/scripts
 - /var/html/www
 
 - nfs需要备份
- /var/spoof/cron/root
 - /etc/rc.local
 - /server/scripts
 
 - web01和nfs服务器上保留打包后的7天内的备份数据
 - backup服务器上保留保留打包后的7天内的备份数据,同时保留6个月内每周一到所有数据
 - 需要保证备份数据的完整性
 - 每天早上8点把备份结果发送到管理员邮箱
 
web01和nfs上需要如下脚本
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
export RSYNC_PASSWORD=passwd
IP=$(ifconfig | grep broad | sed '2,$d' | awk '{print $2}')
mkdir -r /backup/$IP
#1.打包&&生成打包正常的标志
tar -zchf /backup/$IP/bak_${IP}_$(date +%F_%w).tar.gz /var/spoof/cron/root /etc/rc.local /server/scripts &> /dev/null &&touch /backup/$IP/bak_${IP}_$(date +%F_%w).md5
#2.指纹采集
find /backup/ -type f -name "*.tar.gz" | xarg md5sum >/backup/$IP/bak_${IP}_$(date +%F_%w).md5
#3.推送到rsync服务器
rsync -az /backup/ rsync_backup@172.16.1.41::backup &>/dev/null
#4.删除7天前的备份
find /backup/ -type f -name "*.tar.gz" -mtime +7 | xargs rm -f
backup上需要以下脚本
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
find /backup/ -type f -name "*.tar.gz" -mtime +180 | xargs rm -f
find /backup/ -type f ! -name "*_1.tar.gz" -mtime +7 | xargs rm -f