rsync基本命令和操作

一:rsync功能

数据同步

rsync属于增量复制:简单的说就是把自己有的,而对方没有的,复制过去。如果自己有,对方也有,那么就不会发生复制。

例如:自己有A,B,C,而对方有A了,那么会把B和C复制过去。

rsync的另一种情况:如果对方有的,自己没有,那么发生复制的时候,可以把对方有的而自己没有的删除,让对方与自己保持一致。

例如:自己有A,B,C,对方有A和D,那么在发生复制时,进行比对,复制B,C过去,然后删除D。达成两边完全一致(也就是数据同步)。

挂载(装一下rsync):

ls /media/cdrom/

mount /dev/sr0 /media/cdrom/

yum -y install rsync

which rsync

一:实现本地模式:单个文件同步到指定目录下

举例:把hosts文件同步到 /tmp 目录下。

rsync /etc/hosts /tmp/

ls /tmp/ cat /etc/hosts 和cat /tmp/hosts 比对一下。

同步目录:

1:将 /opt 同步到 /mnt 下:

rsync -avz /opy /mnt

2:给目录里添加文件,再次同步:

touch /opt/{1..5}

rsync -avz /opt /mnt

ls /mnt/opt/——1,2,3,4,5

结果是:不仅是目录同步过去,目录下的文件也会被同步过去。

如果 rsync -avz /opt/ /mnt 同步 /opt/ 下的,结果就是/opt/下的文件同步过去,/opt目录不会同步过去。

3:同步目录下的文件,实验两种结果

(1):只同步自己目录有的文件

rm -rf /mnt/*

touch /mnt/888

rsync -avz /opt/ /mnt

结果:/mnt/下的文件是1,2,3,4,5,888。(把自己有的复制过去,对方有,自己没有的不做操作)

(2):同步自己目录下的文件,并删除对方有,而自己没有的文件。实现两个目录下的文件完全一致。

rsync -avz --delete /opt/ /mnt/

file list一下:同步过程中,会把888这个文件删除,然后同步1,2,3,4,5这几个文件过去。

ls /opt 和 ls /mnt 会发现两个目录下的文件完全一致。

二:远程模式:实现远程数据同步

把自己backop目录下的文件,同步到目标backop目录下。

两台虚拟机创建一个同名目录:

mkdir -p /backop

cd /backop

touch {1..5}

rsync -avz /backop/ [email protected]:/backop

在Linux体系里,目标主机一般通过登录账号@IP的方式表示目标位置。如果是目标下的目录,则用登录账号@IP:/xxx。

rsync的远程同步是依靠ssh方式进行的,所以要安装一个支持ssh功能的软件(yum -y install openssh-clients)装完之后就会有scp的命令(scp为远程复制命令)。

rsync的远程复制是通过ssh通道进行的,和xshell的连接类似,默认目标端口为22。如果端口不是22,则需要加参数来指定目标端口号,才能进行复制。

Linux里第一次连接远程目标服务器的时候,需要对目标服务器做记录,选择yes,就会在本地做记录,并且连接过去。选择no,就不会记录,也不会连接过去。

在另一个虚拟机查看ls /backop,就会看到同步过去的1,2,3,4,5个文件。

实验增量复制或者实现数据完全一致,参考上面本地操作。

rsync的增量复制功能,意味着数据同步的高效率。通过--delete可以实现两边数据完全一致的效果。因此我们可以应用在数据的迁移以及数据的备份上。

拓展:SCP(远程复制)

1:rsync远程模式下,实现两台服务器的增量复制

2:rsync远程模式下,实现两台服务器的数据完全一致(在实现增量复制的同时,把对方多于自己的数据进行删除)

3:反向同步

远程模式不仅可以本地推送到远程,还可以远程拉取到本地。(将两个服务器的位置调换一下即可)

rsync的守护进程数据同步(不需要指定同步数据在同步服务器的放置位置,软件做验证)

公司都有一台专门用来做备份的服务器,是通过rsync的守护进程模式来实现的,会持续不断的监听873端口,除数据库和NFS外的所有服务器的关键数据都会采取这种备份模式来实现数据备份,公司会在每天的凌晨0点整,对每台服务器(除数据库和NFS)的关键文件进行打包,通过rsync推送到备份服务器的873端口,它们不需要知道备份服务器会将数据放置的位置,这也就是与远程模式的区别。

1:在备份服务器端:

(1):创建此程序的配置文件:

因为要用守护进程的模式进行同步,那就说明要启动程序了,而启动程序则要有配置文件才可以,但是这个程序并没有默认的配置文件,所以需要自己编写,具体格式:vim 、etc/rsync.conf。

(2):创建共享目录及添加rsync程序用户

(3):启动服务

rsync --darmon (通过ps -ef | grep rsync 来判断服务是否启动成功)lsof -i : 873=>递归修改属主(目录中所有的)

4:修改共享目录的属主

chown -R rsync /backup=>递归修改属主(目录中所有的)

5:创建用于储存虚拟账号名和密码的文件

vim /etc/rsync.password --->rsync_backup:666666 账号名:密码 --->保存退出

6:chmod 600 /etc/rsync.password 此文件权限过大的话也会导致失败(拒绝接受数据),因为有安全机制保护。

7:将服务加入开机自启动

echo "rsync --daemon">> /etc/rc.local

2:在其他服务器端(客户端)

(1)将想要同步备份的所有数据放置同一个目录中,打包后tar -cf 将此目录推送至备份服务器端

注意:rsync对大文件推送的支持非常好,但是如果推送的是众多小文件,则极大程度影响rsync的额数据同步效率,因为推送之前,rsync先会对目标进行文件比对,推送的文件太多,比对时间就越长,从而影响效率,因此,我们推送一律打包后再进行推送。

(2):非交互式

在脚本处于定时任务中时,不能出现交互式输入,所以为避免此情况的出现,需要以下做法:

创建一个用于储存密码的文件,让脚本去调用读取这个文件即可(vim /etc/rsync.password --->666666 )只用存入目标密码即可。(保存退出,为安全起见更改密码文件的权限 chmod 600 /etc/rsync.password )

拓展知识:

A:每个进程都会生成一个属于自己的pid文件,文件中保存的是该进程对应的进程号,当我们输入service xxx stop时,其实就是通过kill -9 pid号来实现的,因为pid号是随机的,所以想要知道服务对应的具体pid号是多少时,就要通过读取进程对应的pid文件来得知。这个也就是进程拥有自己pid文件的意义。所以停止某个服务时的流程实际上是cat /var/run/服务名.pid | kill -9 。

B:IP地址0.0.0.0本来的意思是代表本地服务器的所有用于远程连接的IP地址,也代表了监听所有网卡的所有的对外IP。要是想实现远程连接功能,可以选择监听服务器自己固定的网卡的对外IP地址,或者可以选择监听0.0.0.0这个IP地址。

七:rsync的作用及意义

rsync的增量复制功能,意味着数据同步的高效率。它不会像cp命令那样将已经存在的数据覆盖后再全部重新复制,而是在对比之后仅对于新数据进行同步(复制),并且可以通过--delete参数来试下两台服务器的数据完全一致的效果。因此,rsync可以应用在数据的迁移以及数据的备份等方面。

问题1:在工作中,对于企业的数据,应该如何考虑备份问题?

答:备份的三个层面:硬件角度,软件角度(服务器),灾难备份。

公司都有一台专门用来做备份的服务器,其他所有服务器都是通过定时任务,将每天的重要数据进行打包,rsync推送到备份服务器,并且每天进行一次,以此来从服务器角度保障数据的安全。

问题2:从哪些角度考虑公司的数据安全问题?

答:首先从硬件角度讲,我们可以通过raid阵列来保障硬盘的数据安全。从系统的角度看,raid也可以保障数据安全,但是从软件角度或者从服务器的角度看,raid解决不了的,例如软件上的rm -rf *,是通过raid避免不了数据损失的,但是我们可以通过rsync讲重要数据从一台服务器同步到另一台上,即便服务器出现各种问题都不会有影响。

八:使用rsync得到注意事项

rsync是专门用于同步备份,但是这个工具也很容易造成生产事故。工作中分为两大环境,用于测试的叫做测试环境,用于提供用户服务的叫做生产环境。如果出现事故就是生产事故。在工作中我们要备份的数据会很大,不能用rsync普通方法直接备份,否则会占用大量带宽,导致交换机的本地流量被大量占用。从而影响用户体验。所以工作中在同步大型文件时,第一要挑取时间(尽量在少量用户使用的时间段内进行),第二要做限速处理(--bwlimit=100)。

九:rsync的启动脚本实例

一:rsync的三种工作方式

1:本地文件系统上实现同步(本地数据同步)

2:本地主机使用远程shell和远程主机通信(两台服务器之间的数据同步)

3:本地主机通过网络套接字连接远程主机上的 rsync daemon。