rsync定时同步配置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rsync定时同步配置相关的知识,希望对你有一定的参考价值。

title: rsync定时同步配置
tags: rsync,sync,同步,增量
grammar_cjkRuby: true

[TOC]

rsync定时同步配置

1. rsync简述:

rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。可以很容易做到保持原来文件的权限、时间、软硬链接等等。无须特殊权限即可安装。快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。

2. rsync语法

  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

rsync 在本地进行推送的话类似于cp命令,远程推送类似于scp,例如把本机的/etc/hosts文件推送到/tmp
rsync -avz /etc/hosts /tmp/
rsync -avz /etc/hosts [email protected]:/tmp/
--delete 目标目录内容与源目录内容保持一致,前面有的,后面可以有,前面没有的,后面的必须删除,如:
rsync -avz --delete /test/ /tmp

通过ssh加密通道推送文件有

[[email protected] ~]# rsync -avz -e ‘ssh -p 22‘ sersync2.5.4_64bit_binary_stable_final.tar.gz [email protected]:/tmp/
[email protected]‘s password: 
sending incremental file list

sent 70 bytes  received 12 bytes  32.80 bytes/sec
total size is 727290  speedup is 8869.39

通过ssh加密通道拉取文件

[[email protected] ~]# rsync -avz -e ‘ssh -p 22‘ [email protected]:/tmp/sersync2.5.4_64bit_binary_stable_final.tar.gz /tmp/  
[email protected]‘s password: 
receiving incremental file list
sersync2.5.4_64bit_binary_stable_final.tar.gz

sent 30 bytes  received 727651 bytes  161706.89 bytes/sec
total size is 727290  speedup is 1.00
[[email protected] ~]# ls -l /tmp/ |grep ser*
-rw-r--r--. 1 root  root  727290 May 21  2018 sersync2.5.4_64bit_binary_stable_final.tar.gz

3. 参数详解

  1. -avz =vzrtopjDl ,基本上保持了原有文件的各项属性
  2. P :显示推送过程
  3. -e:使用信道协议
  4. --exclude=PATTERN:排除不需要同步的文件,可以用通配符匹配
  5. --exclude-from=file:把需要排除的文件写在文件列表中,通过这个参数可以排除这些列表上的文件

4. rsync 的daemon模式

平时如果不用daemon模式也可以随便的进行传输,但是需要输入密码,如果利用ssh key进行弄则系统可能不安全,不利于全网备份,因此最好的解决方案就是利用rsync的daemon模式来解决rsync推送需要密码的问题。

  1. 先查看rsync服务端和客户端的rsync版本,以及系统版本,内核版本,确认好环境问题
[[email protected] ~]# uname -r
2.6.32-696.23.1.el6.x86_64
[[email protected] ~]# uname -m
x86_64
[[email protected] ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[[email protected] ~]# rsync --version
rsync  version 3.0.6  protocol version 30
[[email protected] ~]# uname -r
2.6.32-696.23.1.el6.x86_64
[[email protected] ~]# uname -m
x86_64
[[email protected] ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[[email protected] ~]# rsync --version
rsync  version 3.0.6  protocol version 30
  1. rsync配置服务端的配置文件
    rsync的配置文件为/etc/rsyncd.conf,默认不存在需要自己手动创建。
touch /etc/rsyncd.conf
在该配置文件中添加如下内容:
# rsyncd-conf start 
uid = rsync
gid = rsync
use chroot = no
max connections = 2000
timeout = 600
pid file= /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore = errors
read only = false
list = false
hosts allow = 192.168.50.0/24
hosts deny = 0.0.0.0/32
auth users = rsync-backup
secrets file = /etc/rsync.password
#####################################
[backup]
comment = backup
path = /backup
  1. 依据配置文件创建备份目录,创建密码文件,创建rsync用户,并把备份目录的属主和属组赋给rsync,如:
[[email protected] ~]# useradd -g rsync -M -s /bin/nologin rsync
[[email protected] ~]# grep "rsync" /etc/passwd
rsync:x:506:506::/home/rsync:/sbin/nologin
[[email protected] ~]# mkdir /backup
[[email protected] /]# chown -R rsync.rsync /backup
[[email protected] data]# echo "rsync-backup:root" >/etc/rsync.password
[[email protected] data]# chmod 600 /etc/rsync.password 
[[email protected] data]# ls -l /etc/rsync.password 
-rw-------. 1 root root 18 May 10 21:57 /etc/rsync.password
  1. 开启rsync服务,并确认服务已启动
 rsync --daemon
echo "rsync --daemon" >>/etc/rc.local
[[email protected] /]# netstat -lntup |grep rsync
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      1351/rsync          
tcp        0      0 :::873                      :::*                        LISTEN      1351/rsync          
[[email protected] /]# lsof -i :873
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   1351 root    3u  IPv4  12638      0t0  TCP *:rsync (LISTEN)
rsync   1351 root    5u  IPv6  12639      0t0  TCP *:rsync (LISTEN)
[[email protected] /]# 
  1. 在客户端创建密码文件,以及创建rsync用户,如:
[[email protected] data]# echo "root" >>/etc/rsync.password
[[email protected] data]# chmod 600 /etc/rsync.password 
[[email protected] data]# ls -l /etc/rsync.password 
-rw-------. 1 root root 5 May 14 20:44 /etc/rsync.password
  1. 从客户端推送文件过来测验:
[[email protected] data]# rsync -avzP /data/file [email protected]::backup/ --password-file=/etc/rsync.password 
sending incremental file list

sent 50 bytes  received 8 bytes  116.00 bytes/sec
total size is 6  speedup is 0.10

5. rsync如果无法推送的排错思路

  1. 查看rsyn服务配置文件路径是否正确,正确的路径为/etc/rsyncd.conf
  2. 查看配置文件里的host.allowyu与host.deny允许的ip网段是否是yunx允许客户端访问的网段或者ip
    3.查看配置文件里的path参数的路径qua权限是否zheng正确
    4.查看rsync服务是否正常启动
    5.查看iptables和selinux是否有锁阻止
    6.查看密码文件格式以及权限是否zheng正确,且客户端的密码文件的密码是否服务端的可以对应

6. rsync的注意事项:

  1. 无差异同步参数--delete :请确认考虑风险后再操作,如:
    rsync -avz --delete rsync:://[email protected]/backup /tmp/ --password-file=/etc/rsync.password
  2. rsync的缺点:如果有大量小文件同步的时候比对时间比较长,有时候rsync进程会停止,解决办法:打包同步
  3. 同步大文件有时候也会出现中断,未完成之前是隐藏文件,解决办法:使用增量备份同步,集中备份

7. 利用rsync进行全网定时备份

如果全网有很多机器,每个机器上都有很多各种各样的重要的配置文件,以及其他的重要的文件数据需要进行定时备份,我们可以用一台服务器安装rsync daemon ,这样其他机器都把重要的数据往备份服务器这里推送,进行全网备份,比如每天凌晨2点进行备份一次,解决方案可以利用脚本和cron进行定时备份。

  1. 先抓取机器的ip,这样可以把各个机器备份的内容按ip建文件夹进行保存,这样也容易区分
[[email protected] /]# ifconfig eth0 |awk -F ‘[ :]+‘ ‘NR==2 {print $4}‘
192.168.50.1
  1. 书写sync脚本,并将脚本分发到各个主机,假如同步每台机器的/etc/rc.local及/var/spool/cron/root如:
#!/bin/sh
dir="`ifconfig eth0 |awk -F ‘[ :]+‘ ‘NR==2 {print $4}‘`_$(date +%F)"
path=/backup
mkdir $path/$dir -p &&/bin/cp /var/spool/cron/root $path/$dir/cron_root_$(date +%F)/ &&/bin/cp /etc/rc.local $path/$dir/rc.local_$(date +%F)/ &&rsync -az $path [email protected]::backup/ --password-file=/etc/rsync.password
  1. 设置定时任务
    echo "0 2 * * * sh /service/scripts/bak.sh >/dev/null" >>/var/spool/cron/root

以上是关于rsync定时同步配置的主要内容,如果未能解决你的问题,请参考以下文章

rsync实现定时同步

rsync 定时同步

rsync定时加脚本实现本地到阿里的ftp文件同步

rsync+inotify文件同步

rsync定时同步备份

rsync定时同步文件