How should I configure my NFS cluster service to avoid stale NFS filehandles in RHEL 5 or 6?

06시 56분 2014년 2월 7일 업데이트

문제

  • How should I configure my NFS cluster to avoid stale NFS filehandles?
    (stale NFS file handle을 방지하기 위해 NFS cluster를 어떻게 설정해야 하나요?)
  • When I failover a clustered NFS service, clients get stale file handles and/or permission errors
    (클러스터로 구성된 NFS 서비스가 failover될 때, 클라이언트들은 stale file handle 그리고/또는 permission errors가 발생합니다.)

환경

  • Red Hat Enterprise Linux (RHEL) 5 or 6 with the High Availability Add On
  • A clustered NFS service in /etc/cluster/cluster.conf

해결

  • There are several potential resolutions to this problem.
    (이 문제에 대해 잠재적인 해결책이 몇가지 있습니다.)

  • Ensure the proper Parent-child Relationship is established between IP and nfsclient resources in the cluster service.
    (클러스터 서비스에서 nfsclient 자원과 IP 사이에 적절한 부모-자식 관계인지 확인하세요)

  • Ensure the fs or clusterfs resource within the service has a value specified for the fsid attribute. For example:
    (서비스 안에서 fs 또는 clusterfs이 fsid 속성에 대해 지정된 값이 있는지 확인하세요)

<fs device="/dev/myvg/mylv" force_unmount="0" fsid="1234" fstype="ext3" mountpoint="/mnt/nfs1" name="nfs1-fs" options="rw">
   <nfsexport name="nfs1-export"
       <nfsclient name="nfs1-client-world" options="rw,sync" target="*"/>

  • If the nfsexport/nfsclient resources are not a child of an fs/clusterfs resource, then set the fsid directly on the nfsclient resource.

<nfsexport name="nfs1-export"
    <nfsclient name="nfs1-client-world" options="rw,sync" target="*" fsid="1234"/> 

근본 원인

  • All cluster nodes should be using a consistent filesystem ID when generating filehandles. If the block device major and minor numbers are consistent across all machines, then this will generally not be a problem. If they are not consistent, then one should use the fsid= option for the exports to ensure that this number does not change during failover. An example of its usage in the /etc/exports file is:

    모든 클러스터 노드들은 파일핸들을 생성하기 위해 일관된 파일시스템 ID가 사용되어야 합니다. 만일 모든 시스템들에서

    블록 디바이스의 major/minor 번호가 일치한다면, 일반적으로 문제가 되지 않을 것입니다.

    만일 그것들이 일치하지 않는다면, failover 동안에 이 번호가 변경되지 않도록 하기 위해

    exports에 대해 fsid= 옵션을 사용해야 합니다. /etc/exports 파일에서 그 사용법의 예는 다음과 같습니다.


    /usr/share/icons *(async,rw,fsid=X)

  • Where X is any 32 bit number that can be used but must be unique among all the exported filesystems. When the export is managed by rgmanager (as in the above examples) instead of /etc/exports, the fsid attribute can be specified in the resource.

    X는 사용될 수 있는 32bit 숫자이지만, 모든 export된 파일시스템들 사이에 유일해야 한다. 

  • The fsid is used to identify the filesystem on the NFS-server side, and is passed on to the NFS-clients during mounting. With Red Hat Enterprise Linux 6 and above, the fsid is based on the UUID of the exported filesystem (if available), instead of the major:minor of the device containing the filesystem. Therefore there is not a requirement to set the fsid on RHEL6 NFS-servers where the exported filesystem has a UUID set (this can be checked with /sbin/blkid).

    fsid는 NFS-server 편에서 파일시스템을 식별하기 위해 사용되며, 마운트 하는 중에 NFS-clients에게 전송된다. RHEL 6 또는 이상에서는,
    fsid는 파일시스템을 포함하는 디바이스의 major:minor 대신에, (가능한 경우) export된 파일시스템의 UUID를 기반으로 한다.
    그러므로, export된 파일시스템이 UUID set을 가진 RHEL6 NFS-servers 에서는 fsid를 설정할 필요가 없다.
    (/sbin/blkid로 확인할 수 있음) 

  • The other linked articles above provide additional details on the root causes of their respective problems.


+ Recent posts