跨主机传递文件

rz、sz
ftp
scp
rsync
nfs
samba
drdb
rsync的作用

实现文件的备份

  • 备份位置可以是当前主机,也可以是远程主机
  • 备份过程可以是完全备份,也可以是增量备份
rsync的功能

1)类似于cp的复制功能

将本地主机的一个文件复制到另一个位置下

2)将本地主机的文件推送到远程主机;也可以从远程主机拉取文件到本地

rsync的模式

1.本地复制功能

2.远程shell模式: 可以利用ssh来是实现数据的加密传输到远程主机

3.服务器模式:rsync工作在守护进程模式下

4.列表模式: ls

注意:确保各个主机的时间一致

实现文件的时时同步

1.rsync+inotify

2.rsync+sersync

rsync:只负责传递文件到远程主机

inotify/sersync:将发生了改变的文件找出来

rsync的优点

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

2)可以很容易做到保持原来文件的权限、时间、软硬连接等。

3)无需特殊权限即可安装。

4)拥有优化的流程和比较高的文件传输效率。

5)可以使用shell(rsh、ssh)方式来传输文件。

6)支持匿名运行。

7)与scp相比,rsync传输速度绝对远远超过scp的传输速度。

rsync的认证方式

rsync有两种常用的认证方式,一种是rsync-daemon方式,另外一种是ssh方式

在平时使用过程,我们使用最多的是rsync-daemon方式

rsync认证(rsync-daemon)

rsync在rsync-daemon认证方式下,默认监听TCP的873端口。

rsync-daemon认证方式是rsync的主要认证方式,这个也是我们经常使用的认证方式

并且也只有在此种模式下,rsync才可以把密码写入到一个文件中。

注意:rsync-daemon认证方式,需要服务器和客户端都安装rsync服务,并且只需要rsync服务器端启动rsync,同时配置rsync配置文件。客户端启动不启动rsync服务,都不影响同步的正常进行

ssh认证

rsync在ssh认证方式下,可通过系统用户进行认证,即在rsync上通过ssh隧道进行传输,类似于scp工具

此时同步操作不在局限于rsync中定义的同步文件夹

不需要用873端口进行传输

注意:ssh认证方式,不需要服务器和客户端配置rsync配置文件,只需要双方都安装rsync服务,并且也不需要双方启动rsync

#若rsync服务端SSH为标准端口(22),此时rsync使用方式如下:
#rsync 不需要启动,但需要安装

rsync -avz /root/test root@192.168.199.248:/root/

#rsync 为非标准端口
rsync -avz /root/test -e 'ssh -p1234' root@192.168.199.248:/root/
rsync命令
rsync [OPTION]… SRC DEST

选项:(avz常用)

-p:复制文件过程中,保持文件的属性不变

-v:显示复制过程信息

-a:使用归档模式传输文件,并保持所有文件的属性不变(-rlptgoD,不包括(no -H,-A,-X))

-r:递归复制(传递目录)

-l:保留软连接

-p:保留文件权限(-a)

-z:在传输过程中,以压缩方式进行传输

-u:–update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文 件,不覆盖DEST已经更新的文件

[-P]–partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输(断点续传)

--delete: 删除那些DST中SRC没有的文件

--exclude:在进行文件传送的时候,排除指定的文件,--exclude=file;--exclude={file1,file2}

-n:干跑测试

-e “ssh [-p22]”:指定所使用的传输通道在(需要加"")

模式1:local

格式:rsync [OPTION…] SRC… [DEST]

模式2:Access via remote shell:

格式:

拉取:Pull: rsync [OPTION…] [USER@]HOST:SRC… [DEST]

推送:Push: rsync [OPTION…] SRC… [USER@]HOST:DEST

说明:

在传递文件的时候,会首先对比源和目的下的文件的特征码,只有当特征码不同的时,才会进行传递

重点说明:

工作中通常都是用rsync+ssh密钥认证方式,目的是为了用免密码登录

模式3:daemon
rsync配置
服务端配置

第一步:配置backup上的rsync,让其工作在守护进程模式(配置服务器端)

1)修改配置文件(默认不存在)

# touch /etc/rsyncd.conf

内容如下(一个以trure/false或者yes/no表示的布尔值)

#全局值
uid = rsync #指定rsync进程以什么用户身份在后台运行(必须是系统用户)
gid = rsync
use chroot = no #是否将用户锁定在家目录中
max connections = 100
timeout = 100
pid file = /var/lock/rsync.pid #指定rsync进程的pid文件的路径和名称
lock file = /var/lock/rsync.lock
log file = /var/log/rsync.log

[mod1]
path = /rsync/web1 #备份目录位置
read only = false
hosts allow = 10.0.0.0/8  #服务器端地址或可访问该模块的地址
auth users = vuser1 #用户跟系统用户没有任何关系
secrets file = /rsync/rsync.passwd
list = false

[mod2]
path = /rsync/web2
read only = false
hosts allow = 10.0.0.0/8
auth users = vuser2
secrets file = /rsync/rsync.passwd
list = false

allow跟deny:

补充:
两个参数都没有的时候,那么所有用户都可以任意访问
只有allow,那么仅仅允许白名单中的用户可以访问模块
只有deny,那么仅仅黑名单中的用户禁止访问模块
两个参数都存在,后优先检查白名单
如果匹配成功,则允许访问
如果匹配失败,就去检查黑名单,如果匹配成功则禁止访问
如果都没有匹配成功,则允许访问

2)创建目录

# mkdir -pv /rsync/web{1,2}

# chmow rsync.rsync /rsync/web{1,2}

3)创建运行rsync的系统用户

# groupadd -r rsync

# useradd -r -s /sbin/nologin -g rsync rsync

4)启动rsync

# rsync --daemon

补充:

rsync默认配置文件/etc/rsyncd.conf

如果想使用其他位置配置文件,可以–config=/path/to/confFile

5)检查rsync的端口(默认是873)

# ss -ntl | grep 873

6)创建虚拟用户文件,以及相关的虚拟用户

# cd /rsync/

# touch rsync.passwd

# chmod 600 rsync.passwd   <<< **该文件的权限必须是600**

# vim rsync.passwd

vuser1:123

vuser2:123

补充:

虚拟用户就是这个文件中的记录

一个用户占一行,冒号前是用户明;冒号后是用户的密码

客户端配置

1)创建密码文件(权限要求为600)

# echo "123" > /etc/rsync.passwd

#chmod 600 /etc/rsync.passwd

2)使用rsync来传递数据到服务器的端模块mod1中

使用格式

rsync [options] [user@]host::moduleName /path/

rsync [options] /path/ [user@]host::moduleName 

# rsync -avz /home/ vuser1@10.0.0.41::mod1 --password-file=/etc/rsync.passwd

说明:

--password-file= 系统可以自动从该位置下指定的文件中读取密码

总结

服务器端的配置

  1. 创建配置文件
  2. 创建密码文件,修改权限为600
  3. 创建系统用户
  4. 创建模块对应的目录,修改目录的属主属组为系统用户
  5. 启动daemon模式

客户端的配置

1. 创建虚拟用户的密码文件,权限为600
	2. 向模块传递文件或者从目录拉取文件

其他:

1.关闭防火墙,selinux
2. 时间是否同步