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 --
##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备份服务器的更多相关文章
- Centos6.5部署Rsyslog+LogAnalyzer收集网络及系统日志
1. 介绍 Rsyslog是比syslog功能更强大的日志记录系统,可以将日志输出到文件,数据库和其它程序.可以使用rsyslog替换系统自带的syslog. LogAnalyzer 是一个 sysl ...
- Centos6.5部署Rsyslog+LogAnalyzer中文乱码解决
中文乱码 [root@log include]# pwd /zhang/app/loganalyzer-/src/include [root@log include]# vim functions_c ...
- 全网数据定时备份方案[cron + rsync]
1.1.1. Rsync(远程同步)介绍 [Rsync等价scp cp rm共3个命令的和] 1.什么是Rsync: Linux下面开源的,很快,功能很多,可以实现全量及增量的本地或者远程数据同步 ...
- Linux下如何使用Rsync备份服务器重要数据
Rsync介绍: Rsync英文全称Remote synchronization,从软件的名称就可以看出来,Rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像,远程备份的功能,这个功能类似 ...
- centos6 Cacti部署文档
centos6 Cacti部署文档 1.安装依赖 yum -y install mysql mysql-server mysql-devel httpd php php-pdo php-snmp ph ...
- CentOS6.6部署OpenStack Havana(Nova-Network版)
CentOS6.4部署OpenStack Havana(Nova-Network版) 一 基本设备介绍 测试环境 CentOS6.4 x64 OpenStack 服务 介绍 计算 (Compute) ...
- Linux 自动化部署Rsyslog服务
Linux 自动化部署Rsyslog服务 源码如下: #/bin/bash #该脚本用于自动化部署Ryslog服务配置 #作者:雨中落叶 #博客:https://www.cnblogs.com/yuz ...
- [svc]centos6上部署openvpn+gg二步认证
最近又发现个新的vpn: wireguard 为了满足员工在家办公的需求.需要 openvpn+gg方案 在centos6上部署openvpn 参考 1.安装前准备 wget -O /etc/yum. ...
- 搭建企业级全网数据定时备份方案[cron + rsync]
1.1.1. 服务端的配置[192.168.25.141] Rsync的端口是:873 man rsyncd.conf 查看帮助 Rsync是Redhat默认自带的,这里只是做了rsync服务器端的后 ...
随机推荐
- 【python】多进程共享变量
有一个字典变量,需要在多个进程间共享 使用Manager, 下面是一个小例子. 注意使用json前需要将类型转换. #!/usr/bin/python # coding=utf-8 import js ...
- VGG-Net
论文下载 源码GitHub 目的 这篇文章是以比赛为目的——解决ImageNet中的1000类图像分类和定位问题.在此过程中,作者做了六组实验,对应6个不同的网络模型,这六个网络深度逐渐递增的同时,也 ...
- HTML 转义字符对应表
<%@ tag language="java" pageEncoding="UTF-8" %> <%@ attribute name=&quo ...
- laravel 5 优化
性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践,还有调优技巧,大家有别的建议也欢迎留言讨论. 这里是简单的列表: 配 ...
- vue项目中 axios 和Vue-axios的关系
文章收集于:https://segmentfault.com/q/1010000010812113 在vue项目中,会经常看到如下代码: 今天看到有些项目是这样写的,就有点看不懂了. ----解 ...
- pycharm提示This inspection detects instance attribute definition outside __init__ method
示例代码: class MiNiCarStore(CarStore): def createCar(self, typeName): self.carFactory = CarFactory() # ...
- Rsync 常见错误及解决方法
由于阿里云SLB不提供ECS间的数据同步服务,如果部署在SLB后端ECS上的应用服务是无状态的,那么可以通过独立的ECS或RDS服务来存储数据:如果部署在SLB后端ECS上的应用服务是有状态的,那么需 ...
- js cookie 工具
var CookieUtil = { get: function(name) { var cookieName = encodeURIComponent(name) + "=", ...
- Sqoop使用,mysql,hbase,hive等相互转换
Sqoop 是一款用来在不同数据存储软件之间进行数据传输的开源软件,它支持多种类型的数据储存软件. 安装 Sqoop 1.下载sqoop并加mysql驱动包 http://mirror.bit.edu ...
- Spring Cloud、Spring Boot与Docker 学习资料汇总
使用Spring Cloud与Docker实战微服务https://gitee.com/itmuch/spring-cloud-bookhttps://eacdy.gitbooks.io/spring ...