NFS 共享存储

Posted 223zhp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NFS 共享存储相关的知识,希望对你有一定的参考价值。

课前回顾 及 NFS 共享存储

一、Rsync

备份,基于ssh协议

备份的方式

全备:备份所有的(完整的)数据

增备:基于上一次备份,增量的数据

Rsync的三种工作模式

1.本地模式

类似于cp命令

#拷贝文件
[root@backup ~]# rsync /etc/passwd ./
?
#拷贝目录
[root@backup ~]# rsync -avz /etc/ ./
[root@backup ~]# rsync -avz /etc /tmp

加/和不加/的区别

加/:拷贝目录下的所有文件

不加/:拷贝目录本身及目录下的所有文件

 

2.远程模式

类似于scp

#推:push
[root@backup ~]# rsync -avz /root/zls root@172.16.1.7:/root
?
#拉:pull
[root@web01 ~]# rsync -avz root@172.16.1.41:/root/zls /root

 

3.守护进程

服务端:172.16.1.41

1)安装Rsync

yum install -y rsync

2)配置rsync

[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
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
#####################################
[zls]
comment = welcome to oldboyedu backup!
path = /backup

3)创建系统用户

useradd rsync -s /sbin/nologin -M

4)创建backup目录

mkdir /backup
chown -R rsync.rsync /backup

5)创建虚拟用户的密码文件

echo ‘rsync_backup:123‘ > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd

6)启动服务

systemctl start rsyncd
systemctl enable rsyncd

7)检测启动是否成功

ps -ef|grep rsyncd
netstat -lntup

 

客户端:172.16.1.7

1)安装rsync

yum install -y rsync

2)配置密码文件

echo ‘123456‘ > /etc/pass
chmod 600 /etc/pass

3)免密的两种方式

#指定密码文件
--password-file=/etc/pass
?
#添加环境变量
export RSYNC_PASSWORD=123456
主机名作用外网IP内网IP
web01 客户端 10.0.0.7 172.16.1.7
backup 服务端 10.0.0.41 172.16.1.41
客户端需求:

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

mkdir -p /backup/$(hostname)_$(ifconfig eth1|awk ‘NR==2print $2‘)_$(date +%F)
?
#!/bin/bash
?
PATH=‘/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin‘
H=`hostname`
I=`ifconfig eth1|awk ‘NR==2print $2‘`
D=`date +%F`
S=$H_$I_$D
BD=/backup
export RSYNC_PASSWORD=123
?
mkdir -p $BD/$S

 

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

[root@web01 ~]# tar zcf /backup/nfs_172.16.1.31_2018-09-02/conf.tar.gz /etc/passwd 
?
#!/bin/bash
?
PATH=‘/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin‘
H=`hostname`
I=`ifconfig eth1|awk ‘NR==2print $2‘`
D=`date +%F`
S=$H_$I_$D
BD=/backup
export RSYNC_PASSWORD=123
?
mkdir -p $BD/$S
?
tar zcf $BD/$S/conf.tar.gz /etc/passwd

 

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

export RSYNC_PASSWORD=123
rsync -az $BD/ rsync_backup@172.16.1.41::zls

 

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

[root@web01 ~]# crontab -e
#每天凌晨一点备份重要数据 By:zls At:2019-08-02
00 01 * * * /bin/sh /root/rsync.sh &>/dev/null

 

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

find $BD -type d -mtime +7|xargs rm -fr
?
#!/bin/bash
?
PATH=‘/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin‘
H=`hostname`
I=`ifconfig eth1|awk ‘NR==2print $2‘`
D=`date +%F`
S=$H_$I_$D
BD=/backup
export RSYNC_PASSWORD=123
?
mkdir -p $BD/$S
?
tar zcf $BD/$S/conf.tar.gz /etc/passwd
?
rsync -az $BD/ rsync_backup@172.16.1.41::zls
?
find $BD -type d -mtime +7|xargs rm -fr

 

客户端脚本:

[root@web01 ~]# vim rsync.sh 
#!/bin/bash
PATH=‘/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin‘
H=`hostname`
I=`ifconfig eth1|awk ‘NR==2print $2‘`
D=`date +%F`
S=$H_$I_$D
BD=/backup
export RSYNC_PASSWORD=123
mkdir -p $BD/$S
tar zcf $BD/$S/conf.tar.gz /etc/passwd &>/dev/null
md5sum $BD/$S/conf.tar.gz > /backup/$I.txt
rsync -az $BD/ rsync_backup@172.16.1.41::zls
find $BD -type d -mtime +7|xargs rm -fr

 

 

服务端需求:

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

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

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

#!/bin/bash
PATH=‘/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin‘
H=`hostname`
I=`ifconfig eth1|awk ‘NR==2print $2‘`
D=`date +%F`
S=$H_$I_$D
BD=/backup
?
md5sum -c $BD/*.txt|mail -s "$D:校验结果" 133411023@qq.com

 

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

#!/bin/bash
PATH=‘/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin‘
H=`hostname`
I=`ifconfig eth1|awk ‘NR==2print $2‘`
D=`date +%F`
S=$H_$I_$D
BD=/backup
?
md5sum -c $BD/*.txt|mail -s "$D:校验结果" 133411023@qq.com
find $BD -type d -mtime +180|xargs rm -fr

 

二、NFS

NFS基本概述

共享存储,文件服务器

NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网, NFS用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS,ceph

为什么要使用共享存储

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

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

 

NFS应用场景

集群没有共享存储的情况

1.A用户上传图片经过负载均衡,负载均衡将上传请求调度至WEB1服务器上。

2.B用户访问A用户上传的图片,此时B用户被负载均衡调度至WEB2上,因为WEB2上没有这张图片,所以B用户无法看到A用户传的图片。

技术图片

 

集群有共享存储

1.A用户上传图片无论被负载均衡调度至WEB1还是WEB2, 最终数据都被写入至共享存储

2.B用户访问A用户上传图片时,无论调度至WEB1还是WEB2,最终都会上共享存储访问对应的文件,这样就可以访问到资源了

技术图片

NFS的工作原理

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

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

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

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

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

6.idmap进程实现用户映射和压缩7.最后NFS服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件。

技术图片

NFS部署

1.环境准备

主机名角色外网IP内网IP
backup nfs的客户端 10.0.0.41 172.16.1.41
nfs nfs的服务端 10.0.0.31 172.16.1.31
web01 nfs的客户端 10.0.0.7 172.16.1.7

2.关闭防火墙和selinux

#1.关闭Firewalld防火墙
[root@nfs ~]# systemctl disable firewalld
[root@nfs ~]# systemctl stop firewalld

#2.关闭selinux防火墙
[root@nfs ~]# sed -ri ‘#^SELINUX=#cSELINUX=Disabled‘ /etc/selinux/config
[root@nfs ~]# setenforce 0

3.安装nfs服务端

yum -y install nfs-utils rpcbind

4.启动rpcbind

#启动rpcbind
[root@nfs01 ~]# systemctl start rpcbind 

#添加开机自启
[root@nfs01 ~]# systemctl enable rpcbind

 

5.检测端口和进程

[root@nfs01 ~]# ps -ef|grep rpc
rpc       11746      1  0 01:12 ?        00:00:00 /sbin/rpcbind -w
root      11750  11421  0 01:15 pts/1    00:00:00 grep --color=auto rpc

[root@nfs01 ~]# netstat -lntup|grep 111
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
udp        0      0 0.0.0.0:111             0.0.0.0:*                           1/systemd           
udp6       0      0 :::111                  :::*                                1/systemd   

6.编辑配置文件

[root@nfs01 ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

6.1创建/data目录,www用户和组

[root@nfs01 data]# mkdir /data
[root@nfs01 data]# groupadd www -g 666
[root@nfs01 data]# useradd www -u 666 -g 666
[root@nfs01 data]# chown -R www.www /data

6.2启动NFS、RPCBIND

[root@nfs01 ~]# systemctl restart rpcbind nfs-server

7.部署NFS客户端

yum install -y rpcbind nfs-utils

8.启动rpcbind

#只启动rpcbind
[root@web01 ~]# systemctl start rpcbind
[root@backup ~]# systemctl start rpcbind

9.查看可挂载点

[root@backup ~]# showmount -e 172.16.1.31

10.挂载目录

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

11.设置web、backup的用户权限

#安装服务,httpd(apache)和php
yum install -y httpd php 

#创建www用户和组
[root@backup html]# groupadd www -g 666
[root@backup html]# useradd www -u 666 -g 666

#修改httpd的配置文件
vim /etc/httpd/conf/httpd.conf
User www
Group www
#重启服务
[root@web01 html]# systemctl restart httpd
#查看
[root@web01 html]# ps -ef|grep httpd

 

代码部署步骤

1.安装服务,httpd(apache)和php

yum install -y httpd php  

2.查找httpd的站点目录

[root@web01 html]# rpm -ql httpd|grep html
[root@web01 html]# rz windows-提交作业代码.zip
[root@web01 html]# yum install -y unzip
[root@web01 html]# unzip windows-提交作业代码.zip

3.修改上传目录

#修改上传目录
[root@backup ~]# vim /var/www/html/upload_file.php
$wen="/var/www/html/tupian";

#创建目录并授权cd
[root@web01 html]# mkdir tupian
[root@web01 html]# chown -R www.www tupian/

#挂载共享存储
[root@web01 html]# mount -t nfs 172.16.1.31:/data /var/www/html/tupian

 

4.启动服务

systemctl restart httpd

 

 

 

 

以上是关于NFS 共享存储的主要内容,如果未能解决你的问题,请参考以下文章

NFS共享存储

3-NFS-共享存储

NFS共享存储

NFS共享存储服务

NFS共享存储

NFS共享存储服务