- NFS服务介绍
- NFS配置文件
- NFS工具
- 自动挂载
- 实验:实现基于NFS共享的LAMP wordpress的应用
一、NFS服务介绍
(一)NFS简介
NFS(Network File System):网络文件系统,用户和程序可以像访问本地文件一样访问远端系统上的文件
NFS基于RPC(Remote Procedure Call)远程过程调用实现,RPC基于C/S架构实现
NFS优势:节省本地存储空间
NFS发展:目前为v4版本,实现了伪根,增强了安全特性(kerberos)
(二)NFS服务
软件包:nfs-utils,默认系统安装
Kernel支持:nfs.ko
-
服务开启、关闭
- CentOS 7:
systemctl start|stop nfs-server
- CentOS 6:
service nfs start|stop
- CentOS 7:
-
端口:2049(nfsd),其它端口由portmap/rpcbind(111)分配
- 使用
ss -ntlp
命令查看端口,端口111的进程为rpcbind
- 使用
rpcinfo -p
查看rpc注册程序,端口111的进程为portmapper
- CentOS6开始portmap进程由rpcbind代替
- 使用
配置文件:/etc/exports, /etc/exports.d/*.exports
相关软件包:rpcbind(必须),tcp_wrappers
-
NFS服务主要进程
- rpc.nfsd:最主要的NFS进程,管理客户端是否可登录
- rpc.mountd:挂载和卸载NFS文件系统,包括权限管理
- rpc.lockd:非必要,管理文件锁,避免同时写出错
- rpc.statd:非必要,检查文件一致性,可修复文件
日志:/var/lib/nfs/
二、NFS配置文件
(一)配置文件格式
格式:
/dir 主机1(opt1,opt2) 主机2(opt1,opt2)...
/dir: 共享目录路径
-
主机格式
- 单个主机:ipv4, ipv6, FQDN
- IP networks:两种掩码格式均支持
172.18.0.0/255.255.0.0
172.18.0.0/16 - wildcards:主机名通配,例如*.magedu.com,不能应用于IP地址
- anonymous:表示使用*通配所有客户端
-
每个条目指定目录导出到的哪些主机,及相关的权限和选项
- 默认选项:(ro,sync,root_squash,no_all_squash)
- ro,rw:只读和读写
- async:异步,数据变化后不立即写磁盘,性能高
- sync:同步,数据在请求时立即写入共享,安全性高
- no_all_squash:保留远程用户建立共享文件的UID和GID
- all_squash:所有远程用户(包括root)都映射成nfsnobody
- root_squash:远程root映射为nfsnobody,UID为65534
- no_root_squash:远程root映射成root用户,优先级低于all_squash
- anonuid和anongid:指明匿名用户映射为特定用户UID和组GID,而非nfsnobody,可配合all_squash使用
(二)实验1:建立NFS共享目录/app/nfsfile1, /app/nfsfile2
实验要求
/app/nfsfile1目录:192.168.136.0网段的主机可以登录,支持读写,所有用户都映射为testuser
/app/nfsfile2 目录:只有192.168.136.129主机可以登录,支持读写,远程root映射为root用户实验步骤:
// 建立testuser用户
useradd testuser
id testuser
uid=1002(testuser) gid=1002(testuser) groups=1002(testuser)
// 编辑NFS服务配置文件
vim /etc/exports.d/nfsfile1.exports
/app/nfsfile1 192.168.136.0/24(rw,all_squash,anonuid=1002,anongid=1002)
vim /etc/exports.d/nfsfile2.exports
/app/nfsfile2 192.168.136.129(rw,no_root_squash)
// 建立相关共享文件目录
mkdir /app/nfsfile1
mkdir /app/nfsfile2
touch /app/nfsfile1/file1
touch /app/nfsfile2/file2
setfacl -R -m u:testuser:rwx /app/nfsfile1
// 重新载入配置
exportfs -r
exportfs -v
-
实验测试:
- 挂载共享目录/app/nfsfile1,可以看到root和普通用户都映射为testuser用户(uid=1002, gid=1002)
- 挂载共享目录/app/nfsfile2,可以看到非192.168.136.129的主机不能成功挂载;挂载成功后,root用户没有被映射为nobody,而普通用户由于之前在NFS服务器上未设置写权限,无权建立文件,说明NFS服务支持读写需要NFS服务和服务器文件系统两方面同时授权才可以
(三)实验2:实现NFS伪根
NFS客户端通常需要分别挂载NFS服务器上的共享目录
在NFS服务器建立伪根目录,将需要共享的目录全部挂载到伪根目录上,即可实现NFS客户端一次性将不同目录挂载到一个挂载点上
实验:通过NFS伪根一次性挂载共享目录/app/ftpsite和/var/log
// 建立伪根目录
mkdir /exports
mkdir /exports/ftpsite
mkdir /exports/log
// 将共享目录挂载到伪根目录的子目录
mount -B /app/ftpsite /exports/ftpsite/
mount -B /var/log /exports/log/
setfacl -m u:nfsnobody:rwx /app/ftpsite // 给远程主机root用户开放写权限
// 编辑配置文件
vim /etc/exports
/exports *(fsid=0,rw,crossmnt)
/exports/ftpsite *(rw)
/exports/log *(ro)
// 配置文件生效
exportfs -r
可以看到,/exports目录充当了伪根,实现多个目录一次挂载,并且每个目录的配置都生效了:ftpsite目录可以写入,log目录不可以写入文件
三、NFS工具
-
rpcinfo
- rpcinfo -p hostname:详细列明RPC注册程序
- rpcinfo -s hostname:简略列明RPC注册程序
-
exportfs
- -v:查看本机所有NFS共享
- -r:重读配置文件并共享目录
- -a:输出本机所有共享
- -au:停止本机所有共享
showmount -e hostname:显示远程主机NFS共享目录
四、自动挂载
(一)autofs服务简介
- autofs服务:按需要挂载,在空闲时自动卸载
- 由autofs包提供
- 自动挂载的配置文件:/etc/auto.master
- 文件系统在失活的指定间隔5分钟后会自动卸载
(二)autofs配置
(1)相对路径描述
格式:
/etc/auto.master文件格式:挂载点的目录名 /etc/auto.direct
/etc/auto.direct文件格式:挂载点的基名 被挂载目录或设备
注释:/etc/auto.direct文件仅为示例,文件名称没有要求相对路径时支持含通配符的目录名:
* server:/export/&
(2)绝对路径描述
- 格式:
/etc/auto.master文件格式:/- /etc/auto.direct
/etc/auto.direct文件格式:挂载点路径 被挂载目录或设备
(3)实验:利用autofs实现远程家目录的自动挂载
本实验由2台主机完成:
主机1:NFS服务器
主机2:NFS客户端,安装autofs服务,CentOS 7系统
主机3:NFS客户端,安装autofs服务,CentOS 6系统步骤1:NFS服务器上设置共享家目录
mkdir -p /app/homedir/{wang,mage}
cp -r /etc/skel/.[^.]* /app/homedir/wang/
cp -r /etc/skel/.[^.]* /app/homedir/mage/
- 步骤2:查询NFS客户端上用户wang和mage的uid和gid
// 主机2上的用户ID情况
id wang
uid=1001(wang) gid=1001(wang) groups=1001(wang)
id mage
uid=1002(mage) gid=1002(mage) groups=1002(mage)
// 主机3上的用户ID情况
id wang
uid=502(wang) gid=502(wang) groups=502(wang)
id mage
uid=503(mage) gid=503(mage) groups=503(mage)
- 步骤3:NFS服务器上根据不同系统的用户ID情况,分别给共享家目录添加权限
useradd -u 1001 wang
useradd -u 1002 mage
useradd -u 502 wang6
useradd -u 503 mage6
setfacl -R -m u:wang:rwx /app/homedir/wang/
setfacl -R -m u:wang6:rwx /app/homedir/wang/
setfacl -R -m u:mage:rwx /app/homedir/mage/
setfacl -R -m u:mage6:rwx /app/homedir/mage/
- 步骤4:NFS服务器上编辑NFS配置文件并更新读入配置
vim /etc/exports.d/wang.exports
/app/homedir/wang *(rw)
vim /etc/exports.d/mage.exports
/app/homedir/mage *(rw)
exportfs -r
- 步骤5:NFS客户端上配置autofs服务
// 两台主机均执行以下操作
vim /etc/auto.master
/home /etc/auto.direct // 添加一行
vim /etc/auto.direct
* 192.168.136.230:/app/homedir/& // 添加一行
// 按照系统执行
systemctl restart autofs // CentOS 7
service autofs restart // CentOS 6
-
测试:
- 在主机2(CentOS 7)上进入/home/wang目录,切换至wang账号,建立wangfile文件
- 在主机3(CentOS 6)上进入/home/wang目录,可以看到wangfile文件,但由于本机没有uid=1001的账号,故UID直接显示数字
- 在主机3(CentOS 6)上进入/home/mage目录,切换至mage账号,建立magefile文件
- 在主机2(CentOS 7)上进入/home/mage目录,可以看到magefile文件,但由于本机没有uid=503的账号,故UID直接显示数字
- 使用NFS建立远程家目录,如果可能,最好统一不同系统下相同用户的uid,便于后期管理
五、实验:实现基于NFS共享的LAMP wordpress的应用
(一)实验环境:本实验需要4台主机
- 主机1:httpd服务器1,IP: 192.168.136.230
- 主机2:httpd服务器2,兼做mysql数据库,IP: 192.168.136.130
- 主机3:NFS服务器,存储httpd服务器网页数据,包含WordPress应用,IP: 192.168.136.229
- 主机4:DNS服务器,IP: 192.168.136.129
(二)步骤1:在主机3上配置nfs服务
mkdir -p /app/www/html
setfacl -R -m u:apache:rwx /app/www/html
service nfs start
vim /etc/exports
/app/www/html 192.168.136.0/24(rw,all_squash,anonuid=48,anongid=48)
exportfs -r
exportfs -v
(三)步骤2:在主机1, 2上配置httpd服务,安装php-fpm
// 以下步骤在主机1, 2上操作相同
yum install httpd php-fpm
vim /etc/fstab
vim /etc/httpd/conf.d/fcgi.conf
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1向代理
systemctl start php-fpm.service
systemctl start httpd
(三)步骤3:在主机2上安装mysql服务
yum install mariadb-server
systemctl start mariadb
mysql_secure_installation
(四)步骤4:在主机3的httpd共享目录上测试与php与mysql的连接
vim /var/www/html/index.php
<?php
$mysqli=new mysqli("192.168.136.130","root","centos");
if(mysqli_connect_errno()){
echo "连接数据库失败!";
$mysqli=null;
exit;
}
echo "连接数据库成功!";
$mysqli->close();
phpinfo();
?>
(五)步骤5:在主机3的httpd共享目录上安装WordPress
tar -xvf wordpress-4.8.1-zh_CN.tar.gz -C /var/www/html/