测试NFS+rsync+sersync+SMTP+shell脚本+cron

考核1:

实现拓扑图:

实验需要的机器:

名称

ip地址

主机名

web服务器

192.168.1.10

web01

rsync备份服务器

192.168.1.20

rsync

nfs存储服务器

192.168.1.30

nfs

1,nfs创建一个目录名为/data/web的目录作为web服务器的后端存储,然后共享使用虚拟用户webuser,因为公司访问量不是很大,所以可以直接用sync来同步写入到磁盘

在NFS服务器上:

yum -y install nfs-utils.x86_64 rpcbind.x86_64

/etc/init.d/rpcbind start && /etc/init.d/nfs start

mkdir -p /data/web

[root@nfs ~]# cat /etc/exports  #修改nfs配置文件

/data/web 192.168.1.0/24(rw,sync,root_squash,all_squash,anonuid=666,anongid=666)

useradd -u 666 webuser -s /sbin/nologin –M

chown -R webuser:webuser /data/web/

[root@nfs ~]# exportfs -arv

exporting 192.168.1.0/24:/data/web

#先进行本地挂载测试,如果成功在到远端挂载

[root@nfs ~]# showmount -e 192.168.1.30

Export list for 192.168.1.30:

/data/web 192.168.1.0/24

[root@nfs ~]# mount -t nfs 192.168.1.30:/data/web /mnt/

[root@nfs ~]# df -Th

Filesystem           Type   Size  Used Avail Use% Mounted on

/dev/mapper/vg_moban-lv_root

                     ext4    18G 1000M   16G   6% /

tmpfs                tmpfs  490M     0  490M   0% /dev/shm

/dev/sda1            ext4   477M   52M  400M  12% /boot

192.168.1.30:/data/web   nfs     18G 1000M   16G   6% /mnt

[root@nfs ~]# umount /mnt

在web服务器挂载nfs用作网站的后端存储:

[root@web01 ~]# mkdir /webdata

[root@web01 ~]# mount -t nfs 192.168.1.30:/data/web /webdata/

[root@web01 ~]# df -Th

Filesystem           Type   Size  Used Avail Use% Mounted on

/dev/mapper/vg_moban-lv_root

                     ext4    18G  998M   16G   6% /

tmpfs                tmpfs  490M     0  490M   0% /dev/shm

/dev/sda1            ext4   477M   52M  400M  12% /boot

192.168.1.30:/data/web  nfs     18G 1000M   16G   6% /webdata

[root@web01 ~]# echo "mount -t nfs 192.168.1.30:/data/web /webdata/" >>/etc/rc.local  #设置成开机自动挂载

NFS共享挂载已经完成,然后下一步实施搭建rsync服务器

yum -y install rsync.x86_64

[root@rsync ~]# vim /etc/rsyncd.conf

uid = rsync

gid = rsync

use chroot = no

max connections = 20

list = false

timeout = 300

read only = false

pid file = /var/run/rsyncd.pid

lock file= /var/run/rsyncd.lock

log file = /var/log/rsyncd.log

ignore errors

host allow = 192.168.1.0/24

[nfsbackup]

comment = This is an nfs real-time backup module

path = /backup/nfs

auth users = nfs_rsync

secrets file = /etc/rsync.password

[root@rsync ~]# mkdir -p /backup/nfs

[root@rsync ~]# useradd rsync -s /sbin/nologin -M

[root@rsync ~]# chown rsync:rsync /backup/nfs/

[root@rsync ~]# echo "nfs_rsync:nfspassword" >> /etc/rsync.password

[root@rsync ~]# chmod 600 /etc/rsync.password

[root@rsync nfs]# /usr/bin/rsync --daemon

[root@rsync nfs]# echo "/usr/bin/rsync --daemon" >>/etc/rc.local

NFS充当客户端:

[root@nfs ~]# echo "nfspassword" >> /etc/rsync.password #生成密码文件

[root@nfs ~]# chmod 600 /etc/rsync.password

[root@nfs ~]# yum -y install rsync.x86_64

[root@nfs ~]# rsync -avz /data/web/ nfs_rsync@192.168.1.20::nfsbackup/ --password-file=/etc/rsync.password

测试推送成功,

然后在NFS上的数据要实时的备份到rsync服务器上(sersync)

[root@nfs ~]# mkdir /applocal/

[root@nfs~]# mv sersync2.5.4_64bit_binary_stable_final.tar.gz  /applocal/

[root@nfs ~]# cd /applocal/

[root@nfs applocal]# tar -xvzf sersync2.5.4_64bit_binary_stable_final.tar.gz

sersync /

sersync /bin/sersync2

sersync/conf/confxml.xml

[root@nfs sersync]# tree /applocal/sersync

/applocal/sersync

├── bin

│ └── sersync2

└── conf

└── confxml.xml

2 directories, 2 files

[root@nfs conf]# cp confxml.xml{,.bak}

[root@nfs conf]# vim confxml.xml

    <sersync>

    <localpath watch="/data/web/">

        <remote ip="192.168.1.20" name="nfsbackup"/>

        <!--<remote ip="192.168.8.39" name="tongbu"/>-->

        <!--<remote ip="192.168.8.40" name="tongbu"/>-->

    </localpath>

    <rsync>

        <commonParams params="-az"/>

        <auth start="true" users="nfs_rsync" passwordfile="/etc/rsync.password"/>

        <userDefinedPort start="false" port="874"/><!-- port=874 -->

        <timeout start="true" time="100"/><!-- timeout=100 -->

        <ssh start="false"/>

    </rsync>

    <failLog path="/applocal/sersync/log/rsync_fail_log.sh" timeToExecute="60"/><!--default every

60mins execute once-->

[@nfs /]# /applocal/sersync/bin/sersync2 -dro /applocal/sersync/conf/confxml.xml

[root@nfs conf]# cd /data/web/

[root@nfs web]# touch 1

[root@nfs web]# echo " /applocal/sersync/bin/sersync2 -dro /applocal/sersync/conf/confxml.xml" >>/etc/rc.local

#然后实行全网备份脚本:

备份每台服务器里面的:/etc/rc.local    /etc/hosts    /scripts

备份数据在本地保存7天,在rsync上保存180天,星期六的数据不删除

如果备份成功发送邮件到18163201@qq.com

1)先搭建邮件服务,用SMTP

[root@rsync etc]# yum -y install mailx.x86_64

[root@rsync etc]# vim /etc/mail.rc

##邮件服务,利用qq.com来发送邮件

set from=18163201@qq.com

set smtp=smtps://smtp.qq.com:465

set smtp-auth-user=18163201@qq.com

set smtp-auth-password=dcnhslrkexdbbgbh

set smtp-auth=login

set ssl-verify=ignore

set nss-config-dir=/etc/pki/nssdb

[root@rsync etc]# echo 123 | mail -v -s "test Email" 18163201@qq.com

然后开始写备份脚本:

在rsync配置文件里面增加:

[networkbackup]

comment = This is a full network backup module

path = /backup

auth users = rsync_backup

secrets file = /etc/rsyncn.password

[root@rsync etc]# chown rsync:rsync /backup/

[root@rsync etc]# echo "rsync_backup:rsync_backup" >>/etc/rsyncn.password

[root@rsync etc]# chmod 600 /etc/rsyncn.password

[root@nfs backup]# vim /scripts/nfs_backup.sh

#!/bin/bash

#创建一个备份使用的脚本,要求如下:

#1,使用日期作为文件名的一部分

#2,打包备份/etc/rc.local and /etc/exports and /scripts/ and /etc/crontab

#3,备份数据在本地只保留7天

#4,备份数据都放在/backup/目录下

#5,推送到备份服务器上要是用自己的ip地址作为目录

#每天00点打包文件,然后推送,这时候文件名日期应该是前一天的日期,截取前一天的日期

Time=$(/bin/date +"%Y-%m-%d" -d "-1 days")

Ip=$(/sbin/ifconfig eth3|awk -F "[ :]+" 'NR==2 {print $4}' )

[ ! -d /backup/$Ip ] && mkdir -p /backup/$Ip

Path=/backup/$Ip

tar -czf $Path/$Time\.tar.gz /etc/rc.local /etc/exports /scripts/ /etc/crontab \

      && md5sum $Path/$Time\.tar.gz >$Path/file.md5

rsync -az /backup/ rsync_backup@192.168.1.20::networkbackup --password-file=/etc/rsyncn.password

#然后删除七天以前的文件

find $Path -mtime +7 -type f |xargs -i rm -rf {}

[root@nfs ~]# crontab -l -u root

00 * * * * /bin/sh /scripts/nfs_backup.sh

#!/bin/bash

#先找出180天以前的文件,进行删除,因为/backup目录下有一个nfs目录是nfs的备份文件所以它里面的内容不>

能动,要给他排除掉

for i in  `find /backup/ -type d ! -name nfs`

do

    #进行文件完整性校验

    [ -f $i/file.md5 ] && \

    if [ $(md5sum $i/file.md5 | awk -F "[: ]+" '{print $2}') = 'OK' ]

        then

        echo "文件备份成功" |mail -s "文件备份" 18163201@qq.com

    fi

    #删除80天以前的内容

    find $i -type f -mtime +180 | xargs -i rm -rf {}

done

[root@rsync 192.168.1.30]# crontab -l -u root

00 * * * * /bin/sh /scripts/backup_del_md5.sh

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术小讲堂

iBatis.Net(2):基本概念与配置

写完第一篇,有朋友给我发邮件,说想让我配合实例写会不会更好一些,可是呢,我觉得这就相当于那些北大的什么鸟给无辜的孩子们吃快餐一样,我是坚决反对那样的,知其然不知...

29670
来自专栏文武兼修ing——机器学习与IC设计

流水线式p2p接口的分析与实现

P2P接口是一种双向握手接口,传输的前级和后级各提供一个数据有效信号valid和忙信号busy信号,只有当两个信号达成某种指定情况时,握手完成,数据传输完成,否...

12920
来自专栏Seebug漏洞平台

WordPress REST API 内容注入漏洞分析

0x00 漏洞简述 1. 漏洞简介 在REST API自动包含在Wordpress4.7以上的版本,WordPress REST API提供了一组易于使用的HT...

33970
来自专栏EarlGrey的专栏

十分钟配置云端数据科学开发环境

本文将介绍如何在一台云服务器上配置 Jupyter Notebook 环境,从此只要有浏览器和网络,就是可以随时随地进行数据科学开发工作,不用担心家庭环境与办公...

1.1K20
来自专栏Linyb极客之路

操作日志追踪记录之MDC入门

MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能。某些...

25320
来自专栏张善友的专栏

Redis 起步

Rdis和JQuery一样是纯粹为应用而产生的,这里记录的是在CentOS 5.7上学习入门文章: 1.Redis简介 ? Redis是一个key-value...

22080
来自专栏北京马哥教育

Python爬虫基本知识:什么是爬虫?

豌豆贴心提醒,本文阅读时间5分钟 一、网络爬虫的定义 网络爬虫,即Web Spider,是一个很形象的名字。 把互联网比喻成一个蜘蛛网,那么Spider就是...

36260
来自专栏Java进阶架构师

9个提升逼格的redis命令

既然keys命令不允许使用,那么有什么代替方案呢?有!那就是scan命令。如果把keys命令比作类似select * from users where user...

16240
来自专栏mini188

Openfire集群源码分析

如果用户量增加后为了解决吞吐量问题,需要引入集群,在openfire中提供了集群的支持,另外也实现了两个集群插件:hazelcast和clustering。为了...

26390
来自专栏Java技术栈

Redis PK Memcached,哪个更牛叉?

说到 redis 就会联想到 memcached,反之亦然。了解过两者的同学有那么个大致的印象:

10320

扫码关注云+社区

领取腾讯云代金券