rsync备份 & nfs 文件互传& inotify实时监控




一,RSYNC


1)RSYNC本地模式

--类似cp命令

[root@web01 ~]# touch 121.txt

[root@web01 ~]# rsync 121.txt /opt/

[root@web01 ~]# ll /opt/

-rw-r--r-- 1 root root 0 2020-08-23 14:08 121.txt


二)RSYNC远程模式

--类似于scp命令

[root@web01 ~]# rsync 121.txt [email protected]:/backup/

[email protected]'s password:


[root@backup ~]# ll /backup/

-rw-r--r-- 1 root  root  0 2020-08-24 15:49 121.txt

             (需要知道对方的用户及密码,不安全)


三)RSYNC守护进程模式 -(注意模块是双冒号)

服务端:


[root@backup ~]# yum install -y rsync(客户端,服务端都需要安装)

##修改配置文件(每一个服务下载好的第一件事就是配置文件修改)


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

uid = rsync  启动用户uid

gid = rsync   启动用户gid

port = 873   端口

fake super = yes   可以不使用超级用户root

use chroot = no     安全机制

max connections = 200    最大连接数

timeout = 600    超时时间

ignore errors  忽略错误

read only = false     只读

list = false               ->不记得模块时候可以使用

auth users = rsync_backup     虚拟用户

secrets file = /etc/rsync.passwd      虚拟用户密码文件

log file = /var/log/rsyncd.log

#####################################

[backup]                           模块                          

comment = welcome to zx's backup!          备注

path = /backup           真实文件目录

(下面三行复制过去记得把注释去掉)



配置文件完善配置信息

1,##新建用户rsync

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


2,## 虚拟用户设置密码

[root@backup ~]# echo "rsync_backup:123456" > /etc/rsyncd.passwd

##设置权限

[root@backup ~]# chmod 600 /etc/rsyncd.passwd


3,##建backup目录,设置属主,属组

[root@backup ~]# mkdir /backup

[root@backup ~]# chown -R rsync.rsync /backup/


4,## 启动服务

[root@backup ~]# systemctl start rsyncd

## 查看服务是否运行(运维的好习惯要养成)

[root@backup ~]# ps -ef|grep rsyncd

root      7554  7124  0 13:53 pts/0    00:00:00 grep --color=auto rsyncd


5,## 查看端口

[root@backup ~]# netstat -lntp

Active Internet connections (only servers)

Proto Recv-Q Send-Q Local Address          Foreign Address        State      PID/Program name

tcp        0      0 0.0.0.0:873            0.0.0.0:*              LISTEN      7548/rsync

tcp        0      0 0.0.0.0:111            0.0.0.0:*              LISTEN      5398/rpcbind

tcp6      0      0 :::873                  :::*                    LISTEN      7548/rsync

tcp6      0      0 :::111                  :::*                    LISTEN      5398/rpcbind



客户端

[root@web01 ~]# yum install -y rsync

[root@web01 ~]# echo "123456" > /etc/rsync.passwd

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


第一种,输入密码

拉:

[root@web01 ~]# rsync -avz [email protected]::backup /opt

Password:

receiving incremental file list

./

aaa/


第二种,--passwd-file=/etc/rsync.passwd

推:

[root@web01 ~]# rsync -avz 11.txt [email protected]::backup --password-file=/etc/rsyncd.passwd


第三种,配置环境变量

export RSYNC_PASSWORD=123456  (临时生效)


[root@web01 ~]# export RSYNC_PASSWORD=123456

[root@web01 ~]# rsync -avz [email protected]::backup /opt

receiving incremental file list

sent 25 bytes  received 115 bytes  31.11 bytes/sec

total size is 0  speedup is 0.00



限速参数:-avzP --bwlimit

生成大文件-->

dd if=/dev/zero of=./1.txt bs=1M count=500

dd if=/dev/zero生出源源不断的字符

of=./1.txt bs=1M  到哪个文件里,多大的速率传输

count=500 生成的文件是500兆


限速  --为什么不限速

[root@web01 ~]# rsync -avzP --bwlimit 1 ./1.txt [email protected]::backup

sending incremental file list

1.txt

        256,000 100%  212.89MB/s    0:00:00 (xfr#1, to-chk=0/1)

sent 355 bytes  received 43 bytes  796.00 bytes/sec

total size is 256,000  speedup is 643.22


数据一致参数:--delete

## 服务端backup下创建文件

[root@backup ~]# touch /backup/{1..5}.txt

[root@backup ~]# ll /backup/

总用量 0

-rw-r--r-- 1 root root 0 2020-08-19 16:02 1.txt

-rw-r--r-- 1 root root 0 2020-08-19 16:02 2.txt

-rw-r--r-- 1 root root 0 2020-08-19 16:02 3.txt

-rw-r--r-- 1 root root 0 2020-08-19 16:02 4.txt

-rw-r--r-- 1 root root 0 2020-08-19 16:02 5.txt


## 客户端创建文件

[root@web01 ~]# touch {a..d}.txt

[root@web01 ~]# ll

总用量 0

-rw-r--r-- 1 root root 0 2020-08-19 16:03 a.txt

-rw-r--r-- 1 root root 0 2020-08-19 16:03 b.txt

-rw-r--r-- 1 root root 0 2020-08-19 16:03 c.txt

-rw-r--r-- 1 root root 0 2020-08-19 16:03 d.txt


客户端推:

[root@web01 ~]# rsync -avz --delete ./ [email protected]::backup

a.txt

b.txt

c.txt

d.txt


## 查看服务端backup目录下的文件

[root@backup ~]# ll /backup/

-rw-r--r-- 1 rsync rsync 0 2020-08-19 16:03 a.txt

-rw-r--r-- 1 rsync rsync 0 2020-08-19 16:03 b.txt

-rw-r--r-- 1 rsync rsync 0 2020-08-19 16:03 c.txt

-rw-r--r-- 1 rsync rsync 0 2020-08-19 16:03 d.txt

(与客户端同步,并删除了本身目录下的文件)


客户端需求:

客户端需求

1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02

2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02

3.客户端最后将备份的数据进行推送至备份服务器

4.客户端每天凌晨1点定时执行该脚本

5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间


脚本准备

[root@web01 ~]# hostname -I|awk '{print $1}'

172.16.1.7

[root@web01 ~]# date +%F

2020-08-19


[root@web01 ~]# echo `hostname`_`hostname -I|awk '{print $1}'`_`date +%F`

web01_172.16.1.7_2020-08-19


##打包备份到目录

[root@web01 ~]# cd /backup/

[root@web01 backup]# cd `hostname`_`hostname -I|awk '{print $1}'`_`date +%F`

[root@web01 web01_172.16.1.7_2020-08-19]# tar -zcf date.tar.gz /var/log/messages


[root@web01 web01_172.16.1.7_2020-08-19]# ll

总用量 108

-rw-r--r-- 1 root root 109347 2020-08-19 16:26 date.tar.gz


## 推送文件

[root@web01 ~]# rsync -avz /backup/`hostname`_`hostname -I|awk '{print $1}'`_`date +%F` [email protected]::backup

sending incremental file list

web01_172.16.1.7_2020-08-19/

web01_172.16.1.7_2020-08-19/date.tar.gz

sent 104,150 bytes  received 47 bytes  10,968.11 bytes/sec

total size is 109,347  speedup is 1.05


写脚本:

[root@web01 ~]# mkdir /scripts

[root@web01 ~]# vim /scripts/client.sh

#!bin/bash

#1,创建备份目录

mkdir -p /backup/`hostname`_`hostname -I|awk '{print $1}'`_`date +%F`

#2,打包备份文件

cd /backup/`hostname`_`hostname -I|awk '{print $1}'`_`date +%F`

tar -zcf date.tar.gz /var/log/messages

#3,推送文件

rsync -avz /backup/`hostname`_`hostname -I|awk '{print $1}'`_`date +%F` [email protected]::backup

~


[root@web01 ~]# sh /scripts/client.sh

tar: 从成员名中删除开头的“/”

sending incremental file list

web01_172.16.1.7_2020-08-19/date.tar.gz

sent 99,536 bytes  received 986 bytes  201,044.00 bytes/sec

total size is 109,361  speedup is 1.09


##可以执行,但是脚本太low,以下设置变量##

优化后的脚本如下:

[root@web01 ~]# vim /scripts/client.sh

#!bin/bash

DIR=/backup

HOST=`hostname`

IP=`hostname`_`hostname -I|awk '{print $1}'`

DATE=`date +%F`

SRC=${DIR}/${HOST}_${IP}_${DATE}

#1,创建备份目录

mkdir -p $SRC

#2,打包备份文件

cd $SRC

tar -zcf date.tar.gz /var/log/messages

#3,推送文件

rsync -avz $SRC [email protected]::backup


##生出30天的数据

[root@web01 ~]# for i in {1..30};do date -s 2020/08/$i;sh /scripts/client.sh ;done


##改时间,为了验证数据

[root@web01 ~]# date -s 2020/9/1

2020年 09月 01日 星期二 00:00:00 CST


## 删除7天前数据

[root@web01 ~]# find /backup/ -type d -mtime +7|xargs rm -rf

[root@web01 ~]# ll /backup/

drwxr-xr-x 2 root root 25 2020-08-25 00:00 web01_172.16.1.7_2020-08-25

drwxr-xr-x 2 root root 25 2020-08-26 00:00 web01_172.16.1.7_2020-08-26

drwxr-xr-x 2 root root 25 2020-08-27 00:00 web01_172.16.1.7_2020-08-27

drwxr-xr-x 2 root root 25 2020-08-28 00:00 web01_172.16.1.7_2020-08-28

drwxr-xr-x 2 root root 25 2020-08-29 00:00 web01_172.16.1.7_2020-08-29

drwxr-xr-x 2 root root 25 2020-08-30 00:00 web01_172.16.1.7_2020-08-30


最终脚本:

[root@web01 ~]# vim /scripts/client.sh

#!bin/bash

DIR=/backup

HOST=`hostname`

IP=`hostname -I|awk '{print $1}'`

DATE=`date +%F`

SRC=${DIR}/${HOST}_${IP}_${DATE}

#1,创建备份目录

mkdir -p $SRC

#2,打包备份文件

cd $SRC

tar -zcf date.tar.gz /var/log/messages

#3, 添加校验文件
md5sum ${DIR}/${HOST}_${IP}_${DATE}/date.tar.gz > $SRC/check.txt

#4,推送文件

rsync -avz $SRC [email protected]::backup

#5, 保留7天数据

find /backup/ -type d -mtime +7|xargs rm -rf

~



服务端:

服务端需求

1.服务端部署rsync,用于接收客户端推送过来的备份数据

2.服务端需要每天校验客户端推送过来的数据是否完整

3.服务端需要每天校验的结果通知给管理员

4.服务端仅保留6个月的备份数据,其余的全部删除[root@backup ~]# mkdir /scripts/



[root@backup ~]# vim /scripts/severs.sh


#!bin/bash

DIR=/backup

HOST=`hostname`

IP=`hostname -I|awk '{print $1}'`

DATE=`date +%F`

SRC=${DIR}/${HOST}_${IP}_${DATE}

#1,校验文件完整性

md5sum -c ${DIR}/*_${DATE}/check.txt


[root@backup ~]# sh /scripts/severs.sh

/backup/web01_172.16.1.7_2020-08-20/date.tar.gz: 确定

上一步前可能会有报错,如:

[root@backup ~]# sh /scripts/severs.sh

md5sum: /backup/*_2020-08-20/check.txt: 没有那个文件或目录


解决办法:

检查web端是否执行新的脚本;

删除/backup目录下的所有文件,重新生成30天数据;

也可单独执行查找哪里出错

[root@backup ~]# md5sum -c /backup/web01_172.16.1.7_2020-08-30/check.txt

/backup/web01_172.16.1.7_2020-08-30/date.tar.gz: 确定




[root@web01 ~]# crontab -e

#每天凌晨1点备份数据

00 01 * * * /bin/bash /scripts/cilent.sh &>/dev/null



##服务端下载邮箱

[root@backup ~]# yum install -y mailx

## 配置文件修改

[root@backup ~]# vim /etc/mail.rc

set [email protected]

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

set [email protected]

set smtp-auth-password=***

set smtp-auth=login

set ssl-verify=ignore

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

~


最终脚本更新为

[root@backup ~]# vim /scripts/severs.sh

#!bin/bash

DIR=/backup

HOST=`hostname`

IP=`hostname -I|awk '{print $1}'`

DATE=`date +%F`

SRC=${DIR}/${HOST}_${IP}_${DATE}

#1,校验文件完整性

md5sum -c ${DIR}/*_${DATE}/check.txt > ${DIR}/result.txt

#2,将验证结果发送给管理员邮箱

mail -s "数据校验结果" @qq.com < ${DIR}/result.txt

#3,删除180天数据

find /backup/ -type -d -mtime +180 | xgars rm -rf


[root@backup ~]# sh /scripts/severs.sh

就能收到邮箱的校验结果



二,rsync结合inotify,实时监控

安装在客户端(需要备份的服务器上)

[root@web01 ~]# yum install -y inotify-tools

[root@web01 ~]# vim rsyn-inotify.sh

#!/bin/bash

dir=/backup

/usr/bin/inotifywait  -mrq  --format '%w %f' -e create,delete,attrib,close_write  $dir | while read line;do

cd  $dir  && rsync -az -R  --delete  ./*  [email protected]::backup --password-file=/etc/rsync.passwd >/dev/null 2>&1

done  &

~


###  写入脚本里

[root@web01 ~]# vim /scripts/inotify.sh

#!/bin/bash

export RSYNC_PASSWORD=123456

dir=/backup

/usr/bin/inotifywait  -mrq  --format '%w %f' -e create,delete,attrib,close_write  $dir | while read line;do

cd  $dir  && rsync -az -R  --delete  ./*  [email protected]::backup >/dev/null 2>&1

done  &



## 执行

[root@web01 ~]# sh /scripts/inotify.sh


## 实验

在web的backup里创建

到backup服务器到backup目录下查看

[root@web01 ~]# cd /backup/

[root@web01 backup]# touch 33.txt


[root@backup backup]# ll

-rw-r--r-- 1 rsync rsync  0 2020-08-24 15:20 33.txt



三,NFS 实战


服务端:

1,##防火墙,selinux关闭

[root@nfs ~]# systemctl stop firewalld

[root@nfs ~]# systemctl disable firewalld

[root@nfs ~]# vim /etc/selinux/config

SELINUX=enforcing 改为 SELINUX=disable 或

sed -i 's#SELINUX=enforcing#SELINUX=disable#' /etc/selinux/config

setenforce 0临时关闭


2,## 安装

[root@nfs ~]# yum install -y nfs-utils rpcbind


3,##设置配置

[root@nfs ~]# vim /etc/exports

/data 172.16.1.0/24(rw,sync,all_squash)


3,## 主,组设置

[root@nfs ~]# chown -R nfsnobody.nfsnobody /date


[root@nfs ~]# id nfsnobody

uid=65534(nfsnobody) gid=65534(nfsnobody) 组=65534(nfsnobody)



##启动服务

[root@nfs ~]# systemctl start rpcbind nfs-server

## 检查是否运行

[root@nfs ~]# ps -ef|grep nfs

##验证

[root@nfs ~]# cat /var/lib/nfs/etab

/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,all_squash)

(如果配置设置错了,cat不出任何内容)



客户端:

##关闭防火墙和selinux

[root@web01 ~]# systemctl stop firewalld

[root@web01 ~]# systemctl diasble firewalld

[root@web01 ~]# vim /etc/selinux/config

[root@web01 ~]# setenforce

usage:  setenforce [ Enforcing | Permissive | 1 | 0 ]


##下载(下载nfs只为了showmount)

[root@web01 ~]# yum install -y nfs-utils rpcbind


## 查看挂载点
[root@web01 ~]# showmount -e 172.16.1.31

Export list for 172.16.1.31:

/date 172.16.1.0/24


##启动服务并挂载

[root@web01 ~]# systemctl start rpcbind

[root@web01 ~]# mount -t nfs 172.16.1.31:/date /backup/


[root@web01 ~]# df -h

文件系统          容量  已用  可用 已用% 挂载点

/dev/sda3          19G  1.2G  18G    7% /

devtmpfs          476M    0  476M    0% /dev

tmpfs              487M    0  487M    0% /dev/shm

tmpfs              487M  7.7M  479M    2% /run

tmpfs              487M    0  487M    0% /sys/fs/cgroup

/dev/sda1          497M  120M  378M  25% /boot

tmpfs              98M    0  98M    0% /run/user/0

172.16.1.31:/date  19G  1.2G  18G    7% /backup

测试

客户端:

[root@web01 ~]# cd /backup/

[root@web01 backup]# ll

总用量 0

[root@web01 backup]# touch 1.txt


服务端:

[root@nfs ~]# ll /date/

总用量 0

-rw-r--r-- 1 nfsnobody nfsnobody 0 2020-08-24 13:03 1.txt

你可能感兴趣的:(rsync备份 & nfs 文件互传& inotify实时监控)