Day 42  Rsync和Nfs

第1章 Rsync

1.1 客户端需求

1.客户端每天凌晨01点在服务器本地打包备份(系统配置文件、日志文件、其他目录、应用配置等文件)

2.客户端备份的数据必须存放至以主机名_IP地址_当前时间命名的目录中, /backup/nfs-server_172.16.1.31_2018-09-02

3.客户端最后通过rsync推送本地已打包好的备份文件至backup服务器

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

1.2 服务端需求   /backup/

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

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

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

4.服务端仅保留6个月的备份数据,其余的全部删除

注意:所有服务器的备份目录必须都为/backup

 

1.3 脚本,每天01定时执行一次(打包->标记->推送->备份服务器->保留最近7天的文件)

#批量执行

for i in {1..30};do date -s 2018/08/$i && sh /server/scripts/client_rsync_backup.sh;done

[root@nfs scripts]# cat /server/scripts/client_rsync_backup.sh

#!/usr/bin/bash

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

1.3.1 定义变量

Host=$(hostname)

Addr=$(ifconfig eth1|awk 'NR==2{print $2}')

Date=$(date +%F)

Dest=${Host}_${Addr}_${Date}

Path=/backup

1.3.2 创建备份目录

[ -d $Path/$Dest ] || mkdir -p $Path/$Dest

1.3.3 备份对应的文件

cd / && \

[ -f $Path/$Dest/system.tar.gz ] || tar czf $Path/$Dest/system.tar.gz etc/fstab etc/rsyncd.conf && \

[ -f $Path/$Dest/log.tar.gz ] || tar czf $Path/$Dest/log.tar.gz  var/log/messages var/log/secure && \

1.3.4 携带md5验证信息

[ -f $Path/$Dest/flag ] || md5sum $Path/$Dest/*.tar.gz >$Path/$Dest/flag

1.3.5 推送本地数据至备份服务器

export RSYNC_PASSWORD=1

rsync -avz $Path/ [email protected]::backup

1.3.6 本地保留最近7天的数据

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

1.4 校验的压缩包(邮箱->md5->结果保存下来->将保存的结果发送给管理员->保留最近180天的数据)

1.4.1 配置邮箱(配发件服务器)

yum install mailx -y

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 ~]# mkdir /server/scripts -p

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

#!/usr/bin/bash

 

1.4.2 定义全局的变量

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

1.4.3 定义局部变量

Path=/backup

Date=$(date +%F)

1.4.4 查看flag文件,并对该文件进行校验, 然后将校验的结果保存至result_时间

find $Path/*_${Date} -type f -name "flag"|xargs md5sum -c >$Path/result_${Date}

1.4.5 将校验的结果发送邮件给管理员

mail -s "Rsync Backup $Date" [email protected] <$Path/result_${Date}

1.4.6 删除超过7天的校验结果文件, 删除超过180天的备份数据文件

find $Path/ -type f -name "result*" -mtime +7|xargs rm -f

find $Path/ -type d -mtime +180|xargs rm -rf

 

1.5 如何增加在一台服务器的备份

    1.准备一台服务器(克隆)

    2.使用xshell连接服务器

    3.拷贝nfs服务器上的备份脚本(打包的内容)

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

        [root@web01 ~]# sh /server/scripts/client_rsync_backup.sh

   

1.6 Rsync推送和拉取

Rsync守护进程(1.安装  2.配置  3.启动 4.加入开机自启动  5.检查  6.出错看日志 ERROR

demo:将客户端nfs基础的数据打包->推送->backup服务器

       将多台服务器的备份数据推送到->backup服务器->1.先校验->2.发送校验结果至管理员

第2章 Nfs

2.1 什么是Nfs

NFSNetwork File System的缩写及网络文件系统。

主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录

2.2 为什么要使用NFS服务进行数据存储

    1.实现多台服务器之间数据共享

    2.实现多台服务器之间数据的一致

2.3 本地文件操作方式(本地调用)

  当用户执行mkdir命令, 该命令会通过shell解释器翻译给内核,由内核解析完成后驱动硬件,完成相应的操作。

2.4 NFS实现原理(需要先了解[程序|进程|线程])

2.4.1 用户进程访问NFS客户端,使用不同的函数对数据进行处理

2.4.2 NFS客户端通过TCP/IP的方式传递给NFS服务端。

2.4.3 NFS服务端接收到请求后,会先调用portmap进程进行端口映射。

2.4.4 nfsd进程用于判断NFS客户端是否拥有权限连接NFS服务端。

2.4.5 Rpc.mount进程判断客户端是否有对应的权限进行验证。

2.4.6 idmap进程实现用户映射和压缩

2.4.7 最后NFS服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件。

2.5 rpc是一个远程过程调用,那么使用nfs必须有rpc服务

2.5.1 安装nfs

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

2.5.2 配置nfs

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

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

如果想要把/data目录共享给172.16.1.0/24网段内的所有主机

    1.主机都拥有读写权限

    2.在将数据写入到NFS服务器的硬盘中后才会结束操作,最大限度保证数据不丢失

    3.将所有用户映射为本地的匿名用户(nfsnobody)

2.5.3 创建对应的目录

[root@nfs ~]# mkdir /data

2.5.4 启动服务,并将服务加入开机自启动

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

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

2.5.5 检查端口

[root@nfs ~]# 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:2049            0.0.0.0:*     LISTEN      -                     

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

2.5.6 检查共享的内容

[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,secure,root_squash,all_squash)

2.5.7 检查匿名用户对应的真实账户,并授权共享目录为nfsnobody

[root@nfs ~]# grep "65534" /etc/passwd

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

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

2.5.8 配置客户端

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

[root@web01 ~]# systemctl enable rpcbind

[root@web01 ~]# systemctl start rpcbind

[root@web01 ~]# showmount -e 172.16.1.31

Export list for 172.16.1.31:

/data 172.16.1.0/24

2.5.9 配置客户端-创建挂载点目录,执行挂载命令

[root@web01 ~]# mkdir /data

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

[root@web01 ~]# df -h

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

172.16.1.31:/data         50G  2.6G   48G    6% /data

2.5.10 测试客户端是否拥有写的权限

[root@web01 ~]# echo "123" > /data/test

[root@web01 ~]# ll /data/

总用量 4

-rw-r--r-- 1 nfsnobody nfsnobody 4 9   6 03:41 test

2.5.11 卸载本地客户端的挂载信息

[root@web01 ~]# umount /data/

[root@web01 ~]# ll /data/

总用量 0

2.5.12 检查nfs客户端是否存在数据

[root@nfs ~]# ll /data/

总用量 4

-rw-r--r-- 1 nfsnobody nfsnobody 4 9   6 03:41 test