一,开源、快速、多功能,可实现全量或增量的本地或远程的数据快速备份同步镜像的工具;rsync 相当于scp , cp ,rm ,但还优秀于他们;
他仅同步大小或最后修改时间发生变化的文件或目录,可以实现只同步一个文件里有变化的内容部分,所以可以实现快速的定时或实时的同步备份数据;本身不对数据进行加密
rsync一般用于存储文件的同步,分定时和实时同步两种:
定时:cron + rsync
实时:实时同步会搭配inotify或sersync来监控文件的变化,但同步还是通过rsync实现
二,应用场景
1,对NFS和MYSQL数据的同步备份
2,全网集群架构服务器数据的备份:、
1)针对公司重要数据备份混乱状况和领导提出备份全网数据的解决方案
2)通过本地打包,然后rsync结合inotify应用把数据统一备份到一个固定的存储服务器,然后在存储服务器上通过脚本检查并报警管理员备份结果;
3)定期将IDC机房的数据备份到公司内部的服务器,防止机房地震及火宅问题导致数据丢失
三,rsync的工作方式
1)单个主机本机之间的数据传输(此时类似cp命令):
拷贝:rsync -avz 源文件夹 目标文件夹
带删除的复制:rsync -r --delete /源文件夹/ /目标文件夹/( 源文件夹和目标文件夹里面的文件一致)
2)借助rcp,ssh等通道来传输数据(此时类似scp命令),通过 -e 参数来指定借助的通道;
push推数据:rsync /etc/hosts -avz -e 'ssh -p 52113' oldgirl@192.168.1.245:~
pull拉数据:rsync -avz -e 'ssh -p 52113' oldgirl@192.168.1.245:~/xxx ~/
3)以守护进程(socket, daemond)的方式传输数据(这个是rsync自身的重要功能),工作中最常用;
实战:全网备份,多个向一个备份
【1: 服务器端配置]】
【vim /etc/rsyncd.conf 新建配置文件】
#rsync_config_____________start
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
[oldboy] #模块
path = /oldboy/ #类似于NFS的共享目录
ignore errors
read only = false
list = false
hosts allow = 192.168.1.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup #虚拟用户(linux中并不存在的用户)
secrets file = /etc/rsync.password #存放虚拟用户的密码,格式:虚拟用户:密码
#rsync_config___________end
【启动:rsync --daemon】端口为873
查看rsync使用的端口: netstat -lntup | grep 873
【新建rsync虚拟用户】
useradd rsync -s /sbin/nologin
【新建共享文件/oldbody/ ,并且chown -R rsync.rsync /oldboy/】
【 echo "rsync_backup:oldboy" > /etc/rsync.password】
备注:rsync_backup 是rsync服务的虚拟用户;rsync_backup:oldboy123是rsync服务的虚拟用户rsync_backup的密码
【文件比较安全的权限:400或600】
chmod -R 600 /etc/rsync.password
【2: 客户端端配置]】
只要保证有rsync这个软件就行了,把服务端rsync服务的虚拟用户名和密码拿过来做改进,不要用户名,只要放密码:
echo "oldboy" > /etc/rsync.password (只有密码,权限设为600)
【3:测试】
pull方法一:将服务器端oldboy里面的内容拉到客户端的/data1目录下 :rsync -avz rsync_backup@192.168.1.245::oldboy /data1 --password-file=/etc/rsync.password (oldboy是服务器配置的模块 [oldboy])
pulll方法二:将服务器端oldboy里面的内容拉到客户端的/data1目录下 : rsync -avz rsync://rsync_backup@192.168.1.245/oldboy /data1 --password-file=/etc/rsync.password
push将客户端/data1/下面的文件推到服务器端 模块[oldboy]指定的目录下:rsync -avz /data1/ rsync_backup@192.168.1.245::oldboy --password-file=/etc/rsync.password
四,总结
1,rsync server端
1)vi /etc/rsyncd.conf (用户rsync,目录,模块,非系统虚拟用户及密码)
2)创建共享目录/oldboy
3)创建rsync用户,并且授权访问 /oldboy
4)创建密码文件,复制配置文件里的路径,然后添加密码内容
内容虚拟用户名:密码
5)密码文件权限600
6)rsync --daemon 然后放入/etc/rc.local
7)tail /var/log/rsyncd.log
2,rsync client (多个)
1)密码文件,和服务器端没任何关系,最好和服务器端路径命名一致(便于记忆)。命令时
--password-file=/etc/rsync.password
内容:密码 (和服务器端密码一致)
2)/etc/rsync.password 文件权限600
3)同步:(见 三 - 3 - 3)- 【3】)
a:pull
b:push
五,排错
1,防火墙和SELINUX
2,/var/log/rsyncd.log
3,整个部署流程整体考虑排查
4,操作习惯