Linux运维学习笔记之十一:同步工具之rsync和inotify

本文详细介绍了Linux运维中常用的同步工具rsync及其工作方式,包括rsync的基础知识、参数用法及企业中常见应用场景。此外,还探讨了rsync的深度应用,如排除打包和无差异同步,并分析了rsync的排错方法。最后,文章介绍了实时同步工具inotify的工作原理、参数详解和脚本编写,以及rsync与inotify结合实现数据实时同步的实践案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第十九章 同步工具之rsync

一、rsync基础
1、常用同步方法

SCP、NFS、SFTP、http、samba、rsync、drbd(基于文件系统同步,效率高)

2、rsync介绍

rsync,英文全称是remote synchronize,是一款实现远程同步功能的免费软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。 rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件。甚至还可以实现只同步一个文件里有变化的内容部分,所以可以实现快速的同步备份数据。

同时,rsync还可以实现同步本地数据、删除文件和目录的功能。一个rsync相当于scp、cp、rm,并且还在性能上优于它们每一个命令。

3、rsync特性

能更新整个目录和树和文件系统;
有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等;
对于安装来说,无任何特殊权限要求;
对于多个文件来说,内部流水线减少文件等待的延时;
能用rsh、ssh 或直接端口做为传输入端口(rsync本身不对数据加密);
支持匿名rsync 同步文件,是理想的镜像工具;

4、rsync在企业的工作场景

(1)服务器之间的数据同步(cron+rsync)

(2)把所有客户服务器数据同步到备份服务器(cron+rsync)

(3)与inotify或sersync配合,做实时的数据同步(rsync+inotify/sersync)

5、rsync客户端常用参数
(1)参数说明

-v, --verbose 详细模式输出。

-z, --compress 对备份的文件在传输时进行压缩处理。

-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。

-r, --recursive 对子目录以递归模式处理。

-t, --times 保持文件时间信息。

-o, --owner 保持文件属主信息。

-p, --perms 保持文件权限。

-g, --group 保持文件属组信息。

-D, --devices 保持设备文件信息。

-l, --links 保留软链结。

-e, --rsh=command 指定使用rsh、ssh方式进行数据同步。

--exclude=PATTERN 指定排除不需要传输的文件模式。

--exclude-from=FILE 排除FILE中指定模式的文件。

--bwlimit=KBPS 限制I/O带宽,KBytes per second。

(2)工作中常用参数

一般运维中经常使用的参数是-avz(相当于-vzrtopgDl)

(3)参数使用演示

a、使用--bwlimit参数限制带宽

rsync -avz --bwlimit=100 -e  'ssh' a.log oldboy@192.168.58.85:/wddg/log/

b、使用-avz参数

rsync -avz -e  'ssh' a.logoldboy@192.168.58.85:/wddg/log/

6、rsync的工作方式

一般来说,rsync大致使用3种主要的传输数据方式。

(1)单个主机本地之间的数据传输(此时类似于cp命令的功能)

a、语法

rsync [选项] 源文件或目录 目标文件或目录

b、实例1:普通拷贝

rsync /etc/hosts /tmp/  等价于 cp /etc/hosts /tmp/

c、实例2:保持文件属性

rsync –avz /etc/hosts /tmp/ 等价于cp -dpr /etc/hosts /tmp/ #-dpr=-a

d、实例3:删除文件

rsync删除文件或目录的实质还是拷贝,就是将源目录去替换目标目录。源目录中是什么,目标目录中就是什么,目标目录中原有的文件均被删除

(i)首先,创建一个空目录做为源目录

mkdir /srcnull

(ii)在目标目录中创建文件

touch /data/a{1,2,3}.txt

ll /data

-rw-r--r-- 1 root root 0 Feb 20 02:45 a1.txt

-rw-r--r-- 1 root root 0 Feb 20 02:45 a2.txt

-rw-r--r-- 1 root root 0 Feb 20 02:45 a3.txt

(iii)删除时,源目录后不带/

rsync –r -–delete /srcnull /data/ #srcnull后没有加/,删除不成功,没能删除/data下的文件

ll /data

-rw-r--r-- 1 root root 0 Feb 20 02:45 a1.txt

-rw-r--r-- 1 root root 0 Feb 20 02:45 a2.txt

-rw-r--r-- 1 root root 0 Feb 20 02:45 a3.txt

(iv)删除时,源目录后带/

rsync –r –-delete /srcnull/ /data/ #srcnull后加/,删除成功,删除了/data下的文件

ll data/

total 0

(v)原因:如果src目录后不带斜杠,那么是将src目录复制到dest中,包含了src目录,带斜杠是把src目录下的文件同步到dest中,不包含src目录,会把目标目录下所有文件删除,再同步。

(vi)源目录中存在文件

touch /srcnull/ddd.txt

touch /data/a{1,2,3}.txt

ll /data

-rw-r--r-- 1 root root 0 Feb 20 02:45 a1.txt

-rw-r--r-- 1 root root 0 Feb 20 02:45 a2.txt

-rw-r--r-- 1 root root 0 Feb 20 02:45 a3.txt

ll srcnull/

-rw-r--r-- 1 root root 0 Feb 20 02:49 ddd.txt

(vii)删除,源目录中的文件同步到目标目录中了,目标目录中的原有文件全部被删除

rsync –r –delete /srcnull/ /data/

ll /data

-rw-r--r-- 1 root root 0 Feb 20 02:50 ddd.txt

(2)借助rcp、ssh等通道来传输数据(此时类似于scp命令的功能)

a、传统scp传输方式

(i)推送方式

scp -rp -P9080 /etc/hosts test@192.168.1.8:/tmp

(ii)拉取方式

scp -rp -P9080 test@192.168.1.8:/tmp /etc/hosts

b、rsync传输方式

(i)推送方式

rsync -avz -e 'ssh' a.log oldboy@192.168.58.85:/wddg/log/

(ii)拉取方式

rsync -avz -e 'ssh' oldboy@192.168.1.8:/tmp /etc/hosts

(3)以守护进程(socket)的方式传输数据(这是rsync本身的重要功能)

a、演示环境

主机名

IP

用途

操作系统

linuxDelivery

192.168.58.238

服务端A_备份服务器

CentOS6.8

StudyLinux

192.168.58.85

客户端B_发送服务器

CentOS6.8

LS-B16175

192.168.16.75

客户端C_发送服务器

RedHat6.4

b、服务端A_生成rsync配置文件/etc/rsyncd.conf(需手动生成)

vi /etc/rsyncd.conf

#rsync-config------------------------start

#create by Study rsync 13:11 2017-02-21

##rsyncd.conf start##

 

uid = rsync                          #指定rsync服务进程的属主

gid = rsync                          #指定rsync服务进程的属组

use chroot = no                     #安全方面的参数,首先chroot到path参数指定的目录下。

max connections = 200              #允许的最大连接数

timeout = 300                       #超时日间

pid file = /var/run/rsyncd.pid  #指定rsync的pid文件

lock file = /var/run/rsync.lock #锁文件

log file = /var/log/rsyncd.log  #日志文件

 

[StudyRsync]                   #[]表示模块,模块名就是rsync客户端看到的目录名

path = /wddg/rsync/           #rsync在服务端的路径

ignore errors                  #忽略错误

read only = false             #指定目录可读可写(rw)

list = false                   #不允许客户端对共享目录进行列表操作

hosts allow = 192.168.0.0/16 #允许访问的主机。可以是IP,也可以是网段

hosts deny = 0.0.0.0/32   #拒绝访问的主机

auth users = rsync_backup  #空格或逗号分隔的用户列表,为虚拟用户,列表中的用户才能连接该模块。

secrets file = /etc/rsync.password  #虚拟用户的密码文件.格式为用户名:密码

 

#rsync-config------------------------end

c、服务端A_以守护进程方式启动rsync

rsync --daemon

d、服务端A_查看是否启动成功(rsync的监听端口为873)

netstat -lntup | grep rsync

tcp        0     0 0.0.0.0:873       0.0.0.0:*        LISTEN      3747/rsync 

tcp        0     0 :::873              :::*              LISTEN      3747/rsync 

cat /var/log/rsyncd.log

2017/02/21 14:01:39 [3747] rsyncd version 3.0.6 starting, listeningon port 873

e、服务端A_新建rsync用户

useradd rsync -s /sbin/nologin

id rsync

uid=503(rsync) gid=503(rsync) groups=503(rsync)

f、服务端A_新建rsync共享目录

mkdir /wddg/rsync/

g、服务端A_将rsync共享目录属主(组)改为rysnc

chown -R rsync.rsync /wddg/rsync

h、服务端A_新建rsync密码文件

echo "rsync_backup:mypassword" > /etc/rsync.password

i、服务端A_降低rsync密码文件的权限,保证安全

chmod 600 /etc/rsync.password

j、客户端B_创建rsync密码文件(只需密码,不需用户)

echo "mypassword" > /etc/rsync.password

k、客户端B _降低rsync密码文件的权限,保证安全

chmod 600 /etc/rsync.password

l、客户端C_创建rsync密码文件(只需密码,不需用户)

echo "mypassword" > /etc/rsync.password

m、客户端C _降低rsync密码文件的权限,保证安全

chmod 600 /etc/rsync.password

n、客户端B_拉取方式获取服务端A数据(需密碼)

   rsync  参数   虚拟用户       IP             模块名         本地目录

rsync -avz rsync_backup@192.168.58.238::StudyRsync /wddg/share/  #需密碼

o、客户端B_拉取方式获取服务端A数据(指定密碼文件方式,無需密碼)

rsync -avz rsync_backup@192.168.58.238::StudyRsync/wddg/share/ --password-file=/etc/rsync.password  #指定密碼文件,無需密碼,自動傳輸

p、客户端B_推送方式获取服务端A数据(指定密碼文件方式,無需密碼)

touch /wddg/share/{1..10}

rsync -avz /wddg/share/ rsync_backup@192.168.58.238::StudyRsync--password-file=/etc/rsync.password 

说明:推送时,没有/(/wddg/share)表示推送目录share,有/(/wddg/share/)表示推送share下的所有文件.

q、客户端B_再推一次數据到服务端A(rsync不会推送同样的数据了)

rsync -avz /wddg/share/ rsync_backup@192.168.58.238::StudyRsync--password-file=/etc/rsync.password 

显示结果为:total sizeis o speedup is 0.00

r、客户端C_拉取方式获取服务端A数据(指定rsync协议)

rsync -avz rsync://

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值