zoukankan      html  css  js  c++  java
  • nfs服务部署记录

     

    二、部署说明
    服务端的操作:

    首先关闭nfs服务端的防火墙,这个很关键,否则客户机挂载nfs时会失败!(或者不关闭防火墙,需要在iptables中开放nfs相关端口)
    [root@dev-huanqiu ~]# /etc/init.d/iptables stop

    接着进行nfs共享设置
    [root@dev-huanqiu ~]# vim /etc/exports
    /usr/local/nginx/html/ssapp.test/weiloushu/video 192.168.1.19(rw,sync,no_root_squash)
    /usr/local/nginx/html/ssapp.beta/weiloushu/video 192.168.1.16(rw,sync,no_root_squash)

    访问权限选项
       设置输出目录只读:ro
       设置输出目录读写:rw

    用户映射选项
       all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组,通常也就是nobody(nfsnobody);
       no_all_squash:与all_squash取反(默认设置);
       root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);
       no_root_squash:与rootsquash取反;
       anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);比如(rw,sync,all_squash,anonuid=65534,anongid=65534)
       anongid=xxx:将远程访问的所有用户组都映射为匿名用 户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);

    其它选项
       secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
       insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
       sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
       async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
       wdelay:检查是否有相关的写操作,如果有则将这些写操作 一起执行,这样可以提高效率(默认设置);
       no_wdelay:若有写操作则立即执行,应与sync配合使用;
       subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
       no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;

    可以使用showmount命令查看远程客户机上的共享目录情况,这个命令需要root权限。
    它有三个选项,记住这三个选项代表的含义:
    showmount –a IP  :显示指定NFS服务器的客户端以及服务器端在客户端的挂载点
    showmount –d IP  :显示指定NFS服务器在客户端的挂载点
    showmount –e IP  :显示指定NFS服务器上的共享目录列表(或者叫输出列表)

    [root@dev-huanqiu ~]# 设置两个服务开机自启动
    [root@dev-huanqiu ~]# chkconfig rpcbind on
    [root@dev-huanqiu ~]# chkconfig nfs on

    客户端的操作(这里列举其中一台客户机操作,另外一台客户端操作类似):
    客户端只需要安装rpcbind程序,并确认服务正常
    [root@dev-new-test ~]# /etc/init.d/rpcbind start
    正在启动 rpcbind: [确定]
    [root@dev-new-test ~]# /etc/init.d/rpcbind status
    rpcbind (pid 28904) 正在运行...

    挂载nfs服务端的共享目录
    [root@dev-new-test ~]# mount -t nfs 192.168.1.6:/usr/local/nginx/html/ssapp.test/weiloushu/video /data/video/

    查看,发现已经共享成功了
    [root@dev-new-test ~]# df -h
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/VolGroup-lv_root 50G 12G 36G 26% /
    tmpfs 32G 72K 32G 1% /dev/shm
    /dev/sda1 485M 39M 421M 9% /boot
    /dev/mapper/VolGroup-lv_home 844G 69G 733G 9% /home
    192.168.1.6:/usr/local/nginx/html/ssapp.test/weiloushu/video 97G 64G 28G 70% /data/video

    [root@dev-new-test ~]# showmount -a 192.168.1.6
    All mount points on 192.168.1.6:

    卸载(注意不能切换到挂载目录里状态下卸载,否则会报错:umount.nfs:...: device is busy)
    [root@dev-new-test ~]# umount /data/video
    [root@dev-new-test ~]# df -h
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/VolGroup-lv_root 50G 12G 36G 26% /
    tmpfs 32G 72K 32G 1% /dev/shm
    /dev/sda1 485M 39M 421M 9% /boot
    /dev/mapper/VolGroup-lv_home 844G 69G 733G 9% /home

    如果nfs在umount卸载时报错如下:
    [root@dev-new-test ~]# umount /data/video
    /data/video was not found in /proc/mounts

    解决:umount卸载时使用-l参数
    [root@dev-new-test ~]# umount -l /data/video
    umount.nfs: /data/video: not mounted
    [root@dev-new-test ~]# df -h
    Filesystem Size Used Avail Use% Mounted on
    /dev/mapper/VolGroup-lv_root 50G 12G 36G 26% /
    tmpfs 32G 72K 32G 1% /dev/shm
    /dev/sda1 485M 39M 421M 9% /boot
    /dev/mapper/VolGroup-lv_home 844G 69G 733G 9% /home

    =================================================================================
    遇到的一个问题:
    目标机器通过nfs挂载后,在共享目录下写入文件时,权限强制变成nobod!(本来共享目录的权限设置是app账号)
    经排查,是因为app账号在原机器和目标机器的uid和gid不一致导致的!
    解决办法:将两台机器的uid和gid设置成一样的即可!
    # usermod -u uid app
    # groupmod -g gid app

    ------------------------------------------------------------------------------------------------------------------------------
    补充一点:nfs服务端的防火墙问题

    上面记录中,已经提前在nfs的服务端将iptables防火墙关闭了。
    如果不关闭服务端的iptables防火墙,那么要想让客户端成功挂载上nfs,就需要在服务端的iptables里开通nfs相关端口.

    操作记录:(centos6x系统下nfs服务照此配置均可,已经过实验)
    portmapp在nfs服务启动的时候给每一个NFS服务分配了一个动态的端口,如这些服务MOUNTD_PORT、 STATD_PORT、 LOCKD_TCPPORT、 LOCKD_UDPPORT。
    由于这些端口是动态随机分配的,所以导致在iptables防火墙无法设置。
    那么如何才能让nfs client在使用iptables时可以正常使用NFS服务呢?
    办法就是指定将上述服务的运行端口,然后在iptables中发布。

    相关的配置文件为 /etc/sysconfig/nfs 。
    要使用iptables来控制nfs,需静态指定端口号让portmap调用。
    nfs服务启用时会检查/etc/sysconfig/nfs文件。
    在此文件下来指定mountd,statd,lockd,rquotad端口号,修改默认的端口号,这里我用的不是默认的端口号,而是自定义的端口号。如下:
    [root@dev-huanqiu ~]# cat /etc/sysconfig/nfs|grep -v "^#"
    RQUOTAD_PORT=10001
    LOCKD_TCPPORT=10002
    LOCKD_UDPPORT=10002
    MOUNTD_PORT=10003
    STATD_PORT=10004

    重启nfs服务
    [root@dev-huanqiu ~]# /etc/init.d/nfs restart
    Shutting down NFS daemon: [ OK ]
    Shutting down NFS mountd: [ OK ]
    Shutting down NFS services: [ OK ]
    Shutting down RPC idmapd: [ OK ]
    Starting NFS services: [ OK ]
    Starting NFS mountd: [ OK ]
    Starting NFS daemon: [ OK ]
    Starting RPC idmapd: [ OK ]

    再次通过下面命令查看nfs使用的端口,其中2049是nfs服务的固定端口
    [root@dev-huanqiu ~]# 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
    100011 1 udp 10001 rquotad
    100011 2 udp 10001 rquotad
    100011 1 tcp 10001 rquotad
    100011 2 tcp 10001 rquotad
    100005 1 udp 10003 mountd
    100005 1 tcp 10003 mountd
    100005 2 udp 10003 mountd
    100005 2 tcp 10003 mountd
    100005 3 udp 10003 mountd
    100005 3 tcp 10003 mountd
    100003 2 tcp 2049 nfs
    100003 3 tcp 2049 nfs
    100003 4 tcp 2049 nfs
    100227 2 tcp 2049 nfs_acl
    100227 3 tcp 2049 nfs_acl
    100003 2 udp 2049 nfs
    100003 3 udp 2049 nfs
    100003 4 udp 2049 nfs
    100227 2 udp 2049 nfs_acl
    100227 3 udp 2049 nfs_acl
    100024 1 udp 10004 status
    100024 1 tcp 10004 status
    100021 1 udp 10002 nlockmgr
    100021 3 udp 10002 nlockmgr
    100021 4 udp 10002 nlockmgr
    100021 1 tcp 10002 nlockmgr
    100021 3 tcp 10002 nlockmgr
    100021 4 tcp 10002 nlockmgr

    端口111和2049分别是rpcbind和nfs服务端口
    将上面命令结果中的端口分别在iptables里开通,注意tcp和udp均要开通!
    [root@dev-huanqiu ~]# vim /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]
    -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    -A INPUT -p icmp -j ACCEPT
    -A INPUT -i lo -j ACCEPT
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
    -A INPUT -s 192.168.1.19/24 -p tcp --dport 111 -j ACCEPT
    -A INPUT -s 192.168.1.19/24 -p udp --dport 111 -j ACCEPT
    -A INPUT -s 192.168.1.19/24 -p tcp --dport 2049 -j ACCEPT
    -A INPUT -s 192.168.1.19/24 -p udp --dport 2049 -j ACCEPT
    -A INPUT -s 192.168.1.19/24 -p tcp --dport 10001:10004 -j ACCEPT
    -A INPUT -s 192.168.1.19/24 -p udp --dport 10001:10004 -j ACCEPT
    -A INPUT -j REJECT --reject-with icmp-host-prohibited
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited
    COMMIT

    重启防火墙服务
    [root@dev-huanqiu ~]# /etc/init.d/iptables restart
    iptables: Setting chains to policy ACCEPT: filter [ OK ]
    iptables: Flushing firewall rules: [ OK ]
    iptables: Unloading modules: [ OK ]
    iptables: Applying firewall rules: [ OK ]

    [root@ctl ~]# iptables -L
    Chain INPUT (policy ACCEPT)
    target prot opt source destination
    ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
    ACCEPT icmp -- anywhere anywhere
    ACCEPT all -- anywhere anywhere
    ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
    ACCEPT tcp -- bogon/24 anywhere tcp dpt:nfs
    ACCEPT udp -- bogon/24 anywhere udp dpt:nfs
    ACCEPT tcp -- bogon/24 anywhere tcp dpts:scp-config:emcrmirccd
    ACCEPT udp -- bogon/24 anywhere udp dpts:scp-config:10004
    REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

    Chain FORWARD (policy ACCEPT)
    target prot opt source destination
    REJECT all -- anywhere anywhere reject-with icmp-host-prohibited

    Chain OUTPUT (policy ACCEPT)
    target prot opt source destination

    这样,如上设置后,nfs在开启iptables防火墙的情况下,也可以正常挂载使用了!

    ------------------------------------------------------------
    如果客户端在nfs挂载时报权限错误,如下:
    mount.nfs: access denied by server while mounting.....

    则可能原因有以下几种:
    1)防火墙原因
    解决:关闭防火墙;如果防火墙开启,需要打开相应的端口,并对相关客户机开放;另确保/etc/hosts.allow和/etc/hosts.deny文件中有没有nfs相关规则。
    2)nfs服务端挂载的目标目录权限
    解决:尝试设置777权限
    3)insecure标识功能关闭
    解决:insecure标识如果端口号大于1024,则需要将insecure 选项加入到配置文件(/etc/exports)相关选项中mount客户端才能正常工作,默认情况下这个功能都是开启的!
    如果系统要是默认禁止这个选项,那么客户端使用大于1024端口进行nfs挂载时就会报权限错误,则需要通过修改配置文件/etc/exports,加入insecure选项才能解决,如下:
    /usr/local/nginx/html/ssapp.test/weiloushu/video 192.168.1.19(insecure,rw,sync,no_root_squash)

  • 相关阅读:
    周六,晴转雨
    时间概念
    2014-7-24-早
    2014-7-22
    [SPM_LAB]持续集成实验
    [软件测试_LAB2]使用Selenium进行自动化测试
    [软件测试_hw3]路径覆盖测试
    [软件测试_LAB1]安装junit和hamcrest及其使用
    [软件测试_hw2]Failure&Error
    [SPM_hw1]记一次项目经历
  • 原文地址:https://www.cnblogs.com/dengbingbing/p/12325063.html
Copyright © 2011-2022 走看看