中间件

rsync简单配置

admin · 7月6日 · 2020年

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

二.服务端配置

  1. 安装rsync
  2. 检查selinux是否关闭
  3. 添加rsync用户
  4. 配置rsyncd.conf
  5. 配置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