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 #挂载目录记录为绝对路径