实现多台 web 服务器可以共享数据资源,只需要把各个 web 服务器的数据存储独立出来,存放在一个 NFS 服务器中,web 服务器需要资源时访问 NFS 获取即可
NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网, NFS用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS,ceph
1.用户访问NFS客户端,将请求转化为函数
2.NFS通过TCP/IP连接服务端
3.NFS服务端接收请求,会先调用portmap进程进行端口映射
4.Rpc.nfsd进程用于判断NFS客户端能否连接服务端;
5.Rpc.mount进程用于判断客户端对服务端的操作权限
6.如果通过权限验证,可以对服务端进行操作,修改或读取
安装 nfs-utils 和 rpcbind
yum install nfs-utils rpcbind -y
修改配置文件,配置挂载点(/etc/exports)
vim /etc/exports
[挂载点] [允许访问的客户端网段]([权限])
/web/nfs1 172.16.1.0/20(rw,all_sqush,sync)
创建挂载点
mkdir -p /web/nfs{1..9}
给挂载点授权(修改属主和属组)
# 因为参数 all_squash,无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
所以使用 nfsnobody
chown -R nfsnobody.nfsnobody /web
关闭防火墙
setenforce 0
systemctl disable --now firewolld
启动 NFS 和 rpcbind 服务
systemctl start nfs-server
systemctl start rpcbind
测试服务端是否正常
showmount -e [服务端的地址,默认是本机地址]
[root@nfs web]# showmount -e
Export list for nfs:
/web/upload 172.16.1.0/20
记得格式化挂载点
mkfs.xfs /web/nfs1
安装 nfs-utils
yum install nfs-utils -y
注意 : 客户端和服务端都需要安装 nfs-utils
创建目录
mkdir /web/nfs
挂载 NFS
mount -t nfs 172.16.1.31:/web/nfs1 /web/nfs
-t : 指定是挂载 nfs 类型
注意 : 在进行挂载之前要格式化 nfs 的挂载点
测试 NFS 同步功能
在 web01 中的挂载目录 /web/nfs 中创建文件
查看 nfs 挂载点中是否同步了数据
nfs共享参数
参数作用
rw
读写权限 (常用)
ro
只读权限 (不常用)
root_squash
当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户 (不常用)
no_root_squash
当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员 (不常用)
all_squash
无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户 (常用)
no_all_squash
无论NFS客户端使用什么账户访问,都不进行压缩 (不常用)
sync
同时将数据写入到内存与硬盘中,保证不丢失数据 (常用)
async
优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 (不常用)
anonuid
配置all_squash使用,指定NFS的用户UID,必须存在系统 (常用)
anongid
配置all_squash使用,指定NFS的用户GID,必须存在系统 (常用)
rw、ro
root_squash
no_root_squash
all_squash
no_all_squash
sync
async
anonuid
anongid
为了使得 nfs 服务端中的文件所有客户端机子都方便读取
显然文件的属组和属主不一样是非常不方便的
可以把服务端中的所有挂载点文件都改为统一用户和用户组 www,每个客户端创建和访问数据文件都需要使用 www 用户,这样方便每个客户端机子对公共数据的存取
groupadd www -g 666
useradd www -u 666 -g 666 -M -r -s /sbin/nologin
chown -R www.www /web
vim /etc/exports
/web/nfs1 172.16.1.0/20(rw,all_squash,sync,anonuid=666,anongid=666)
systemctl restart nfs-server
systemctl restart rpcbind
[root@web01 ~]# umount /web/nfs
[root@web01 ~]# mount -t nfs 172.16.1.31:/web/nfs1 /web/nfs
yum -y httpd php php-devel
# 下载好 web 软件之后会自动生成网站根目录 /var/www
cd /var/www/html
解压代码文件
unzip xxx
上传网页代码
# 创建 html 目录下 的 upload 文件夹,接收上传的文件
chown -R www.www /var/www/html
setenforce 0
systemctl disable --now firewalld
vim /etc/httpd/conf/httpd.conf
User www
Group www
# 缺失这一步,同步数据时会出错,因为原用户没有访问权限
systemctl start httpd
用什么 IP 操作 web 的,就用什么 IP 登录,我用公网 IP
访问
http://192.168.15.7/upload/1_linux.jpg
# 注意 : 要在根目录 /var/www/html 目录中添加文件夹 upload 文件夹,且上传的文件要命名为 1_xxx
vim /etc/exports
/web/upload 172.16.1.0/20(rw,sync,all_squash,anonuid=666,anongid=666)
要新建一个挂载点来存放 web 上传的文件
mkdir /web/upload
chown www.www /web/upload
systemctl restart nfs-server rpcbind
# 所有客户端机子都要安装 web 服务软件,修改其用户名为 www ,并创建好 www 系统用户
[root@web03 conf]# groupadd www -g 666
[root@web03 conf]# useradd www -u 666 -g 666 -M -r -s /sbin/nologin
[root@web02 html]# vim /etc/httpd/conf/httpd.conf
User www
Group www
[root@web02 html]# systemctl start httpd
# 注意 : 如果挂载不了,应该是客户端没有下载 NFS 软件
yum -y install nfs-utils
mount -t nfs 172.16.1.31:/web/upload /var/www/html/upload
在不同服务器(客户端)中上传的图片,每一个不同的客户端都能共享,查找得到,实现了资源同步共享
还可以玩游戏
手机扫一扫
移动阅读更方便
你可能感兴趣的文章