0x00 NFS概述
网络文件系统(英语:Network File System,缩写为NFS)是一种分布式文件系统协议,最初由Sun Microsystems公司开发,并于1984[1]年发布。其功能旨在允许客户端主机可以像访问本地存储一样通过网络访问服务器端文件。 NFS和其他许多协议一样,是基于开放网络运算远程过程调用(ONC RPC) 协议之上的。
NFS是一个开放、标准的RFC协议,任何人或组织都可以依据标准实现它。
0x01 NFS实现原理
当一台计算机(客户端)需要访问存储在其他机器上的数据(NFS 服务器):
- 服务端实现 NFS 守护进程, 默认运行 nfsd, 用来使得数据可以被客户端访问.
- 服务端系统管理员可以决定哪些资源可以被访问, 导出目录的名字和参数, 通常使用 /etc/exports 配置文件 和exportfs命令。
- 服务端 安全-管理员 保证它可以组织和认证合法的客户端.
- 服务端网络配置保证可以跟客户端透过 防火墙 进行协商.
- 客户端请求导出的数据, 通常调用一个 mount 命令.
- 如果一切顺利, 客户端的用户就可以通过已经挂载的 文件系统 查看和访问服务端的文件了.
0x02 NFS 相关配置及命令
- NFS 软件包 : nfs-utils-1.3.0-0.33.el7.x86_64
-
/etc/exports或/etc/exports.d/*
/PATH/TO/SOME_DIR clients1(export_options, …) clients2(export_options, …)
注意: /etc/exports.d/ 下的文件必须以 .exports 结尾
clients: single host:ipv4, ipv6, FQDN; network:address/netmask, 同时长短格式的掩码; wildcards:主机名通配,例如:*.magedu.com; netgroups:NIS域内的主机组;@group_name; anonymous:使用*通配所有主机; export_options: General Options: ro:只读 rw:读写; sync:同步; async:异步; User ID Mapping: root_squash:压缩root用户,一般指将其映射为nfsnobody; no_root_squash:不压缩root用户; all_squash:压缩所有用户; anonuid and anongid:将压缩的用户映射为此处指定的用户;
-
两个命令:exportfs和showmount
-
exportfs- maintain table of exported NFS file systems
exportfs [-av] -u [client:/path ..]
eg: exportfs -av -u 172.18.9.9:/data-a Export or unexport all directories. -r Reexport all directories -u Unexport one or more directories.
-
showmount- show mount information for an NFS server
-a or --all -d or --directories List only the directories mounted by some client. -e or --exports Show the NFS server’s export list.
-
0x03 NFS实践作业(一)
实验要求:
(1) nfs server导出/data/目录;
(2) nfs client挂载/data/至本地的/mydata目录;本地的mysqld或mariadb服务的数据目录设置为/mydata, 要求服务能正常启动,且可正常 存储数据;
实验环境:
- NFS_server : centos7.3 ,IP ( 172.18.9.119 )
- NFS_client : centos6.8 , IP ( 172.18.9.9 )
实验步骤:
-
NFS_server:
1. ! rpm -q nfs-utils >/dev/null && yum install -y nfs-utils #安装nfs 2. systemctl start nfs.service 3. mkdir /data #创建共享目录 4. vim /etc/exports.d/mysql_data.exports /data/ 172.18.9.9(rw,anonuid=27,anongid=27,async) 5. exportfs -ar 6. setfacl -m o:rwx /data
-
NFS_client
1. yum install -y nfs-utils 2. yum install -y mysql-server 3. mkdir /mydata 4. mount -t nfs 172.18.9.119:/data /mydata 5. vim /etc/my.cnf datadir=/mydata 6. service mysqld start
注意: 上述步骤有先后顺序,请严格执行
0x04 NFS实践作业(二)
实验要求:
(1) nfs server导出/data/application/web,在目录中提供wordpress;
(2) nfs client挂载nfs server导出的文件系统至/var/www/html;
(3) 客户端(lamp)部署wordpress,并让其正常访问;要确保能正常发文章,上传图片;
(4) 客户端2(lamp),挂载nfs server导出的文件系统至/var/www/html;验正其wordpress是否可被访问; 要确保能正常发文章,上传图片;
实验环境:
NFS_server : centos7.3 , IP : 172.18.9.119
NFS_client_1: centos6.8 , IP : 172.18.9.9
NFS_client_2: centos6.8, IP : 172.18.9.10
实验步骤:
-
NFS_server:
1. yum install -y nfs-utils #安装nfs 2. systemctl start nfs.service 3. mkdir -p /data/application/web #创建共享目录 4. vim /etc/exports.d/data_app_web.exports /data/ 172.18.9.9(rw,async) 172.18.9.10(rw,async) 5. exportfs -ar 6. setfacl -R -m o:rwx /data/application/web #注意:此权限一定要设定,不然client会无法挂载访问
-
NFS_client_1: 部署 wordpress
1. yum install -y httpd mysql-server php php-mysql 2. wget https://wordpress.org/latest.zip && unzip latest.zip && mv wordpress /var/www/html/ #下载wordpress 并解压至 /var/www/html ### 设置wordpress 数据库 ### 3. mysql mysql> create database wpdb; # 出现 Query OK, 0 rows affected (0.00 sec) 即为成功 mysql> grant all privileges on wpdb.* to wpuser@'%' identified by "mima"; mysql> exit; 4. service mysqld start # 启动mysql 服务 5. mount 172.18.9.119:/data/application/web /var/www/html/ #挂载nfs 共享目录至 /var/www/html 6. service httpd #启动httpd 服务 7. # 安装wordpress
-
安装wordpress
在浏览器中输入: http://172.18.9.9/wordpress/
-
安装wordpress
….. 剩下的自己看情况设置……
到此wordpress 以经建好,可以发布文章了。(在浏览器中输入: http://172.18.9.9/wordpress/ )
-
NFS_client_2:
1. yum install -y httpd mysql-server php php-mysql 2. mount 172.18.9.119:/data/application/web /var/www/html/ #挂载nfs 共享目录至 /var/www/html 3. service httpd start 4. service mysqld start
在浏览器中输入: http://172.18.9.10/wordpress/
登录,即可发表文章,并能查看client_1 发表的文章。
0x05 常见问题
-
mount.nfs: access denied by server while mounting 172.18.9.119:/data/application/web
这是因为nfs_server端的共享目录没有执行权限解决方案:
在nfs_server执行: setfacl -m o:rwx /data/application/web -
mount nfs后, 如果遇到服务器修改 /etc/exports 等原因时,经常会遇到
Text代码
umount2: Stale NFS file handle umount: htdocs: Stale NFS file handle
或者
Text代码/var/www/html was not found in /proc/mounts
等问题
解决方案:
找到使用目录的进程, kill掉 sudo umount -i -f /directory sudo umount -i -d -r -n -v -f /directory
原创文章,作者:Yanglibin,如若转载,请注明出处:http://www.178linux.com/74462