xiaolingzi's blog

每天都在成长...

欢迎您:亲

CentOS使用nfs实现文件共享

xiaolingzi 发表于 2016-03-01 15:44:05

文件共享是非常常见的功能,特别是我们有单独的文件服务器的时候,其他web服务器的文件上传都会集中到文件服务器中存储。我们还可以通过挂载共享目录,保证在各台服务器中的上传目录结构一致,有利于统一的配置。

1.安装软件

在CentOS6.x以上远程调用是通过rpcbind服务来承载,CentOS5.x则是通过portmap,所以安装的区别如下:

CentOS6.x及以上

yum install nfs-utils rpcbind

CentOS5.x

yum install nfs-utils rpcbind portmap

注意客户端和服务端都需要安装nfs


2.配置共享目录

共享目录的配置文件为 /etc/exports 文件。

编辑文件

vi /etc/exports

添加要共享的目录,如:

/var/www/ 192.168.0.22(rw,no_root_squash,no_all_squash,sync)

多个共享目录按行进行配置,如:

/var/www1/ 192.168.0.22(rw,no_root_squash,no_all_squash,sync)

/var/www2/ 192.168.0.22(rw,no_root_squash,no_all_squash,sync)

配置说明:

/var/www/ 要共享的目录,使用绝对路径,配置前请先创建目录。

192.168.0.22 为客户端的ip地址或者域名,ip支持地址段,如192.168.0.1/22 ,域名支持通配符,如*.example.com,多个ip也可以通过空格间隔设置。如:

/var/public/ 192.168.0.1/22(rw,no_root_squash,no_all_squash,sync) *.example.com(rw) *(ro) 其中*(ro)表示对所有机器开放读权限

ip后面的括号内容为权限配置

(1)读写权限。括号中的第一个参数,值的选项如下:

rw:可读写;

ro:只读;

(2)root用户权限。括号中的第二个参数。值的选项如下:

root_squash     root用户的所有请求映射成匿名用户的权限(默认)

no_root_squash  如果客户端使用root用户,root用户具有根目录的完全管理访问权限

(3)

all_squash      无论客户端使用什么用户,都被映射为匿名用户。

no_all_squash   保留共享文件的UID和GID(默认)

(4)文件写入方式。括号中的第四个参数,值选项如下:

sync: 文件同时写入硬盘和内存;

async:文件先暂存于内存,不会立即写入硬盘;


其他参数说明:

secure              NFS通过1024以下的安全TCP/IP端口发送

insecure            NFS通过1024以上的端口发送

wdelay              如果多个用户要写入NFS目录,则归组写入(默认)

no_wdelay           如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。

hide                在NFS共享目录中不共享其子目录  

no_hide             共享NFS目录的子目录

subtree_check       如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)

no_subtree_check    与上面相反,不检查父目录权限

anonuid=xxx         指定NFS服务器匿名用户的UID,该UID必须在/etc/passwd文件中

anongid=xxx         指定NFS服务器匿名用户的GID,该GID必须在/etc/passwd文件中


3.启动服务

需要启动rpcbind和nfs两个服务并设为开机启动

CentOS7.x

systemctl start rpcbind.service

systemctl start nfs-server.service

systemctl enable rpcbind.service

systemctl enable nfs-server.service 


CentOS6.x和CentOS5.x

service rpcbind start

service nfs start

chkfonfig rpcbind on

chkfonfig nfs on


4.配置防火墙

使用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
 100024    1   udp  58631  status
 100024    1   tcp  57011  status
 100005    1   udp  20048  mountd
 100005    1   tcp  20048  mountd
 100005    2   udp  20048  mountd
 100005    2   tcp  20048  mountd
 100005    3   udp  20048  mountd
 100005    3   tcp  20048  mountd
 100003    3   tcp   2049  nfs
 100003    4   tcp   2049  nfs
 100227    3   tcp   2049  nfs_acl
 100003    3   udp   2049  nfs
 100003    4   udp   2049  nfs
 100227    3   udp   2049  nfs_acl
 100021    1   udp  58136  nlockmgr
 100021    3   udp  58136  nlockmgr
 100021    4   udp  58136  nlockmgr
 100021    1   tcp  58425  nlockmgr
 100021    3   tcp  58425  nlockmgr
 100021    4   tcp  58425  nlockmgr

上面portmapper占用的111端口、nfs占用的2049端口、mountd占用的端口20048这三个端口我们都需要打开。


CentOS7.x通过一下命令添加端口

firewall-cmd --permanent --zone=public --add-port=111/tcp

firewall-cmd --permanent --zone=public --add-port=111/udp

firewall-cmd --permanent --zone=public --add-port=20048/tcp

firewall-cmd --permanent --zone=public --add-port=20048/udp

firewall-cmd --permanent --zone=public --add-port=2049/tcp

firewall-cmd --permanent --zone=public --add-port=2049/udp

或者直接在/etc/firewalld/zones/public.xml文件中的根节点下直接添加子节点,子节点如:

<port protocol="tcp" port="20048"/>

重启防火墙

systemctl restart firewalld.service

CentOS6.x直接在/etc/sysconfig/iptables中添加

-A INPUT -m state --state NEW -m tcp -p tcp --dport 111 -j ACCEPT

-A INPUT -m state --state NEW -m udp -p udp --dport 111 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 20048 -j ACCEPT

-A INPUT -m state --state NEW -m udp -p udp --dport 20048 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 2049 -j ACCEPT

-A INPUT -m state --state NEW -m udp -p udp --dport 2049 -j ACCEPT

重启防火墙

service iptables restart

注意:端口以rpcinfo -p查看的结果为准,如果不同,则开放相应的端口就行了。


5.客户端进行挂载

在客户端机器执行以下命令进行挂载:

mount -o nolock -t nfs 192.168.0.20:/var/www /mnt/www

注意挂载的目标目录要存在,不存在就先创建,否则会报以下错误:

mount: mount point /mnt/www/upload does not exist

如果客户端没有安装nfs会报以下错误:

mount: wrong fs type, bad option, bad superblock on xxxx

如果报以下错误:

mount.nfs: an incorrect mount option was specified

则挂载命令改为:

mount -o nolock,nfsvers=3,vers=3 -t nfs 192.168.0.20:/var/www /var/www

挂载成功后使用nfsstat -m可以查看挂载的目录。

最后注意:如果目录中含有中杠线会提示超时,改成下划线就好了。


6.客户端进行卸载

卸载命令如下,目录改成相应的目录即可

umount -f /var/www


6.其他命令

exportfs -rv 重新读取配置,在修改exports文件后使用该命令进行重新读取

showmount -e 显示所有的共享卷

showmount -e ip 显示指定ip的共享卷

      

转载请注明出处:http://www.xxling.com/article/2094.aspx

  • 分类: Linux
  • 阅读: (2114)
  • 评论: (0)
拍砖 取消
请输入昵称
请输入邮箱
*
 选择评论类型
300字以内  请输入评论内容