一 NFS服务
基本概述
NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网, NFS用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS
为什么使用NFS
1.实现多台服务器之间数据共享
2.实现多台服务器之间数据一致
二 NFS 应用
nfs原理
1.用户访问NFS客户端,将请求转化为函数
2.NFS通过TCP/IP连接服务端
3.NFS服务端接收请求,会先调用portmap进程进行端口映射
4.Rpc.nfsd进程用于判断NFS客户端能否连接服务端;
5.Rpc.mount进程用于判断客户端对服务端的操作权限
6.如果通过权限验证,可以对服务端进行操作,修改或读取
NFS配置详解
[root@nfs ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
rw 读写权限
ro 只读权限
all_squash 当NFS客户端以任意⽤户访问时,修改权限为NFS服务器的匿名⽤户(常⽤)
anonuid 配合all_squash,指定匿名⽤户的uid,⽤户为系统⽤户,必须存在
anongid 配合all_squash,指定匿名⽤户的gid
sync 同时将数据写⼊内存和磁盘(保证数据不丢失)
async 优先将数据写⼊内存,再写⼊硬盘;效率⾼,但是会丢失数据
root_squash 当NFS客户端以root访问时,修改权限为NFS服务器的匿名⽤户(不常⽤)
no_root_squash 当NFS客户端以root访问时,修改权限为NFS服务器的root⽤户(⼏乎不⽤)
no_all_squash 当NFS客户端以任意⽤户访问时,不修改权限(不常⽤)
NFS存储优点
1.NFS⽂件系统简单易⽤、⽅便部署、数据可靠、服务稳定、满⾜中⼩企业需求。
2.NFS⽂件系统内存放的数据都在⽂件系统之上,所有数据都是能看得⻅。
NFS局限性
1.存在单点故障, 如果构建⾼可⽤维护麻烦web->nfs()->backup
2.NFS数据明⽂, 并不对数据做任何校验。
3.客户端挂载NFS服务没有密码验证, 安全性⼀般(内⽹使⽤)
NFS应⽤建议
1.⽣产场景应将静态数据尽可能往前端推, 减少后端存储压⼒
2.必须将存储⾥的静态资源通过CDN缓存jpgpngmp4avicssjs
3.如果没有缓存或架构本身历史遗留问题太⼤, 在多存储也⽆⽤
三 下载Nginx
# 准备两台机器
web1 192.168.15.7
web2 192.168.15.8
# 两台机器分别添加nginx.repo : http://nginx.org/en/linux_packages.html#RHEL-CentOS
[root@web1 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[root@web1 ~]# yum clean all
[root@web1 ~]# yum makecache
[root@web1 ~]# yum install nginx -y
[root@web1 ~]# systemctl start nginx
四 NFS实际体验
案例需求:
web服务器访问的页面能够实时的备份到backup服务器
web服务器的数据是要共享
web01和web02 ----> nginx /usr/share/nginx/html
nfs ----> 配置一个挂载点,建立一个监控
backup ----> 备份仓库
1、环境准备
2、backup服务器搭建rsync服务端
## 0.关闭selinux与firewalld防火墙
[root@backup ~] systemctl stop firewalld
[root@backup ~] setenforce 0
[root@backup ~] sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
## 1、安装并配置rsync守护进程模式
[root@backup ~] yum install -y rsync
[root@backup ~] vim /etc/rsyncd.conf
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 200
ignore errors
read only = false
list = true
auth users = dandan
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = "该备份文件是web端挂载到nfs服务器的文件"
path = /backup
## 2、创建用户
[root@backup ~] groupadd www -g 666
[root@backup ~] useradd www -u 666 -g 666
## 3、创建密码文件并授权
[root@backup ~] echo "dandan:111" > /etc/rsync.passwd
[root@backup ~] chmod 600 /etc/rsync.passwd #授权
## 4、创建真实目录并授权
[root@backup ~] mkdir /backup
[root@backup ~] chown -R www.www /backup
## 5、启动服务
[root@pbackup ~] systemctl start rsyncd
[root@backup ~] ps -ef |grep rsyncd #验证启动
root 25733 1 00:00:00 /usr/bin/rsync --daemon --nodetach
3、NFS服务器搭建(NFS作为backup的服务端)
## 0.关闭selinux与firewalld防火墙
[root@nfs ~] systemctl stop firewalld
[root@nfs ~] setenforce 0
[root@nfs ~] sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
## 1安装NFS、rpcbind服务
[root@nfs ~] yum install -y nfs-utils rpcbind
### 2、配置NFS
[root@nfs ~] vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
## 3、创建用户
[root@nfs ~] groupadd www -g 666
[root@nfs ~] useradd www -u 666 -g 666
## 4、创建目录并授权
[root@nfs ~] mkdir /data
[root@nfs ~] chown -R www.www /data
## 5、启动服务、验证配置
[root@nfs ~] systemctl start nfs rpbind # rpcind Cenots默认已经启动且安装过
[root@nfs ~] cat /var/lib/nfs/etab
/data
172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_su
btree_check,secure_locks,acl,no_pnfs,anonuid=666,anongid=666,sec=sys,rw,secure,r
oot_squash,all_squash)
4、NFS服务器实时备份data目录到rsync
### 1、安装inotify-tools
[root@ nfs ~] yum install -y inotify-tools
## 2、编写、启动脚本
[root@nfs ~] vim rsyn-inotify.sh
#!/bin/bash
export RSYNC_PASSWORD=111
dir=/data
/usr/bin/inotifywait -mrq --format '%w %f' -e create,delete,attrib,close_write $dir | while read line;do
cd $dir && rsync -az -R --delete . dandan@172.16.1.41::backup
>/dev/null 2>&1
done &
## 3.启动服务、验证配置
[root@nfs ~] sh rsyn-inotify.sh
[root@nfs ~] ps -ef |grep rsyn
root 9224 1 0 15:30 pts/0 00:00:00 sh rsyn-inotify.sh
5、web 01和 web 02搭建上传案例代码 具体步骤 (2台服务器操作一样)
## 0.关闭防火墙与selinux
[root@web01 ~]# systemctl stop firewalld
[root@web01 ~]# setenforce 0
[root@web01 ~]# sed -i '/^SELINUX=/c SELINUX=disabled' /etc/selinux/config
## 1.编写nginxg官方源,并下载安装软件
[root@web01 ~]# vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
## 2.清空缓存与生成缓存
[root@web01 ~]# yum clean all
[root@web01 ~]# yum makecache
## 3.下载nginx软件
[root@web1 ~]# yum install -y nginx
## 4.配置网站代码
[root@web01 ~]# rz #上传案例压缩包
[root@web01 ~]# unzip anli.zip -d /usr/share/nginx/html/ # 解压到nginx目录
[root@web01 ~]# ll
total 80
-rw-r--r--. 1 root root 38772 Apr 27 2018 bg.jpg
-rw-r--r--. 1 root root 2633 May 4 2018 index.html
-rw-r--r--. 1 root root 52 May 10 2018 info.php
-rw-r--r--. 1 root root 26995 Nov 22 16:47 anli.zip
-rw-r--r--. 1 root root 1192 Jan 10 2020 upload_file.php
## 4. 创建用户
[root@web01 ~]# groupadd www -g 666
[root@web01 ~]# useradd www -u 666 -g 666
## 5. 修改站点目录权限
[root@web01 html]# chown -R www.www /usr/share/nginx/html/
## 6.启动服务、验证配置
[root@web01 ~] # systemctl start nginx
[root@web01 ~] # ps -ef | grep nginx
## 7、安装rpcbind、nfs并查看挂载点
[root@web01 ~]# yum install -y nfs-utils rpcbind
[root@web01 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
## 8、挂载并验证
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /usr/share/nginx/html
[root@web01 ~]# df -h #验证挂载
172.16.1.31:/data /usr/share/nginx/html
7、访问并测试
# 1.直接进IE浏览器输入IP页面
192.168.15.7
192.168.15.8
# 2、上传案例测试,页面成功