rsync定时同步配置

rsyncLinux同步备份 -

  • rsync定时同步配置
  • 1. rsync简述:
  • 2. rsync语法
  • 3. 参数详解
  • 4. rsync 的daemon模式
  • 5. rsync如果无法推送的排错思路
  • 6. rsync的注意事项:
  • 7. 利用rsync进行全网定时备份

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...] [USER@]HOST:SRC... [DEST]
         Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

       Access via rsync daemon:
         Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
               rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
         Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
               rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

rsync 在本地进行推送的话类似于cp命令,远程推送类似于scp,例如把本机的/etc/hosts文件推送到/tmp

rsync -avz /etc/hosts /tmp/

rsync -avz /etc/hosts root@172.16.50.1:/tmp/

--delete 目标目录内容与源目录内容保持一致,前面有的,后面可以有,前面没有的,后面的必须删除,如:

rsync -avz --delete /test/ /tmp

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

[root@server ~]# rsync -avz -e 'ssh -p 22' sersync2.5.4_64bit_binary_stable_final.tar.gz root@192.168.50.4:/tmp/
root@192.168.50.4'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加密通道拉取文件

[root@server ~]# rsync -avz -e 'ssh -p 22' root@192.168.50.4:/tmp/sersync2.5.4_64bit_binary_stable_final.tar.gz /tmp/  
root@192.168.50.4'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
[root@server ~]# 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版本,以及系统版本,内核版本,确认好环境问题
[root@rsync-client ~]# uname -r
2.6.32-696.23.1.el6.x86_64
[root@rsync-client ~]# uname -m
x86_64
[root@rsync-client ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@rsync-client ~]# rsync --version
rsync  version 3.0.6  protocol version 30
[root@rsync-server ~]# uname -r
2.6.32-696.23.1.el6.x86_64
[root@rsync-server ~]# uname -m
x86_64
[root@rsync-server ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@rsync-server ~]# 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,如:
[root@rsync-server ~]# useradd -g rsync -M -s /bin/nologin rsync
[root@rsync-server ~]# grep "rsync" /etc/passwd
rsync:x:506:506::/home/rsync:/sbin/nologin
[root@rsync-server ~]# mkdir /backup
[root@rsync-server /]# chown -R rsync.rsync /backup
[root@rsync-server data]# echo "rsync-backup:root" >/etc/rsync.password
[root@rsync-server data]# chmod 600 /etc/rsync.password 
[root@rsync-server 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
[root@rsync-server /]# 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          
[root@rsync-server /]# 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)
[root@rsync-server /]#
  1. 在客户端创建密码文件,以及创建rsync用户,如:
[root@rsync-client data]# echo "root" >>/etc/rsync.password
[root@rsync-client data]# chmod 600 /etc/rsync.password 
[root@rsync-client data]# ls -l /etc/rsync.password 
-rw-------. 1 root root 5 May 14 20:44 /etc/rsync.password
  1. 从客户端推送文件过来测验:
[root@rsync-client data]# rsync -avzP /data/file rsync-backup@192.168.50.4::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:://rsync-backup@192.168.50.4/backup  /tmp/ --password-file=/etc/rsync.password
  1. rsync的缺点:如果有大量小文件同步的时候比对时间比较长,有时候rsync进程会停止,解决办法:打包同步
  2. 同步大文件有时候也会出现中断,未完成之前是隐藏文件,解决办法:使用增量备份同步,集中备份

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

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

  1. 先抓取机器的ip,这样可以把各个机器备份的内容按ip建文件夹进行保存,这样也容易区分
[root@rsync-client /]# ifconfig eth0 |awk -F '[ :]+' 'NR==2 {print $4}'
192.168.50.1
  1. 书写sync脚本,并将脚本分发到各个主机,假如同步每台机器的/etc/rc.local及/var/spool/cron/root如:
bash
#!/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 rsync-backup@192.168.50.4::backup/ --password-file=/etc/rsync.password
  1. 设置定时任务
echo "0 2 * * *  sh /service/scripts/bak.sh >/dev/null" >>/var/spool/cron/root