rsync是一款开源、快速、多功能、可实现全量及增量的本地或远程数据同步备份的优秀工具。 rsync软件适用于Unix/linux/Windows/macos等多种操做系统平台。
# 语法 scp [选项] [源文件] [用户名@主机IP]:[位置] # 选项 -r:递归复制 [root@backup ~]# scp -r /etc/passwd root@172.16.1.31:/tmp # 注意:scp不支持增量,只能全量备份
协议 | 端口 |
---|---|
ssh | 22 |
telnet | 23 |
ftp | 21 |
http | 80 |
https | 443 |
rdp | 3389 |
rsync | 873 |
RPCbind | 111 |
mysql | 3306 |
php | 9000 |
redis | 6379 |
注意:利用rsync还能够实现删除文件和目录的功能,这又至关于rm命令,一个rsync至关于scp、cp、rm,可是还优于他们的每个命令。php
Local: rsync [OPTION...] SRC... [DEST] ## 拷贝/etc目录到/tmp下 [root@backup ~]# rsync -av /etc /tmp/ ## 拷贝/etc/目录下的全部文件到/tmp [root@backup ~]# rsync -av /etc/ /tmp/
Access via remote shell: Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] rsync 选项... 用户名@主机IP:源文件 目标 ## 将172.16.1.31服务器上的/opt目录及下面的全部文件拉到本地的/etc/目录下 rsync -avz root@172.16.1.31:/opt /etc/ Push: rsync [OPTION...] SRC... [USER@]HOST:DEST rsync 选项... 源文件 用户名@主机IP:目标 ## 将本地/etc目录及下面的全部文件远程传输给172.16.1.31服务器的/opt目录下 [root@backup ~]# rsync -avz /etc root@172.16.1.31:/opt 缺点:必须使用系统用户,用root用户还得知道root的密码
Access via rsync daemon: Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST::DEST rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST ## rsync的选项 -a:archive 归档拷贝,等于-tropgDl -v:显示拷贝的详细信息 -z:压缩数据拷贝 -r: # 递归传输目录及子目录,即目录下得全部目录都一样传输。 -t: # 保持文件时间信息 -o: # 保持文件属主信息 -p: # 保持文件权限 -g: # 保持文件属组信息 -l: # 保留软链接 -P: # 显示同步的过程及传输时的进度等信息 -D: # 保持设备文件信息 -L: # 保留软链接指向的目标文件 -e: # 使用的信道协议,指定替代rsh的shell程序 --exclude=PATTERN # 指定排除不须要传输的文件模式 --exclude-from=file # 文件名所在的目录文件 --bwlimit=100 # 限速传输 --partial # 断点续传 --delete # 让目标目录和源目录数据保持一致 --password-file=xxx # 使用密码文件
主机角色 | 外网IP(WAN) | 内网IP(LAN) | 主机名称 |
---|---|---|---|
Rsync服务端 | 10.0.0.41 | 172.16.1.41 | backup |
Rsync客户端 | 10.0.0.31 | 172.16.1.31 | nfs |
[root@backup ~]# yum -y install rsync
[root@backup ~]# rpm -qc rsync [root@backup ~]# rpm -qc rsync /etc/rsyncd.conf /etc/sysconfig/rsyncd
[root@backup ~]# vim /etc/rsyncd.conf 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 = dsr_backup secrets file = /etc/rsync.passwd log file = /var/log/rsyncd.log ##################################### [nfs_backup] comment = welcome to oldboyedu backup! path = /opt/backup1/nfs_data ##################################### [web_backup] comment = welcome to oldboyedu backup! path = /opt/backup2/web_bak [root@backup ~]# cat /etc/rsyncd.conf # 服务启动的用户 uid = www # 服务启动的用户组 gid = www # 服务监听的端口 port = 873 # 假的超级用户 fake super = yes # 禁锢指定的目录,不容许用户跳出到其余目录 use chroot = no # 最大链接数 max connections = 200 # 超时时间 timeout = 600 # 忽略错误 ignore errors # 只读为false,可读可写 read only = false # 不容许其余用户查询模块名 list = false # 虚拟用户,rsync同步须要使用的用户 auth users = dsr_backup # 存放虚拟用户密码的文件 secrets file = /etc/rsync.passwd # rsync服务的日志存放路径 log file = /var/log/rsyncd.log ##################################### # 模块名 [nfs_backup] # 同步的描述信息 comment = welcome to oldboyedu backup! # 同步的路径 path = /opt/backup1/nfs_data ##################################### # 模块名 [web_backup] # 同步的描述信息 comment = welcome to oldboyedu backup! # 同步的路径 path = /opt/backup2/web_bak
[root@backup ~]# groupadd www -g 666 [root@backup ~]# useradd www -u 666 -g 666 -s /sbin/nologin -M
密码文件的格式用户名:密码 [root@backup ~]# echo 'dsr_backup:123' > /etc/rsync.passwd [root@backup ~]# cat /etc/rsync.passwd dsr_backup:123
[root@backup ~]# chmod 600 /etc/rsync.passwd [root@backup ~]# ll /etc/rsync.passwd -rw-------. 1 root root 17 Jul 6 20:06 /etc/rsync.passwd
[root@backup ~]# mkdir -p /opt/backup1/nfs_data [root@backup ~]# mkdir -p /opt/backup2/web_bak
[root@backup ~]# chown www.www /opt/backup1/nfs_data [root@backup ~]# chown www.www /opt/backup1 [root@backup ~]# chown www.www /opt/backup2/web_bak/ [root@backup ~]# chown www.www /opt/backup2
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
[root@backup ~]# ps -ef|grep [r]syncroot 7405 1 0 Jul06 ? 00:00:00 /usr/bin/rsync --daemon --no-detach [root@backup ~]# netstat -lntup|grep 873 tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 7405/rsync tcp6 0 0 :::873 :::* LISTEN 7405/rsync
[root@nfs ~]# rsync -avz /etc rsync_backup@172.16.1.41::backup
[root@nfs ~]# rsync -avz /etc zls_abc@172.16.1.41::bak Password: @ERROR: auth failed on module bakrsync error: error starting client-server protocol (code 5) at main.c(1649)[sender=3.1.2] 排查思路: 1.密码文件的权限不是600 2.密码文件里的密码和手动输入的密码不一致 3.密码文件名字和配置文件中的名字不一致
[root@nfs ~]# rsync -avz /backup/123.txt zls_abc@172.16.1.41::bak Password: sending incremental file list123.txtrsync: mkstemp ".123.txt.P2Kfee" (in bak) failed: Permission denied (13)sent 89 bytes received 120 bytes 139.33 bytes/sectotal size is 0 speedup is 0.00rsync error: some files/attrs were not transferred (see previous errors) (code 23) atmain.c(1179) [sender=3.1.2] 排查思路: 1.没有关闭selinux 2.备份路径的权限不是配置文件中指定的uid权限
[root@nfs ~]# rsync -avz /var zls_abc@172.16.1.41::bak --passwordfile=/tmp/rsync.pass ERROR: password file must not be other-accessiblersync error: syntax or usage error (code 1) at authenticate.c(196) [sender=3.1.2] 排查思路:客户端的密码文件权限必须也是600
# 1.建立密码文件(客户端的密码文件只写密码不写用户) [root@nfs ~]# echo '123' > /tmp/rsync.pass [root@nfs ~]# chmod 600 /tmp/rsync.pass [root@nfs ~]# rsync -avz /var rsync_backup@172.16.1.41::backup --password-file=/tmp/rsync.pass # 2.使用rsync的环境变量 [root@nfs ~]# export RSYNC_PASSWORD=123 [root@nfs ~]# rsync -avz /var rsync_backup@172.16.1.41::backup
## 为了保证数据的一致性 [root@nfs data]# rsync -avz --delete /opt/data rsync_backup@172.16.1.41::backup
角色 | 外网IP(WAN) | 内网IP(LAN) | 主机名 |
---|---|---|---|
rsync客户端 | eth0:10.0.0.7 | eth1:172.16.1.7 | web01 |
rsync客户端 | eth0:10.0.0.31 | eth1:172.16.1.31 | nfs |
rsync服务端 | eth0:10.0.0.41 | eth1:172.16.1.41 | backup |
1.客户端提早准备存放的备份的目录,目录规则以下:/backup/nfs_172.16.1.31_2018-09-02
mysql
[root@nfs ~]# mkdir -p /backup/$(hostname)_$(hostname -I|awk '{print $2}')_$(date +%F) [root@web01 ~]# mkdir -p /backup/$(hostname)_$(hostname -I|awk '{print $2}')_$(date +%F)
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
linux
tar zcf /backup/$(hostname)_$(hostname -I|awk '{print $2}')_$(date +%F)/passwd.tgz /etc/passwd
3.客户端最后将备份的数据进行推送至备份服务器web
echo '123' > /tmp/rsync.passwdchmod 600 /tmp/rsync.passwdrsync -az /backup/$(hostname)_$(hostname -I|awk '{print $2}')_$(date +%F) rsync_backup@172.16.1.41::backup --password-file=/tmp/rsync.passwd
4.客户端天天凌晨1点定时执行该脚本redis
crontab -e00 01 * * * /bin/sh /root/backup.sh &> /dev/null
5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间sql
find /backup !-mtime -7|xargs rm -f
1.服务端部署rsync,用于接收客户端推送过来的备份数据shell
部署rsync守护进程模式
2.服务端须要天天校验客户端推送过来的数据是否完整macos
1.在客户端打包完成以后,先要生成一个md5值保存到文件里2.在服务端使用md5sum -c来校验数据的完整性
3.服务端须要天天校验的结果通知给管理员vim
# 1.配置邮件# 2.将校验的结果经过邮件发送到管理员的邮箱md5sum -c md5.check |mail md5校验数据 133411023@qq.com
4.服务端仅保留6个月的备份数据,其他的所有删除bash
find /backup ! -mtime -180|xargs rm -f
#!/bin/bash bak_dir=backup HOSTNAME=$(hostname) IP=$(hostname -I|awk '{print $2}') DATE=$(date +%F) tar_dir=$bak_dir/${HOSTNAME}_${IP}_${DATE}mkdir -p /$tar_dir cd /etc tar zcf /$tar_dir/passwd.tgz passwd echo '123' > /tmp/rsync.passwd chmod 600 /tmp/rsync.passwd md5sum /$tar_dir/passwd.tgz > /$tar_dir/md5.check rsync -az /$tar_dir rsync_backup@172.16.1.41::backup --password-file=/tmp/rsync.passwd find /$bak_dir ! -mtime -7|xargs rm -f [root@nfs ~]# crontab -e */6 * * * * /bin/ntpdate time1.aliyun.com &>/dev/null 00 01 * * * /bin/sh /root/backup.sh &> /dev/null
#!/bin/bash bak_dir=backup HOSTNAME=$(hostname) IP=$(hostname -I|awk '{print $2}') DATE=$(date +%F) tar_dir=$bak_dir/${HOSTNAME}_${IP}_${DATE} md5sum -c /$bak_dir/*/*.check|mail -s "备份数据校验结果${DATE}"1031109605@qq.com &> /dev/null find /$bak_dir ! -mtime -180|xargs rm -f [root@backup ~]# crontab -e */5 * * * * /bin/ntpdate time1.aliyun.com &>/dev/null 00 01 * * * /bin/sh /root/backup.sh &> /dev/null
[root@backup ~]# vim /etc/rsyncd.conf #------------------------------- # 模块名 [bak] # 同步的描述信息 comment = xxx # 同步的路径 path = /backup #------------------------------ [bak2] comment = aaa path = /backup2 ## 根据配置文件建立出对应的目录 [root@backup ~]# mkdir /backup2 [root@backup ~]# chown rsync.rsync /backup2/ ## 只要改完配置文件必定要重启服务 [root@backup ~]# systemctl restart rsyncd ## 客户端同步 [root@nfs ~]# rsync -avz /etc zls_abc@172.16.1.41::bak2
yum -y install inotify-tools
/usr/bin/inotifywait -mrq --format '%Xe %w %f' -ecreate,modify,delete,attrib,close_write /backup