rsync介绍 Rsync(Remote Synchronize):远程同步。是开源的、高速的,可实现本地以及远程,全量以及增量的数据复制工具。
官方资料:http://www.samba.org/ftp/rsync/rsync.html
为什么要使用rsync
工作中需要定时/实时进行数据备份
本地服务器目录、不同机器、不同机房之间的数据备份
rsync功能特性
支持拷贝普通文件和特殊文件,比如链接文件、设备文件等。
支持排除指定文件或目录进行同步。
可以做到保持原文件或目录的权限、时间、软硬链接、属主、属组均不改变。
可以实现增量复制(全量拷贝:完整地拷贝所有文件;增量拷贝:只拷贝变化的部分)。
可以使用rcp,rsh,ssh等方式来配合进行隧道加密传输文件(rsync本身不对文件进行加密)。
可以通过socket(守护进程方式)来传输文件和数据(客户端和服务端)。
支持匿名或无需系统用户认证的方式进行传输,安全地进行数据备份以及镜像。
rsync增量复制原理
使用 quick check 算法,只对增量的部分进行复制,该算法查找文件大小 或者上次修改时间 已经变化的文件,进行增量复制。
rsync三种工作模式
本地模式
1 rsync [options] [source] [destination] # 相当于将source中的文件,备份到destination目录中
远程shell模式
1 2 3 4 5 6 7 8 9 10 11 # 远程shell模式分为采用隧道和不采用隧道,隧道模式适用于没有搭建服务端的场景,或者需要传输重要数据的场景,需要加上-e选项 # user@host 使用的是所连接主机的系统用户和密码 # 关于 source 和 destination ,如果目录后加 / ,表示只是目录下的内容;如果不加 / ,表示包含目录本身以及目录下的内容 # pull:从远程拉取到本地 rsync [options] [user@host:source] [destination] # 不采用隧道 rsync [options] -e "ssh -p 22" [user@host:source] [destination] # 采用隧道,使用ssh方式加密,端口号为22 # push:从本地推送到远程 rsync [options] [source] [user@host:destination] # 不采用隧道 rsync [options] -e "ssh -p 22" [source] [user@host:destination] # 采用隧道,使用ssh方式加密,端口号为22
客户端服务端方式
1 2 3 4 5 6 7 8 9 # 所有拉取和推送操作操作均在客户端进行,服务端需要提前配置并开启进程 # pull:从服务端拉取到客户端 rsync [options] [user@host::模块名] [本地路径] rsync [options] rsync://[user@host:port/模块名] [本地路径] # push:从客户端推送到服务端 rsync [options] [本地路径] [user@host::模块名] rsync [options] [本地路径] rsync://[user@host:port/模块名]
rsync工具的优缺点
优点
增量备份,支持C/S模式和推拉模式。
远程shell模式可实现加密传输(ssh)。
若C/S模式需要加密传输,可以利用vpn服务或ipsec服务。
缺点
大量小文件复制的时候,rsync进程可能或效率不高或者僵死。
一次新远程拷贝可以使用scp,如果大量小文件可以打包压缩之后再拷贝。
rsync选项说明 rsync选项非常多,但最常用的选项组合是”avz”,即压缩和显示部分信息,并以归档模式传输。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 -a --archive 归档模式,表示递归传输并保持文件属性。等同于"-rtopgDl"。 -v 显示rsync过程中详细信息。可以使用"-vvvv"获取更详细信息。 -z 传输时进行压缩提高效率。 -r --recursive 递归到目录中去。 -t --times 保持mtime属性。强烈建议任何时候都加上"-t",否则目标文件mtime会设置为系统时间,导致下次更新检查出mtime不同从而导致增量传输无效。 -o --owner 保持owner属性(属主)。 -g --group 保持group属性(属组)。 -p --perms 保持perms属性(权限,不包括特殊权限)。 -D 是"–device --specials"选项的组合,即也拷贝设备文件和特殊文件。 -l --links如果文件是软链接文件,则拷贝软链接本身而非软链接所指向的对象。 -e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步 --existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件 --delete 删除那些DST中SRC没有的文件,有数据丢失的风险! --delete-excluded 同样删除接收端那些被该选项指定排除的文件 --delete-after 传输结束以后再删除 --ignore-errors 及时出现IO错误也进行删除 --max-delete=NUM 最多删除NUM个文件 --partial 保留那些因故没有完全传输的文件,也是加快随后的再次传输 --force 强制删除目录,即使不为空 --timeout=TIME IP超时时间,单位为秒 --progress 显示备份过程 --exclude=PATTERN 指定排除不需要传输的文件模式 --include=PATTERN 指定不排除而需要传输的文件模式 --exclude-from=FILE 排除FILE中指定模式的文件 --include-from=FILE 不排除FILE指定模式匹配的文件 --version 打印版本信息 --port=PORT 指定其他的rsync服务端口 --password-file=FILE 从FILE中得到密码 -n, --dry-run 仅测试传输,而不实际传输。常和"-vvvv"配合使用来查看rsync是如何工作的。 -h, --help 显示帮助信息
客户端服务器端模式 服务器端 rsync守护进程模式应用实践
安装rsync
1 2 yum install rsync -y # 安装 rsync --version # 检验安装
配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 vim /etc/rsyncd.conf # 编辑配置文件 # /etc/rsyncd: configuration file for rsync daemon mode # See rsyncd.conf man page for more options. # configuration example: uid = rsync # rsync访问本地数据目录的一个用户,下一步要创建的用户。有坑,默认是nobody gid = rsync # 用户组 read only = false # 要写上这一句,要不然无法推送。有坑 fake super = yes # 如果出现操作不被允许等提示,可以添加这一句,允许不在root用户下复制文件属性 use chroot = no # 是否使用chroot选项 max connections = 200 # 并发最大连接数 pid file = /var/run/rsyncd.pid # 进程启动后,将进程pid写入这个文件 exclude = lost+found/ # 排除的文件或目录,此处为相对路径 log file = /var/log/rsyncd.log # 指定日志文件存放路径 secrets file = /etc/rsyncd.password # 指定虚拟用户的密码存放的文件,格式为,用户名:密码 lock file = /var/run/rsyncd.lock # 锁文件,用来支持max connections参数,此处为默认值 auth users = rsync # 允许认证的用户,有坑。 timeout = 900 # 超时时间 hosts only = 192.168.110.0/24 # 白名单,此处表示仅允许该局域网内访问 # hosts deny = 0.0.0.0/32 # 通常hosts only和hosts deny只需要选择一个进行配置,否则可能造成配置混乱,都配置的时候默认白名单优先级最高。 [backup] # 此处为一个模块,用[模块名]表示,下面是此模块的配置 path = /home/backup # 此模块的文件路径 comment = backup export area # 备注
创建目录和用户
1 2 3 4 mkdir /home/backup -p # 创建目录 useradd -s /sbin/nologin -M rsync # 创建一个rsync用户,-s指定shell,-M不创建家目录 chown -R rsync.rsync /home/backup # 授权rsync用户管理此目录
创建密码文件
1 2 3 4 5 vim /etc/rsyncd.password # 指定虚拟用户的密码存放的文件,格式为,用户名:密码 rsync:123456 chmod 600 /etc/rsyncd.password # 修改密码文件的权限
启动服务
1 2 3 4 5 6 systemctl enable rsyncd # 设置开机自启 systemctl start rsyncd # 启动服务 systemctl status rsyncd # 查看状态 ps -ef | grep sync | grep -v grep # 查看进程 netstat -tunlp | grep rsync # 检查端口 lsof -i :873 # 查看默认端口873
客户端
认证密码文件
客户端的配置相对简单,只需要创建一个密码文件,不需要指定用户,只保存密码即可。
1 2 echo "123456" > /etc/rsyncd.password # 客户端的密码文件要与服务端相同 chmod 600 /etc/rsyncd.password # 修改密码文件的权限
测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # 拉取实践 rsync -avz rsync@192.168.110.142::backup ./ --password-file=/etc/rsyncd.password rsync -avz rsync://rsync@192.168.110.142/backup ./ --password-file=/etc/rsyncd.password # 推送实践 rsync -avz ./test rsync@192.168.110.142::backup --password-file=/etc/rsyncd.password rsync -avz ./test rsync://192.168.110.142/backup --password-file=/etc/rsyncd.password # 排除指定文件 # 在命令中写出排除指定文件,文件路径是相对于模块所在目录 rsync -avz --exclude={1..3}.txt rsync@192.168.110.142::backup ./ --password-file=/etc/rsyncd.password # 在命令中指定一个本地文件,将需要排除的目录或文件写在本地文件中 rsync -avz --exclude-from=/opt/exclude.txt rsync@192.168.110.142::backup ./ --password-file=/etc/rsyncd.password echo {1..3}.txt | xargs -n 1 > a.txt # 在本地文件中写入想要排除的文件
数据完整性校验 可以利用md5sum命令对文件做数据完整性校验,具体原理如下:
在文件打包之后,传输之前获取指纹。
在传到服务器之后,重新对文件获取指纹。
对比文件传输前后的指纹,如果没有发生变化,则说明数据完整。
1 2 3 4 5 md5sum a.txt # 使用md5sum对文件a.txt做数据完整性校验 342sdf89s7d9svs9879sdasa7fs9fsd89 a.txt # 生成一个指纹,后跟该文件名 md5sum a.txt > fingerprint.log # 把输出结果写到指纹文件中 md5sum -c fingerprint # 校验指纹 a.txt:确定 # 输出结果
开启邮件 CentOS 7默认使用postfix邮件服务,开启方式 systemctl start postfix。本机作为邮件服务器的配置比较麻烦。
可以通过修改配置文件/etc/mail.rc,把Linux设备当作邮件服务的客户端来使用,使用外部SMTP服务发送邮件。
1 2 3 4 5 6 7 8 9 10 11 12 13 vim /etc/mail.rc # 编辑配置文件,最后一行加入以下内容 set from=dengjinjun0805@126.com smtp=smtp.126.com smtp-auth-user=dengjinjun0805@126.com smtp-auth-password=xxxx amtp-auth=login # from 是发送方的邮件地址 # smtp 是发送邮件的外部smtp服务器的地址 # smtp-auth-user 是外部的smtp服务器认证的用户名 # smtp-auth-password 是外部smtp服务器认证的用户密码(授权码) # smtp-auth 是邮件认证的方式 # 测试 echo "hello" | mail -s "测试" dengjinjun0805@126.com 498790885@qq.com
其他企业运维场景数据同步方案
文件级别数据同步方案
scp
NFS
sftp
http
samba
文件系统级别同步方案
drbd(基于文件系统同步网络RAID1),复制block
数据库同步方案
mysql replication
oracle dataguard(物理的/逻辑的)