rysnc详解以及rysnc后台服务配置

rysnc是linux系统下数据备份工具之一。字面理解就是remote sync(远程同步)。备份数据是多数系统管理员的必备日常工作。不仅仅要备份本地文件,还要对web服务器或者远端数据进行备份,这就需要我们熟练的掌握rysnc工具,rysnc不仅仅能对不同位置的文件和目录进行同步,还可以差异计算,压缩传输文件来最小化数据传输,和cp命令相比,rysnc的优势在于搞笑的差异算法。并且,rysnc还支持网络数据传输,在复制文件的同时,会把源端与目的端的文件进行比较,只有当文件不一样的时候在进行复制。

rsync格式:

我们可以通过“man rysnc”来查看rysnc 的命令格式。

(src为源,dest指目的地址)

[[email protected] ~]# man rsync
 
rsync(1)                         rsync(1)
 
NAME
       rsync — a fast, versatile, remote (and local) file-copying tool
 
SYNOPSIS
       Local:  rsync [OPTION...] SRC... [DEST]    
 
       Access via remote shell:
         Pull: rsync [OPTION...] [[email protected]]HOST:SRC... [DEST]
         Push: rsync [OPTION...] SRC... [[email protected]]HOST:DEST
 
       Access via rsync daemon:
         Pull: rsync [OPTION...] [[email protected]]HOST::SRC... [DEST]
             rsync [OPTION...] rsync://[[email protected]]HOST[:PORT]/SRC... [DEST]
         Push: rsync [OPTION...] SRC... [[email protected]]HOST::DEST
             rsync [OPTION...] SRC... rsync://[[email protected]]HOST[:PORT]/DEST
 
 Usages with just one SRC arg and no DEST arg will list the source files instead of copying.

可以看到rsync的命令格式,以下为rysnc命令格式的实例:

远程ip地址为192.168.124.129

pull把远程的数据拉到本机来。push是把本机的数据推送到远程去。

Access via remote shell
#rsync -av 192.168.124.129:/tmp/1.txt    /tmp/
#rsync -av /tmp/1.txt    192.168.124.129:/tmp/

不加username,默认为当前用户。

加上username的格式为:

#rsync -av [email protected]:/tmp/1.txt    /tmp/

Access via rsync daemon:

(alonglinux是模块名,在rsyncd.conf中定义的,[]里面的,就是模块名)
#rsync -av  192.168.124.129::alonglinux/123/1.txt   /tmp/ 
#rsync -av  /tmp/1.txt     192.168.124.129::alonglinux/123/

rsync的常用选项:

-a ,归档,以递归的模式传输文件,并保持所有属性,等同于-rlptgpD

-r ,--recursive,对子目录以递归模式处理,只针对目录,如果单独传一个文件不需要加-r,传输目录必须加-r选项。

-v, --verbose 可视化,详细模式输出,比如速率,文件数量等。
-u ,==--update 避免把目的机器的新数据覆盖掉
-q, --quiet 精简输出模式
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-R, --relative 使用相对路径信息

-P, --progress 可以看到文件传输的进度。
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,(不覆盖目的端的更新文件)
-l, --links 保留软链接,如果软连接在远程指定的文件不存在,那么软链接就是一个废文件。
-L, --copy-links 想对待常规文件一样处理软链结,如果是SRC中有软连接文件,则加上该选项后会把软连接指向的目标拷贝到DEST。

-z ,压缩传输。
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
--safe-links 忽略指向SRC路径目录树以外的链结
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式

--delete 删除目的端上存在,而源端不存在的文件,保证源端和目的端保持一致。

例:

rsync -av 111/  /tmp/322/

//把111目录以及目录下所有文件同步到tmp的322下。

111后不加/,只同步111目录。

diff可以对比两个文件的变化。#diff /tmp/1.txt /111/12.txt

# rsync -avL --delete 111/  /tmp/322/

//--delete 删除源端中没有的文件。

#rsync -avLu 111/ /tmp/322/

-u不删除和源文件中不一样的文件。

#rsync -avLu 111/ --exclude=“23” /tmp/322/

源文件中的23不会备份过去。可以通配--exclude=“*.txt”

首次连接会提示输入密码。

[[email protected] ~]# rsync -av 11111.txt 192.168.124.129:/tmp/
reverse mapping checking getaddrinfo for bogon [192.168.124.129] failed - POSSIBLE BREAK-IN ATTEMPT!
[email protected]‘s password: 
sending incremental file list
 
sent 46 bytes  received 12 bytes  1.51 bytes/sec
total size is 11  speedup is 0.19

rsync同步之ssh隧道方式:

telnet是探测远程机器的某一个端口是否开启。

telnet 192.168.124.129 22    //探测它的22端口是否打开。

指定ssh端口:
#rsync -avPz -e “ssh -p 10022” 192.168.11.190:/tmp/111

如果远程机器sshd端口并非是22,那么在rsync时如何指定端口?
#rsync -e "ssh -p xxx"
#rsync "--rsh=ssh -p xxx”

使用ssh方式同步时,如何避免让用户输入密码?使用密钥认证,在创建密钥时,不设置密钥密码。
实验环境:one:192.168.124.128      two:192.168.124.129

首先确认一下主机one上是否有这个文件/root/.ssh/id_rsa.pub(公钥文件)

如果没有就生成这个文件,步骤如下:

[[email protected]~]#ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key(/root/.ssh/id_rsa):
Enter passphrase(empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
Tey key fingerprint is:

生成密钥的过程中有一些交互过程,直接回车,处于安全问题应该输入密码的,但是我们的目的是为了自动化的同步数据,所以不输入密码。最后生成私钥(/root/.ssh/id_rsa)和公钥文件(/root/.ssh/id_rsa.pub)

[[email protected] ~]# cat /root/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAs3OQebENX/8/KMaBGC0txh7/YBwXplPLcF2+0YrsCIwIryWH3hcgi3rSbRPqxu+p2HUH7UcJ5+dbitDSn8h3p7zleJEj/RMCJACjLHocjqO5eKgSllY4TguwmmV04lAhBSvsfJgcJZ4CaIX3gNBE10ji9Ya/spY3ozQAutfktALsf0V2mhj8HWoH0YYW6FRHMGnST/M+tZclHMsMZCyzc/meLl4Csy/OQJaDtw8PsMbiJeUogT+skxUFm3TSdPksfqBrqAdVdwjhtP4XORIEAGbkCOZzx5jLEpRyFJ6WBbBs7y200qGIcIrE4y+jcQ1HsLT4yvwLxqmJ6ugR/SzwpQ== [email protected]

two主机把one上的id_rsa.pub 内容复制到.ssh/authorzied_keys文件里。

然后修改权限为600

[[email protected] ~]# chmod 600 /root/.ssh/authorized_keys

然后再one上登陆two:

[[email protected] ~]# ssh 192.168.124.129
Last login: Sat Mar 19 23:53:49 2016 from 192.168.124.128
[[email protected] ~]#

登陆已经不需要密码了,rysnc文件传输也不需要输入密码。

我们来试验一下rysnc

[[email protected] ~]# rsync -av 11111.txt 192.168.124.129:/var/
sending incremental file list
11111.txt -> /root/1.txt
 
sent 49 bytes  received 15 bytes  128.00 bytes/sec
total size is 11  speedup is 0.17

rsync后台服务方式:

daemon

如何去配置一太rsync服务器:

配置文件 vim /etc/rsyncd.conf 其实名字可以自定义,自定义配置文件,启动的时候需要指定,需要让系统找到它,默认的就不需要指定,

vim /etc/rsyncd.conf

port=873
log file = /var/log/rsync.log
pid file=/var/run/rsync.pid 
address=192.168.124.129   //监听的ip 默认不写就监听所有的ip
 
[along]           //模块名 ,关于具体模块的配置
path=/tmp/rsyncuse
chroot=yes           //yes或者no,ture或者false
max connections =4      // 最大连接数
read only=no         //推送的时候肯定需要写文件。
list=yes
uid=root
gid=root             //推送的文件肯定要有属组和属组
auth users=along        //用户
secretc file=/etc/rs.passwd   //用户密码文件
host allow=192.168.10.3     //允许那些机器连接

启动的命令 rsync --daemon

开机启动,把“rsync --deamon --config=/etc/rsyncd.conf”加入到/etc/rc.d/rc.local文件中。

更改了用户配置后不需要重启,是即时生效的。

rsync --port 8370 192.168.124.128::

//列出模块名。

密码文件格式:模块名:密码
#vim /etc/rs.passwd

along:123124

:wq

修改密码文件的权限

#chmod 400 /etc/rs.passwd

在客户端:

在同步的时候,指定密码文件,可以省去输入密码的步骤:

rsync -av --password-file=/etc/rs.passwd [email protected]::along/test1 /tmp/test

配置详解:

comment

给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户。默认没有描述定义。

path
指定该模块的供备份的目录树路径,该参数是必须指定的。
use chroot
如果"use chroot"指定为true,那么rsync在传输文件以前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要以roots权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true。
uid
该选项指定当该模块传输文件时守护进程应该具有的uid,配合gid选项使用可以确定哪些可以访问怎么样的文件权限,默认值是"nobody"。

gid
该选项指定当该模块传输文件时守护进程应该具有的gid。默认值为"nobody"。

max connections
指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。默认值是0,也就是没有限制。

list
该选项设定当客户请求可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为false,可以创建隐藏的模块。默认值是true。
rsync --port 8370 192.168.124.128::   //列出模块名。

read only
该选项设定是否允许客户上载文件。如果为true那么任何上载请求都会失败,如果为false并且服务器目录读写权限允许那么上载是允许的。默认值为true。

exclude
用来指定多个由空格隔开的多个文件或目录(相对路径),并将其添加到exclude列表中。这等同于在客户端命令中使用--exclude来指定模式,一个模块只能指定一个exclude选项。但是需要注意的一点是该选项有一定的安全性问题,客户很有可能绕过exclude列表,如果希望确保特定的文件不能被访问,那就最好结合uid/gid选项一起使用。

exclude from
指定一个包含exclude模式的定义的文件名,服务器从该文件中读取exclude列表定义。

include
用来指定不排除符合要求的文件或目录。这等同于在客户端命令中使用--include来指定模式,结合include和exclude可以定义复杂的exclude/include规则。

include from
指定一个包含include模式的定义的文件名,服务器从该文件中读取include列表定义。

auth users
该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。如果"auth users"被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份这里使用的challenge/response认证协议。用户的名和密码以明文方式存放在"secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)。

secrets file
该选项指定一个包含定义用户名:密码对的文件。只有在"auth users"被定义时,该文件才有作用。文件每行包含一个username:passwd对。一般来说密码最好不要超过8个字符。没有默认的secures file名,需要限式指定一个(例如:/etc/rsyncd.passwd)。注意:该文件的权限一定要是600,否则客户端将不能连接服务器。

strict modes
该选项指定是否监测密码文件的权限,如果该选项值为true那么密码文件只能被rsync服务器运行身份的用户访问,其他任何用户不可以访问该文件。默认值为true。

hosts allow
该选项指定哪些IP的客户允许连接该模块。客户模式定义可以是以下形式:
单个IP地址,例如:192.167.0.1
整个网段,例如:192.168.0.0/24,也可以是192.168.0.0/255.255.255.0
多个IP或网段需要用空格隔开,“*”则表示所有,默认是允许所有主机连接。

hosts deny
指定不允许连接rsync服务器的机器,可以使用hosts allow的定义方式来进行定义。默认是没有hosts deny定义。
ignore errors
指定rsyncd在判断是否运行传输时的删除操作时忽略server上的IO错误,一般来说rsync在出现IO错误时将将跳过--delete操作,以防止因为暂时的资源不足或其它IO错误导致的严重问题。

ignore nonreadable
指定rysnc服务器完全忽略那些用户没有访问权限的文件。这对于在需要备份的目录中有些文件是不应该被备份者得到的情况是有意义的。
lock file
指定支持max connections参数的锁文件,默认值是/var/run/rsyncd.lock。

时间: 2024-10-22 21:54:48

rysnc详解以及rysnc后台服务配置的相关文章

Kafka详解之二、如何配置Kafka集群

Kafka集群配置比较简单,为了更好的让大家理解,在这里要分别介绍下面三种配置 单节点:一个broker的集群 单节点:多个broker的集群 多节点:多broker集群 一.单节点单broker实例的配置 1.首先启动zookeeper服务 Kafka本身提供了启动zookeeper的脚本(在kafka/bin/目录下)和zookeeper配置文件(在kafka/config/目录下),首先进入Kafka的主目录(可通过 whereis kafka命令查找到): [[email protect

IOS开发之----详解在IOS后台执行

文一 我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后台运行一小段时间. 还有三种类型的可以运行在后以,1.音乐2.location 3.voip 文二 在IOS后台执行是本文要介绍的内容,大多数应用程序进入后台状态不久后转入暂停状态.在这种状态下,应用程序不执行任何代码,并有可能在任意时候从内存中删除.应用程序提供特定的服务,用户可以请求后台执行时间,以提供这些服务. 判断是否支持多线程 UIDevice* device = [UIDevice c

jQuery Mobile的默认配置项详解,jQuery Mobile的中文配置api,jQuery Mobile的配置说明,配置大全

学习jQuery Mobile也有一段时间了,越来越上手了,也越来越喜欢他了.我根本就没有理由拒绝他的好.这里我有分享一下我对它的配置项的使用说明一下. 看代码解释: $(document).live("pageinit",function(event){ $.mobile.loadingMessage = "正在加载数据,请稍候......"; $.mobile.pageLoadErrorMessage="很抱歉,系统好像再打小瞌睡......"

详解 Windows 下 Eclipse CDT 配置 C/C++ 编译环境

其实 windows 下,C.C++ IDE 也不少,但许多IDE的 UI 和用户体验基本都停留在上个世纪,除了 eclipse CDT 和 visual studio,但后者现在是个巨无霸,安装文件都 3 个多G,而且这货安装容易删除难,但 eclipse CDT 就不一样了,熟悉 java eclipse 的同学能快速适应~ 1.Eclipse及CDT的安装 到Eclipse的官方网站http://www.eclipse.org上下载Eclipse. 离线安装CDT.CDT的全称是C/C++

(转)web.config详解之在文件中配置网站默认页面

在<configuration></configuration>中添加下面的配置 <system.webServer>        <defaultDocument>            <files>                <clear />                <add value="index.aspx" />                <add value=&qu

详解Springboot中自定义SpringMVC配置

详解Springboot中自定义SpringMVC配置 WebMvcConfigurer接口 ? 这个接口可以自定义拦截器,例如跨域设置.类型转化器等等.可以说此接口为开发者提前想到了很多拦截层面的需求,方便开发者自由选择使用.由于Spring5.0废弃了WebMvcConfigurerAdapter,所以WebMvcConfigurer继承了WebMvcConfigurerAdapter大部分内容. WebMvcConfigurer接口中的方法 举例1:configurePathMatch配置

详解“FTP文件传输服务”安装配置实例

"FTP文件传输服务"安装配置实例 家住海边喜欢浪:zhang789.blog.51cto.com 目录 简介 ftp工作原理 常见的FTP服务 Vsftpd服务器的安装 Vsftpd.conf配置文件详解 配置FTP服务器实例 实例:配置匿名用户 实例:配置本地用户登录 实例:配置虚拟用户登录(MySQL认证) 实例:控制用户登录 实例:设置欢迎信息 分析vsftpd日志管理 FTP服务器配置与管理 简介 FTP 是File Transfer Protocol(文件传输协议)的英文简

详解NFS文件传输服务

简介 NFS(Network File System),NFS可以让客户端把服务器的共享目录,挂载到本机使用,就像使用本机分区一样,使用非常方便. RPC服务 RPC(远程调用)服务,NFS是被RPC服务管理的,所以必须安装RPC的主程序rpcbind. 关于端口 NFS端口:2049RPC端口:111NFS守护进程端口:为随机端口,但是能够实现访问,访问不好解决.而RPC端口是111(固定的),当客户端访问的时候,找的不是NFS,也不是NFS的守护进程,而是RPC,告知服务器端连接本机的NFS

ASP.NET Core微服务 on K8S(Jessetalk)(第一章:详解基本对象及服务发现)(持续更新)

课程链接:http://video.jessetalk.cn/course/explore 良心课程,大家一起来学习哈! 任务1:课程介绍 任务2:Labels and Selectors 所有资源对象(包括Pod, Service, Namespace, Volume)都可以打 Label,定义标签 Selectors:=, !=, in, not in, and 关系 Kubernetes Labels 和 Selectors #deploy.yaml apiVersion: apps/v1