NFS(Network File System/网络文件系统)
NFS允许网络中的计算机之间通过TCP/IP网络共享资源。
在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
优点:
1、简单容易掌握
2、方便快速部署简单维护容易
3、可靠—从软件层面上看,数据可靠性高,经久耐用
组成:
NFS体系由NFS服务器和若干台客户机组成。
工作原理:
NFS服务器通过网络共享目录,客户机将网络目录挂载在本地,通过TCP/IP网络远程访问存放在NFS服务器上的数据。
NFS就是网络共享目录,就是共享文件.服务端共享,客户端挂载使用。
通讯过程:
1.服务端启动RPC服务,开启111端口。
(远程过程调用协议,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。)
2.启动NFS服务,向RPC注册端口信息。
3.客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务点的NFS端口
(portmap端口映射是一个服务器,将RPC程序号转换为DARPA的协议端口号,在使用RPC调用时它必须运行。)
4.服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
5.客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
NFS权限设置:
rw 表示可读写
ro Read-only表示只能读权限
Sync 请求或者写入数据时,数据同步写入到NFS server的硬盘中后才会返回
no_root_squas 访问nfs server共享目录的用户如果是root的话,它对该目录具有root权限。这个配置原本为无盘用户准备的。用户应避免使用!
root_squash 对于访问NFS server共享目录的用户,如果是root的话会被压缩成为nobody用户身份。
all_squash
不管访问nfs
server共享目录的用户身份如何包括root,它的权限都将被压缩成为匿名用户,同时他们的udi和gid都会变成nobody或nfsnobody账户的uid,gid。在多个nfs客户端同时读写nfs
server数据时,这个参数很有用***可以确保大家写入的数据的权限是一样的。
但不同系统有可能匿名用户的uid,gid不同。因为此处我们需要服务端和客户端之间的用户是一样的。比如说:服务端指定匿名用户的UID为2000,那么客户端也一定要存在2000这个账号才可以
anonuid 就是匿名的uid和gid。说明客户端以什么权限来访问服务端,在默认情况下是nfsnobody。Uid65534.
anongid 同anongid,就是把uid换成gid而已。
配置实践:
NFS服务端:192.168.81.54
NFS客户端1:192.168.81.11
NFS客户端2:192.168.81.12
yum -y install portmap nfs-utils nfs-utils-lib
service portmap start
service nfs start
vi /etc/exports
mnt/data/mysql 192.168.81.0/24(rw,sync,no_root_squash)
vi /etc/sysconfig/nfs
RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
service nfs restart
rpcinfo -p localhost(应该出现上述修改过的端口)
vi /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 111 -j ACCEPT
COMMIT
iptables -I INPUT -s 192.168.81.0/24 -p tcp --dport 875 -j ACCEPT
iptables -I INPUT -s 192.168.81.0/24 -p udp --dport 875 -j ACCEPT
iptables -I INPUT -s 192.168.81.0/24 -p tcp --dport 892 -j ACCEPT
iptables -I INPUT -s 192.168.81.0/24 -p udp --dport 892 -j ACCEPT
iptables -I INPUT -s 192.168.81.0/24 -p tcp --dport 32769 -j ACCEPT
iptables -I INPUT -s 192.168.81.0/24 -p udp --dport 32769 -j ACCEPT
iptables -I INPUT -s 192.168.81.0/24 -p tcp --dport 32803 -j ACCEPT
iptables -I INPUT -s 192.168.81.0/24 -p udp --dport 32803 -j ACCEPT
iptables -L
iptables-save > /etc/sysconfig/iptables
showmount -e 192.168.81.54
Export list for 192.168.81.54:
/mnt/data/mysql 192.168.81.0/24
mount -t nfs 192.168.81.54:/mnt/data/mysql /var/lib/mysql
df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root 18134344 4493724 12719432 27% /
tmpfs 502204 0 502204 0% /dev/shm
/dev/sda1 495844 34836 435408 8% /boot
/dev/sr0 4363088 4363088 0 100% /media
192.168.81.54:/mnt/data/mysql 18134400 4466176 12747136 26% /var/lib/mysql
客户端:
yum -y install portmap
showmount -e 192.168.81.54
mount -t nfs 192.168.81.54:/mnt/data/mysql /var/lib/mysql
df