设为首页 收藏本站
查看: 617|回复: 0

[经验分享] 【Rsync项目实战一】备份全网服务器数据

[复制链接]

尚未签到

发表于 2017-6-4 09:46:39 | 显示全部楼层 |阅读模式
【Rsync项目实战】备份全网服务器数据
  标签(空格分隔): Linux服务搭建-陈思齐
  ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处,作者信息和本声明。否则将追究法律责任。http://www.cnblogs.com/chensiqiqi/
  [TOC]

【企业案例】
  某公司里有一台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 环境部署
  操作系统
  

[iyunv@backup ~]# cat /etc/redhat-release
  
CentOS>  

  内核版本
  

[iyunv@backup ~]# uname -r  
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)确认软件是否安装:
  

[iyunv@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
  
# 可读可写(true或false)
  
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
  

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

  4)启动服务:rsync --daemon
  

[iyunv@backup ~]# rsync --daemon  
[iyunv@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/functions
  

  
start(){
  rsync --daemon
  if [ $? -eq 0 -a `ps -ef|grep -v grep|grep rsync|wc -l` -gt 0 ];then
  action "Starting Rsync:" /bin/true
  sleep 1
  else
  action "Starting Rsync:" /bin/false
  sleep 1
  fi
  
}
  

  
stop(){
  pkill rsync;sleep 1;pkill rsync
  if [ `ps -ef|grep -v grep|grep "rsync --daemon"|wc -l` -lt 1 ];then
  action "Stopping Rsync: " /bin/true
  sleep 1
  else
  action "Stopping Rsync:" /bin/true
  sleep 1
  fi
  
}
  

  
case "$1" in
  start)
  start;
  ;;
  stop)
  stop;
  ;;
  restart|reload)
  stop;
  start;
  ;;
  *)
  echo $"Usage: $0 {start|stop|restart|reload}"
  ;;
  
esac
  

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

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

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

[iyunv@backup ~]# echo "rsync_backup:123456" > /etc/rsync.password  
[iyunv@backup ~]# cat /etc/rsync.password
  
rsync_backup:123456
  
[iyunv@backup ~]# chmod 600 /etc/rsync.password
  
[iyunv@backup ~]# ll /etc/rsync.password
  
-rw-------. 1 root root 20 3月   7 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 start
  

  

  
if [ `find $Path/ -type f -name "md5sum*" | wc -l` -eq $rsync_ClientNum ];then
  for filepath in `find $Path/ -type f -name "md5sum*"`
  do
  /usr/bin/md5sum -c $filepath
  if [ $? -eq 0 ];then
  action "${filepath}备份正常!" /bin/true
  rm -rf $filepath
  else
  action "${filepath}备份异常!" /bin/false
  echo "${filepath}备份异常!" | mail -s "$(date +%F)备份检查告警" xxxxxxxx@qq.com
  fi
  done
  
else
  echo “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权限
  

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

  2)创建共享目录backup
  
[iyunv@nfs01 ~]# mkdir /backup
  3)在客户端进行推送测试
  

[iyunv@nfs01 ~]# cd /backup  
[iyunv@nfs01 backup]# touch {1..5}
  
[iyunv@nfs01 backup]# ls
  
1  2  3  4  5
  
[iyunv@nfs01 backup]# rsync -avzP /backup/ rsync_backup@192.168.197.132::backup --password-file=/etc/rsync.password
  
sending incremental file list
  
./
  
1
  0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=4/6)
  
2
  0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=3/6)
  
3
  0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=2/6)
  
4
  0 100%    0.00kB/s    0:00:00 (xfer#4, to-check=1/6)
  
5
  0 100%    0.00kB/s    0:00:00 (xfer#5, to-check=0/6)
  

  
sent 239 bytes  received 106 bytes  230.00 bytes/sec

  
total>  

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

#!/bin/bash  
# 全网服务器备份解决方案_rsync客户端打包脚本
  
# author:Mr.chen
  
# 2017-3-7
  

  
Path=/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 $Path
  

  
tar -zcf $Path/${Dir}.tar.gz $Dir
  

  
rm -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客户端至此配置完毕

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-383381-1-1.html 上篇帖子: docker下安装 Oracle11gR2 下篇帖子: 备胎的养成记KeepAlived实现热备负载
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表