Linux:为 Apache / Lighttpd / Nginx Web 服务器创建网络文件系统 (NFS) 共享
创建网络文件系统 (NFSv4.0) 共享网络资源与在 Linux 或 Unix 中为 Apache / Lighttpd / Nginx Web 服务器创建任何其他共享网络资源完全相同。您需要在IP 地址为192.168.1.14的vm05上输入以下命令。
Linux NFS 服务器:同步与异步选项
您需要考虑同步与异步问题。异步选项允许 NFS 服务器违反 NFS 协议并在该请求所做的任何更改提交到存储之前回复请求。这将提高性能,但代价是不干净的服务器重启(即崩溃)可能导致数据丢失或损坏。另一方面,同步选项仅在更改提交到稳定存储后才回复请求。我强烈建议您使用同步选项并在本地 Apache / lighttpd / nginx 节点(即 vm01 和 vm02)上打开 nfs 缓存。
如何创建 NFS 共享网络资源
首先,使用yum 命令安装一个 nfs 服务器,输入:
# yum groupinstall "NFS file server"
或者
# yum install nfs-utils nfs4-acl-tools portmap
开启服务:
# chkconfig nfs on
# chkconfig rpcbind on
# chkconfig rpcidmapd on
# chkconfig nfslock on
创建 NFS 服务器用户帐户
我将使用 apache 用户在 NFS 服务器上共享文件。您需要在所有服务器上使用相同的用户名,即 vm01、vm02、vm03 和 vm05。您可以使用useradd 命令在 NFSv4 服务器上创建用户帐户,如下所示:
######################################################################################################### ### Note UID/GID 48 is default on CentOS / RHEL - adjust apache UID / GID as per your vm01 and vm02 ### ######################################################################################################### # /usr/sbin/groupadd -g 48 apache # /usr/sbin/useradd -s /sbin/nologin -g 48 -u 48 -M -d /var/www apache # /usr/bin/passwd -l apache
不要在 NFSv4 服务器上安装 Apache 2 Web 服务器。
/etc/idmapd.conf nfs 服务器配置
rpc.idmapd 是 NFSv4 ID <-> 名称映射守护程序。它通过将用户和组 ID 转换为名称,反之亦然,为 NFSv4 内核客户端和服务器提供功能,并通过上行调用与其通信。编辑 /etc/idmapd.conf,输入:
# vi /etc/idmapd.conf
以下内容应设置为本地 NFSv4 域名。默认值为主机的 DNS 域名(将 example.com 替换为您的实际 DNS 域名)。
Domain = example.com
还要确保映射如下:
[Mapping] Nobody-User = nobody Nobody-Group = nobody
保存并关闭文件。
共享文件系统
要为 /var/www/static 和 /var/www/html 创建共享网络资源,请按照以下步骤操作。使用mkdir 命令在 NFSv04 服务器上创建所需目录
# mkdir -p /exports/{static,html}
:
使用以下命令将文件系统绑定到另一个名为 /exports 的位置:
编辑 /etc/fstab 文件,输入:
附加以下条目:
# mount --bind /var/www/html /exports/html
# mount --bind /var/www/static /exports/static
# vi /etc/fstab
/var/www/html /exports/html none bind /var/www/static /exports/static none bind
保存并关闭文件。编辑/etc/exports文件,输入:
# vi /etc/exports
附加以下配置:
################################# ### Exports for vm01 and vm02 ### ### by vivek Thu June 21,2012 ### ################################# ## Base nfs Root, fsid=0 means NFSv4 ## /exports 192.168.1.10(rw,fsid=0,no_subtree_check,async) 192.168.1.11(rw,fsid=0,no_subtree_check,async) ### NFS Config For www.example.com Domain ## /exports/html 192.168.1.10(rw,no_subtree_check,async,nohide) 192.168.1.11(rw,no_subtree_check,async,nohide) # Static files are exported as ro, if user upload files, set it as rw # /exports/static 192.168.1.10(ro,no_subtree_check,async,nohide) 192.168.1.11(ro,no_subtree_check,async,nohide)
保存并关闭文件。启动 nfs 和相关服务器,输入:
# /sbin/service rpcbind start
# /sbin/service rpcidmapd start
# /sbin/service nfslock start
# /sbin/service nfs start
保护 NFSv04 服务器
您可以按照此处所述设置防火墙并配置 TCPwrapper。了解如何配置 iptbales 以使用NFS 服务器的固定端口。您还可以使用网络/掩码来表示网络上必须从此服务器挂载 NFS 文件系统的机器(例如 vm01、vm02)。编辑 /etc/sysconfig/iptables。添加以下行,确保它们出现在最后的 LOG 和 DROP 行之前:
## open nfsv4 server port for the lan nodes/vms ## -A INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 2049 -j ACCEPT
保存并关闭文件。重新启动 iptables,输入:
# service iptables restart
共享文件
您现在可以将所有静态文件上传到 /var/www/static 目录,将 php/html 文件上传到 /var/www/html 目录。不要将 Unix 套接字放在 nfs 共享文件系统上。如果您使用 SELinux,则需要设置标准文件权限和所有权,包括 NFS 的 SELinux 安全上下文。出于测试目的,您可以禁用 SELinux(不推荐)。请参阅:
关于 NFS 的最后说明
- 在此示例中,NFS 是内部 RAID 磁盘的单点故障。但是,您可以从高度冗余的存储(例如 SAN 或 NAS 设备)进行安装。高度冗余的存储会增加项目成本。
- 另外,使每个虚拟机成为客户端或服务器,而不是两者兼而有之。
- NFS 必须以最简单的配置部署,以避免可维护性和安全性问题。