一.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