如何实现Rsync远程同步,你懂了吗?

如何实现Rsync远程同步,你懂了吗?

  • 一:rsync概述
    • 1.1:关于rsync
    • 1.2:rsync主要的三个配置文件
    • 1.3:rsync特点
    • 1.4:rsync同步过程
  • 二:rsync源服务器
    • 2.1:rsync同步源
    • 2.2:rsync基础命令
    • 2.3:配置rsync源思路
  • 三:实验
    • 3.1:实验环境
    • 3.2:实验目的
    • 3.3:实验原理图
    • 3.4:实验过程
      • 3.4.1:配置源服务器
      • 3.4.2:配置客户端
          • rsync源的免密交互处理
      • 3.4.3:配置rsync实时同步

一:rsync概述

1.1:关于rsync

  • 一块快速增量备份工具
    • Remote Sync,远程同步
    • 支持本地复制,或者与其他SSH、rsync主机同步
    • r(remote)sync是unix以及类unix平台下的数据镜像备份软件,它不像ftp那样需要全备份,rsync可以根据数据的变化进行差异备份,从而减少数据流量,提高工作效率
    • rsync可以远程或者本地实现增量备份。rsync可以实现本地主机和远程主机上的文件同步(包括本地推到远程,远程拉到本地两种同步方式),也可以实现本地不同路径下(不同目录、分区之间)文件的同步,但不能实现远程路径1到远程路径2之间的同步(scp可以实现)
    • rsync配合计划性任务,可以实现定时或周期同步
    • rsync配置inotify或者sersync,可以实现触发式的实时同步
    • 官方网站:http://rsync.samba.org

如何实现Rsync远程同步,你懂了吗?_第1张图片

1.2:rsync主要的三个配置文件

  • tsyncd.conf(主配置文件)
  • rsync.secrets(密码文件)
  • rsyncd.motd(服务器信息文件)

1.3:rsync特点

  • 可以镜像保存整个目录树和文件系统

  • 可以很容易的保持原来文件的权限、时间、软硬链接等,无须特殊权限即可安装

  • 效率高,第一次同步时rsync会复制全部内容,但是下一次只会传输修改过的文件,rsync在传输数据的过程中可以实行压缩以及解压操作,使用到的带宽更少

  • 安全性高,rsync支持匿名传输,以方便进行网站镜像,传输数据时可以使用ssh加密传输

注意:在centos系统中rsync是系统自带的,无需额外安装,但是如果使用最小化安装,可以使用 yum install -y rsync 安装一下。

  • 支持限速、支持断点续传

1.4:rsync同步过程

  • 由两部分模式组成,检查模式(决定哪些文件需要同步)和同步模式(文件同步时)
    • 检查模式
      • 检查模式是指按照指定规则来检查哪些文件需要被同步,例如哪些文件是明确被排除不传输的。默认情况下,rsync使用"quick check"算法快速检查源文件和目标文件的大小、mtime(修改时间)是否一致,如果不一致则需要传输。当然,也可以通过在rsync命令行中指定某些选项来改变quick check的检查模式,比如"–size-only"选项表示"quick check"将仅检查文件大小不同的文件作为待传输文件。rsync支持非常多的选项,其中检查模式的自定义性是非常有弹性的。
    • 同步模式
      • 同步模式是指在文件确定要被同步后,在同步过程发生之前要做哪些额外工作。例如上文所说的是否要先删除源主机上没有但目标主机上有的文件,是否要先备份已存在的目标文件,是否要追踪链接文件等额外操作。rsync也提供非常多的选项使得同步模式变得更具弹性。
  • 相对来说,为rsync手动指定同步模式的选项更常见一些,只有在有特殊需求时才指定检查模式,因为大多数检查模式选项都可能会影响rsync的性能。

二:rsync源服务器

2.1:rsync同步源

  • 指备份操作的远程服务器,也称为备份 源

如何实现Rsync远程同步,你懂了吗?_第2张图片

2.2:rsync基础命令

  • 启动rsync服务:rsync --daemon

  • 关闭rsync服务:kill $(cat /var/run/rsyncd.pid)

  • 同步本地文件系统数据:rsync [选项] 原始位置 目标位置

例如:
rsync /etc/fstab /opt '同步本机的fstab文件到opt目录'
rsync -rl /boot/grub /opt	'同步本机的grub目录到opt目录'
'如果想要在/opt目录下也创建一个boot目录,那么命令需要为:rsync -R rl /boot/grub /opt '
常用选项:
-a:归档模式,递归并保留对象属性,等同于 -rlptgoD
-r 对子目录以递归模式处理,主要是针对目录来说的,如果单独传一个文件不需要加-r,但是传输的是目录必须加-r选项
-l 保留软链接
-p 保持文件权限
-v:显示同步过程的详细(verbose)信息
-z:在传输文件时进行压缩(compress)
-H:保留硬连接文件
-A:保留ACL属性信息
--delete:删除目标位置有而原始位置没有的文件
--checksum:根据对象的校验和来决定是否跳过文件
--progress 在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等等
路径的格式可以是本地路径,也可以是使用user@host:path或user@host::path的远程路径,如果主机和path路径之间使用单个冒号隔开,表示使用的是远程shell通信方式,而使用双冒号隔开的则表示的是连接rsync daemon
  • 下行同步的两种方式(使用客户端将rsync服务器下的wwwroot共享模块下的内容同步到本地的/opt目录下(共享模块下的真实共享路径需要对other用户具有 ‘r’ 权限))

    • 命令格式用户名@主机地址::共享模块名

    例如:[root@rsyncClient ~]# rsync -avz [email protected]::wwwroot /opt

    • 命令格式:rsync://用户名@主机地址/共享模块名

    例如:[root@slave opt]# rsync -avz rsync://[email protected]/wwwroot /root

  • rsync通过ssh的方式同步

    • 命令与平常的scp命令类似
    • 例如:将本地/opt/abc.txt上传到目标服务器/opt目录:rsync -avz /opt/abc.txt [email protected]:/opt
    • 例如:将目标服务器/opt/qwe.txt文件下载到本地/opt目录下:rsync -avz [email protected]:/opt/qwe.txt /opt

2.3:配置rsync源思路

  • 基本思路
    • 建立rsyncd.conf配置文件、独立的账号文件
    • 启用rsync的–daemon模式
  • 应用示例
    • 用户backuper,允许下行同步
    • 操作的目录为/var/www/html
  • 配置文件rsyncd.conf
    • 需手动建立,语法雷士与Samba配置
    • 认证配置auth users、secrets file,不加则为匿名
  • rsync账号文件
    • 采用“用户名:密码”的记录格式,每行一个用户记录
    • 独立的账号数据,不依赖于系统账号
  • 启用rsync服务
    • 通过–daemon独自提供服务
  • 关闭服务
    • 执行kill $(cat /var/run/rsyncd.pid)
    • 注意这边不能用kill -9结束进程号,否则再次启动会报错,具体可以看我另一篇博客

三:实验

3.1:实验环境

  • VMware软件,centos 7.6
  • 源服务器:20.0.0.51,安装服务:rsync,httpd
  • 客户端:20.0.0.52,安装服务:rsync,inotify-tools,httpd

3.2:实验目的

  • 实现远程同步

3.3:实验原理图

如何实现Rsync远程同步,你懂了吗?_第3张图片

3.4:实验过程

  • 关闭防火墙与核心防护功能,源客都要做
[root@localhost ~]# systemctl stop firewalld	'关闭防火墙'
[root@localhost ~]# systemctl disable firewalld	'关闭防火墙开机自启'
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# setenforce 0	'关闭核心防护'
[root@localhost ~]# vi /etc/sysconfig/selinux 	'禁止核心防护开启自启'
SELINUX=disabled

3.4.1:配置源服务器

  • rsync工具是系统自带的,不需要安装,直接修改主配置文件
vim /etc/rsyncd.conf
'开启以下功能,将#注释,以及添加'
uid = nobody
gid = nobody
use chroot = yes	'禁锢在家目录,用chroot,在传输文件之前,服务器守护程序在将chroot 到文件系统中的目录中,这样做的好处是可能保护系统被安装漏洞侵袭的可能'
address = 20.0.0.51                  '监听地址'
port 873		'监听端口号'
log file = /var/log/rsyncd.log            '日志文件位置'
pid file = /var/run/rsyncd.pid		'存放进程ID的文件位置'
hosts allow = 20.0.0.0/24	'设置白名单,允许哪些地址可以访问'
'添加共享模块'
[wwwroot]		'共享模块名称'
path = /var/www/html	'源目录的实际路径'
comment = www.kevin.com		'描述'
read only = yes			'是否只读'
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2  '同步时不在压缩的文件类型'
auth users = backuper	'授权账户'
secrets file = /etc/rsyncd_user.db		'存放账户信息的数据文件'
  • 创建于用户密码文件
vim /etc/rsyncd_users.db	'创建存放账户信息的数据文件'
backuper:abc123		'采用“用户名:密码”的记录格式,每行一个用户记录独立的账号数据,不依赖于系统账号'
cd /etc
chmod 600 /etc/rsyncd_users.db  '给数据文件设置权限是为了安全,不让其他用户进行操作'
  • 启动rsync服务
rsync --daemon   '启动服务'
netstat -ntap | grep rsync
  • 在 /var/www/html目录中,新建文件
[root@localhost etc]# yum install httpd -y
[root@localhost etc]# cd /var/www/html/
[root@localhost html]# touch 111.html
[root@localhost html]# touch 222.html

3.4.2:配置客户端

  • 下行同步的两种方式,密码是abc123
'方法一'
[root@slave opt]# rsync -avzH --delete lisi@192.168.233.131::wwwroot /opt
Password: 
receiving incremental file list
./
111.html
222.html

sent 98 bytes  received 207 bytes  87.14 bytes/sec
total size is 0  speedup is 0.00

'方法二'
[root@slave opt]# rsync -avz rsync://lisi@192.168.233.131/wwwroot /root
Password: 
receiving incremental file list
./
111.html
222.html

sent 98 bytes  received 207 bytes  87.14 bytes/sec
total size is 0  speedup is 0.00
  • rsync源的免密交互处理
[root@localhost opt]# vim /etc/server.pass		'创建密码文件'
abc123 '写对方密码'
[root@localhost opt]# chmod 600 /etc/server.pass
[root@localhost opt]# rsync -zva --delete --password-file=/etc/server.pass backuper@20.0.0.51::wwwroot /opt '指定刚刚创建的密码文件,发现已经不需要输入密码了'

3.4.3:配置rsync实时同步

[root@master html]# vi /etc/rsyncd.conf 
read only = no '改为no'
[root@master html]# kill $(cat /var/run/rsyncd.pid)	'关闭rsync服务'
[root@master html]# netstat -ntap |grep rsync
[root@master html]# rsync --daemon	'开启rsync服务'
[root@master html]# netstat -ntap |grep rsync
tcp        0      0 20.0.0.51:873     0.0.0.0:*               LISTEN      88302/rsync         
[root@master html]# chmod 777 /var/www/html
  • 客户端
[root@localhost opt]# yum install httpd -y
[root@localhost opt]# cd /var/www/html/
[root@localhost html]# vim /etc/sysctl.conf
'文件末尾添加'
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
[root@localhost html]# sysctl -p  '立即生效'
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
[root@localhost html]# cd /opt/
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# tar zxvf inotify-tools-3.14.tar.gz '安装inotify-tools辅助工具'
[root@localhost opt]# cd inotify-tools-3.14/
[root@localhost inotify-tools-3.14]# yum install gcc gcc-c++ -y
[root@localhost inotify-tools-3.14]# ./configure
[root@localhost inotify-tools-3.14]# make && make install
[root@localhost inotify-tools-3.14]# inotifywait -mrq -e modify,create,move,delete  /var/www/html
  • 重新打开另一个客户端终端,编辑脚本并启动
'测试'
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# touch index.html
[root@localhost html]# echo "this is test" > test.html
'看执行的那台终端'
/var/www/html/ CREATE index.html
/var/www/html/ CREATE test.html
/var/www/html/ MODIFY test.html
'配置启动脚本,并将上一个测试关闭'
[root@localhost opt]# vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html
"RSYNC_CMD="rsync -avz --delete --password-file=/etc/server.pass /var/www/html/ backuper@20.0.0.51::wwwroot/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE 
 do
   if [ $(pgrep rsync | wc -l) -le 0 ]; then
      $RSYNC_CMD
   fi
done
[root@localhost opt]# chmod +x inotify.sh 
[root@localhost opt]# chmod 777 /var/www/html/
[root@localhost opt]# ./inotify.sh  '开启监控'
  • 测试

如何实现Rsync远程同步,你懂了吗?_第4张图片

如何实现Rsync远程同步,你懂了吗?_第5张图片

如何实现Rsync远程同步,你懂了吗?_第6张图片

  • 关于rsync error报错
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1052) [sender=3.0.9] 
'发现会有这个报错,但是文件是正常传过去的,这里的这个报错我没有解决掉,如果有朋友解决了可以私信我或者评论告诉我,多谢!' 

你可能感兴趣的:(缓存,rsync,云计算)