【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 环境部署

操作系统

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

内核版本

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

主机网络参数设置:

主机名 网卡eth0 网卡eth1 用途
backup 10.0.0.41 172.16.1.41 rsync服务端
nfs01 10.0.0.31 172.16.1.31 NFS存储服务器客户端
web01 10.0.0.8/24 172.16.1.8/24 nginx web服务器

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

1)确认软件是否安装:

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

2)配置rsyncd.conf配置文件

  1. #rsync_config____start
  2. #created by chensiqi 22:00 2017-3-6
  3. #blog:http://www.cnblogs.com/chensiqiqi/
  4. ##rsyncd.conf start##
  5. # 用户
  6. uid = rsync
  7. # 组
  8. gid = rsync
  9. # 程序安全设置
  10. use chroot = no
  11. # 客户端连接数
  12. max connections = 200
  13. # 超时时间
  14. timeout = 300
  15. # 进程号文件位置
  16. pid file = /var/run/rsyncd.pid
  17. # 进程锁
  18. lock file = /var/run/rsync.lock
  19. # 日志文件位置
  20. log file = /var/log/rsyncd.log
  21. ###################################
  22. [backup]
  23. # 使用目录
  24. path = /backup/
  25. # 有错误时忽略
  26. ignore errors
  27. # 可读可写(true或false)
  28. read only = false
  29. # 阻止远程列表(不让通过远程方式看服务端有啥)
  30. list = false
  31. # 允许IP
  32. hosts allow = 172.16.1.0/24
  33. # 禁止IP
  34. hosts deny = 0.0.0.0/32
  35. # 虚拟用户
  36. auth users = rsync_backup
  37. # 存放用户和密码的文件
  38. secrets file = /etc/rsync.password
  39. ##rsync_config____end##

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

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

4)启动服务:rsync --daemon

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

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

  1. #!/bin/bash
  2. #author:Mr.chen
  3. # chkconfig:35 13 91
  4. # description:This is Rsync service management shell script
  5. # Source function library
  6. . /etc/rc.d/init.d/functions
  7. start(){
  8. rsync --daemon
  9. if [ $? -eq 0 -a `ps -ef|grep -v grep|grep rsync|wc -l` -gt 0 ];then
  10. action "Starting Rsync:" /bin/true
  11. sleep 1
  12. else
  13. action "Starting Rsync:" /bin/false
  14. sleep 1
  15. fi
  16. }
  17. stop(){
  18. pkill rsync;sleep 1;pkill rsync
  19. if [ `ps -ef|grep -v grep|grep "rsync --daemon"|wc -l` -lt 1 ];then
  20. action "Stopping Rsync: " /bin/true
  21. sleep 1
  22. else
  23. action "Stopping Rsync:" /bin/true
  24. sleep 1
  25. fi
  26. }
  27. case "$1" in
  28. start)
  29. start;
  30. ;;
  31. stop)
  32. stop;
  33. ;;
  34. restart|reload)
  35. stop;
  36. start;
  37. ;;
  38. *)
  39. echo $"Usage: $0 {start|stop|restart|reload}"
  40. ;;
  41. esac

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

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

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

  1. [root@backup ~]# echo "rsync_backup:123456" > /etc/rsync.password
  2. [root@backup ~]# cat /etc/rsync.password
  3. rsync_backup:123456
  4. [root@backup ~]# chmod 600 /etc/rsync.password
  5. [root@backup ~]# ll /etc/rsync.password
  6. -rw-------. 1 root root 20 3 7 20:54 /etc/rsync.password

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

  1. #!/bin/bash
  2. # 全网服务器备份解决方案_rsync服务器端检查脚本
  3. # author:Mr.chen
  4. # 2017-3-8
  5. . /etc/init.d/functions
  6. Path=/backup
  7. fileName="md5sum.txt"
  8. # 一共有几台客户端在推送数据
  9. rsync_ClientNum=2
  10. /etc/init.d/postfix status &>/dev/null || /etc/init.d/postfix start
  11. if [ `find $Path/ -type f -name "md5sum*" | wc -l` -eq $rsync_ClientNum ];then
  12. for filepath in `find $Path/ -type f -name "md5sum*"`
  13. do
  14. /usr/bin/md5sum -c $filepath
  15. if [ $? -eq 0 ];then
  16. action "${filepath}备份正常!" /bin/true
  17. rm -rf $filepath
  18. else
  19. action "${filepath}备份异常!" /bin/false
  20. echo "${filepath}备份异常!" | mail -s "$(date +%F)备份检查告警" xxxxxxxx@qq.com
  21. fi
  22. done
  23. else
  24. echo Rsync客户端推送不完整!”
  25. echo "Rsync推送不完整" | mail -s "$(date +%F)备份推送告警" xxxxxxxxx@qq.com
  26. fi
  27. # 找出超过180天的不是周1的备份文件并删除
  28. 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权限

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

2)创建共享目录backup

[root@nfs01 ~]# mkdir /backup

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

  1. [root@nfs01 ~]# cd /backup
  2. [root@nfs01 backup]# touch {1..5}
  3. [root@nfs01 backup]# ls
  4. 1 2 3 4 5
  5. [root@nfs01 backup]# rsync -avzP /backup/ rsync_backup@192.168.197.132::backup --password-file=/etc/rsync.password
  6. sending incremental file list
  7. ./
  8. 1
  9. 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=4/6)
  10. 2
  11. 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=3/6)
  12. 3
  13. 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=2/6)
  14. 4
  15. 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=1/6)
  16. 5
  17. 0 100% 0.00kB/s 0:00:00 (xfer#5, to-check=0/6)
  18. sent 239 bytes received 106 bytes 230.00 bytes/sec
  19. total size is 0 speedup is 0.00

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

  1. #!/bin/bash
  2. # 全网服务器备份解决方案_rsync客户端打包脚本
  3. # author:Mr.chen
  4. # 2017-3-7
  5. Path=/backup
  6. backup_Server=172.16.1.41
  7. local_IP=`/sbin/ifconfig eth1|awk -F"[ :]+" 'NR==2{print $4}'`
  8. Dir=${local_IP}_$(date +%F_%w)
  9. mkdir -p $Path/$Dir
  10. [ -f /var/spool/cron/root ] && cp -rp /var/spool/cron/root $Path/$Dir/
  11. [ -f /etc/rc.d/rc.local ] && cp -rp /etc/rc.d/rc.local $Path/$Dir/
  12. [ -d /server/scripts ] && cp -rp /server/scripts $Path/$Dir/
  13. [ -d /var/html/www ] && cp -rp /var/html/www $Path/$Dir/
  14. [ -d /app/logs ] && cp -rp /app/logs $Path/$Dir/
  15. [ -f /etc/sysconfig/iptables ] && cp -rp /etc/sysconfig/iptables $Path/$Dir/
  16. cd $Path
  17. tar -zcf $Path/${Dir}.tar.gz $Dir
  18. rm -rf $Path/$Dir
  19. # 创建md5sum验证信息
  20. /usr/bin/md5sum $Path/${Dir}.tar.gz > $Path/md5sum_$(local_IP).txt
  21. # 推送打包的文件到备份服务器
  22. rsync -az $Path/ rsync_backup@${backupServer}::backup --password-file=/etc/rsync.password
  23. # 找出超过7天的备份并删除
  24. 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客户端至此配置完毕

【Rsync项目实战一】备份全网服务器数据的更多相关文章

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

    [Rsync项目实战]备份全网服务器数据 标签(空格分隔): Linux服务搭建-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载,转 ...

  2. 【NFS项目实战二】NFS共享数据的时时同步推送备份

    [NFS项目实战二]NFS共享数据的时时同步推送备份 标签(空格分隔): Linux服务搭建-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品, ...

  3. rsync 系统用户/虚拟用户 备份web服务器数据及无交互定时推送备份

    一.服务环境 (1),WEBserver(192.168.10.130) : BACKserver(192.168.10.129) (2),BACKserver服务器部署,安装所需软件,并启动 (3) ...

  4. NetCore项目实战篇03---HTTP Patch 更新数据

    一.什么是HTPP Patch HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法. HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 ...

  5. rsync+inotify实现全网自动化数据备份

    第1章 环境配置 实例1-1 服务器及IP主机名规划 已知 4 台服务器主机名主机对应信息见下表: 服务器说明 外网 IP(NAT) 内网 IP(NAT)  主机名 web服务器 10.0.0.7/2 ...

  6. Android项目实战--手机卫士开发系列教程

    <ignore_js_op> banner131010.jpg (71.4 KB, 下载次数: 0) 下载附件  保存到相册 2 分钟前 上传   Android项目实战--手机卫士01- ...

  7. GraphQL + React Apollo + React Hook 大型项目实战(32 个视频)

    GraphQL + React Apollo + React Hook 大型项目实战(32 个视频) GraphQL + React Apollo + React Hook 大型项目实战 #1 介绍「 ...

  8. rsync数据定时增量备份知识管理服务器数据

    为了保证公司知识管理服务器数据的安全性,所以计划每天同步confluence服务器上面数据 一.安装rsync服务端 1.查看是否安装rsync ps -ef | grep rsync 2.添加配置文 ...

  9. rsync+sersync自动同步备份数据

    一.为什么要用Rsync+sersync架构?1.sersync是基于Inotify开发的,类似于Inotify-tools的工具2.sersync可以记录下被监听目录中发生变化的(包括增加.删除.修 ...

随机推荐

  1. C#连接数据库以及增、删、改、查操作

    using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; usin ...

  2. selectToUISlider

    版权声明:本文为LZUGIS原创文章,未经同意不得转载. https://blog.csdn.net/GISShiXiSheng/article/details/24304321 用过google e ...

  3. 对两个奇葩的C语言程序的思考

    原文章的连接为:http://www.cnblogs.com/jacksu-tencent/default.html?page=2 1. 第一个程序例如以下: #include <stdio.h ...

  4. linux主次设备号【转载】

    一个字符设备或者块设备都有一个主设备号和次设备号.主设备号和次设备号统称为设 备号.主设备号用来表示一个特定的驱动程序.次设备号用来表示使用该驱动程序的各 设备.例如一个嵌入式系统,有两个LED指示灯 ...

  5. Cluster的日记体系

    Cluster的日志体系 Cluster的日志体系: Oracle cluster不像数据库那样,具有丰富的视图.工具可以用来辅助诊断,他的日志和trace文件时唯一的选择.但不想oracle只有al ...

  6. Lombok 简单入门

    原文地址:Lombok 简单入门 博客地址:http://www.extlight.com 一.前言 Lombok 是一个 Java 库,它作为插件安装至编辑器中,其作用是通过简单注解来精简代码,以此 ...

  7. onclick监听

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. mysql存储引擎之innodb学习

    innodb引擎特点1.支持事务:支持4个事务隔离级别,支持多版本读. 2.行级锁定(更新时一般是锁定当前行):通过索引实现,全表扫描仍然会是表锁,注意间隙 锁的影响 3.读写阻塞与事务隔离级别有关 ...

  9. 18.9.10 LeetCode刷题笔记

    本人算法还是比较菜的,因此大部分在刷基础题,高手勿喷 选择Python进行刷题,因为坑少,所以不太想用CPP: 1.买股票的最佳时期2 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. ...

  10. xshell 提示 继续使用此程序必须应用到最新的更新或使用新版本 的解决方案

    当打开正在使用的xshell后,提示“继续使用此程序必须应用到最新的更新或使用新版本 ”  是因为我们正在使用的是xshell5 版本,需要我们再安装一个xshell6 版本 我个人使用的是家庭/教育 ...