一、rsync远程同步

1.什么是rsync远程同步

rsync是CS架构的数据镜像备份工具,可以实现全量备份和快速增量备份支持本地复制或ssh、rsync主机同步。rsync默认端口为 873

rsync特性:可以在不通主机之间镜像同步整个目录树,支持增量备份、保持链接和权限、时间、属性且传输前自动执行压缩、rsync不需要特殊权限即可安装,centos系统默认安装,支持匿名传输,注意发起端要有对应目录位置的读权限。

2. rsync备份类型

完全备份:每次备份将备份源所有文件或目录备份到目的。

差量备份:备份上次完全备份以后有变化的数据。

增量备份:备份上次完全备份以后有变化的数据。 

3. rsync同步方式

①本地复制:首先是将源文件和目的位置文件对比找出差异,然后将源文件与目的位置的差异部分进行一致性同步。

②上行同步:客户端与服务端同步内容,可以理解为客户端从服务器上下载内容

③下行同步:服务端与客户端同步内容,可以理解为客户端将内容上传到服务器

4. rsync命令使用

基本格式:rsync    [选项]   原始位置    目的位置

注意:原始位置文件夹若加/则是同步文件夹下所有内容,不包括文件夹本身,若需要整个目录同步则不加/

选项:

a: 归档模式,保留所有属性权限等

v: 显示同步过程

z: 传输时进行压缩

e: 指定使用什么方式同步ssh等

delete: 删除目的位置有但是原始位置没有的文件同步客户端和服务端数据

password-file: password-file=密码文件位置,可以在同步时使用免交互登录

 二、rsync下行同步实验部署

1. 实验环境

192.168.50.200:客户端

192.168.50.150:服务端

关闭防火墙,安全防护模块

2. 实验流程

2.1 修改配置文件

1 rpm -q rsync   #检测rsync是否安装,一般系统已默认安装rsync
 2 rpm -qc rsync  #查看配置文件在什么地方
 3 cp /etc/rsyncd.conf /etc/rsyncd.conf_bak   
 4 #备份配置文件,便于回滚还原
 5 vim /etc/rsyncd.conf    #建立/etc/rsyncd.conf配置文件
 6 Uid = root     #用户id,注意不用root使用rsync同步时可能会报错
 7 Gid = root     #组id,注意不用root使用rsync同步时可能会报错
 8 Use chroot = yes  #禁锢在源目录
9 Address = 192.168.50.150  #监听地址
10 Port 873  #监听端口  tcp/udp  端口可通过cat /etc/services | grep rsync 查看
11 Log file = /var/log/rsyncd.log   #日志文件位置
12 Pid file = /var/run/rsyncd.pig   #存放进程id的文件位置
13 Hosts allow = 192.168.50.0/24  #允许访问的客户机地址
14 Dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z  #同步时不在压缩的文件类型
15 
16 [myhtml]   #共享模块名称
17 Path = /var/www/html   #源目录的实际路径
18 Comment = this is rsync of www.kgc.com  #解释说明
19 Read only = yes   #是否为只读
20 Auth users = daiwei       #授权账户,多个账号以空格分隔
21 Secrets file = /etc/rsyncd_users.db   #存放账户信息的数据文件
22 #如采用匿名的方式,只要将其中的“auth users”和“secrets file”
23 配置项去掉即可
24 
25 mkdir -p /var/www/html  #创建目录
26 ls -ld /var/www/html/   #查看权限
27 #如果没有读权限需要加上读权限
28 Chmod +r /var/www/html/
29 
30 vim /etc/rsyncd_users.db
31 Daiwei:123456   #无需建立同名系统用户
32 Chmod 600 /etc/rsyncd_users.db   
33 #设置权限,保证所以用户对源目录/var/www/html都有读取权限
34 rsync --daemon   #启动rsync服务,以独立监听服务的方式运行
35 netstat -antp |grep rsync 
36 #关闭rsync服务使用kill命令, kill 进程号,cat /var/run/rsyncd.pid查看进程号;或rm -rf /var/wrun/rsyncd.pid

rsync 自动推送 rsync -i_html

 

2.2 进入客户端(发起端200),同步数据

1 mkdir /opt/ky26   #创建文件ky26
2 rsync -avz daiwei@192.168.50.150::myhtml /opt/ky26 
3 #将模块下载到本地的ky26 ,密码:123456

rsync 自动推送 rsync -i_html_02

 

2.3 进入服务端

将/etc/passwd  /etc/shadow拷贝到/var/www/html目录下

rsync 自动推送 rsync -i_客户端_03

 

2.4 进入客户端查看数据是否变更,如下图,数据已变更

rsync 自动推送 rsync -i_rsync 自动推送_04

 

2.5 在服务端/var/www/html目录下修该用户信息文件,在尾行插入一条zhangsan的信息,客户端也会同步

rsync 自动推送 rsync -i_rsync 自动推送_05

 

rsync 自动推送 rsync -i_rsync 自动推送_06

 

rsync 自动推送 rsync -i_服务端_07

 

2.6 设置免交互密码,只给当前用户使用,其他用户无法使用

rsync 自动推送 rsync -i_服务端_08

 

rsync 自动推送 rsync -i_html_09

 

2.7 服务端删除数据,客户端若要同步需要加--delete命令

rsync 自动推送 rsync -i_服务端_10

 

rsync 自动推送 rsync -i_html_11

 

2.8 实时备份

设置每天十点半备份

rsync 自动推送 rsync -i_客户端_12

 

2.9 补充配置源的表达方式

 rysnc -avz -e ‘ssh -p ssh的端口号’ 原始位置 目标位置

服务端添加信息

rsync 自动推送 rsync -i_客户端_13

 客户端同步信息

rsync 自动推送 rsync -i_rsync 自动推送_14

 

三 、 rsync实时同步部署

1. 实验环境

master:192.168.50.200

slave: 192.168.50.100

2. 服务端配置

1 #基于下行同步完成的情况下
 2 vim  /etc/rsyncd.conf  
 3 read only =no 
 4 #关闭下行同步的只读,保存退出
 5 kill  `cat /var/run/rsyncd.pid`  
 6 #杀死rsync进程即关闭服务
 7 rsync  --daemon   
 8 #开启rsync服务
 9 chmod  777  /var/www/html 
10 #给lhjhtml模块的目录加权限

3. 客户端配置

1 #查看inotify内核参数
 2 cat /proc/sys/fs/inotify/max_queued_events  
 3 #监控时间队列数
 4 cat /proc/sys/fs/inotify/max_user_instances   
 5 #最多监控实例数
 6 cat /proc/sys/fs/inotify/max_user_watches     
 7 #每个实例最多监控文件数
 8 vim /etc/sysctl.conf  #优化inotify内核参数
 9 fs.inotify.max_queued_events = 32768
10 fs.inotify.max_user_instances = 1024
11 fs.inotify.max_user_watches = 1048576
12 sysctl -p  #加载内核生效

 

4. 安装inotify

#客户端安装inotify
yum install  gcc gcc-c++ -y   #安装编译工具
cd /opt
#将安装包放入/opt下
tar  zxvf   inotify-tools-3.14.tar.gz  
#解压安装包
cd    inotify-tools-3.14
./configure  && make && make install 
#编译安装inotify
#编写脚本监控客户端/var/www/html目录,当这个目录发生改变时使用rsync同步上传到服务端
vim inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /var/www/html"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html dai@192.168.50.200::lhjhtml"
 
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
        $RSYNC_CMD
        fi
done
#脚本内容解析:定义2个变量,变量INOTIFY_CMD监控客户端的/var/www/html文件夹。变量RSYNC_CMD执行rsync同步将/var/www/html/文件夹内容同步上传到服务端。将变量INOTIFY_CMD监控标准输入结果传给while函数,while函数读取若有后面这些关键字则执行if语句,当执行过滤rsync命令行数小于等于0则执行变量$RSYNC_CMD
1 cd /opt/
2 chmod +x inotify.sh 
3 ./inotify.sh 
4 执行脚本后会在前台执行占用窗口,重新开个窗口执行以下命令验证
5 cd /opt/ky26
6 echo "123">1.txt
7 然后到服务端查看是否上传完成

 四、rsync删除大量文件

1 mkdir -p  /date/blank
 2 #建立一个空的文件夹
 3 mkdir -p  /date/test
 4 cd /date/test
 5 touch {1..10000}
 6 #模拟/date/test文件中有1万个文件数据
 7 rsync --delete-before -avH --progress --stats /home/blank /date/test
 8 #使用rsync删除/date/test目录中的文件,用空文件夹同步了test文件夹
 9 选项说明:
10 --delete-before 接收者在传输进行删除操作
11 -a 归档模式,表示以递归方式传输文件,并保持所有文件属性-H 保持硬连接的文件
12 -v 详细输出模式
13 -H 保持硬连接的文件
14 --progress 在传输时显示传输过程
15 --stats 给出某些文件的传输状态
16 cd /date/test
17 ls
18 #进入查看数据为空