rsync远程传输-守护进程模式
rsync服务建立步骤
1、安装rsync工具
yum install rsync -y
2、修改配置文件
vim /etc/rsyncd.conf
3、将配置文件自定义为
uid = zjh (进程的写入身份) gid = zjh (进程写入的组身份) port = 873 (rsync端口) fake super = yes (不需要rsync以root权限运行就能储存文件的完整性) use chroot = no (禁锢推送的数据至某个目录,不允许跳出该目录) max connections = 200 (最大连接数) timeout = 600 (超时时间) ignore errors (忽略错误) read only = false (禁止只读,允许读写) list = false (查看模块的名称和模块的信息描述)(false为禁止,true为允许) auth users = zjh_backup (定义虚拟用户的名称,这个名称不存在于系统中,仅为rsync用) secrets file = /etc/zjh.passwd (在这个文件中填写虚拟用户的密码)(用户名:密码) log file = /var/log/rsyncd.log (日志文件的位置) #################################### [backup](模块名称) comment = welcome to zjh backup! (注释信息) path = /backup (模块对应的具体位置)
4、根据配置文件进行初始化操作
4.1 创建rsync用户
useradd zjh -r -M
4.2 配置rsync虚拟用户,并修改rsync.passwd的权限为640,(用于链接rsync服务端)(文件权限中的other不能有权限)
echo "zjh_backup:1" > /etc/zjh.passwd
chmod 640 /etc/zjh.passwd
4.3 根据配置文件的信息创建模块对应的目录,并修改文件的属主属组为zjh 修改backup目录权限为755(path = /backup)
mkdir /backup -p
chown -R zjh.zjh /backup
chmod 755 /backup/
4.4 启动,并且加入开机自启动
systemctl enable --now rsyncd
或
systemctl enable rsyncd
systemctl start rsyncd
4.5 检查服务端口
netstat -lntp 或 ss -ntl
4.6 关闭防火墙和selinux
systemctl stop firewalld
setenforce 0
附加:完整配置文件(无注释版)
uid = zjh gid = zjh port = 873 fake super = yes use chroot = no max connections = 200 timeout = 600 ignore errors read only = false list = false auth users = zjh_backup secrets file = /etc/zjh.passwd log file = /var/log/rsyncd.log #################################### [backup] comment = welcome to zjh backup! path = /backup
推送命令 (将当前主机的文件推送到备份主机的备份模块里)
rsync -avz +需要推送的文件或目录 +虚拟用户名称@目标主机的内网地址::模块名
拉取命令 (将备份主机的备份模块里的文件拉取到当前主机里)
rsync -avz +虚拟用户名称@目标主机的内网地址::模块名 +需要拉取到哪个位置
客户端免密实现传输和拉取
第一种 --password-file (实时同步需求)
echo "1" > /etc/rsync.pass (创建一个存储rsync密码的文件)
chmod 600 /etc/rsync.pass (修改文件的权限为600,other位不能有权限)
rsync -avzP /opt/bigdate zjh_backup@172.16.1.33::backup --password-file=/etc/rsync.pass (推送命令后接上--password-file=存放密码的文件)
第二种 export RSYNC_PASSWORD (写脚本需求)
export RSYNC_PASSWORD=1 (声明当前主机的rsync密码为1,切换主机后不能使用)
--delete无差别推送/拉取参数 (两台机的内容没有差别,当需要两台主机的文件内容需要完全一致时考虑使用)
无差别推送:
A主机有什么内容,B主机就有什么内容
无差别拉取:
B主机有什么内容,A主机就有什么内容
--bwlimit 限速
rsync -avzP --bwlimit 10 /opt/bigdate zjh_backup@172.16.1.33::backup --password-file=/etc/rsync.pass
限制文件传输速度为10MB(--bwlimit限制速度单位为MB)
常用选项
rsync自动备份脚本编写
客户端部署
定义变量名
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Path=/backup
Host=$(hostname)
Addr=$(ifconfig eth1 | awk 'NR==2{print $2}')
Date=$(date +%F)
Dest=${Host}_${Addr}_${Date}
创建备份目录
mkdir -p $Path/$Dest
将备份数据拷贝进备份目录中
cd / && \ tar czf $Path/$Dest/sys.tar.gz etc/hosts etc/fstab var/spool/cron/ && \ tar czf $Path/$Dest/other.tar.gz /scripts
创建md5值
md5sum $Path/$Dest/*.tar.gz > $Path/$Dest/flags_${Date}
设定密码,然后将备份文件推送至备份主机的备份模块下
export RSYNC_PASSWORD=1
rsync -avz $Path/ rsync_backup@172.16.1.31::backup
只保留最近七天的数据
find $Path/ -maxdepth 1 -type d -mtime +7 | xargs rm -rf
服务端部署
配置邮件服务
yum install mailx -y
vim /etc/mail.rcs
set from=2561884249@qq.com set smtp=smtps://smtp.qq.com:465 set smtp-auth-user=2561884249@qq.com set smtp-auth-password=邮箱授权码 set smtp-auth=login set ssl-verify=ignore set nss-config-dir=/etc/pki/nssdb/
vim /etc/scripts/check_date.sh
定义变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Path=/backup
Date=$(date +%F)
验证
md5sum -c $(find $Path/ -type f -name "flags_${Date}") > $Path/result
结果通知
1、配置为邮箱服务器->发邮件功能(详情看配置邮件服务)
2、配置发邮件的内容
mail -s "Rsync Backup ${Date}" 2561884249@qq.com < $Path/result
保留最近180天的文件
find $Path/ -maxdepth 1 -type d -mtime +180 | xargs rm -rf
设定定时任务
服务端设置定时执行脚本
crontab -e
#每天凌晨一点自动备份一次 0 1 * * * sh /scripts/check_date.sh &>/dev/null
#客户端设置定时执行脚本
#每天凌晨一点自动备份一次 0 1 * * * sh /scripts/client_push_data.sh &>/dev/null &>/dev/null