Rsync高级同步工具实战

运维技术 jikk345 3428℃ 0评论

一、rsync的作用及基本功能介绍

什么是Rsync?
Rsync 是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优化工具。Rsync软件适用于 unix/linux/windows等多种操作系统平台。
Rsync简介
Rsync 英文全称为Remote Rynchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似SSH带的SCP命令,但又优于SCP命令的功能,SCP每次都是全量拷贝,而Sync可以增量拷贝。当然,Rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似CP命令,但同样也优于cp命令,cp每次都是全量拷贝,而sync可以增量拷贝。
小提示:利用Rsync还可以实现删除文件和目录的功能,这又相当于rm命令。
一个rsync相当于scp,cp,rm,但是还优于他们每一个命令。
在同步备份数据时,默认情况下,Rsync通过独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可根据权限,属主等属性的变化同步,但需要指定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以可以实现 快速的同步备份数据。
提示,传统的cp,scp工具拷贝每次均为完整的拷贝,而rsync除了可以完整拷贝外,还具备增量拷贝的功能,因此,从同步数据的性能及效率上,Rsync工具更胜一筹。
Rsync的特性
1、支持拷贝特殊文件如链接文件,设备等。
2、可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
3、可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变-p
4、可实现增同步,既只同步发生变化的数据,因此数据传输效率很高,tar.
5、可以使用rcp、rsh、ssh 等方式来配合传输文件(rsync 本身不对数据加密)
6、可以通过socket(进程方式)传输文件和数据。
7、支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。
生产场景集群架构服务器备份方案
1、针对公司重要数据备份混乱状况和领导提出备份全网数据的解决方案。
2、通过本地打包备份,然后rsync结合inotify应用把全网数据统一备份到一个固定存储服务器,然后存储
服务器上通过脚本检查并报警管理员备份结果。
3、定期将IDC机房的数据备份公司的内部服务器,防止机房地震及问题导致数据丢失。
rsync 结合 inotify的功能做实时的数据同步 rsync

二、rsync的工作方式本地工作实战

一般来说,Rsync大致使用三种主要的传输数据方式。
1、单个主机本地之间的数据传输(此时类似于cp命令的功能)。
2、借助rcp,ssh 等通道来传输数据(此时类似于scp命令的功能)。
3、以守护进程(socket)的方式传输数据(这个是rsync 自身的重要的功能)。
Rsync 本地传输模式的语法为:
rsync [option..] src.. [DEST]
语法说明:
1、Rsync 为同步的命令;
2、[OPTION..]为同步时的参数选项;
3、SRC 为源,即待拷的分区、文件或目录等;
4、[DEST]为目的分区、文件或目录等;
直接本地同步:相当于cp

[root@qinglin]# rsync /etc/hosts /tmp/  ==》拷贝etc下的hosts到tmp下。
[root@qinglin]# ll /tmp/
total 1
-rw-r--r-- 1 root  root  154 Jun 17 13:55 hosts
[root@qinglin]# mkdir null  ==>创建一个空目录
[root@qinglin]# pwd  ==》切换到以有的rsync目录下
/rsync
[root@qinglin]# ls      ==》ls查看一下该目录下的内容
1  123  2  3  4
[root@qinglin]# rsync -r --delete /null/ /rsync/  ==》将null目录的内容同步到rsync目录下,null目录为空,同步rsyn目录也为空。
[root@qinglin]# ll /rsync/   ==》查看该目录已为空。
total 0

常用参数选项说明
-v -verbose 详细模式输出,传输时的进度等信息。
-z -compress 传输时进行压缩以提高 传输效率, –compress-level=NUM可按级别压缩
-a -archive 归档模式,表示以递归方式传输文件,并保持所有文件属性同,等于-rtopgDl
-r -recursive 对子目录以递归模式,即目录下的所有目录都同样传输,注意是小写r
-t -time 保持文件时间信息
-o -owner 保持文件属主信息
-p -perms 保持文件权限
-g -group 保持文件改组信息
-P -progress 显示同步的过程及传输时的进度等信息
-D -devices 保持设备文件信息
-l -links 保留软连接
-e -rsh=COMMAND 使用的信道协议,指定替代rsh的shell程序。例如:ssh
-X -exclude=PATTERN 指定排除不需要传输的文件模式
– avz 相当于-vzrtopgDl
生产参数:-avz 或者用-vzrtopg 注:cront的时候不要加v。

三、以守护进程(socket)的方式传输数据部署方法

部署环境
二台服务器-Centos 6.5
部署A服务器,服务端
查看是否安装,如果没有可以使用yum来安装。yum install -y rsync

[root@Qinglin-BJ ~]# which rsync 
/usr/bin/rsync

查看安装的包

[root@Qinglin-BJ ~]# rpm -qa rsync     
rsync-3.0.6-9.el6_4.1.x86_64

创建一个新的文件,然后拷贝以下内容,然后wq保存并退出。

[root@Qinglin-BJ ~]# touch /etc/rsyncd.conf
[root@Qinglin-BJ ~]# vim /etc/rsyncd.conf
#rsync_config_______________end
#rsync_config_______________start
#created by qinglin 15:01 2015-9-7
#QQ 7796755 blog:http://qinglin.net
##rsyncd.conf start##
uid = rsync           ==>客户端连过来用什么样的权限,uid 65534
gid = rsync           ==>客户端连过来用什么样的权限,gid 65534
use chroot = no       ==>和安全相关,加强安全
max connections = 2000   ==>用户最大连接数,并发到达2000
timeout = 600            ==>客户端600秒无动作,就认定为超时断开,并释放连接
pid file = /var/run/rsyncd.pid    ==>进程号
lock file = /var/run/rsync.lock   ==>锁文件
log file = /var/log/rsyncd.log    ==>log文件
ignore errors                     ==>有错误的时候忽略
read only = false                 ==>只读=假的=可读写。
list = false                      ==>列表=假的=可以看列表有什么
hosts allow = 172.16.168.0/24     ==>允许IP可以访问的
hosts deny = 0.0.0.0/32           ==>拒绝某些IP不可以访问
auth users = rsync_backup         ==>为了安全启动虚拟用户访问,和系统用户无关系
secrets file = /etc/rsync.password  ==>存放用户和密码的文件
####################################
[backup]                            ==>共享的一个模块,模块也是调用目录,和共享目录同意                                    
comment = www by qinglin 2016-06-11 ==>注释
path = /www                         ==>要共享的目录,允许他读写

守护进程的方法启动rsync

[root@Qinglin-BJ4 /]# rsync --daemon

检查873端口和检查rsync进程,表示服务已经起来了

[root@Qinglin-BJ4 /]#  netstat -lntup|grep 873
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      1547/rsync          
tcp        0      0 :::873                      :::*                        LISTEN      1547/rsync          
[root@Qinglin-BJ4 /]# ps -ef|grep rsync |grep -v grep
root      1547     1  0 18:53 ?        00:00:00 rsync --daemon

检查log文件

[root@Qinglin-BJ4 /]#  cat /var/log/rsyncd.log 
2016/05/20 18:53:34 [1546] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors
2016/05/20 18:53:34 [1547] rsyncd version 3.0.6 starting, listening on port 873

创建rsyncd.conf文件中path的www目录,注意与配置文件一致。

[root@Qinglin-BJ4 /]# mkdir -p /www

创建rsync用户,并设置不能登录。

[root@Qinglin-BJ4 /]# useradd rsync -s /sbin/nologin  -M

chown修改www目录主用户rsync,注意与配置文件一致。

[root@Qinglin-BJ4 /]# chown -R rsync.rsync /www/
[root@Qinglin-BJ4 /]# ll -d /www/
drwxr-xr-x. 2 rsync rsync 4096 May 20 19:05 /www/

创建虚拟用户文件,并将rsync_backup设置为用户,qinglin为密码,注意与配置文件一致。

[root@Qinglin-BJ4 /]# echo "rsync_backup:qinglin" >/etc/rsync.password       
[root@Qinglin-BJ4 /]# cat /etc/rsync.password 
rsync_backup:qinglin

为了安全考虑给该文件权限为600,除了ROOT其他用户不允许查询。

[root@Qinglin-BJ4 /]# chmod 600 /etc/rsync.password 
[root@Qinglin-BJ4 /]# ll -d /etc/rsync.password 
-rw-------. 1 root root 21 May 20 19:22 /etc/rsync.password

关闭防火墙与SELINUX

[root@Qinglin-BJ4 /]# /etc/init.d/iptables stop  
[root@Qinglin-BJ4 /]# getenforce  
Disabled

加入rc.local开机自启动

[root@Qinglin-BJ4 /]# which rsync
/usr/bin/rsync
[root@Qinglin-BJ4 /]# echo '/usr/bin/rsync --daemon' >>/etc/rc.local 
[root@Qinglin-BJ4 /]# cat /etc/rc.local 
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
/usr/bin/rsync --daemon

部署B、C服务器,客户端
思路:推和拉的操作,一定都是在客户端操作。
创建密码文件,注意与配置文件一致。

[root@Qinglin-BJ2 b_w]# echo "qinglin" >/etc/rsync.password             
[root@Qinglin-BJ2 b_w]# cat /etc/rsync.password 
qinglin
[root@Qinglin-BJ2 b_w]# chmod 600 /etc/rsync.password 
[root@Qinglin-BJ2 b_w]# ll -d /etc/rsync.password
-rw-------. 1 root root 8 Jun 11 22:24 /etc/rsync.password

开始进行从B服务器内容推到A服务器的(B服务器操作)
-v :-verbose 详细模式输出,传输时的进度等信息。
-z :-compress 传输时进行压缩以提高 传输效率, –compress-level=NUM可按级别压缩
-a :-archive 归档模式,表示以递归方式传输文件,并保持所有文件属性同,等于-rtopgDl
/tmp:本地的目录
rsync_backup@172.16.168.240::www:rsync_backup是配置文件指定的虚拟用户,172.16..是推送到指定服务器的IP,www是共享的,配置文件指定的。
–password-file=/etc/rsync.password:=号前是指定密码文件的参数,=号后是指定存放目录文件的路径。

[root@Qinglin-BJ2 tmp]# ls /tmp/
01  02  03  04  05  06  07  08  09  10
[root@Qinglin-BJ2 tmp]# rsync -avz /tmp/ rsync_backup@172.16.168.240::www --password-file=/etc/rsync.password     
sending incremental file list
./
01
02
03
04
05
06
07
08
09
10
.ICE-unix/
sent 504 bytes  received 205 bytes  1418.00 bytes/sec
total size is 0  speedup is 0.00

A服务器端进行验证数据是否推送过来

[root@Qinglin-BJ4 www]# pwd
/www
[root@Qinglin-BJ4 www]# ls 
01  02  03  04  05  06  07  08  09  10

开始进行从A服务器内容拉到B服务器的(B服务器操作)

[root@Qinglin-BJ2 tmp]# pwd
/tmp
[root@Qinglin-BJ2 tmp]# rm -rf *
[root@Qinglin-BJ2 tmp]# ls
[root@Qinglin-BJ2 tmp]# rsync -avz  rsync_backup@172.16.168.240::www /tmp/ --password-file=/etc/rsync.password 
receiving incremental file list
./
01
02
03
04
05
06
07
08
09
10
.ICE-unix/
sent 258 bytes  received 591 bytes  1698.00 bytes/sec
total size is 0  speedup is 0.00

B服务器端进行验证数据是否拉过来

[root@Qinglin-BJ2 tmp]# ls
01  02  03  04  05  06  07  08  09  10

四、安全优化的方法

由于默认情况下rsync绑定的网卡是0.0.0.0,这里需要指定成内网IP才能搞定安全性,也可以修改端口,但是内网无所谓。
思路:pkill rsync结束掉进程 –> lsof -i :873检查是否杀死 –>rsync –daemon –address 172.16.168.240指定端口 –>检查端口netstat -lntup|grep 873
演示如下:

[root@Qinglin-BJ4 www]# ps -ef|grep rsync
root      1275     1  0 19:35 ?        00:00:00 /usr/bin/rsync --daemon
root      1371  1297  0 20:26 pts/0    00:00:00 grep rsync
[root@Qinglin-BJ4 www]# pkill rsync
[root@Qinglin-BJ4 www]# lsof -i:873
[root@Qinglin-BJ4 www]# rsync --daemon --address 172.16.168.240
[root@Qinglin-BJ4 www]# netstat -lntup|grep 873
tcp        0      0 172.16.168.240:873          0.0.0.0:*                   LISTEN      1375/rsync   
^这里端口已经指定内网IP加端口了,只这个端口监听请求

排错
思路:第一配置过程流程要熟悉,也要检查网络,ping–>telnet–>访问

[root@Qinglin-BJ2 tmp]# ping 172.16.168.240
PING 172.16.168.240 (172.16.168.240) 56(84) bytes of data.
64 bytes from 172.16.168.240: icmp_seq=1 ttl=64 time=2.55 ms
[root@Qinglin-BJ2 tmp]# telnet 172.16.168.240 873
Trying 172.16.168.240...
Connected to 172.16.168.240.
Escape character is '^]'.
@RSYNCD: 30.0

五、Ryncs 总结

Server:
1. vi /etc/rsyncd.conf(用户,目录,虚拟用户及密码文件,模块)
2. 创建共享目录 /oldboy
3. 创建rsync用户。并且授权访问 /oldboy
4. 创建密码文件,复制配置文件里的路径,然后添加密码内容。虚拟用户名:密码
5. 密码文件权限600
6. rsync –daemon 然后放入 /etc/rc.local
7. tail /var/log/rsyncd.log
Client:(多个)
1. 密码文件和服务端没任何关系。命令时 –password-file=/etc/rsync.password 内容:密码
2. /etc/rsync.password 600
3. 同步Access via rsync daemon: :
Pull 拉:
rsync [OPTION…] [USER@]HOST::SRC… [DEST]
rsync -avz rsync_backup@192.168.1.50::qinglin data/
rsync [OPTION…] rsync://[USER@]HOST[:PORT]/SRC… [DEST]
rsync -avz rsync_backup@192.168.1.50:: qinglin data/ –password-file=/etc/rsync.password
Push:推:
rsync [OPTION…] SRC… [USER@]HOST::DEST
rsync -avz data/ rsync_backup@192.168.1.50:: qinglin
rsync [OPTION…] SRC… rsync://[USER@]HOST[:PORT]/DEST
rsync -avz data/ rsync_backup@192.168.1.50:: qinglin –password-file=/etc/rsync.password
排错
1、防火墙和selinux
2、/var/log/rsyncd.log
3、整个部署流程整体考虑。
4、操作习惯当做一个大事。
优缺点
优点
1、增量备份同步,支持socket(daemon),集中备份。
2、可以限速
缺点
1、大量小文件同步的时候,比对时间较长,有的时候,rsync进程停止。
解决:a. 打包同步。b.brbd(文件系统同步复制block)
2、同步大文件,10G这样的大文件有时候也会有问题,会中断。未完整同步前,是隐藏文件,同步完成后才会是正常文件。

1

转载请注明:清麟博客 » Rsync高级同步工具实战

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址