当前位置: 首页 > 编程日记 > 正文

【Rsync项目实战一】备份全网服务器数据

目录

  • 【Rsync项目实战】备份全网服务器数据
    • 【企业案例】
    • 1.1 环境部署
    • 1.2 开始部署backup服务器:Rsync服务端过程:
    • 1.3 开始部署nfs01服务器:Rsync客户端过程:

【Rsync项目实战】备份全网服务器数据

标签(空格分隔): Linux服务搭建-陈思齐

---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处,作者信息和本声明。否则将追究法律责任。http://www.cnblogs.com/chensiqiqi/



【企业案例】

某公司里有一台NFS服务器,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求你把数据在其他 机器上做一个周期性定时备份。要求如下:

每天晚上00点整在NFS服务器nfs01上打包备份网站程序目录等并通过rsync命令推送到备份服务器backup上备份保存(备份思路 可以是先在本地按IP地址+日期打包,然后再利用rsync推送到备份服务器上)。NFS存储服务器同Web服务器,实际工作中就是全部的服务器。

具体要求如下:

  • [x] NFS服务器nfs01和备份服务器backup的备份目录必须都为/backup
  • [x] 要备份的系统配置文件包括但不限于:
    • 定时任务服务的配置文件(/var/spool/cron/root)
    • 开机自启动的配置文件(/etc/rc.local)
    • 日常脚本的目录(/server/scripts)
    • 防火墙iptables的配置文件(/etc/sysconfig/iptables)
    • 自己思考下还有什么需要备份呢
  • [x] Web服务器站点目录假定为(/var/html/www)
  • [x] Web服务器A访问日志路径假定为(/app/logs)
  • [x] Web服务器保留打包后的7天的备份数据即可(本地留存不能多于7天,因为太多硬盘会满)
  • [x] 备份服务器上,保留每周一的所有数据副本,其它要保留6个月的数据副本
  • [x] 备份服务器上要按照备份数据服务器的内网IP为目录保存备份,备份的文件按照时间名字保存。
  • [x] 需要确保备份的数据尽量完整正确,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发送给系统管理员邮箱中。

1.1 环境部署

操作系统

[root@backup ~]# cat /etc/redhat-release 
CentOS release 6.8 (Final)

内核版本

[root@backup ~]# uname -r
2.6.32-642.el6.x86_64

主机网络参数设置:

主机名网卡eth0网卡eth1用途
backup10.0.0.41172.16.1.41rsync服务端
nfs0110.0.0.31172.16.1.31NFS存储服务器客户端
web0110.0.0.8/24172.16.1.8/24nginx web服务器

1.2 开始部署backup服务器:Rsync服务端过程:

1)确认软件是否安装:

[root@backup ~]# rpm -qa rsync
rsync-3.0.6-12.el6.x86_64

2)配置rsyncd.conf配置文件

#rsync_config____start
#created by chensiqi 22:00 2017-3-6
#blog:http://www.cnblogs.com/chensiqiqi/
##rsyncd.conf start##

# 用户
uid = rsync
#
gid = rsync
# 程序安全设置
use chroot = no
# 客户端连接数
max connections = 200
# 超时时间
timeout = 300
# 进程号文件位置
pid file = /var/run/rsyncd.pid
# 进程锁
lock file = /var/run/rsync.lock
# 日志文件位置
log file = /var/log/rsyncd.log
###################################
[backup]
# 使用目录
path = /backup/
# 有错误时忽略
ignore errors
# 可读可写(truefalse
read only = false
# 阻止远程列表(不让通过远程方式看服务端有啥)
list = false
# 允许IP
hosts allow = 172.16.1.0/24
# 禁止IP
hosts deny = 0.0.0.0/32
# 虚拟用户
auth users = rsync_backup
# 存放用户和密码的文件
secrets file = /etc/rsync.password

##rsync_config____end##

3)创建rsync账户及共享目录并修改目录属主为rsync

[root@backup ~]# useradd -M -s /sbin/nologin rsync
[root@backup ~]# mkdir /backup
[root@backup ~]# chown -R rsync /backup

4)启动服务:rsync --daemon

[root@backup ~]# rsync --daemon
[root@backup ~]# ss -antup | grep rsync
tcp    LISTEN     0      5                     :::873                  :::*      users:(("rsync",1851,5))
tcp    LISTEN     0      5                      *:873                   *:*      users:(("rsync",1851,4))

5)制作服务启动脚本/etc/init.d/rsyncd

#!/bin/bash
#author:Mr.chen
# chkconfig:35 13 91
# description:This is Rsync service management shell script
# Source function library
. /etc/rc.d/init.d/functionsstart(){rsync --daemonif [ $? -eq 0 -a `ps -ef|grep -v grep|grep rsync|wc -l` -gt 0 ];then action "Starting Rsync:" /bin/truesleep 1elseaction "Starting Rsync:" /bin/falsesleep 1 fi
}stop(){pkill rsync;sleep 1;pkill rsyncif [ `ps -ef|grep -v grep|grep "rsync --daemon"|wc -l` -lt 1 ];thenaction "Stopping Rsync: " /bin/truesleep 1elseaction "Stopping Rsync:" /bin/truesleep 1fi
}case "$1" instart)start;;; stop)stop;;;restart|reload)stop;start;;; *)echo $"Usage: $0 {start|stop|restart|reload}";;
esac

6)启动脚本放到/etc/init.d目录下,增加x执行权限并添加开机启动

[root@backup ~]# chmod +x /etc/init.d/rsyncd
[root@backup ~]# /etc/init.d/rsyncd stop
已终止
[root@backup ~]# /etc/init.d/rsyncd start
Starting Rsync:                                            [确定]
[root@backup ~]# chkconfig rsyncd on
[root@backup ~]# chkconfig --list | grep rsync
rsyncd          0:关闭    1:关闭    2:启用    3:启用    4:启用    5:启用    6:关闭

7)创建rsync虚拟账户名和密码,并赋予密码文件600权限

[root@backup ~]# echo "rsync_backup:123456" > /etc/rsync.password
[root@backup ~]# cat /etc/rsync.password
rsync_backup:123456
[root@backup ~]# chmod 600 /etc/rsync.password
[root@backup ~]# ll /etc/rsync.password
-rw-------. 1 root root 20 37 20:54 /etc/rsync.password

8)配置Rsync服务器端检查脚本

#!/bin/bash
# 全网服务器备份解决方案_rsync服务器端检查脚本
# author:Mr.chen
# 2017-3-8. /etc/init.d/functions
Path=/backup
fileName="md5sum.txt"
# 一共有几台客户端在推送数据
rsync_ClientNum=2/etc/init.d/postfix status &>/dev/null || /etc/init.d/postfix startif [ `find $Path/ -type f -name "md5sum*" | wc -l` -eq $rsync_ClientNum ];thenfor filepath in `find $Path/ -type f -name "md5sum*"`do/usr/bin/md5sum -c $filepathif [ $? -eq 0 ];thenaction "${filepath}备份正常!" /bin/truerm -rf $filepathelseaction "${filepath}备份异常!" /bin/falseecho "${filepath}备份异常!" | mail -s "$(date +%F)备份检查告警" xxxxxxxx@qq.comfidone
elseecho “Rsync客户端推送不完整!”echo "Rsync推送不完整" | mail -s "$(date +%F)备份推送告警" xxxxxxxxx@qq.com
fi# 找出超过180天的不是周1的备份文件并删除
find $Path/ ! -name "*_2.tar.gz" -mtime +180 -type f | xargs rm -rf

9)将脚本挂定时任务

00 6 * * * /bin/sh /server/scripts/rsync_Server.sh >/dev/null 2>&1

backup服务器Rsync服务端至此配置完毕

1.3 开始部署nfs01服务器:Rsync客户端过程:

1)只需要创建密码文件(只包含密码即可),并赋予密码文件600权限

[root@nfs01 ~]# echo "123456" > /etc/rsync.password
[root@nfs01 ~]# chmod 600 /etc/rsync.password

2)创建共享目录backup
[root@nfs01 ~]# mkdir /backup

3)在客户端进行推送测试

[root@nfs01 ~]# cd /backup
[root@nfs01 backup]# touch {1..5}
[root@nfs01 backup]# ls
1  2  3  4  5
[root@nfs01 backup]# rsync -avzP /backup/ rsync_backup@192.168.197.132::backup --password-file=/etc/rsync.password 
sending incremental file list
./
10 100%    0.00kB/s    0:00:00 (xfer#1, to-check=4/6)
20 100%    0.00kB/s    0:00:00 (xfer#2, to-check=3/6)
30 100%    0.00kB/s    0:00:00 (xfer#3, to-check=2/6)
40 100%    0.00kB/s    0:00:00 (xfer#4, to-check=1/6)
50 100%    0.00kB/s    0:00:00 (xfer#5, to-check=0/6)sent 239 bytes  received 106 bytes  230.00 bytes/sec
total size is 0  speedup is 0.00

4)nfs01服务器打包脚本实现

#!/bin/bash
# 全网服务器备份解决方案_rsync客户端打包脚本
# author:Mr.chen
# 2017-3-7Path=/backup
backup_Server=172.16.1.41
local_IP=`/sbin/ifconfig eth1|awk -F"[ :]+" 'NR==2{print $4}'`
Dir=${local_IP}_$(date +%F_%w)mkdir -p $Path/$Dir
[ -f /var/spool/cron/root ] && cp -rp /var/spool/cron/root $Path/$Dir/
[ -f /etc/rc.d/rc.local ] && cp -rp /etc/rc.d/rc.local $Path/$Dir/
[ -d /server/scripts ] && cp -rp /server/scripts $Path/$Dir/
[ -d /var/html/www ] && cp -rp /var/html/www $Path/$Dir/
[ -d /app/logs ] && cp -rp /app/logs $Path/$Dir/
[ -f /etc/sysconfig/iptables ] && cp -rp /etc/sysconfig/iptables $Path/$Dir/
cd $Pathtar -zcf $Path/${Dir}.tar.gz $Dirrm -rf $Path/$Dir
# 创建md5sum验证信息
/usr/bin/md5sum $Path/${Dir}.tar.gz > $Path/md5sum_$(local_IP).txt# 推送打包的文件到备份服务器
rsync -az $Path/ rsync_backup@${backupServer}::backup --password-file=/etc/rsync.password
# 找出超过7天的备份并删除
find $Path/ -name "${local_IP}*" -type f -mtime +7 | xargs rm -rf

5)将脚本挂定时任务

00 0 * * * /bin/sh /server/scripts/backup.sh >/dev/null 2>&1

NFS服务器Rsync客户端至此配置完毕

转载于:https://www.cnblogs.com/tianakong/p/10002084.html

相关文章:

C++ 多线程:条件变量 std::condition_variable

文章目录描述使用描述 头文件<condition_variable> 定义 class condition_variable; 简介 之前我们也已经介绍过了C多线程中互斥变量存在&#xff0c;已经足够支持多线程中对共享普通系统数据的合理访问。但是因为多线程中同一时刻必然会有一个线程持有锁&#xff0c;一…

小晶粒zsm分子筛合成表征实验报告_Nat. Mater.:区域选择性合成亚纳米金属-分子筛材料...

本文来自微信公众号&#xff1a;X-MOLNews亚纳米尺度的负载型催化剂是近些年多相催化领域以及相关材料科学领域的热门方向。围绕着单原子催化剂、团簇催化剂的论文如井喷一般出现在各大期刊上。关于亚纳米尺度金属催化剂的制备方法、表征方法、催化性能或是相关的理论研究都在如…

【翻译】使用新的Sencha Cmd 4命令app watch

原文&#xff1a;http://www.sencha.com/blog/using-the-new-app-watch-command-in-sencha-cmd-4/作者&#xff1a;Don Griffin Don Griffin is a member of the Ext JS core team. He was an Ext JS user for 2 years before joining Sencha and has over 20 years of softwar…

《设计模式解析(第2版)》

2019独角兽企业重金招聘Python工程师标准>>> 1. 软件开过程中的视角 视角 描述 概念 “软件要负责什么&#xff1f;” 规约 “怎么使用软件&#xff1f;” 实现 ”软件怎样履行自己的责任&#xff1f;“ 可能使用的另外一组视角&#xff1a;使用视角和创建/…

Nmap帮助文档解释

目标指定&#xff08;target specifiction&#xff09; 1、用法:Nmap[扫描类型][设置]{设备列表} 注&#xff1a;[]{} -> 中的内容必须有 <> -> 中的内容可以有可以没有 2、地址类型&#xff1a;主机名、ip地址、网段 3、-iL<文件名> 通过文件输入地址 4、-i…

C++ 多线程:future 异步访问类(线程之间安全便捷的数据共享)

文章目录future前言future描述future类成员使用总结future前言 首先查看如下代码 #include <iostream> #include <thread> #include <future> #include <mutex>using namespace std;void fun1(int n,int &x) {int res 1;for (int i n; i>1;…

bldc不同载波频率_广播百科 频率调制

∧ 请关注为星标&#xff0c;在知识的海洋每天进步1%第 463期频率调制&#xff0c;简称“调频”&#xff0c;它是一种使载波的瞬时频率随调制信号的变化规律而变化的调制方法。实现这种调制方法的电路称调频器,广泛用于调频广播、电视伴音、微波通信、锁相电路和扫频仪等方面。…

基于visual Studio2013解决面试题之0403串联字符串

&#xfeff;&#xfeff;&#xfeff;题目解决代码及点评/*有 n个长为 m1的字符串&#xff0c;如果某个字符串的最后m个字符与某个字符串的前m个字符匹配&#xff0c;则两个字符串可以联接&#xff0c;问这n个字符串最多可以连成一个多长的字符串&#xff0c;如果出现循环&…

MIT开放式课程“自然语言处理”介绍

MIT开放式课程“自然语言处理”介绍 发表于 2009年01月2号 由 52nlp从订阅的Google快讯上知道这个“麻省理工学院“开放式课程网页” | 电机工程与计算机科学 | 6.881 2004秋季课程&#xff1a;自然语言处理 | 课堂讲稿”网站&#xff0c;看介绍是MIT开放课程的中文翻译计划&am…

怎么将对象里面部分的属性放到一个空的对象里面去

var obj{name:jack,age:18,sex:male}var {name,age}objvar obj2{name,age}console.log(obj2) //{name: "jack", age: 18} 这是es6的用法 还有其他的3种方法,关于对象复制的 es6 var obj {name: jack,age: 18}var data Object.assign(obj)console.log(data) //{nam…

C++多线程:thread类创建线程的多种方式

文章目录描述函数成员简介总结描述 头文件 <thread> 声明方式&#xff1a;std::thread <obj> 简介 线程在构造关联的线程对象时立即开始执行&#xff0c;从提供给作为构造函数参数的顶层函数开始。如果顶层函数抛出异常&#xff0c;则调用 std::terminate。正如我…

C C++的编译过程详解

C/C编译过程C/C编译过程主要分为4个过程1) 编译预处理2) 编译、优化阶段3) 汇编过程4) 链接程序一、编译预处理&#xff08;1&#xff09;宏定义指令&#xff0c;如#define Name TokenString&#xff0c;#undef等。 对于前一个伪指令&#xff0c;预编译所要做的是将程序中的所有…

python queue 调试_学Python不是盲目的,是有做过功课认真去了解的

有多少伙伴是因为一句‘人生苦短&#xff0c;我用Python’萌生想法学Python的&#xff01;我跟大家更新过很多Python学习教程普及过多次的Python相关知识&#xff0c;不过大家还是还得计划一下Python学习路线&#xff01;Python入门前&#xff0c;你必须得知道这些&#xff0c;…

嘿嘿 刚刚进来 记录下

大家好&#xff0c;小弟刚刚进来&#xff0c;记录一下&#xff0c;发现这个网站真是太好了&#xff01;&#xff01;转载于:https://blog.51cto.com/wikowin/1112039

Oracle数据库查看表空间是否为自增的

表空间是有数据文件组成的&#xff0c;所以看表空间是否自增即看数据文件&#xff0c;如下查自增的表空间&#xff1a; select tablespace_name,file_name,autoextensible from dba_data_files where autoextensibleYES; autoextensible: YES/NO 即表示是否自增。 转载于:https…

C++多线程:异步操作std::async和std::promise

文章目录std::async简介使用案例std::promise简介成员函数总结之前的文章中提到了C多线程中的异步操作机制 C 多线程&#xff1a;future 异步访问类&#xff08;线程之间安全便捷的数据共享)&#xff0c;接下来分享关于异步操作中 async和 promise的相关使用总结。std::async …

5如何将表格的一行数据清空_微信公众号推文中如何自定义添加表格?

微信公众号发的图文消息里经常需要有表格&#xff0c;因为表格进行数据展现更直观明了&#xff0c;所以接下来就给大家分享一下如何自定义添加表格。打开小蚂蚁编辑器&#xff0c;在编辑区点击鼠标右键&#xff0c;在出现的选项中选择【插入表格】。系统会默认添加一个5行5列的…

基于visual Studio2013解决面试题之0901奇偶站队

&#xfeff;&#xfeff;&#xfeff;题目解决代码及点评/*给定一个存放整数的数组&#xff0c;重新排列数组使得数组左边为奇数&#xff0c;右边为偶数 解决方法&#xff1a;两边同时遍历&#xff0c;如果遇到左边偶数或者右边基数&#xff0c;则交换 */#include <iostrea…

联想架构调整:智能手机业务很重要

1月5日&#xff0c;杨元庆宣布联想集团进行组织架构调整。将联想旗下业务拆分为两个新的端到端业务集团—— Lenovo 业务集团和 Think 业务集团。杨元庆在内部邮件如是说:“Lenovo业务集团(Lenovo Business Group&#xff0c;简称LBG)&#xff0c;由刘军领军&#xff0c;致力于…

activiti5/6 系列之--BpmnModel使用

BpmnModel对象&#xff0c;是activiti动态部署中很重要的一个对象&#xff0c;如果BpmnModel对象不能深入的理解&#xff0c;那可能如果自己需要开发一套流程设计器&#xff0c;使用bpmn-js使用前端或者C/S展现流程流转而不是使用工作流引擎&#xff0c;就显得力不从心。例如&a…

C++多线程:package_task异步调用任何目标执行操作

文章目录描述函数成员及使用总结我们上一篇描述关于C多线程中的异步操作相关库( async和 promise)&#xff0c;本节将分享c标准库中最后一个多线程异步操作库 package_task的学习笔记。描述 头文件 <future> 声明方式: template< class R, class ...Args > class …

ICE BOX 配置,使用----第一篇

一 理论部分 (1) 为什么要使用icebox? icebox server代替了通常的server. icebox是为了方便集中管理多个ice服务而建立的。 它通过使用icebox服务器&#xff0c;把ice服务注册进去&#xff0c;从而建立联系。 所以它除了建立传统的ice服务器&#xff0c;ice客户端&#xff0c;…

测试打桩_DNF:CEO实测旭旭宝宝红眼,打桩高达2494E,伤害超越狂人剑魂

对于红眼这个职业&#xff0c;旭旭宝宝倾注了太多的心血&#xff0c;耗资几千万打造而成。虽然&#xff0c;作为固伤职业&#xff0c;在伤害方面&#xff0c;不及剑魂和剑帝这类百分比&#xff0c;但因人数颇多&#xff0c;从而被广泛关注。而今&#xff0c;旭旭宝宝的红眼&…

122112_1452_Word1

122112_1452_Word1转载于:https://www.cnblogs.com/joshuali/archive/2013/01/11/4339303.html

C++ 多线程:时间控制

C多线程库中的各个子库都有各自的时间控制方式&#xff0c;依此来进行多线程程序运行中cpu资源的精确控制。 使用std::chrono时间库可以提供微妙、毫秒、秒及以上的时间取用,并且能够获取当前系统时间。 如下代码 #include <iostream> #include <fstream> #inclu…

array用法 numpy_NumPy总结(基础用法)

numpy可以说是Python运用于人工智能和科学计算的一个重要基础&#xff0c;近段时间恰好学习了numpy&#xff0c;pandas&#xff0c;sklearn等一些Python机器学习和科学计算库&#xff0c;因此在此总结一下常用的用法。引入numpy库的方式&#xff1a;import numpy as np1、numpy…

python 字符串 转 dict

比直接eval更好的方法>>>import ast >>>ast.literal_eval("{muffin : lolz, foo : kitty}") {muffin:lolz,foo:kitty} 用 json 遇到问题&#xff1a; >>> import json json.loads({"x": 1,"y":2}) {uy: 2, ux: 1…

rhino-java中调用javascript

2019独角兽企业重金招聘Python工程师标准>>> 在有些情况下需要在java里面执行javascript&#xff0c;这时rhino就可以帮忙了。mozilla的一个开源产品。 官网https://developer.mozilla.org/en-US/docs/Rhino 之前的一篇博客http://my.oschina.net/yybear/blog/101…

HDU 2566 统计硬币

统计硬币 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 9633 Accepted Submission(s): 6505 Problem Description 假设一堆由1分、2分、5分组成的n个硬币总面值为m分&#xff0c;求一共有多少种可能的组合方式&…

linux C 多线程编程

文章目录多线程的一些小知识&#xff1a;1创建线程 pthread_create2线程挂起 pthread_join3线程终止 pthread_exit4线程分离 pthread_detach5线程取消 pthread_cancel线程同步 pthread_mutex_t互斥变量我们在写linux的服务的时候&#xff0c;经常会用到linux的多线程技术以提高…