Linux系统——Rsync数据同步工具
Rsync的优点及缺点
优点:类似cp命令、scp命令,但rsync为增量复制工具
缺点:针对大文件,效率非常高(打包再比对),针对小文件,效率非常低。
Rsync作用
(1)可使本地和远程两台主机之间的数据快速复制同步镜像,远程备份的功能,可以增量拷贝。
(2)可以在本地主机的不同分区或目录之间全量及增量的复制数据
(3)可以实现删除文件和目录的功能,相当于rm命令
(4)支持拷贝特殊文件如链接文件,设备等
(5)可以有排除(tar?find?)指定文件或目录同步的功能,相当于打包命令tar的排除功能
(6)可以做到保持原文件或目录的权限,时间,软硬链接,属主,组等属性均不改变-p
(7)可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar-N)
(8)可以使用rcp,rsh,ssh等方式来配合传输文件(rsync本身不对数据加密)
(9)可以通过socket(进程方式)传输文件和数据(服务端和客户端)
(10)支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像
Rsync的企业工作场景说明
(1)两台服务器之间数据同步(定时任务+备份数据)即crond+rsync
生产场景集群架构服务器备份方案项目
借助crond+rsync把所有客户服务器数据同步到备份服务器
简历项目经验:
全网服务器数据备份解决方案提出及负责实施200x.03 - 200x.09
1)针对公司重要数据备份混乱状况和领导提出备份全网数据的解决方案
2)通过本地打包备份,然后rsync结合inotify应用把全网数据统一备份到一个固定存储服务器,然后在存储服务器上通过脚本检查并报警管理员备份结果
3)定期将IDC机房的数据备份到公司的内部服务器,防止机房地震及火灾问题导致数据丢失。
(2)实时同步(解决存储服务器等的单点问题)
利用rsync结合inotify的功能做实时的数据同步,根据存储服务器上目录的变化,把变化的数据通过inotify或sersync结合rsync命令实时同步到备份服务器,还可以通过drbd方案以及双写的方案实现双机数据同步。
Rsync需要yum安装
Rsync的模式(应用方式)
(1)本地建类似cp命令的复制方式(本地建数据同步)
(2)网络间两台不同IP服务器间数据传输(网络间数据同步)
(3)以socket进程监听的方式启动rsync server端(server端和客户端的形式)
本地建类似cp命令的复制方式(本地建数据同步)
源目录听过rsync将数据同步到备份目录backup/下
两台服务器之间进行数据同步
服务器A的data目录的数据通过ssh隧道远程同步到服务器B的backup目录里
多组服务器之间以socket进程的方式启动Rsync进程进行监听
Rsync启动监听进程专门监听某一个“备份服务器”的端口,在“备份服务器”周围可能存在很多别的服务器。IDC机房用来存放服务器,通常在某一个时间点启动定时任务,把需要做备份的数据推送到“备份服务器”,但是通常在备份是不需要指定目标路径,其他工作由“备份服务器”来分配。
本地数据传输模式(local-only mode)
格式:
# rsync 参数 源数据 目标路径
-v,--verbose 详细模式输出,传输时的进度等信息
-z,--compress 传输时进行压缩以提高传输效率,--compress-level=NUM可按级别压缩。
-a,--archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgD1(字母1)
-r,--recursive对子目录以递归模式,即目录下的所有目录都同样传输,注意是小写r
-t,--times保持文件时间信息
-o,--owner保持文件属主信息
-p,--perms保持文件权限
-g,--group保持文件属组信息
-P,--progress显示同步的过程及传输时的进度等信息
-D,--devices保持设备文件信息
-l,--links保留软链接
-e,--rsh=COMMAND使用的信道协议(remote shell),指定替代rsh的shell程序。例如:ssh --exclude=PATTERN 指定排除不需要传输的文件模式(和tar参数一样)
--bwlimit=RATElimit socket I/O bandwidth
--delete让源目录SRC和目标目录数据DST一致
Rsync本地间数据同步就相当于cp命令,增量同步同步(相当于cp不一样的数据),同步速度快,不需要cp那样讲重复的数据进行覆盖(rsync将数据进行比对,对比出不同的数据进行传输同步)
单文件的rsync增量同步
格式:
# rsync 源路径 目标路径
# rsync /etc/hosts /tmp/
多目录的rsync增量同步
# rsync -avz /root/www /tmp/
多文件的rsync增量同步
# rsync -avz /root/www/* /tmp/
完全同步(将目标路径没有的数据从源数据中同步,目标路径有的而源数据不存在的数据删除处理),一切以源为参照
删除,相当于rm
此时要求源文件与目标文件同步,或者源目录与目标目录同步,不能文件对应目录
# rsync -avz --delete /root/www/ /tmp
两台服务器进行数据同步(确保已安装rsync和openssh-clients软件包)
# rsync -avz /root/www/ root@192.168.214.129:/tmp/
# rsync -avzP -e 'ssh -p 22'/etc/ root@192.168.197.129:/tmp/
-e 'ssh -p 22' 表示以ssh的方式通过22端口推送,如果不写默认22端口
root@192.168.214.129:/tmp/ 表示远程对方服务器IP的目标路径
若IP地址前不写root@,默认以root账户登录
排错
出现这种情况,考虑两点:
(1)双方是否都安装了rsync
(2)双方是否都安装了scp,若没有yum安装openssh-clients软件包(远程连接支持的插件包)
两台服务器进行数据同步,差异传输(确保已安装rsync和openssh-clients软件包)
现在server端的数据与客户端的数据存在差异,进行传输
scp命令 远程复制
# scp /root/www root@192.168.214.103:/tmp/
表示将/root/www目录远程复制到对方的root账号/tmp/目录下(不写root@表示默认为root账号)
将对方数据远程复制到本机
# scp root@192.168.214.103:/etc/hosts /root/www
scp与rsync区别
scp是全量的复制,rsync是增亮的复制
远程连接配置文件 /etc/ssh/sshd_config
可在该配置文件中修改监听端口
查看同步结果
# ssh root@192.168.214.0/24 "ls -l /tmp"
映射文件/etc/hosts里面添加:IP地址 主机名 即作为映射对应。当输入主机名时,系统自动通过hosts解析出对应IP地址。
Rsync 限定带宽(限速)
--bwlimi=速度
# rsync --bwlimit=100 root@192.168.214.124:/backup /root/www
将远程主机数据同步到当前主机
# rsync -avz root@192.168.214.129:benet1 /tmp
以守护进程(socket)的方式传输数据
主机名:daisy rsync客户端 B-Server
主机名:daisy全新 rsync服务端 A-Server
用客户端把数据推送到服务端(备份服务器)备份服务器通过rsync启动一个端口接受客户端传递过来的请求
连接原理:客户端将数据推送给server端
客户端要告诉server端两点:
告诉server,要推送给配置问价的那个模块
(1)服务端对客户端进行身份验证(虚拟账号及密码)
(2)Socket的rsync服务一直在监听某个端口
开始部署rsync服务
(1)rsync服务器端A-Server操作规程:
1.创建并配置/etc/rsyncd.conf
2.创建共享目录及添加rsync程序用户
3.启动rsync --daemon
4.将A-Server上的/backup文件夹更改属主rsync
5.创建rsync虚拟账户名和密码
6.将账户密码文件的权限设置为600
7.加入开机启动个人配置脚本
创建并配置/etc/rsyncd.conf (空白文件)
chroot表示把根目录换成指定的目的的目录
hosts deny = 0.0.0.0/32 表示全不拒绝 /32表示255.255.255.255
rsyncd.conf参数 |
参数说明 |
uid=rsync |
rsync使用的用户。 |
gid=rsync |
rsync使用的用户组(用户所在的组) |
use chroot=no |
如果为true,daemon会在客户端传输文件前“chroot to the path”。这是一种安全配置,因为我们大多数都在内网,所以不配也没关系 |
max connections=200 |
设置最大连接数,默认0,意思无限制,负值为关闭这个模块 |
timeout=400 |
默认为0,表示no timeout,建议300-600(5-10分钟) |
pid file |
rsync daemon启动后将其进程pid写入此文件。如果这个文件存在,rsync不会覆盖该文件,而是会终止 |
lock file |
指定lock文件用来支持“max connections”参数,使得总连接数不会超过限制,避免进程间发生冲突 |
log file |
不设或者设置错误,rsync会使用rsyslog输出相关日志信息 |
ignore errors |
忽略I/O错误 |
read only=false |
指定客户端是否可以上传文件,默认对所有模块为true |
list=false |
是否允许客户端可以查看可用模块列表,默认为可以 |
hosts allow |
指定可以联系的客户端主机名或和ip地址或地址段,默认情况没有此参数,即都可以连接 |
hosts deny |
指定不可以联系的客户端主机名或ip地址或地址段,默认情况没有此参数,即都可以连接 |
auth users |
指定以空格或逗号分隔的用户可以使用哪些模块,用户不需要在本地系统中存在。默认为所有用户无密码访问 |
secrets file |
指定用户名和密码存放的文件,格式;用户名;密码,密码不超过8位 |
[backup] |
这里就是模块名称,需用中括号扩起来,起名称没有特殊要求,但最好是有意义的名称,便于以后维护 |
path |
这个模块中,daemon使用的文件系统或目录,目录的权限要注意和配置文件中的权限一致,否则会遇到读写的问题 |
创建共享目录及添加rsync程序用户
# useradd -M -s /sbin/nologin rsync 创建rsync目录
# mkdir /backup 创建共享目录
启动rsync --daemon
# rsync --daemon
# netstat -antup | grep rsync
将A-Server上的/backup文件夹更改属主rsync
# chown -R rsync /backup (-R 表示改变目录的属组或属主)
# ll -d /backup/
创建rsync虚拟账户名和密码
# vim /etc/rsync.password
将rsync_backup:123456写入该文件中
将账户密码文件的权限设置为600(要求必须设置,否则操作失败)
# chmod 600 /etc/rsync.password
# ll /etc/rsync.password
加入开机启动
# echo "rsync --daemon" >> /.etc/rc.local
# tail -1 /etc/rc.local
还可以用chkconfig rsync on命令,但是必须要编写适合chkconfig操作的脚本。
重启rsync服务
(1)关闭rsync服务
# pkill rsync
(2)启动rsync服务
# rsync --daemon
(2)rsync客户端B-Server操作规程:
在确保已安装rsync情况下,创建密码文件
# vim /etc/rsync.password
将123456写入该文件中
或 # echo "123456" >> /etc/rsync.password
将密码文件的权限设置为600(要求必须设置,否则操作失败)
# chmod 600 /etc/rsync.password
# ll /etc/rsync.password
Rsync同步测试
推送测试(1):将客户端指定目录内容推送到服务器端rsync指定目录下
交互式:
# rsync -avz /root/benet1 rsync_backup@192.168.214.134::backup
Password:
非交互式:
# rsync -avz /root/benet1 rsync_backup@192.168.214.134::backup --password-file=/etc/rsync.password
在客户端查看同步结果
# ssh root@192.168.214.134 "ls /backup"
推送测试(2): 将客户端任意目录内容推送到服务器端rsync指定目录下
# rsync -avzP /tmp/ rsync_backup@192.168.214.134::backup --password-file=/etc/rsync.password
拉取测试(1):将rsync服务器端指定目录全部内容同步到客户端
# rsync -avzP rsync_backup@192.168.214.134::backup /root/benet1 --password-file=/etc/rsync.password
拉取测试(2):将rsync服务器端指定目录下的指定内容同步到客户端
# rsync -avzP rsync_backup@192.168.214.134::backup/yunjisuan /root/benet1 _-password-file=/etc/rsync.password
拉取测试(3): 将rsync服务器端指定目录下的全部内容排除某目录或文件后,同步到客户端
环境准备
我们在rsync服务器端指定目录下创建如下文件结构
# ls
a b c www d e
# ls www
1 2 3 4 5
说明:
a,b,c,d,e为文件,www是目录。目录下有1,2,3,4,5文件
方法一:通过命令行实现排除(--exlude=文件名 :排除的文件)
# rsync -avz --exclude=a --exclude=www/3 --exclude=www/4 rsync_backup@192.168.214.134::backup /root/www/ --password-file=/etc/rsync.password
方法二:通过列表文件实现排除
创建排除列表文件
# cat /root/exclude.txt
1
3
5
b
e
测试命令:
rsync -avz --exclude-from=/root/exclude.txt rsync_backup@192.168.214.134::backup /www/ --password-file=/etc/rsync.password
(--exclude-from=文件的绝对路径 :引用一个排除列表,列表里只需要输入排除的文件名)
rsync同步拉取测试:让rsync客户端指定目录内容始终和rsync服务器共享目录内容保持一致
(1)和rsync服务器目录内容始终保持一致
# rsync -avz --delete rsync_backup@192.168.214.134::backup /root/benet1 --password-file=/etc/rsync.password
(2)排除某文件后,再和服务器进行同步(同步时不考虑文件名为c的文件)
# rsync -avz --delete --exclude=c rsync_backup@192.168.197.129::backup /root/benet1 --password-file=/etc/rsync.password
rsync同步推送测试(让Rsync服务器端共享目录始终和rsync客户端指定目录内容一致)
(1)和rsync客户端目录内容始终保持一致
# rsync -avz --delete /root/benet1 rsync_backup@192.168.197.129::backup --password-file=/etc/rsync.password
(2)排除某文件后,再和服务器进行同步(--exclude=文件名)
# rsync -avz --delete /root/benet1 --exclude=1 rsync_backup@192.168.197.129::backup --password-file=/etc/rsync.password
Rsync守护进程服务传输数据排错思路
(一) Rsync服务端排错思路
.(1)查看rsync服务配置文件路径是否正确,正确的默认路径为:/etc/rsyncd.conf
(2)查看配置文件里host allow,host deny,允许的IP网段是否是允许客户端访问的ip网段
(3)查看配置文件中path参数里的路径是否存在,权限是否正确(正常应为配置文件中的UID参数对应的属主和组)
(4)查看rsync服务是否启动。查看命令为:ps -ef|grep rsync。端口是否存在netstat -antup |grep 873
(5)查看iptables防火墙和selinux是否开启允许rsync服务通过,也可以考虑关闭。
(6)查看服务端rsync配置的密码文件是否为600的权限,密码文件格式是否正确,正确格式为:用户名:密码,文件路径和配置文件里的secrect files参数对应。
(7)如果是推送数据,要查看下,配置rsyncd.conf文件中用户是否对模块下目录有可读写的权限。
(二) Rsync客户端排错思路
(1)查看客户端rsync配置的密码文件是否600的权限,密码文件格式是否正确,注意:仅需要有密码,并且和服务器端的密码保持一致。
(2)用telnet连接rsync服务器ip地址873端口,查看服务是否启动(可测试服务端防火墙是否阻挡)telnet 192.168.197.129 873
(3)客户端执行命令时:rsync -avzP rsync_backup@192.168.197.129::backup /backup/ --password-file=/etc/rsync.password
(4)此命令的细节要记清楚,尤其192.168.197.129::backup 处的双冒号及其后的backup为模块名称