Centos6.5部署Rsyslog+cron+rsync备份服务器

1、前言

  rsync是一种快速且功能非常广泛的文件复制工具。它可以在本地复制,通过任何远程shell复制到/从另一个主机复制,也可以复制到/从远程rsync守护进程。它提供了大量的选项,可以控制其行为的各个方面,并允许非常灵活地指定文件集进行复制。它以其增量传输算法而闻名,它减少了通过网络发送的数据量。rsync仅发送源文件与目的地中现有文件之间的差异。rsync广泛用于备份和镜像,并作为改进的复制命令用于日常使用。

  rsync查找需要使用“快速检查”算法(默认情况下)传输的文件,该算法查找在大小或上次修改时间内更改的文件。在快速检查表明不需要更新该文件的数据时,直接对目标文件执行By选项。

  rsync的一些附加功能是:

  • 支持复制链接、设备、所有者、组以及权限
  • 排除和排除类似于gnu tar的选项
  • cvs排除模式可以忽略CVS将忽略的相同文件
  • 可以使用任何透明的远程外壳包括ssh,或者rsh
  • 不需要文件传输的超级用户特权
  • 管路式的文件传输,以尽量减少延迟成本。
  • 支持匿名或经过身份验证的rsync守护进程(非常适合镜像)。

生产中,任何一台服务都不允许存在单点,此处我们生产中选择rsync作为备份方式。提到rsync就不得不提到inotify和sersync(二者都是监控数据变化的工具)。不过本文主要使用到的是rsync。

2、rsync介绍

[rsync实现网站的备份,文件的同步,不同系统的文件的同步,如果是windows的话,需要windows版本cwrsync]

优点:增量备份同步,支持socket(daemon),集中备份

缺点:大量小文件同步时比对时间较长,有时进程会停止。

      解决:打包同步;使用DRBD(使用block方式同步文件系统)

   同步大文件有时也会有问题,有时也会中断,未完整同步前是隐藏文件,同步完成后为正常文件

 说明:

Linux 文件双向实时同步有很多种解决办法:现介绍两种

rsync + inotify

rsync + sersync

2.1、Linux下rsync+sersync(或inotify)实现数据实时同步

一、为什么要用Rsync+sersync架构?

1、sersync是基于Inotify开发的,类似于Inotify-tools的工具

2、sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的这个文件或者这个目录。

二、Rsync+Inotify-tools与Rsync+sersync这两种架构的区别

1、Rsync+Inotify-tools【只知道变化,不知道是谁变了】

(1):Inotify-tools只能记录下被监听的目录发生了变化(包括增加、删除、修改),并没有把具体是哪个文件或者哪个目录发生了变化记录下来;

(2):rsync在同步的时候,根据inotify给出的结果,并不知道具体是哪个文件或者哪个目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此,效率很低。

2、Rsync+sersync【既知道变化又知道谁变了】

(1):sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或某一个目录的名字;

(2):rsync在同步的时候,根据sersync给出的结果,只同步发生变化的这个文件或者这个目录(每次发生变化的数据相对整个同步目录数据来说是很小的,rsync在遍历查找比对文件时,速度很快),因此,效率很高。

小结:当同步的目录数据量不大时,建议使用Rsync+Inotify-tools;当数据量很大(几百G甚至1T以上)、文件很多时,建议使用Rsync+sersync。

2.2、rsync的多种工作模式

rsync 客户端

       第一种模式:local

# rsync -avz /etc/hosts  /tmp =====cp

# rsync -avz --delete /null/  /tmp====rm (保持一致)

这次我们引入一个--delete 选项,表示客户端上的数据要与服务器端完全一致,如果 linuxsirhome目录中有服务器上不存在的文件,则删除。最终目的是让linuxsirhome目录上的数据完全与服务器上保持一致;

       第二种模式:remote shell(远程的shell) 【-e  指定通道】

push: [root@server tmp]# rsync -avzP -e 'ssh -p 52113' /tmp/ root@192.168.233.135:/tmp/  
(tmp后有/的话就不包含tmp本目录,要是没有的话,就连同tmp一起推过去。下同) pull:[root@server tmp]# rsync -avzP -e 'ssh -p 52113' root@192.168.233.135:/tmp/ /tmp/

  第三种模式:daemon模式(类似起一种服务)

       本文采用此种模式。

2.3、rsync客户端命令常用参数

man rsync

https://www.samba.org/ftp/rsync/rsync.html

3、用rsync-daemon模式备份rsyslog日志文件

环境:centos6.5

3.1、服务端

编辑配置文件

[root@pstation ~]# touch /etc/rsyncd.conf
[root@pstation ~]# vim /etc/rsyncd.conf
#Rsync Server #created by zhang 2016-09-30 ##rsyncd.conf start## uid = rsync#联系nfs的nfsnobody gid = rsync user 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.233.0/24 hosts deny = 0.0.0.0/32 #不拒绝任何 auth users = rsync_backup #一个虚拟的用户 secrets file = /etc/rsync.password #存放账户密码的文件 ############################## [backup] #模块1 comment = backup server by zhang 14:18 2012-1-13#注释 path = /backup #Rsync 建立多目录模块的方法 ##只要把服务端配置文件里目录和路径复制出来增加在这里就可以了(记得新建的目录要chown rsync.rsync授权一下),如果还要达到不同目录对应不同密码就要写在模块里,因为写在模块前的password文件的为全局密码 [backup-1] #模块2 comment = backup server by zhang 14:18 2012-1-13#注释 path = /backup-1
 

创建rsync用户,建立共享目录/backup

[root@pstation ~]# useradd rsync -s /sbin/nologin -M
[root@pstation ~]# id rsync
uid=501(rsync) gid=501(rsync) groups=501(rsync)
[root@pstation ~]# mkdir /backup
[root@pstation ~]# chown -R rsync /backup 

创建密码文件,并更改权限

[root@pstation ~]# echo "rsync_backup:zhang">/etc/rsync.password
[root@pstation ~]# cat /etc/rsync
rsync.password  rsyncd.conf     
[root@pstation ~]# cat /etc/rsync.password 
rsync_backup:@dmin.coM890
[root@pstation ~]# chmod 600 /etc/rsync.password 
[root@pstation ~]# 

启动

[root@pstation ~]# rsync --daemon
[root@pstation ~]# netstat -lntup | grep rsync 
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      22243/rsync         
tcp        0      0 :::873                      :::*                        LISTEN      22243/rsync  

加入开机自启

[root@pstation ~]# echo "rsync --daemon">>/etc/rc.local 
[root@pstation ~]# cat /etc/rc.local 

至此,服务端rsync配好。

记得打开防火墙

# vim /etc/sysconfig/iptables

-A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT

 

3.2、客户端

共2个动作

       a、创建密码文件

    echo "zhang">/etc/rsync.password

    chmod 600 /etc/rsync.password

       b、发送文件去备份

              push :              rsync –avz /tmp/ rsync_backup@192.168.233.138::backup  --password-file=/etc/rsync.password

注:backup对应服务端配置文件中的模块 [backup],加密码文件是说你服务器要是要密码就来我这个密码文件来读

3.3、问题解决

关于这个auth失败的问题,有以下可能的情况:

1、密码输入错误:

请再次确认你登录用户的密码无误

2、secrets file格式错误:

secrets file的文件格式是  upload:123456

表示upload用户的rsync密码是123456

3、配置文件写错:

最坑爹的一个,看看自己模块配置下面的auth users、secrets file有没写错

4、secrets file权限问题

服务端的secrets file权限必须是600,

可以使用chmod 600 /home/user/test/rsync/etc/test.pass

5、secrets file文件拥有者与rsync运行者

服务端rsync服务是以什么用户运行,则必须保证secrets file文件拥有者必须是同一个

假设root运行rsync --daemon,则secrets file的owner也必须是root

6、如果是以--password-file=file的方式附带密码

确保客户端密码文件格式无误,与服务端的密码文件不同,

客户端的不用加上用户名,即直接是  123456

7、可以尝试使用本地存在的用户名作为auth users

这个是在网上看到的,没实践过,不过如果都没办法,可尝试一下,

密码不要跟本地用户的系统密码一样就行了。

-----------------------------

最后如果还搞不清是什么问题,可以尝试从下面的思路去摸索:

1、在rsync模块的配置文件里,把strict modes设置为no,禁用文件mode检验

2、ssh、telnet登录rsync服务端,查看服务器端的rsync日志,这个通常会比客户端的信息多

3.4、结合rsync和定时任务实现数据定时备份

 

[root@log log]# tar -zcf province_$(date +%F).tar.gz province/*      
[root@log log]# ll
[root@log log]# cp *_$(date +%F).tar.gz /backup/

[root@log backup]# ll
total 1040
-rw-r--r--. 1 root root 323650 May  8 13:04 province_2018-05-08.tar.gz

[root@log backup]# rsync -avz /backup/ rsync_backup@10.225.11.206::backup --password-file=/etc/rsync.password

[root@pstation backup]# ll
total 1040
-rw-r--r--. 1 rsync rsync 323650 May  8 13:04 province_2018-05-08.tar.gz

 

3.5、脚本

先备份

#!/bin/sh
Path="/var/log"

tar -zcf $Path/province_$(date +%F).tar.gz $Path/province/*

cp $Path/*_$(date +%F).tar.gz /backup/
rsync -avz /backup/ rsync_backup@192.168.233.206::backup --password-file=/etc/rsync.password

客户端保存7天

#del tar&backup file
find /backup -type f -name "*.tar.gz" -mtime 7|xargs rm -f
find $Path/ -type f -name "*.tar.gz" -mtime 1|xargs rm -f

#del source file
find $Path/province/ -type f -name "SDXS-HXJF*" -mtime 1|xargs rm -f

大家在使用find命令中的mtime参数时候,会看到官方的解释如下:

 -mtime n

              File's data was last modified n*24 hours ago.  See the comments for -atime to understand how rounding affects  the

              interpretation of file modification times. 

但是在各种参考的使用方式中有用+号,-号,不带符号的用法,那么这里又有什么区别呢?
 

注意这里的n,如果n为带有+号的值,意思为删除n天前所有的文件。

  比如n=+1且今天是15号,那么删除14号以前的数据,不包括14号,如果是负号(n=-1)则为删除一天内的文件

  比如今天15号,那么删除15号的数据,如果是(n=-2)则代表删除一天前到今天的所有数据,比如今天15号,那么从14号开始删除。

如果不带有符号,那么则删除指定前n天中这一天的数据

  比如(n=1)且今天是15号,则删除14号这一天所有数据。 

注意这里的一天是指当前系统时间算起的,也就是说这里的一天其实就是24小时。

  如:

[root@pstation province]# ll
total 1008
-rw-------. 1 root root   3520 May  9 15:14 HXJF-NE40EX8-01_log.2018-05-09
-rw-------. 1 root root 893147 May  8 16:54 HXJF-NE40EX8-02_log.2018-05-08
[root@pstation province]# date
Wed May  9 16:54:29 CST 2018
[root@pstation province]# find  . -type f -name "HXJF*" -mtime 1|xargs rm -f
[root@pstation province]# ll  
total 132
-rw-------. 1 root root   3520 May  9 15:14 HXJF-NE40EX8-01_log.2018-05-09

服务端保存6个月

[root@pstation scripts]# cat delte_log.sh
#!/bin/sh
/bin/find /backup -type f -name "*.tar.gz" -mtime 180|xargs rm -f

3.6、定时任务

客户端

每天零点备份,两点删除前一天的。

[root@log scripts]# crontab -l
*/10 * * * * /usr/sbin/ntpdate pool.ntp.org >/dev/null 2>&1
00 00 * * * /bin/sh /server/scripts/beifen.sh &>/dev/null
00 2 * * * /bin/sh /server/scripts/delte_log.sh &>/dev/null

服务端

[root@pstation backup]# crontab -l
#*/10 * * * * /usr/sbin/ntpdate pool.ntp.org >/dev/null 2>&1
00 00 * * * /bin/sh /server/scripts/del.sh &>/dev/null

 

posted @ 2018-05-08 16:33  Cmelo  阅读(478)  评论(0编辑  收藏  举报