6.2 网络文件共享:NFS

本文详细介绍NFS(网络文件系统)的概念、配置与应用实例。包括NFS与RPC的工作原理、NFS服务的搭建步骤、权限控制选项说明及如何利用NFS部署LAMP环境等。

NFS概念

    Network File System 网络文件系统,基于内核的文件系统。Sun公司开发,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC(Remote Procedure Call Protocol远程过程调用)实现。

    RPC

    RPC采用C/S模式。客户机请求程序调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。

NFS服务搭建

编辑 nfs-server 主配置文件

[root@CentOS74 ~]# cat /etc/exports
/data/nfsdir	*    
/data/NFSdir	*(rw)
[root@CentOS74 ~]# exportfs -v
/data/nfsdir  	<world>(ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
/data/NFSdir  	<world>(rw,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)

    语法:共享目录    远程主机(选项) [远程主机(选项)]

    选项:默认(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用户
anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nfsnobody,可配合all_squash使用

[root@CentOS75 ~]# mount 192.168.30.74:/data/nfsdir /mnt/nfstest1
[root@CentOS75 ~]# df
Filesystem                 1K-blocks    Used Available Use% Mounted on
/dev/sda2                  104806400 1207504 103598896   2% /
devtmpfs                      746048       0    746048   0% /dev
tmpfs                         757036       0    757036   0% /dev/shm
tmpfs                         757036    9828    747208   2% /run
tmpfs                         757036       0    757036   0% /sys/fs/cgroup
/dev/sr0                     9176232 9176232         0 100% /mnt/cdrom
/dev/sda3                   52403200   32944  52370256   1% /data
/dev/sda1                    2086912  126524   1960388   7% /boot
tmpfs                         151408       0    151408   0% /run/user/0
192.168.30.74:/data/nfsdir  52403200   32768  52370432   1% /mnt/nfstest1

    默认配置下,由于 root_squash 选项,所以远程 root 用户将会映射为本地 nfsnobody 用户

                     又由于no_all_squash 选项,远程除 root 用户以外,在本地将会保留 UID 和 GID(不是用户名!)

     当需要规定 NFS 服务的监听端口为指定端口时,可以修改 /etc/syscofig/nfs

[root@CentOS74 ~]# cat /etc/sysconfig/nfs | grep =
RPCNFSDARGS=""
#RPCNFSDCOUNT=16
#NFSD_V4_GRACE=90
#NFSD_V4_LEASE=90
RPCMOUNTDOPTS=""
#MOUNTD_PORT=892
STATDARG=""
#STATD_PORT=662
#STATD_OUTGOING_PORT=2020
#STATD_HA_CALLOUT="/usr/local/bin/foo"
SMNOTIFYARGS=""
RPCIDMAPDARGS=""
RPCGSSDARGS=""
GSS_USE_PROXY="yes"
BLKMAPDARGS=""

伪根

    有时需要通过 nfs 服务器同时共享多个目录,可以使用伪根技术

[root@CentOS74 data]# tree /data/
/data/
├── nfsdir
│   └── mark
├── NFSdir
│   └── MARK
└── nfsroot
    ├── nfs       #将nfsdir目录挂载到nfs目录上
    │   └── mark  #与nfsdir目录相同
    └── NFS       #同理
        └── MARK

5 directories, 4 files
[root@CentOS74 data]# cat /etc/fstab | grep nfs
/data/nfsdir				  /data/nfsroot/nfs	  none    bind		  0 0
/data/NFSdir                              /data/nfsroot/NFS       none    bind            0 0

    接着将 nfsroot 目录通过 nfs 服务共享出去

[root@CentOS74 data]# cat /etc/exports
/data/nfsroot		*(fsid=0,rw,crossmnt)    #声明/data/nfsroot是根目录
/data/nfsroot/nfs	192.168.10.75(ro)        #将需要共享出去的目录记录在配置文件中
/data/nfsroot/NFS	192.168.30.75(rw)
[root@CentOS74 data]# exportfs -v
/data/nfsroot/nfs
		192.168.10.75(ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
/data/nfsroot/NFS
		192.168.30.75(rw,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
/data/nfsroot 	<world>(rw,sync,wdelay,hide,crossmnt,no_subtree_check,fsid=0,sec=sys,secure,root_squash,no_all_squash)

    在远程主机上挂载远程文件系统

[root@CentOS75 ~]# mount 192.168.30.74:/ /mnt
[root@CentOS75 ~]# tree /mnt
/mnt
├── nfs
│   └── mark
└── NFS
    └── MARK

2 directories, 2 files
[root@CentOS75 ~]# touch /mnt/NFS/test
[root@CentOS75 ~]# ll /mnt/NFS/test 
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jun 28 16:38 /mnt/NFS/test

    在 /etc/fstab 文件中保存挂载信息

[root@CentOS75 ~]# cat /etc/fstab | grep nfs4
192.168.30.74:/				  /mnt			  nfs4	  rw		  0 0

    挂载选项:

fg(默认)前台挂载,bg后台挂载
hard(默认)持续请求,soft 非持续请求
intr 和hard配合,请求可中断
rsize和wsize 一次读和写数据最大字节数,rsize=32768
_netdev 无网络不挂载

使用 NFS 部署 LAMP

服务基本架构

配置web服务器

[root@web1 ~]# mkdir /var/www/html/wordpress    #创建nfs挂载目录
[root@web1 ~]# mount 192.168.30.69:/data/wordpress /var/www/html/wordpress   #将nfs目录挂载到本地,提供php程序
[root@web1 ~]# cat /etc/httpd/conf.d/fcgi.conf    #设置fastcgi,配置php
DirectoryIndex index.php
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/var/www/html/$1
[root@web1 ~]# systemctl start httpd php-fpm    #启动服务

配置数据库服务器

MariaDB [(none)]> create database WordPressDB;   #创建数据库
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all on WordPressDB.* to wpadmin@192.168.30.174 identified by '123456';  #添加数据库用户
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> grant all on WordPressDB.* to wpadmin@192.168.30.75 identified by '123456';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

配置NFS服务器与wordpress

[root@NFS wordpress]# cat /etc/exports 
/data/wordpress		192.168.30.174(rw) 192.168.30.75(rw)
[root@NFS wordpress]# exportfs -v
/data/wordpress
		192.168.30.174(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,root_squash,no_all_squash)
/data/wordpress
		192.168.30.75(rw,wdelay,root_squash,no_subtree_check,sec=sys,rw,root_squash,no_all_squash)
[root@NFS wordpress]# cat /data/wordpress/wp-config.php
<?php
/**
 * WordPress基础配置文件。
 *
 * 这个文件被安装程序用于自动生成wp-config.php配置文件,
 * 您可以不使用网站,您需要手动复制这个文件,
 * 并重命名为“wp-config.php”,然后填入相关信息。
 *
 * 本文件包含以下配置选项:
 *
 * * MySQL设置
 * * 密钥
 * * 数据库表名前缀
 * * ABSPATH
 *
 * @link https://codex.wordpress.org/zh-cn:%E7%BC%96%E8%BE%91_wp-config.php
 *
 * @package WordPress
 */

// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress数据库的名称 */
define('DB_NAME', 'WordPressDB');

/** MySQL数据库用户名 */
define('DB_USER', 'wpadmin');

/** MySQL数据库密码 */
define('DB_PASSWORD', '123456');

/** MySQL主机 */
define('DB_HOST', '192.168.30.74');

/** 创建数据表时默认的文字编码 */
define('DB_CHARSET', 'utf8');

/** 数据库整理类型。如不确定请勿更改 */
define('DB_COLLATE', '');

... ...

测试 wordpress

    创建新用户

    添加新文章

自动挂载 autofs

    autofs 服务能够自动挂载监视器访问这些目录并按要求挂载文件系统。文件系统在失活的指定间隔5分钟后会自动卸载。

相对路径自动挂载

    使用相对路径实现自动挂载时,父目录的控制权将完全由 autofs 服务管理,原目录挂载的设备将被卸载

[root@web2 data]# df
Filesystem                    1K-blocks    Used Available Use% Mounted on
/dev/sda2                     104806400 1235212 103571188   2% /
devtmpfs                         746048       0    746048   0% /dev
tmpfs                            757036       0    757036   0% /dev/shm
tmpfs                            757036    9800    747236   2% /run
tmpfs                            757036       0    757036   0% /sys/fs/cgroup
/dev/sr0                        9176232 9176232         0 100% /mnt/cdrom
/dev/sda1                       2086912  126524   1960388   7% /boot
tmpfs                            151408       0    151408   0% /run/user/0
192.168.30.69:/data/wordpress  51475072   86912  48766720   1% /data/automount   #/dev/sda3被卸载

    设置 /etc/auto.master

[root@web2 automount]# cat /etc/auto.master | grep /data
/data    /etc/auto.automount  

    语法:父目录    挂载行为配置文件路径

[root@web2 automount]# cat /etc/auto.automount 
automount	-fstype=nfs,rw	192.168.30.69:/data/wordpress

    语法:挂载目录    挂载选项    主机地址:设备

绝对路径自动挂载

    使用绝对路径挂载会将设备挂载带指定文件夹内,并不影响其他任何目录

[root@web2 automount]# df
Filesystem                    1K-blocks    Used Available Use% Mounted on
/dev/sda2                     104806400 1235212 103571188   2% /
devtmpfs                         746048       0    746048   0% /dev
tmpfs                            757036       0    757036   0% /dev/shm
tmpfs                            757036    9800    747236   2% /run
tmpfs                            757036       0    757036   0% /sys/fs/cgroup
/dev/sr0                        9176232 9176232         0 100% /mnt/cdrom
/dev/sda3                      52403200   32976  52370224   1% /data    #/dev/sda还挂载在/data目录下
/dev/sda1                       2086912  126524   1960388   7% /boot
tmpfs                            151408       0    151408   0% /run/user/0
192.168.30.69:/data/wordpress  51475072   86912  48766720   1% /data/automount   #设备只是挂载在/data/automount中

    设置配置文件

[root@web2 automount]# cat /etc/auto.master | grep auto.automount
/-    /etc/auto.automount   #将父目录改为"-"
[root@web2 automount]#⮀⮀cat /etc/auto.automount 
/data/automount/	-fstype=nfs,rw	192.168.30.69:/data/wordpress   #挂载目录记录为绝对路径

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值