Linux架构之Rsync守护进程推和拉

第三十三章 Rsync服务

33.1)Rsync基本概述

rsync是一款开源、快速、多功能、可实现全量及增量的本地或远程数据同步备份的优秀工具。rsync软件适用于Unix/linux/Windows等多种操做系统平台。linux

33.1.1)Rsync简介

rsync英文称为remote synchronizetion,从软件的名称就能够看出来,rsync具备可以使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能相似于ssh带的scp命令,可是又优于scp命令的功能,scp每次都是全量拷贝,而rsync能够增量拷贝。固然,rsync还能够在本地主机的不一样分区或目录之间全量及曾量的复制数据,这又相似cp命令。可是一样也优于cp命令,cp每次都是全量拷贝,而rsync能够增量拷贝。web

在同步数据的时候,默认状况下,rsync经过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,固然也可根据权限、属主等属性的变化同步,可是须要制定相应的参数,甚至能够实现只同步一个文件里有变化的内容部分,因此,但是实现快速的同步备份数据。算法

 

rsync监听端口:873shell

rsync运行模式:C/Svim

client/server安全

客户端/服务端服务器

小提示:利用rsync还能够实现删除文件和目录的功能,这又至关于rm命令,一个rsync至关于scp、cp、rm,可是还优于他们的每个命令。架构

 

33.1.2)Rsync的特性

1)支持拷贝特殊文件,如链接文件、设备等。 2)能够有排除指定文件或目录同步的功能,至关于打包命令tar的排除功能。 3)能够作到保持原文件或目录的权限、时间、软硬连接、属主、组等全部属性均不改变 –p。 4)能够实现增量同步,既只同步发生变化的数据,所以数据传输效率很高(tar-N)。 5)可使用rcp、rsh、ssh等方式来配合传输文件(rsync自己不对数据加密)。 6)能够经过socket(进程方式)传输文件和数据(服务端和客户端)。 7)支持匿名的活认证(无需系统用户)的进程模式传输,能够实现方便安全的进行数据备份和镜像。ssh

33.1.3)生产场景架构集群备份方案

1)借助cron+rsync把全部客户服务器数据同步到备份服务器。 2)针对公司重要数据备份混乱情况和领导提出备份全网数据的解决方案。 3)经过本地打包备份,而后rsync结合inotify应用把全网数统一备份到一个固定存储服务器,而后在存储服务器上经过脚本检查并报警管理员备份结果。 4)按期将IDC机房的数据 备份公司的内部服务器,防止机房地震及火灾问题致使数据丢失。 5)实时同步,解决存储服务器等的单点问题。socket

33.1.4)备份类型介绍

备份类型有两种,分别是彻底备份和增量备份。

彻底备份示意图以下:

 

 

增量备份示意图以下:

 

 

33.1.5)Rsync的应用场景

33.15.1)应用场景1:推

示意图以下:

 

 

33.15.2)应用场景2:拉

示意图以下:

 

 

33.15.3)应用场景3:大量数据备份场景

示意图以下:

 

 

33.15.4)应用场景4:异地备份

示意图以下:

 

 

33.1.6)Rsync的传输模式

Rsync有三种传输模式,分别是本地方式、远程方式、守护进程。

33.1.6.1)本地传输方式

本地方式

相似于cp命令

 命令示例:[root@web01 ~]# rsync -avz file0801-1 /ml-1/
 命令语法:
#本地拷贝数据命令
Local: rsync [OPTION...] SRC... [DEST]
    完整示例:
  #在本地建立目录file0801-1,在目录file0801-1里建立文件f1.txt,在本地建立目标目录ml-1
  [root@web01 ~]# mkdir file0801-1
  [root@web01 ~]# mkdir ml-1
  [root@web01 ~]# cd file0801-1
  [root@web01 file0801-1]# touch f1.txt

  #拷贝目录file0801-1至目录ml-1下
  rsync -avz file0801-1 /ml-1/

  #检查结果
  sending incremental file list
  file0801-1/
  file0801-1/f1.txt

  sent 123 bytes received 39 bytes 324.00 bytes/sec
  total size is 0 speedup is 0.00
  [root@web01 ~]# ll /ml-1/file0801-1
  total 0
  -rw-r--r-- 1 root root 0 Aug 1 16:12 f1.txt

 

33.1.6.2)远程方式

远程方式

相似于scp命令

 命令示例:[root@web01 ~]# rsync -avz file0801-1 /ml-1/
 命令语法:
Access via remote shell:
    Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
    Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
完整示例:
#推 push

#先在客户端web01建立要复制的目录及文件
[root@web01 ~]# mkdir tmp2
[root@web01 ~]# cd tmp2
[root@web01 tmp2]# touch f1{.txt,.log}

#接着在服务器端backup上建立目标目录
[root@backup ~]# mkdir tmp3

#拷贝客户端上的tmp2目录至服务器端的目录tmp3中
[root@web01 tmp2]# rsync -avz tmp2 root@172.16.1.41:tmp3/



#检查结果
客户端页面:
[root@web01 ~]# rsync -avz tmp2 root@172.16.1.41:tmp3/
root@172.16.1.41's password:
sending incremental file list
tmp2/
tmp2/f1.log
tmp2/f1.txt

sent 168 bytes received 58 bytes 90.40 bytes/sec
total size is 0 speedup is 0.00


服务器端页面:(服务器端存在目录tmp2,表示已拷贝成功)
[root@backup ~]# cd tmp3
[root@backup tmp3]# ll
total 0
drwxr-xr-x 2 root root 34 Aug 1 16:58 tmp2
[root@backup tmp3]# cd tmp2
[root@backup tmp2]# ll
total 0
-rw-r--r-- 1 root root 0 Aug 1 16:58 f1.log
-rw-r--r-- 1 root root 0 Aug 1 16:58 f1.txt
完整示例:
#拉 pull


#先在服务器端backup上建立要复制的目录及文件
[root@backup ~]# mkdir tp10
[root@backup ~]# cd tp10
[root@backup tp10]# touch aa.txt

#再在客户端web01建立目标目录
[root@web01 ~]# mkdir f08
[root@web01 ~]# mkdir f09


#拉服务器端上的tp10目录至客户端的目录f08中
[root@web01 ~]# rsync -avz root@172.16.1.41:tp10/ f08


#拉服务器端上的tp10目录至客户端的目录tp09中
[root@web01 ~]# rsync -avz root@172.16.1.41:tp10 f09



#检查结果
加/的状况下,只拷贝目录里的内容(不包含目录)
客户端页面:
[root@web01 ~]# rsync -avz root@172.16.1.41:tp10/ f08

root@172.16.1.41's password:
receiving incremental file list
./
aa.txt

sent 46 bytes received 104 bytes 42.86 bytes/sec
total size is 0 speedup is 0.00


客户端页面:(客户端存在aa.txt,但没有目录tp10)
[root@web01 ~]# cd f08
[root@web01 f08]# ll
total 0
-rw-r--r-- 1 root root 0 Aug 1 18:00 aa.txt


不加/的状况下,拷贝目录总体(包含目录自己及目录里的内容)
客户端页面
[root@web01 ~]# rsync -avz root@172.16.1.41:tp10 f09
root@172.16.1.41's password:
receiving incremental file list
tp10/
tp10/aa.txt

sent 47 bytes received 117 bytes 65.60 bytes/sec
total size is 0 speedup is 0.00

[root@web01 ~]# cd f09
[root@web01 f09]# ll
total 0
drwxr-xr-x 2 root root 20 Aug 1 18:00 tp10 #只拷贝了tp10目录
[root@web01 f09]# cd tp10
[root@web01 tp10]# ll
total 0 #tp10下的文件并无拷贝过来

PS:注意: rsync不论是推仍是拉,推送目录的时候带/和不带/

1.带/ :/etc/ 将etc目录里的全部内容(不包括目录),推过去或者拉过来

2.不带/:/etc 将etc目录总体(包括目录及目录里的全部内容)推过去或者拉过来

 

33.1.6.3)守护进程

步骤一、客户端、服务端安装rsync

客户端:   web01-10.0.0.7
[root@web01 ~]# yum install -y rsync
服务端:  backup-10.0.0.41
[root@backup ~]# yum install -y rsync

步骤二、进入服务端会话页面,进行以下操做

服务端页面:
1)先修改配置文件:
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[zls]
comment = welcome to oldboyedu backup!
path = /backup


配置文件详解:
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync #用户名
gid = rsync #用户组
port = 873 #端口
fake super = yes #无需让rsync以root身份运行
use chroot = no #禁锢目录,不容许操做指定目录以外的目录
max connections = 200 #最大链接数200
timeout = 600 #超时时间600s 10分钟
ignore errors #忽略错误信息
read only = false #关闭只读,对备份数据可读写
list = false #不容许查看模块信息
auth users = rsync_backup #认证用户,定义虚拟用户做为链接认证用户
secrets file = /etc/rsync.passwd #认证用户的密码文件
log file = /var/log/rsyncd.log #日志文件
#####################################
#模块(任意名字均可以)
[zls] #定义模块信息
comment = welcome to oldboyedu backup! #注释信息(可有可无)
path = /backup #路径,定义接收备份数据目录


===============================================================

2)接着建立用户
[root@backup ~]# id rsync #检查用户是否存在
id: rsync: no such user
#建立用户(不容许登陆,不建立家目录)
[root@backup ~]# useradd rsync -s /sbin/nologin -M


===============================================================

3)建立一个备份目录
[root@backup ~]# mkdir /backup     #建立目录backup
#受权rsync用户
[root@backup ~]# chown -R rsync.rsync /backup/


===============================================================

4)建立虚拟用户及密码文件
[root@backup ~]# vim /etc/rsync.passwd
rsync_backup:123456 #用户名:密码
[root@backup ~]# chmod 600 /etc/rsync.passwd #受权


===============================================================

5)启动rsync添加开机自启
[root@backup ~]# ll /usr/lib/systemd/system/rsyncd.service
-rw-r--r-- 1 root root 237 Apr 26 01:17 /usr/lib/systemd/system/rsyncd.service
[root@backup ~]# systemctl start rsyncd #启动rsyncd守护进程
[root@backup ~]# systemctl enable rsyncd #容许开机自启
Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.

步骤三、进入客户端会话页面,进行以下操做

客户端页面:
#建立虚拟用户的密码文件
[root@web01 ~]# vim /etc/rsync.pass
1 #输入密码,对应服务器端密码文件中的密码
[root@web01 ~]# chmod 600 /etc/rsync.pass #受权

步骤四、在客户端页面,建立目录,并在该目录下批量建立文件

客户端页面:
[root@web01 ~]# mkdir /data #建立目录data
[root@web01 ~]# cd /data #切换到目录data
[root@web01 data]# touch file{1..50} #在目录data下批量建立50个文件

 

Rsync的推操做:

[root@web01 data]# rsync -avz /data/ rsync_backup@172.16.1.41::wangxiaogang
#将目录data推至服务器端      在守护进程中,不考虑加/或者不加/

 

Rsync的拉操做

[root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::wangxiaogang rt
#将服务器端的模板目录拉至客户端的rt目录中     在守护进程中,不考虑加/或者不加/
相关文章
相关标签/搜索