初识
开源,多功能,全量和增量的本地或远程数据同步备份的优秀工具,remote synchronization
俩服务器定/实时备份cron+rsync,数据同步,全网备份
一个rsync相当于scp、cp、rm,但又优于他们
yum install -y rsync
支持断点续传,限速等特定功能
优缺点
优点:增量备份,支持ssh,支持daemon ,集中备份
缺点:大文件对比时间比较长,大文件有时候可能传输不完整
一次性拷贝可以直接使用SCP
工作模式
1、本地模式:cp,rm
2、通道模式:ssh加密
3、daemon:非加密,一般不需要都是内网
二三模式不能混合使用
参数
-avz 基本可以满足需求
-v:verbose详细模式输出
-z:zip传输时压缩来提高传输效率
-a:archive归档模式,等于rtopgDl
-t:time保持文件时间信息
-o:owner保持文件属组信息
-p:保持文件权限
-g:group保持文件所属组
-l:link保持文件软链接
-p:process显示同步过程和进度信息
--delete 按照源端来删除目的端的文件
--exclude:排除不需要传输的文件
--bwlimit=rate 备份带宽,别把马路占满,注意备份时间
-e, --rsh=command 指定使用rsh、ssh方式进行数据同步
实践
1、将/server/ssh目录里的所有的文件同步至/back 目录(不包含/server/ssh本身)
[root@localhost ~]# rsync -azv /server/ssh/ /back/
2、将服务器的test文件夹和内部文件都通过ssh隧道复制到备份服务器中
[root@moban ~]# rsync -avz /root/test -e ’ssh -p 22‘ root@192.168.2.40:/root/
root@moban ~]# rsync -avz -e ssh root@192.168.2.40:/root/666 /root/
和scp命令类似,既可以上传,也可以下载,只需要调整位置即可,通过ssh免密配置,定时任务直接备份
主配置文件
/etc/rsyncd.conf
#rsync_config_start
#created by oldboy 18:00 2016/4/20
##rsyncd.conf start##
uid = rsync #用户uid 虚拟用户
gid = rsync #用户组gid
use chroot = no #安全相关
max connections = 200 #最大连接数
timeout = 300 #超时参数(单位/秒)
pid file = /var/run/rsyncd.pid #进程号对应的进程号文件
lock file = /var/run/rsync.lock #锁文件,防止文件不一致,女神上厕所,要锁门
log file = /var/log/rsyncd.log #日志文件
[backup] #模块名称
path = /backup #服务器提供访问的目录
ignore errors #忽略错误
read only = false #不可写
list = false #不能列表
hosts allow = 172.16.1.0/24 #严格来说是内网网段,允许那些机器过来连接,网络控制
hosts deny = 0.0.0.0/32
auth users = rsync_ backup
secrets file = /etc/rsync.password
#rsync_ config_end
实践是检验真理的唯一标准
服务器端 :根据服务主配置文件来做配置
环境
[root@NFS_22 ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
[root@NFS_22 ~]# uname -a
Linux NFS_22 2.6.32-431.el6.i686 #1 SMP Fri Nov 22 00:26:36 UTC 2013 i686 i686 i386 GNU/Linux
[root@NFS_22 ~]# rsync --version
rsync version 3.0.6 protocol version 30
1、建立备份目录/backup,要转移备份先把东西整理到一个地方,专门用来拉取文件的仓库
[root@backup ~]# mkdir /backup
2、添加用户,初识尝试启动服务,返回这说明我们要配置这个文件
[root@nfs ~]# id rsync #没有该用户
id: rsync: No such user
[root@nfs ~]# useradd rsync -s /sbin/nologin -M #nologin #不登录是虚拟用户,-M不创建家目录
[root@nfs ~]# tail -1 /etc/passwd
rsync501:501::/home/rsync:/sbin/nologin
[root@nfs ~]# rsync --daemon #为备份服务器创建配置文件,起初没有配置文件,下面要增加配置
Failed to parse config file: /etc/rsyncd.conf
3、配置服务主配置文件,查看服务是否启动成功
[root@nfs ~]# vim /etc/rsyncd.conf
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[backup]
path = /backup
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[root@nfs ~]# rsync --daemon #配置文件没有问题,不会报错,正常启动
[root@nfs ~]# ps -ef |grep rsync|grep -v "grep"
root 2077 1 0 04:17 ? 00:00:00 rsync --daemon
4、创建存密码的文件,为了安全去修改文件权限,修改备份文件的所属者和所属组
[root@nfs ~]# echo "rsync_backup:oldboy" > /etc/rsync.password
[root@nfs ~]# ll /etc/rsync.password
-rw-r--r--. 1 root root 20 Oct 11 04:33 /etc/rsync.password
[root@nfs ~]# chmod 600 /etc/rsync.password
[root@nfs ~]# ll /etc/rsync.password
-rw-------. 1 root root 20 Oct 11 04:33 /etc/rsync.password
[root@nfs ~]# chown -R rsync.rsync /backup/
5、根据rsync服务的端口873来找服务开没开,两种方法
方式一:lsof
[root@nfs ~]# lsof -i :873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rsync 2077 root 3u IPv4 14793 0t0 TCP *:rsync (LISTEN)
rsync 2077 root 5u IPv6 14794 0t0 TCP :rsync (LISTEN)
方式二:netstat
[root@nfs ~]# netstat -lntup |grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0: LISTEN 2077/rsync
tcp 0 0 :::873 :::* LISTEN 2077/rsync
6、将进程加入开机自启动文件rc.local当中
开机自启动 chkconfig rsync on
[root@nfs ~]# echo "/usr/bin/rsync --daemon" >>/etc/rc.local
[root@nfs ~]# tail -1 /etc/rc.local
/usr/bin/rsync --daemon
7、修改配置文件,先杀死服务,然后在启动文件
pkill rsync
lsof -I :873
rsync --daemon
8、多模块配置,增加一个模块,新建目录,修改目录权限
客户端
1、存在rsync服务
[root@NFS_22 ~]# rpm -qa rsync
rsync-3.0.6-9.el6_4.1.i686
2、配置虚拟用户的密码
echo "oldboy" >/etc/rsync.password
chmod 600 /etc/rsync.password
mkdir -p /backup
功能实现:现在客户端把文件推到服务器端,在客户端操作
方式一:
[root@NFS_22 backup]# rsync -avz /backup/ rsync_backup@192.168.2.11::backup/ --password-file=/etc/rsync.password
方式二:
[root@NFS_22 backup]# rsync -avz /backup/ rsync://rsync_backup@172.16.1.11/backup --password-file=/etc/rsync.password
功能实现:拉取文件,就是将目的地和源地址反过来就是从服务器端拉取文件
[root@NFS_22 backup]# rsync -avz rsync_backup@192.168.2.11::backup /backup/ --password-file=/etc/rsync.password
故障总结,模拟故障来增加经验
服务端备份目录没有
备份目录权限不够
虚拟用户密码不正确,多个空格,多个换行符,都有可能导致密码不正确
防火墙开启,导致失败
排错
查看错误提示
查看日志 tail -1 /var/log/rsync.log
仔细排查部署过程
客户端拍错,密码文件,测试端口
排除推送:
排除单个文件 --exclude=a
排除多个文件
--exclude={a,b}
--exclude={a..z}
--exclude-from=paichu.log
无差异同步:慎用,没有后悔药
--delete A B 按照A来无差异同步B,如果B有多余文件则删除,缺少文件则复制添加
rsync -avz --delete /backup/ rsync_backup@192.168.2.11::backup --password-file=/etc/rsync.password
实践
每天晚上00点整在Web服务器A上打包备份网站程序目录并通过rsync命令推送到服务器B上备份保留
(备份思路可以是先在本地按日期打包,然后再利用rsync推到备份服务器上)。
具体要求如下:
1)Web服务器A和备份服务器B的备份目录必须都为/backup。
2)Web服务器站点目录假定为(/var/www/html)。
3)Web服务器本地仅保留7天内的备份。
4)备份服务器上检查备份结果是否正常,并将每天的备份结果发给管理员信箱(选做)。
5)备份服务器上每周六的数据都保留,其他备份仅保留180天备份(选做)。
NFSserver的/var/www/html打包压缩同步到/backup目录,每次备份的打包备份的文件只保留七天:
tar -zchf /backup/html.$(date +%F%w -d '-1day').tar.gz /var/www/html/