NFS

NFS

1. NFS服务

img

**NFS:**Network File System 网络文件系统,基于内核的文件系统。Sun公司开发,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件

NFS基于RPC(Remote Procedure Call Protocol远程过程调用)实现

RPC原理:

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

img

NFS优势:节省本地存储空间,将常用的数据,如:/home目录,存放在NFS服务器上且可以通过网络访
问,本地终端将可减少自身存储空间的使用

2. NFS软件介绍

**软件包:**nfs-utils

**相关软件包:**rpcbind(必须),tcp_wrappers

Kernel支持:nfs.ko

**端口:**2049(nfsd), 其它端口由portmap(111)分配

**说明:**CentOS 6 开始portmap进程由rpcbind代替

NFS服务主要进程:

  • rpc.nfsd 最主要的NFS进程,管理客户端是否可登录
  • rpc.mountd 挂载和卸载NFS文件系统,包括权限管理
  • rpc.lockd 非必要,管理文件锁,避免同时写出错
  • rpc.statd 非必要,检查文件一致性,可修复文件

日志:/var/lib/nfs/

NFS配置文件:

/etc/exports

/etc/exports.d/*.exports

3. NFS共享配置文件格式

/dir 主机1(opt1,opt2) 主机2(opt1,opt2)...

格式说明:

  • #开始为注释
  • 主机格式:
单个主机:ipv4,ipv6,FQDN
IP networks:两种掩码格式均支持
172.18.0.0/255.255.0.0
172.18.0.0/16
wildcards:主机名通配,例如*.magedu.com,IP不可以
netgroups:NIS域的主机组,@group_name
anonymous:表示使用*通配所有客户端
  • 每个条目指定目录导出到的哪些主机,及相关的权限和选项
默认选项:(ro,sync,root_squash,no_all_squash)
ro,rw 只读和读写
async 异步,数据变化后不立即写磁盘,性能高
sync(1.0.0后为默认)同步,数据在请求时立即写入共享存储磁盘
root_squash (默认)远程root映射为nfsnobody,UID为65534,CentOS8 为nobody,早期版本
是4294967294 (nfsnobody)
no_root_squash 远程root映射成root用户
all_squash 所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody
no_all_squash (默认)保留共享文件的UID和GID
anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nfsnobody,可配合
all_squash使用

4. NFS工具

4.1 rpcinfo

rpcinfo 工具可以查看RPC相关信息

查看注册在指定主机的RPC程序

rpcinfo -p hostname

查看RPC注册程序

rpcinfo –s hostname

范例:rpcinfo

[root@centos7 data]# rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
[root@centos7 data]# rpcinfo -s
   program version(s) netid(s)                         service     owner
    100000  2,3,4     local,udp,tcp,udp6,tcp6          portmapper  superuser

4.2 exportfs

exportfs:可用于管理NFS导出的文件系统

常见选项:

  • –v 查看本机所有NFS共享
  • –r 重读配置文件,并共享目录
  • –a 输出本机所有共享
  • –au 停止本机所有共享

4.3 showmount

常见用法:

showmount -e hostname

4.4 mount.nfs

客户端NFS挂载

NFS相关的挂载选项:man 5 nfs

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

提示:基于安全考虑,建议使用nosuid,nodev,noexec挂载选项_

范例:临时挂载NFS共享

mount -o rw,nosuid,fg,hard,intr 172.16.0.1:/testdir /mnt/nfs/

范例:开机挂载

vim /etc/fstab
172.16.0.1:/public /mnt/nfs nfs defaults,_netdev 0 0

5. 实验

**实验目的:**搭建lamp环境,图片文件使用nfs共享服务器

实验环境:两台httpd+php服务器,一台数据库服务器,一台nfs服务器

img

web服务器:192.168.38.102 192.168.38.103

mysql服务器:192.168.38.104

nfs服务器:192.168.38.105

5.1 搭建wordpress服务器

在两台web服务器上分别运行:

[root@centos8 ~]# yum install httpd php php-mysqlnd.x86_64 php-fpm php-json.x86_64 -y 
[root@centos8 ~]# cd /data/
[root@centos8 data]# tar xf wordpress-5.3-zh_CN.tar.gz -C /var/www/html/
[root@centos8 data]# mkdir /var/www/html/wordpress/wp-content/uploads
[root@centos8 data]# chown -R apache.apache /var/www/html/wordpress/
[root@centos8 data]# systemctl start httpd php-fpm
5.2 搭建数据库服务器
[root@centos8 ~]# yum install mariadb-server
[root@centos8 ~]# systemctl start mariadb
[root@centos8 ~]# mysql
MariaDB [(none)]> create database wordpress;
Query OK, 1 row affected (0.000 sec)
MariaDB [(none)]> use wordpress
MariaDB [wordpress]> GRANT SELECT ON wordpress.* TO 'wordpress'@'192.168.38.%' IDENTIFIED BY 'magedu';
Query OK, 0 rows affected (0.001 sec)
5.3 安装设置nfs服务器
[root@centos8 ~]# yum install nfs-utils.x86_64
[root@centos8 ~]# systemctl start nfs-server.service
#创建共享目录
[root@centos8 data]# mkdir /data/wordpress
#修改nfs配置文件
[root@centos8 data]# vim /etc/exports.d/wordpress.exports

/data/wordpress 192.168.38.0/24(rw)
#创建apache账户和修改权限
[root@centos8 data]# useradd -u 48 apache -r -s /sbin/nologin
[root@centos8 data]# chown -R apache.apache /data/wordpress/
#查看本机共享的文件
[root@centos8 ~]# exportfs -v
#重读配置文件
[root@centos8 ~]# exportfs -r
[root@centos8 ~]# exportfs -v
/data/wordpress
		192.168.38.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
5.4 挂载共享文件
#在wordpress服务器上挂载
[root@centos8 ~]# yum install nfs-utils.x86_64 -y
#查看nfs服务器共享的文件
[root@centos8 ~]# showmount -e 192.168.38.105
Export list for 192.168.38.105:
/data/wordpress 192.168.38.0/24
#挂载路径
[root@centos8 ~]# vim /etc/fstab
192.168.38.105:/data/wordpress /var/www/html/wordpress/wp-content/uploads nfs defaults,_netdev  0 0  #_netdev为有问题时跳过不挂载
[root@centos8 ~]# mount -a
[root@centos8 ~]# df -h
Filesystem                      Size  Used Avail Use% Mounted on
devtmpfs                        889M     0  889M   0% /dev
tmpfs                           904M     0  904M   0% /dev/shm
tmpfs                           904M  8.7M  895M   1% /run
tmpfs                           904M     0  904M   0% /sys/fs/cgroup
/dev/sda2                       100G  2.2G   98G   3% /
/dev/sda3                        50G  402M   50G   1% /data
/dev/sr0                        6.7G  6.7G     0 100% /mnt/dvd
/dev/sda1                       976M  120M  790M  14% /boot
tmpfs                           181M     0  181M   0% /run/user/0
192.168.38.105:/data/wordpress   50G  389M   50G   1% /var/www/html/wordpress/wp-content/uploads
#另一台wordpress服务器也一样操作
5.5 进行wordpress配置

在浏览器进行wordpress的初始配置,不过多介绍,按步骤走就行

5.6 修改数据库

因为wordpress默认会把初始化的url写入到数据库,如果用ip访问,会写死数据库,导致另一台服务器不可用

MariaDB [wordpress]> SELECT * FROM wp_options WHERE option_value LIKE '%192%'\G
*************************** 1. row ***************************
   option_id: 1
 option_name: siteurl
option_value: http://192.168.38.102/wordpress
    autoload: yes
*************************** 2. row ***************************
   option_id: 2
 option_name: home
option_value: http://192.168.38.102/wordpress
    autoload: yes
MariaDB [wordpress]> UPDATE wp_options SET option_value='http://www.wj.com/wordpress' WHERE option_id IN (1,2);
Query OK, 2 rows affected (0.001 sec)
Rows matched: 2  Changed: 2  Warnings: 0
MariaDB [wordpress]> SELECT * FROM wp_options WHERE option_value LIKE '%www.wj.com%'\G
*************************** 1. row ***************************
   option_id: 1
 option_name: siteurl
option_value: http://www.wj.com
    autoload: yes
*************************** 2. row ***************************
   option_id: 2
 option_name: home
option_value: http://www.wj.com
    autoload: yes
2 rows in set (0.000 sec)

然后就可以通过ip让两台服务器都进行访问了

5.7 上传图片测试

img

通过上传图片查看两个服务器是否都可以看到。

查看nfs服务器:

[root@centos8 ~]# tree /data/wordpress/
/data/wordpress/
└── 2019
    └── 12
        ├── e3dc45e4c3110dd6-1.jpg
        ├── e3dc45e4c3110dd6.jpg
        └── timg.jpg

2 directories, 3 files

可以看到,图片已经成功上传到nfs服务器上,实现了图片共享。

g-ESEqCTuM-1577065564898)]

通过上传图片查看两个服务器是否都可以看到。

查看nfs服务器:

[root@centos8 ~]# tree /data/wordpress/
/data/wordpress/
└── 2019
    └── 12
        ├── e3dc45e4c3110dd6-1.jpg
        ├── e3dc45e4c3110dd6.jpg
        └── timg.jpg

2 directories, 3 files

可以看到,图片已经成功上传到nfs服务器上,实现了图片共享。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值