1.rsync简介
rsync(remote synchronization)是一款开源的、快速地、多功能的、可实现全量以及增量的本地或者远程数据同步备份的优秀工具。该软件可使用于unix/linux/windows等多种操作系统平台。
rsync具有可使本地和远程两者之间的数据快速复制同步镜像、远程备份的功能,这个功能类似ssh带的scp命令,但又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令,但同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。
提示:利用 rsync还可以实现删除文件和目录的功能,这又相当于rm命令!
一个rsync相当于导scp,cp,rm,但是还优于他们每一个命令。
在同步备份数据时,默认情况下,rsync其独特的“quick check”法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然可根据权限、属组等属性的变化同步,但需要指定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以,可以实现快速地同步备份数据。
提示:传统的cp,scp工具拷贝每次均为完整的拷贝,而rsync除了可以完整拷贝外,还具备增量拷贝的功能,因此,从同步数据的性能和效率上,rsync工具更胜一筹。
centos5.x,rsync2.x比对方法,把所有的文件比对一遍,然后进行同步。
centos6.x,rsync3.x比对方法,一边对比差异,一边对差异的部分进行同步。
增量复制:复制有变化的(不一样)的文件;增加了多少就推送多少;在不同服务器之间可以传递数据。
2.rsync的特性如下:
支持拷贝特殊文件如链接文件,设备等。
可以有排除(tar?find?)指定文件或目录同步的功能,相当于打包命令tar的排除功能。
可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变-p。
可实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar -N)。
可以使用 rcp,rsh,ssh等方式来配合传输文件(sync本身不对数据加密)。
可以通过 socket(守护进程方式)传输文件和数据(服务端和客户端)******。
支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。
rsync也相当于ls命令。
3.rsync的企业工作场景说明:
(1)两台服务器之间数据同步(备份数据+定时任务)(自己人用)即rsync+cron
将数据推送到备份服务器上,属守护进程模式。
生产场景集群架构服务器备份方案项目
借助cron+rsync把所有客户服务器数据同步到备份服务器
-------------------------------
项目介绍:
十、全网服务器数据备份解决方案提出及负责实施 200x.03 – 200x.09
1.针对公司重要数据备份混乱状况和领导提出备份全网数据的解决方案。
2.通过本地打包备份,然后rsync结合inotify应用把全网数据统一备份到一个固定存储服务器,然后在存储
服务器上通过脚本检查并报警管理员备份结果。
3.定期将IDC机房的数据备份到公司的内部服务器,防止机房地震及火灾问题导致数据丢失。
-------------------------------
(2)实时复制/实时同步(解决服务器等的单点问题)(客户使用)
利用rsync结合inotify的功能做实时的数据同步,根据存储服务器上目录的变化,把变化的数据通过inotify或者sersync结合rsync命令,同步到备份服务器,还可以通过drbd方案以及双写的方案实现双机数据的同步。
4.本地数据传输模式与无差异同步(本地数据传输模式(local-only mode))
(1)本地数据传输模式之参数-avz
-a表示归档模式,以递归方式传递并保持所有文件属性,等于-rtopgD1。
-v表示详细模式输出,输出时的进度等信息。
-z表示传输时进行压缩以提高传输效率。
[root@backup ~]# rsync /etc/hosts /opt/ //
[root@backup ~]# ls /opt/
hosts rh
[root@backup ~]# rsync -avz /etc /opt/ //
[root@backup ~]# ls /opt/
etc hosts rh
注意:/etc 表示该目录及其下面所有文件,一个整体;
/etc/表示该目录下面的所有文件,一大堆。
(2)无差异同步复制之参数--delete复制时保持目标与源文件的内容一模一样,一般不用!常用增量复制!
[root@backup ~]# ls /tmp/
yum.log
[root@backup ~]# rsync -avz --delete /opt/hosts /tmp/ //
sending incremental file list
hosts
sent 192 bytes received 31 bytes 446.00 bytes/sec
total size is 303 speedup is 1.36
[root@backup ~]# ls /tmp/
hosts yum.log
5.rsync远程数据同步(隧道模式)
(1)scp方式
推送文件:
[root@backup ~]# scp -P 22 /etc/hosts 172.16.1.31:/tmp/ //
The authenticity of host '172.16.1.31 (172.16.1.31)' can't be established.
RSA key fingerprint is 26:4e:2a:45:15:71:4b:80:a3:09:4e:5d:ae:10:a7:01.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.1.31' (RSA) to the list of known hosts.
root@172.16.1.31's password:
hosts 100% 303 0.3KB/s 00:00
[root@nfs01 ~]# ls /tmp/
hosts yum.log
推送目录:
[root@nfs01 ~]# ls /tmp/
[root@backup ~]# scp -rP 22 /etc/ 172.16.1.31:/tmp/ //-r递归复制
[root@nfs01 ~]# ls /tmp/
etc hosts yum.log(2)rsync方式
推送文件:
[root@backup ~]# rsync -avz /etc/hosts 172.16.1.31:/tmp/ //
root@172.16.1.31's password:
sending incremental file list
hosts
sent 192 bytes received 31 bytes 89.20 bytes/sec
total size is 303 speedup is 1.36
[root@nfs01 ~]# ls /tmp/
hosts
推送目录:
[root@backup ~]# rsync -avz /etc/sysconfig 172.16.1.31:/tmp/ //
root@172.16.1.31's password:
sending incremental file list
[root@nfs01 ~]# ls /tmp/
hosts sysconfig--bwlimit=RATE limit socket I/O bandwidth
服务器数据拉到本地或者下载到本地来要影响带宽。
案例:某DBA做数据同步时,带宽占满,导致用户无法访问网站5.rsync守护进程模式部署
在rsync服务端(backup机器上)配置:
[root@backup ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@backup ~]# uname -r
2.6.32-696.el6.x86_64
[root@backup ~]# uname -m
x86_64
[root@backup ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:8b:a5:5c brd ff:ff:ff:ff:ff:ff
inet 10.0.0.41/24 brd 10.0.0.255 scope global eth0
inet6 fe80::20c:29ff:fe8b:a55c/64 scope link
valid_lft forever preferred_lft forever
[root@backup ~]# hostname
backup
1.检查软件是否安装
[root@backup ~]# rpm -qa rsync
rsync-3.0.6-12.el6.x86_64
2.添加一个rsync虚拟用户
[root@backup ~]# useradd rsync -s /sbin/nologin -M
3.创建存放备份目录并属于rsync用户
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync.rsync /backup/
4.配置rsync服务
[root@backup ~]# vim /etc/rsyncd.conf
[root@backup ~]# cat /etc/rsyncd.conf
5.配置rsync服务文件
######rsync_config_______________start
##rsyncd.conf 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
[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
说明:
######rsync_config_______________start
##rsyncd.conf start##
uid = rsync //指定rsync运行时的用户组 和 用户
gid = rsync
use chroot = no //安全相关
max connections = 200 //最大连接数
timeout = 300 //超时时间
pid file = /var/run/rsyncd.pid //pid号码存放的文件
lock file = /var/run/rsync.lock//锁文件
log file = /var/log/rsyncd.log //rsync日志文件
[backup] //模块名称
path = /backup/ //分享的目录
ignore errors
read only = false //是否只读
list = false
hosts allow = 172.16.1.0/24 //2选择1
hosts deny = 0.0.0.0/32
auth users = rsync_backup //适用于验证的用户,看大门的用户
secrets file = /etc/rsync.password //存放密码的,rsync_backup:123456
#rsync_config_______________end
6.创建密码文件并修改权限
[root@backup ~]# echo 'rsync_backup:123456' >/etc/rsync.password
[root@backup ~]# cat /etc/rsync.password
rsync_backup:123456
[root@backup ~]# chmod 600 /etc/rsync.password
[root@backup ~]# ll /etc/rsync.password
-rw------- 1 root root 20 Jan 23 11:24 /etc/rsync.password7.运行rsync服务守护进程
[root@backup ~]# rsync --daemon
[root@backup ~]# ps -ef|grep rsync //检查服务
root 2658 1 0 11:27 ? 00:00:00 rsync --daemon
root 2660 2089 0 11:27 pts/0 00:00:00 grep rsync
[root@backup ~]# ss -lntup|grep rsync //检查服务
tcp LISTEN 0 5 :::873 :::* users:(("rsync",2658,5))
tcp LISTEN 0 5 *:873 *:* users:(("rsync",2658,4))
[root@backup ~]# tail /var/log/rsyncd.log
2018/01/23 11:27:07 [2658] rsyncd version 3.0.6 starting, listening on port 873在rsync客户端配置:
[root@nfs01 ~]# rsync -avzP /etc/hosts rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
hosts
303 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)sent 188 bytes received 27 bytes 61.43 bytes/sec
total size is 303 speedup is 1.41
[root@nfs01 ~]#
[root@backup ~]# tail /var/log/rsyncd.log
2018/01/23 11:27:07 [2658] rsyncd version 3.0.6 starting, listening on port 873
2018/01/23 11:35:28 [2678] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors
2018/01/23 11:35:28 [2678] connect from nfs01 (172.16.1.31)
2018/01/23 11:35:31 [2678] rsync to backup/ from rsync_backup@nfs01 (172.16.1.31)
2018/01/23 11:35:31 [2678] receiving file list
2018/01/23 11:35:31 [2678] sent 95 bytes received 245 bytes total size 3031.检查软件是否安装
[root@nfs01 ~]# rpm -qa rsync
rsync-3.0.6-12.el6.x86_64
2.创建密码文件并修改权限
[root@nfs01 ~]# echo '123456' >/etc/rsync.password
[root@nfs01 ~]# cat /etc/rsync.password
123456
[root@nfs01 ~]# chmod 600 /etc/rsync.password
[root@nfs01 ~]# ll /etc/rsync.password
-rw------- 1 root root 7 Jan 23 11:39 /etc/rsync.password
测试,无需密码输入:
[root@nfs01 ~]# rsync -avzP /etc/hosts rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
sent 26 bytes received 8 bytes 68.00 bytes/sec
total size is 303 speedup is 8.918.rsync用户与rsync_backup区别
rsync_backup用户实际不存在,用来做敲门砖!
9.rsync之无差异同步
说明:这里同步的是源目录和目标目录!!!
步骤一:
[root@backup ~]# ls /backup/
hosts[root@nfs01 ~]# touch /tmp/test{01..05}.txt
[root@nfs01 ~]# ls /tmp/
test01.txt test02.txt test03.txt test04.txt test05.txt
[root@nfs01 ~]# rsync -avzP /tmp/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password //rsync之普通同步
sending incremental file list
./
test01.txt
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=5/7)
test02.txt
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=4/7)
test03.txt
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=3/7)
test04.txt
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=2/7)
test05.txt
0 100% 0.00kB/s 0:00:00 (xfer#5, to-check=1/7)
.ICE-unix/
sent 313 bytes received 110 bytes 846.00 bytes/sec
total size is 0 speedup is 0.00[root@backup ~]# ls /backup/
hosts test01.txt test02.txt test03.txt test04.txt test05.txt步骤二:
[root@nfs01 ~]# rm -rf /tmp/*
[root@nfs01 ~]# touch /tmp/now{01..05}.txt
[root@nfs01 ~]# ls /tmp/
now01.txt now02.txt now03.txt now04.txt now05.txt
[root@nfs01 ~]# rsync -avzP --delete /tmp/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password //rsync之无差异同步
sending incremental file list
./
deleting test05.txt
deleting test04.txt
deleting test03.txt
deleting test02.txt
deleting test01.txt
deleting hosts
now01.txt
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=5/7)
now02.txt
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=4/7)
now03.txt
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=3/7)
now04.txt
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=2/7)
now05.txt
0 100% 0.00kB/s 0:00:00 (xfer#5, to-check=1/7)sent 312 bytes received 107 bytes 279.33 bytes/sec
total size is 0 speedup is 0.00
[root@backup ~]# ls /backup/
now01.txt now02.txt now03.txt now04.txt now05.txt再次测试:
[root@nfs01 ~]# rm -rf /tmp/*
[root@nfs01 ~]# ls /tmp/
[root@nfs01 ~]# rsync -avzP --delete /tmp/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
./
deleting now05.txt
deleting now04.txt
deleting now03.txt
deleting now02.txt
deleting now01.txt
sent 55 bytes received 12 bytes 134.00 bytes/sec
total size is 0 speedup is 0.00[root@backup ~]# ls /backup/
10.rsync排错流程方法和排错思路
rsync排错流程就是rsync守护进程模式部署过程
要善于积累总结问题。
例如:[root@nfs01 ~]# /etc/init.d/iptables stop11.更新rsync配置与rsync配置多模块
(1)更新rsync配置
修改配置文件:
[root@backup ~]# vim /etc/rsyncd.conf
#hosts allow = 172.16.1.0/24
#hosts deny = 0.0.0.0/32
重启服务让配置文件生效:
[root@backup ~]# ps -ef |grep rsync
root 2658 1 0 11:27 ? 00:00:00 rsync --daemon
root 2756 2089 0 12:25 pts/0 00:00:00 grep rsync
[root@backup ~]# killall rsync
[root@backup ~]# killall rsync
rsync: no process killed
[root@backup ~]# ps -ef |grep rsync
root 2760 2089 0 12:25 pts/0 00:00:00 grep rsync
[root@backup ~]#
[root@backup ~]# rsync --daemon
[root@backup ~]# ps -ef |grep rsync
root 2762 1 0 12:26 ? 00:00:00 rsync --daemon
root 2764 2089 0 12:26 pts/0 00:00:00 grep rsync
测试:
[root@nfs01 ~]# rsync -avzP --delete /tmp/ rsync_backup@10.0.0.41::backup --password-file=/etc/rsync.password
sending incremental file listsent 52 bytes received 9 bytes 122.00 bytes/sec
total size is 0 speedup is 0.00(2)rsync配置多模块
[root@backup ~]# hostname
backup
[root@backup ~]# cat /etc/rsyncd.conf
######rsync_config_______________start
d = 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
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
[backup]
path = /backup/
[nfsbackup]
path = /nfsbackup/
说明:
:16,23move13
[root@backup ~]# killall rsync
[root@backup ~]# killall rsync
rsync: no process killed
[root@backup ~]# rsync --daemon
[root@backup ~]# ps -ef |grep rsync
root 2786 1 0 12:37 ? 00:00:00 rsync --daemon
root 2788 2089 0 12:37 pts/0 00:00:00 grep rsync
[root@backup ~]# chown -R rsync.rsync /nfsbackup
[root@backup ~]# ll -d /nfsbackup/
drwxr-xr-x 2 rsync rsync 4096 Jan 23 12:36 /nfsbackup/[root@nfs01 ~]# touch /tmp/test{01..05}.c
[root@nfs01 ~]# ls /tmp/
test01.c test02.c test03.c test04.c test05.c
[root@nfs01 ~]# rsync -avzP --delete /tmp/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.password
sending incremental file list
./
test01.c
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=5/7)
test02.c
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=4/7)
test03.c
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=3/7)
test04.c
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=2/7)
test05.c
0 100% 0.00kB/s 0:00:00 (xfer#5, to-check=1/7)sent 292 bytes received 107 bytes 798.00 bytes/sec
total size is 0 speedup is 0.00
[root@nfs01 ~]# rsync -avzP --delete /tmp/ rsync_backup@172.16.1.41::nfsbackup --password-file=/etc/rsync.password
sending incremental file list
./
test01.c
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=5/7)
test02.c
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=4/7)
test03.c
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=3/7)
test04.c
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=2/7)
test05.c
0 100% 0.00kB/s 0:00:00 (xfer#5, to-check=1/7)
.ICE-unix/sent 295 bytes received 110 bytes 810.00 bytes/sec
total size is 0 speedup is 0.00