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

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

[root@pstation ~]# useradd rsync -s /sbin/nologin -M
[root@pstation ~]# id rsync
uid=(rsync) gid=(rsync) groups=(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 /etc/rsync.password
[root@pstation ~]#

启动

[root@pstation ~]# rsync --daemon
[root@pstation ~]# netstat -lntup | grep rsync
tcp 0.0.0.0: 0.0.0.0:* LISTEN /rsync
tcp ::: :::* LISTEN /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  -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 |xargs rm -f
find $Path/ -type f -name "*.tar.gz" -mtime |xargs rm -f #del source file
find $Path/province/ -type f -name "SDXS-HXJF*" -mtime |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
-rw-------. root root May : HXJF-NE40EX8-01_log.--
-rw-------. root root May :54 HXJF-NE40EX8-02_log.--
[root@pstation province]# date
Wed May :: CST
[root@pstation province]# find . -type f -name "HXJF*" -mtime |xargs rm -f
[root@pstation province]# ll
total
-rw-------. root root May : HXJF-NE40EX8-01_log.--

服务端保存6个月

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

3.6、定时任务

客户端

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

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

服务端

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

Centos6.5部署Rsyslog+cron+rsync备份服务器的更多相关文章

  1. Centos6.5部署Rsyslog+LogAnalyzer收集网络及系统日志

    1. 介绍 Rsyslog是比syslog功能更强大的日志记录系统,可以将日志输出到文件,数据库和其它程序.可以使用rsyslog替换系统自带的syslog. LogAnalyzer 是一个 sysl ...

  2. Centos6.5部署Rsyslog+LogAnalyzer中文乱码解决

    中文乱码 [root@log include]# pwd /zhang/app/loganalyzer-/src/include [root@log include]# vim functions_c ...

  3. 全网数据定时备份方案[cron + rsync]

    1.1.1. Rsync(远程同步)介绍 [Rsync等价scp  cp  rm共3个命令的和] 1.什么是Rsync: Linux下面开源的,很快,功能很多,可以实现全量及增量的本地或者远程数据同步 ...

  4. Linux下如何使用Rsync备份服务器重要数据

    Rsync介绍: Rsync英文全称Remote synchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像,远程备份的功能,这个功能类似 ...

  5. centos6 Cacti部署文档

    centos6 Cacti部署文档 1.安装依赖 yum -y install mysql mysql-server mysql-devel httpd php php-pdo php-snmp ph ...

  6. CentOS6.6部署OpenStack Havana(Nova-Network版)

    CentOS6.4部署OpenStack Havana(Nova-Network版) 一 基本设备介绍 测试环境 CentOS6.4 x64 OpenStack 服务 介绍 计算 (Compute) ...

  7. Linux 自动化部署Rsyslog服务

    Linux 自动化部署Rsyslog服务 源码如下: #/bin/bash #该脚本用于自动化部署Ryslog服务配置 #作者:雨中落叶 #博客:https://www.cnblogs.com/yuz ...

  8. [svc]centos6上部署openvpn+gg二步认证

    最近又发现个新的vpn: wireguard 为了满足员工在家办公的需求.需要 openvpn+gg方案 在centos6上部署openvpn 参考 1.安装前准备 wget -O /etc/yum. ...

  9. 搭建企业级全网数据定时备份方案[cron + rsync]

    1.1.1. 服务端的配置[192.168.25.141] Rsync的端口是:873 man rsyncd.conf 查看帮助 Rsync是Redhat默认自带的,这里只是做了rsync服务器端的后 ...

随机推荐

  1. Java基本语法(一)

    一.标识符 (1)标识符就是在编写程序时给类,变量,方法等起的名字 (2)标识符的命名规则:标识符由字母,数字,下划线和$组成;第一个字符不能是数字;不能与关键字重名 二.关键字 定义:也称保留字,是 ...

  2. linux 将自己的服务添加到系统service服务

    前言 我们在linux上要启动一个程序得时候, 往往都是要写一堆路径, 找到要启动得服务程序, 再用 ./*** 启动服务. 那么我们有没有快速启动方法吗, 答案是肯定得 service 介绍 官方介 ...

  3. Linux/Unix/Mac OS下的远程访问和文件共享方式

    scp -P 20022 src.tar.gz zhouhh@192.168.12.13:/home/zhouhhscp -P 20022 zhouhh@192.168.12.13:/home/zho ...

  4. docker日志清理

    前言:docker运行久了,会发现它的映射磁盘空间爆满,尤其是yum安装的docker的 解决方法: 1. 用脚本清理,一般yum安装的docker,其存储空间一般都在/var/lib/docker/ ...

  5. 出现xml错误的时候都是配置文件的名字没有改造成的

    The error may exist in com/bjpowernode/dao/PlayerDao.xml

  6. 牛客寒假算法基础集训营4 I题 Applese 的回文串

    链接:https://ac.nowcoder.com/acm/contest/330/I 来源:牛客网 自从 Applese 学会了字符串之后,精通各种字符串算法,比如--判断一个字符串是不是回文串. ...

  7. Mom and Dad

    Mom  Poodwaddle Life clock Dad Poodwaddlw Life clock Happiness is the meaning and the purpose of lif ...

  8. Stuck on "Authenticating with iTunes Store"

    https://forums.developer.apple.com/thread/76803 Try this, it fixed it for me. Open Terminal and run: ...

  9. PAT Basic 1065 单身狗

    单身狗(25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue "单身狗"是中文对于单身人士的 ...

  10. asp.net core 缓存和Session

    缓存 缓存在内存中 ASP.NET Core 使用 IMemoryCache内存中缓存是使用依赖关系注入从应用中引用的服务. 请在ConfigureServices中调用AddMemoryCache( ...