rsync 的工作原理和应用实例

rsync 2种登录认证协议

rsync 命令来同步系统文件之前要先登录remote 主机认证,认证过程中用到的协议有2种:ssh 协议和rsync协议

1. ssh 认证协议

  • rsync   server 端不用启动rsync的daemon进程,只要获取remote host的用户名和密码就可以直接 rsync 同步文件
  • rsync   server 端因为不用启动daemon进程,所以也不用配置文件 /etc/rsyncd.conf
  • ssh 认证协议跟scp 的原理是一样的,如果在同步过程中不需要收入密码就 用 ssh-keygen -t rsa  打通通道

这种方式默认是省略了 -e ssh 的,与下面等价:
rsync -avz /SRC -e ssh [email protected]:/DEST #-a 文件宿主变化,时间戳不变 -z:压缩数据传输

当遇到要修改端口的时候,我们可以:
rsync -avz /SRC -e "ssh -p36000" [email protected]:/DEST  #修改了ssh 协议的端口,默认是22

2. rsync 认证协议

  • rsync 认证协议,需要在rsync server端启动daemon进程,并设置对应的配置文件: /etc/rsyncd.conf 
  • rysnc 认证协议,如果不需要输入密码需要设置下面的配置:

cat /etc/rsync/rsync.secrets 
admin:pass-for-admin  #用户名:口令
mark:pass-for-mark

  • /etc/rsyncd.conf

log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
uid = root
gid = root
use chroot = no
secrets file = /etc/rsync.secrits
hosts allow = 192.168.0.0/16 
0/24
[modual] #定义的模块,在rsync的命令中不用写决定路径了
   path = /disk2/pub/club
   comment= club pub
   auth users = club
   timeout = 600
   read only = no
   list = no

rsync 2种协议用法:
rsync -av /SRC rsync://[email protected]:36000/modual/DestPath

注意:这条语句显示的指明了使用rsync认证协议,port后的modual是rsync服务端配置文件rsyncd.conf
里面配置的模块名,模块里面会包含一些用户名、密码、路径等认证信息。

rsync -av /SRC --port=36000 [email protected]::modual/DestPath

注意:这种写法不需显示指定 rsync 协议,而是根据 :: 来识别的,端口自己用 --port 指定。
而且这里 modual 前面没有 / 的。 

3.  scp rsync  同步文件时的maxconnections 最大连接数和timeout时间的配置

有时一个集群的很多机器会同时【同一时间的cron任务】从一台机器上面rsync 或者scp 数据;此时链接数占满了,

后面的机器会一直等待,如果timeout时间设置的比较小,会让一些机器连接失败从来获取数据失败;如果脚本中没有

retry 的容错,那此次同步数据文件的任务就失败了

  • ssh

vim /etc/ssh/sshd_config
UseDNS no
PidFile /var/run/sshd.pid
MaxStartups 10      #统一时间最大连接数是10个    #可以改成 1000

LoginGraceTime 1m   #ssh 登录机器的timeout   可以改成10m/600s 【如果用户不能成功登录,LoginGraceTime 之后就失败了】

  • rsync

如果rsync 用的ssh 协议认证,那配置跟ssh 登录的配置一样

如果rsync 用的rsync 协议认证,那注意下面的配置文件修改

/etc/rsyncd.conf

max connections = 2   

4. rsync 还可以设置宽带设置

rsync 同步大数据容易把宽带打满了,所以可以设置带宽


5. rsync 常用命令

rsync -e "ssh -l admin -o StrictHostKeyChecking=no -o ConnectTimeout=10 -o ConnectionAttempts=5 -o BatchMode=yes" -az --bwlimit 15360  srchost:/tmp/testdir /tmp/' #1. 免交互 2. 限速: --bwlimit 3. -e 选项   

你可能感兴趣的:(Linux运维)