Rsync 备份服务器 第一章 Rsync基本概述 rsync 是一款开源的备份工具,可以在不同主机之间进行同步,可实现全量备份与增量备份,因此非常适合用于架构集中式备份或异地备份等应用。 rsync 官方地址: 传送门 http://rsync.samba.org rsync 监听端口: 873 rsync 运行模式: C/S(Client/Server)
安装rsync服务命令:本地与远程均需安装
第二章 Rsync应用场景 2.1 备份方式: 既然需要备份,那么我们应该了解备份的方式 完全备份 增量备份 假设客户端上有 file1 file2 file3 文件,服务端上有 file1 文件,现要将客户端上的数据备份至服务端 完全备份方式:
增量备份方式:
2.2 备份架构: 1推(上传)
2拉 (下载)
3.大量服务器备份
4.异地备份
第三章 Rsync三种模式 3.1 本地模式 相当于cp
创建测试目录及文件
1 2 3 4 5 6 7 8 9 1.mkdir /data cd /data/ 2.dd if =/dev/zero of=/data/500M.txt bs=10M count=50 50+0 records in 50+0 records out 524288000 bytes (524 MB) copied, 18.1737 s, 28.8 MB/s 3.ll -h total 500M -rw-r--r-- 1 root root 500M Jul 16 21:58 500M.txt
测试本地模式
1 2 3 4 5 6 7 8 9 10 1.mkdir /tmp/test 2.rsync -avz /data/500M.txt /tmp/test / sending incremental file list 500M.txt sent 509,968 bytes received 35 bytes 27,567.73 bytes/sec total size is 524,288,000 speedup is 1,028.01 3.ll /tmp/test / total 512000 -rw-r--r-- 1 root root 524288000 Jul 16 21:58 500M.txt
3.2 远程模式 下载
1 2 3 4 rsync -avz root@172.16.1.31:/tmp/data/ /data/ rsync -avz root@172.16.1.31:/tmp/data /data/
上传
1 rsync -avz 1G.txt root@172.16.1.31:/tmp/data
3.3 后台服务模式 Rsync 借助 SSH 协议同步数据存在的缺陷
1.使用系统用户(不安全),需要知道root密码
2.使用普通用户(会导致权限不足情况)需要修改用户属主、属组信息(uid gid)
3.守护进程传输方式: rsync 自身非常重要的功能(不使用系统用户,更加安全)
3.4 命令参数解释 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 rsync [OPTION...] SRC... [USER@] HOST:: [DEST] -a -v -z -r -t -o -p -g -l -P -D -L -e --exclude=PATTERN --exclude-from=file --bwlimit=100 --partial --delete
我们一般使用:
1 2 rsync -avz 本地上传文件 目标地址(IP):/路径 rsync -avz 目标地址(IP):/路径/目录(文件) 本地路径
第四章 后台服务模式-服务端配置 4.1 安装rsync服务
4.2 修改配置文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [root@backup /backup] uid = www gid = www port = 873 fake super = yes use chroot = no max connections = 200 timeout = 600 ignore errors read only = false list = false auth users = rsync_backup secrets file = /etc/rsync.passwd log file = /var/log /rsyncd.log[backup] comment = welcome to oldboyedu backup! path = /backup [data] path = /data
4.3 配置文件解释 注意!以下配置只是为了理解rsync配置参数,配置文件中不要带有#或者中文,不然启动会报错
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 uid = www gid = www port = 873 fake super = yes use chroot = no max connections = 200 timeout = 600 ignore errors read only = false list = false auth users = rsync_backup secrets file = /etc/rsync.passwd [backup] comment = commit path = /backup
4.4 创建用户以及数据目录 并更改属主 1 2 3 4 useradd -M -s /sbin/nologin -u 666 www mkdir /backup /data chown -R www.www /backup chown -R www.www /data
4.5 创建虚拟用户密码文件并授权 1 2 echo "rsync_backup:oldboy" >/etc/rsync.passwdchmod 600 /etc/rsync.passwd
4.6 加入开机启动 1 2 systemctl start rsyncd systemctl enable rsyncd
4.7 检查端口和服务 1 2 netstat -lntup|grep 873 systemctl status rsyncd
第五章 后台服务模式-客户端配置 5.1 安装rsync服务
5.2 配置密码文件及授权 两种方式: 1.使用密码文件
1 2 3 echo "oldboy" >/etc/rsync.passwdchmod 600 /etc/rsync.passwd rsync -avzP linux2NB.txt rsync_backup@172.16.1.41::backup --passwordfile=/etc/rsync.passwd
2.使用rsync变量-脚本中使用-推荐这种
1 export RSYNC_PASSWORD=oldboy
第六章 实战内容 6.1 客户端推送 backup 目录下所有内容至 Rsync 服务端 1 2 export RSYNC_PASSWORD=oldboyrsync -avzP /backup/ rsync_backup@172.16.1.41::backup
6.2 客户端拉取 Rsync 服务端 backup 模块数据至本地客户端的 /backup 目录 1 2 export RSYNC_PASSWORD=oldboyrsync -avzP rsync_backup@172.16.1.41::backup /backup/
6.3 Rsync 实现数据无差异同步 1 2 3 4 5 6 export RSYNC_PASSWORD=oldboyrsync -avzP --delete rsync_backup@172.16.1.41::backup /data/ export RSYNC_PASSWORD=oldboyrsync -avzP --delete /data/ rsync_backup@172.16.1.41::backup
6.4 Rsync 的 Limit 限速 1 2 3 export RSYNC_PASSWORD=oldboyrsync -avz --bwlimit=10 rsync_backup@172.16.1.41::backup /data/
第七章 全网备份案例 7.1 客户端需求: 1.客户端 每天凌晨1点在服务器本地打包备份(系统配置文件\日志文件\其他目录\应用配置等文件) 2.客户端备份的数据必须存放至以主机名ip地址 当前时间命名的目录中 3.客户端最后通过rsync推送本地已经打包好的备份文件至backup服务器 4.客户端服务器本地保留最近7天的数据,避免浪费磁盘空间
7.2 客户端实现步骤: 7.2.1.创建脚本目录 1 mkdir -p /server/scripts
7.2.2. 取主机名
7.2.3 取IP地址 1 ifconfig eth1|awk 'NR==2{print $2}'
7.2.4 取时间
7.2.5 拼接在一起 1 echo $(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}' )_$(date +%F)
7.2.6 创建测试 1 mkdir -p /backup/$(hostname)_$(ifconfig eth1|awk'NR==2{print $2}' )_$(date +%F)
7.2.7 打包并查看压缩包内容 1 2 cd / && tar zcvf sys.tar.gz etc/fstab etc/passwd tar tf sys.tar.gz
7.2.8 拼接命令 1 2 cd / && tar zcf /backup/$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}' )_$(date +%F)/sys.tar.gz etc/fstab etc/passwdcd / && tar zcf /backup/$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}' )_$(date +%F)/log.tar.gz var/log /messages var/log /secure
7.2.9 创建数据 1 2 3 4 5 6 7 8 9 10 11 #!/bin/bash for i in {1..31}do backup="/backup/$(hostname) _$(ifconfig eth1|awk 'NR==2{print $2}') _$(date +%F) " date -s 2017/07/${i} mkdir -p ${backup} cd / && tar zcf ${backup} /sys.tar.gz etc/passwd etc/fstabcd / && tar zcf ${backup} /log.tar.gz var/log /messages var/log /securedone
7.2.10 客户端给压缩文件打上指纹 1 md5sum /backup/$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}' )_$(date +%F)/*.tar.gz >/backup/$(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}' )_$(date +%F)/$(date +%F)_md5.txt
7.2.11 删除7天的前文件 1 find /backup/ -type d -mtime +7|xargs rm -rf
7.2.12 将路径、IP地址、时间命令替换成变量 1 2 3 4 5 6 PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin" BACKUP=/backup HOST=$(hostname) IP=$(ifconfig eth1|awk 'NR==2{print $2}' ) DATE=$(date +%F) DEST=${HOST} _${IP} _${DATE}
7.2.13 注意要点: 注意踩坑 我们的备份脚本最终会以定时任务的形式实现,而定时任务能识别的PATH变量有限,所以最好在脚本里添加PATH变量,或者脚本里命令写绝对路径。
7.3 服务端需求: 1.服务端部署 rsync,用于接收客户端推送过来的备份数据 2.服务端需要每天校验客户端推送过来的数据是否完整 3.服务端需要每天校验的结果通知给管理员 4.服务端仅保留 6 个月的备份数据,其余的全部删除 注意:所有服务器的备份目录必须都为/backup
7.4 服务端实现步骤 7.4.1 校验客户端发送来的数据文件 1 find ${BACKUP} / -name "md5.txt" -type f|xargs md5sum -c >${BACKUP} /check_${DATE} .txt
7.4.2 发送邮件cd 1 mail -s "rsync_check_${DATE} " wufei008@qq.com <${BACKUP} /check_${DATE} .txt
7.4.3 删除文件 1 2 3 find ${BACKUP} / -type f -name "check*" -mtime +7|xargs rm -rf find ${BACKUP} / -type d -mtime +180|xargs rm -rf
7.4.4 安装配置mailx 安装mailx服务
修改配置文件
1 2 3 4 5 6 7 8 set from=xxxxxx set smtp=smtps://smtp.qq.com:465set smtp-auth-user=xxxxxx set smtp-auth-password=xxxxxx set smtp-auth=loginset ssl-verify=ignoreset nss-config-dir=/etc/pki/nssdb/
第八章 配置文件汇总 8.1 客户端生成数据脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 #!/bin/bash for i in {1..31}do backup="/backup/$(hostname) _$(ifconfig eth1|awk 'NR==2{print $2}') _$(date +%F) " date -s 2017/07/${i} mkdir -p ${backup} cd / && tar -zcf ${backup} /sys.tar.gz etc/passwd etc/fstabcd / && tar -zcf ${backup} /log.tar.gz var/log /messages var/log /securedone
8.2 客户端上传脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #!/bin/bash PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin" BACKUP=/backup HOST=$(hostname) IP=$(ifconfig eth1|awk 'NR==2{print $2}' ) DATE=$(date +%F) DEST=${HOST} _${IP} _${DATE} mkdir -p ${BACKUP} /${DEST} cd / && tar -zcf ${BACKUP} /${DEST} /sys.tar.gz etc/passwd etc/fstabcd / && tar -zcf ${BACKUP} /${DEST} /log.tar.gz var/log /messages var/log /securemd5sum ${BACKUP} /${DEST} /*.tar.gz >${BACKUP} /${DEST} /${DATE} _md5.txt export RSYNC_PASSWORD=oldboyrsync -avzP ${BACKUP} / rsync_backup@172.16.1.41::backup find ${BACKUP} / -type d -mtime +7 |xargs rm -rf
8.3 服务器端校验并发送到邮箱脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #!/bin/bash PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin" BACKUP=/backup HOST=$(hostname) IP=$(ifconfig eth1|awk 'NR==2{print $2}' ) DATE=$(date +%F) DEST=${HOST} _${IP} _${DATE} find ${BACKUP} / -name "md5.txt" -type f|xargs md5sum -c >${BACKUP} /check_${DATE} .txt mail -s "rsync_check_${DATE} " wufei008@qq.com <${BACKUP} /check_${DATE} .txt find ${BACKUP} / -type f -name "check*" -mtime +7|xargs rm -rf find ${BACKUP} / -type d -mtime +180|xargs rm -rf
8.4 服务器rsync安装配置脚本 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 #!/bin/bash yum install rsync -y useradd -s /sbin/nologin -M -u 666 www cat > /etc/rsyncd.conf <<EOF uid = www gid = www port = 873 fake super = yes use chroot = no max connections = 200 timeout = 600 read only = false list = false ignore errors auth users = rsync_backup secrets file = /etc/rsync.passwd log file = /var/log /rsyncd.log[backup] comment = welcome to oldboyedu backup! path = /backup [data] path = /data EOF echo "rsync_backup:oldboy" >/etc/rsync.passwdchmod 600 /etc/rsync.passwd mkdir -p /{data,backup} chown -R www:www /{data,backup} systemctl start rsyncd systemctl enable rsyncd ps -ef|grep rsync ss -lntup|grep 873 netstat -lntup|grep rsync