首页 > 系统相关 >Linux---rsync服务

Linux---rsync服务

时间:2024-02-22 18:44:06浏览次数:39  
标签:rsync test01 root --- etc Linux txt backup

1.rsync 简介

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

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

rsync官方地址:https://rsync.samba.org/
rsync监听端口:873
rsync运行模式:C/S

利用rsync还可以实现删除文件和目录的功能,这又相当于rm命令,一个rsync相当于scp、cp、rm,但是还优于他们的每一个命令。

2.rsync的特性

1.高效的增量传输:rsync使用一种称为"增量复制"的算法来传输文件,只传输源文件和目标文件之间的差异部分,从而减少数据传输量。这意味着只有修改过的文件块会被传输,大大提高了传输效率。

2.支持本地和远程同步:rsync可以在本地系统上进行文件同步,也可以通过SSH协议在远程系统之间进行安全的文件同步。

3.多种同步模式:rsync支持多种同步模式,包括从源到目标的单向同步、从目标到源的反向同步以及双向同步。可以根据需求选择适合的同步模式。

4.文件属性和权限保留:rsync默认会保留文件的所有属性和权限信息,包括文件所有者、组、时间戳、权限位等。这样可以确保在目标系统上生成与源系统完全相同的文件副本。

5.支持备份和恢复:rsync可以用于创建文件和目录的备份,并支持快速的恢复操作。通过增量传输和只复制修改部分,可以节省存储空间和传输时间。

6.通用性和可定制性:rsync可以在不同的操作系统和平台上运行,并且可以通过命令行选项进行灵活的配置和定制。可以根据需求设置传输速度、忽略特定文件或目录、排除某些文件类型等。

7.压缩传输:rsync支持数据压缩,可以在传输过程中对数据进行压缩,减小传输数据量,提高传输速度。

8.安全性:rsync可以通过SSH协议进行数据传输,确保传输的安全性和加密。

3.生产场景架构集群备份方案

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

4.rsync传输模式

4.1.本地模式(仅作了解)

Local:  rsync [OPTION...] SRC... [DEST]  
# 类似cp命令

Local:  rsync [OPTION...] SRC... [DEST] 
本地:   rsync [参数选项]  源文件 目标文件
        rsync  参数  拷贝谁  拷贝到哪里去
[root@backup ~]# touch test.txt (创建文件)
[root@backup ~]# ll (查看)
total 0
-rw-r--r-- 1 root root 0 Mar 27 09:19 test.txt
[root@backup ~]# ll /opt/  
total 0
[root@backup ~]# rsync -avz test.txt /opt/ (将test文件传输到opt目录下)
sending incremental file list
test.txt

sent 87 bytes  received 35 bytes  244.00 bytes/sec
total size is 0  speedup is 0.00
[root@backup ~]# ll /opt/
total 0
-rw-r--r-- 1 root root 0 Mar 27 09:19 test.txt



[root@backup ~]# mkdir test01  
[root@backup ~]# touch test01/{1..2}.txt
[root@backup ~]# 
[root@backup ~]# ll
total 0
drwxr-xr-x 2 root root 32 Mar 27 09:21 test01
-rw-r--r-- 1 root root  0 Mar 27 09:19 test.txt
[root@backup ~]# ll test01/
total 0
-rw-r--r-- 1 root root 0 Mar 27 09:21 1.txt
-rw-r--r-- 1 root root 0 Mar 27 09:21 2.txt
[root@backup ~]# rm -rf /opt/*
[root@backup ~]# ll /opt/
total 0
[root@backup ~]# rsync -avz test01/ /opt/
sending incremental file list
./
1.txt
2.txt

sent 152 bytes  received 57 bytes  418.00 bytes/sec
total size is 0  speedup is 0.00
[root@backup ~]# ll /opt/
total 0
-rw-r--r-- 1 root root 0 Mar 27 09:21 1.txt
-rw-r--r-- 1 root root 0 Mar 27 09:21 2.txt

4.2.远程访问模式

4.2.1.下载、拉取、更新

Access via remote shell:		 # 远程访问模式
pull: 拉取、更新
push: 推送、上传

下载网盘的什么文件到本地的哪个位置
Pull:rsync [OPTION...] [USER@]HOST:SRC... [DEST]
1.拉取: rsync -avz 用户@主机:源文件 目标文件
2.rsync: 命令
3.USER: 用户名称 远程服务器上必须存在的用户 
4.@:     分隔符
5.HOST:  主机名称 IP地址 域名
6.RSC:   下载是远程主机的什么文件
7.DEST:  下载到本地的哪里


#注意:nfs做了hosts解析
[root@backup ~]# vim /etc/hosts
10.0.0.31 nfs
[root@backup ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
10.0.0.31 nfs

#示例1: 在41主机上下载31家目录下的31.txt到当前目录
通过hosts主机名称下载
[root@backup ~]# rsync -avz root@nfs:/root/31.txt .
通过IP地址下载
[root@backup ~]# rsync -avz [email protected]:/root/31.txt .


#示例2:在nfs服务器下载backup服务器的hosts文件到当前
[root@nfs ~]# rsync -avz backup:/etc/hosts .  (没加用户默认以当前的用户访问,当前用户为root)

[test01@nfs ~]$ rsync -avz 10.0.0.41:/etc/passwd . #(当前31服务器上用户为test01,41服务器上必须也有test01,也必须有密码 )
The authenticity of host '10.0.0.41 (10.0.0.41)' can't be established.
ECDSA key fingerprint is SHA256:gwTooDqHaO0MxbuqVfNzjsrCzFoQgcNky15oCEcvxjM.
ECDSA key fingerprint is MD5:b9:8d:1a:57:ab:7b:3e:2e:73:c0:b8:f3:e5:b8:be:c6.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.41' (ECDSA) to the list of known hosts.
[email protected]'s password:    # 输入的是41服务器的test01的密码 41服务器上test01用户必须存在

#注意: 
1.如果不加用户默认以当前的用户为远程访问用户发起请求
2.如果当前登录的为root用户 则使用的是backup的root身份下载数据
3.如果当前登录的为test01用户 则使用的是backup的test01用户身份下载数据

4.2.2.推送、上传

Push: rsync   [OPTION...]   SRC...    [USER@]HOST:   DEST
推送: rsync    -avz         源文件     用户名@主机:   目标文件


#示例: 在41服务器上推送test.txt到31家目录
[root@backup ~]# rsync -avz test.txt [email protected]:/root/
[email protected]'s password: 
sending incremental file list
test.txt

sent 87 bytes  received 35 bytes  81.33 bytes/sec
total size is 0  speedup is 0.00

#示例: 拷贝本地41服务器的目录test01到31的家目录下
[root@backup ~]# rsync -avz test01 172.16.1.31:/root/
The authenticity of host '172.16.1.31 (172.16.1.31)' can't be established.
ECDSA key fingerprint is SHA256:gwTooDqHaO0MxbuqVfNzjsrCzFoQgcNky15oCEcvxjM.
ECDSA key fingerprint is MD5:b9:8d:1a:57:ab:7b:3e:2e:73:c0:b8:f3:e5:b8:be:c6.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.1.31' (ECDSA) to the list of known hosts.
[email protected]'s password: 
sending incremental file list
test01/
test01/2.txt
test01/3.txt



#案例: 拷贝31的1.txt到41的家目录改名为bakcup.txt
[root@nfs ~]# rsync -avz 1.txt 172.16.1.41:/root/backup.txt  (在backup服务器操作此命令)
 

4.3.守护进程模式

4.3.1.安装服务

1.第一步: 安装服务
[root@backup ~]# yum -y install rsync

2.第二步: 配置服务rsync
#先将/etc/rsyncd.conf里面的初始文件清空,然后保存退出,然后重新vim进入此文件 输入:set paste回车 按a进入编辑模式然后复制下面的文件内容
uid = www
gid = www
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
#####################################
[backup]  
path = /backup  



#配置文件解析
rsync配置文件: /etc/rsyncd.conf
[root@backup ~]# cat /etc/rsyncd.conf
uid = www      #运行进程的用户  (名称可以自定义)
gid = www      #运行进程的用户组  (名称可以自定义)
port = 873       #监听端口
fake super = yes        #无需让www以root身份运行,允许接收文件的完整属性
use chroot = no         #禁锢推送的数据至某个目录,不允许跳出该目录
max connections = 200   #最大连接数
timeout = 600           #超出时间
ignore errors           #忽略错误信息
read only = false       #对备份数据可读写
list = false            #不允许查看模块信息
auth users = rsync_backup         #定义虚拟用户,作为连接认证用户         (名称可以自定义)
secrets file = /etc/rsync.passwd  #定义rsync服务用户连接认证密码文件路径  (名称可以自定义)
log file = /var/log/rsyncd.log
#####################################
[backup]        #定义模块信息  (名称可以自定义)
path = /backup  #定义接收备份数据目录 (目录名称可以自定义)



3.第三步: 根据配置文件创建必要的数据信息
#1)创建虚拟用户www
[root@backup ~]# useradd -M -s /sbin/nologin www
[root@backup ~]# id www
uid=1000(www) gid=1000(www) groups=1000(www)


#2)创建虚拟用户的密码文件 权限为600
[root@backup ~]# vim /etc/rsync.passwd
rsync_backup:123456

[root@backup ~]# chmod 600 /etc/rsync.passwd
[root@backup ~]# ll /etc/rsync.passwd
-rw------- 1 root root 20 Mar 27 10:44 /etc/rsync.passwd


#3)创建用户的上传数据的目录/backup 并且属主属组为www
[root@backup ~]# mkdir /backup
[root@backup ~]# ll -d /backup
drwxr-xr-x 2 root root 6 Mar 27 10:45 /backup
[root@backup ~]# ll /backup
total 0
[root@backup ~]# ll -d /backup
drwxr-xr-x 2 root root 6 Mar 27 10:45 /backup
[root@backup ~]# chown www.www /backup/
[root@backup ~]# ll -d /backup/
drwxr-xr-x 2 www www 6 Mar 27 10:45 /backup/



4.第四步: 启动服务rsync
[root@backup ~]# systemctl start rsyncd
加入开机自动运行
[root@backup ~]# systemctl enable rsyncd

# 查看端口是否启动
[root@backup ~]# netstat -tnulp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1273/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1407/master         
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      4494/rsync  

4.3.2.客户端使用

客户端使用: 
Push: rsync   [OPTION...] SRC...    [USER@]HOST       :: DEST
#上传: rsync     -avz     test.txt   [email protected] :: backup




#示例: 在31客户端上传/etc/hosts文件到backup模块下
[root@nfs ~]# rsync -avz /etc/hosts [email protected]::backup
Password: 
sending incremental file list
hosts

sent 159 bytes  received 43 bytes  57.71 bytes/sec
total size is 177  speedup is 0.88



Access via rsync daemon:  # 守护进程模式 C/S架构
  Pull:  rsync [OPTION...] [USER@]HOST      ::SRC...    [DEST]
  #下载: rsync  -avz       [email protected] ::模块名称  下载到本地的哪个目录
  

示例: 下载backup模块下的hosts到本地的/opt目录下 (在31NFS服务器上执行命令)
[root@nfs ~]# rsync -avz [email protected]::backup/hosts /opt/

注意: 如果只有模块则默认下载全部文件
[root@nfs opt]# rsync -avz rsync_backup@backup::backup .
Password: 
receiving incremental file list
./
hosts
test01/
test01/2.txt
test01/3.txt

5.rsync密码管理

#密码管理: 
客户端不需要每次输入密码,指定密码文件
第一种方案: 指定密码文件
第一步创建密码文件并且授权为600 
[root@nfs ~]# vim /etc/rsync.pass  #(密码文件名称可以自定义)
123456 
[root@nfs ~]# chmod 600 /etc/rsync.pass
[root@nfs ~]# ll /etc/rsync.pass
-rw------- 1 root root 7 Mar 27 11:28 /etc/rsync.pass

第二步: 执行命令指定密码文件
rsync -avz /etc/passwd rsync_backup@backup::backup --password-file=/etc/rsync.pass


第二种方案: 使用rsync内置变量
RSYNC_PASSWORD 在客户端输入密码时候rsync会先读取此变量,如果有则使用此密码,如果没有则提示用户输入密码

[root@nfs ~]# export RSYNC_PASSWORD=123456
[root@nfs ~]# rsync -avz /etc/passwd rsync_backup@backup::backup
sending incremental file list


写入脚本:
vim test.sh
export RSYNC_PASSWORD=123456
rsync -avz /etc/passwd rsync_backup@backup::backup

[root@nfs ~]# cat test.sh
export RSYNC_PASSWORD=123456
rsync -avz /etc/passwd rsync_backup@backup::backup

标签:rsync,test01,root,---,etc,Linux,txt,backup
From: https://www.cnblogs.com/liuzhonghua1/p/18027941

相关文章

  • 多线程系列(六) -等待和通知模型详解
    一、简介在之前的线程系列文章中,我们介绍了synchronized和volatile关键字,使用它能解决线程同步的问题,但是它们无法解决线程之间协调和通信的问题。举个简单的例子,比如线程A负责将int型变量i值累加操作到10000,然后通知线程B负责把结果打印出来。这个怎么实现呢?其中一个......
  • 2、remi--ButtonLay.py
    上一篇末尾测试了一个用例,使用了四个组件:一个主容器和三个那啥;那么从这篇开始就尽量按照官方文档的顺序来进行测试了。 先看:remi.gui.BODY源码,此处链接中的代码与下面所示实际安装好的库中源码的单词个别有所区别,但不影响观看>,>remi.gui.BODY()源码classBODY(Container):......
  • 洛谷题单指南-贪心-P3817 小A的糖果
    原题链接:https://www.luogu.com.cn/problem/P3817题意分析:吃最少的糖果,保证相邻糖果数之和不大于x,需要某种贪心策略。解题思路:依次遍历相邻两盒糖果如果糖果数之和大于x,必须要吃点一部分,使得糖果数之和刚好等于x贪心策略是:优先吃后一盒糖果,因为这样可以更利于后续的判断成立......
  • linux特殊命令使用方法
    tail-5f  a.log   //实时查看a.log这个文件的内容sudofirewall-cmd--permanent--direct--add-ruleipv4filterOUTPUT0-ptcp--dport5353-d118.118.118.118-jDRO  //添加防火墙策略  系统性能监控lsof-i-P-n|grep-E"(:443|:80|:514)"  ......
  • Go - Data races vs. race conditions
         ......
  • vue3+elment-plus项目,el-diglog的按钮,内部是el-form的子组件,那么保存时,如何触发子组件
    问题:el-diglog的按钮,如何触发内部的form表单提交el-dialog是父组件,cengji是子组件代码如下:<el-dialogv-model="dialogVisible"title="层级结构管理"width="1000"><cengji:tableId="tableId"/><template#footer>......
  • Codeforces 1876F - Indefinite Clownfish
    首先注意到这样一个性质:既然两个序列的平均值相同,并且又形成公差\(\pm1\)的等差数列,就必然会存在一个元素\(x\)满足\(x\)在两个序列中都出现过(否则两个序列的值域区间不交,值域区间靠后的那个显然平均值比靠前的那个大)。那么我们枚举\(x\)在两个序列中出现的位置\(p\)和......
  • 记录一个Mono Runtime与Mono Debugger-Agent的兼容性问题
      在mono集成到C++应用程序中时,可以通过一些参数来配置mono启动时暂停,并在调试器链接上来后再继续运行。这对于调试一些启动时机非常早的代码会非常有用。这通过给mono_jit_parse_options传递参数embedding和suspend来实现。staticvoidprint_usage(void){PRINT_ERR......
  • Docker Swarm部署nginx+api-service实现负载均衡
    背景介绍api服务开发完毕之后如何快速部署实现负载均衡。如果不是重量级的项目,非常建议使用DockerSwarm来实现,非常简单高效且稳定。关于DockerSwarm集群的构建详见我的另一篇博客:DockerSwarm集群搭建相关文件准备(这里以一个ocr服务为例)docker-compose.ymlversion:'......
  • Linux文本处理三剑客---grep
    1.什么是grep和egrep示例grep[options]pattern[file...]其中,pattern表示要搜索的模式,可以是简单的文本字符串,也可以是正则表达式。file指定要在其中进行搜索的文件,如果省略file,则默认从标准输入中读取数据。egrep其实就是grep的一个变种,它支持更多的正则表达式语法。egre......