在 ECS 上,NFS 快取記憶體大約需要 20 分鐘的時間,才能在 ECS 應用裝置上的資料headsvc 服務中傳播和重新整理 NFS 快取。此問題通常會在新的 NFS 匯出設定期間發生,因為需要進行一些變更以解決匯出自訂問題。
修改現有的 NFS 匯出,且 ECS 上的匯出顯示為作用中時,ECS 預期會出現此行為。
- 若要驗證此問題,請檢查 ECS 上的匯出:
命令:(在 NFS Linux 用戶端上)
# showmount -e <ECS > 的 IP 位址範例:
[root@nfsclient ~]# showmount -e xxx.xxx.xxx
Export list for xxx.xxx.xxx.xxx:
/namespace/nfsbucket *
- 嘗試掛接已在 ECS 上驗證的匯出:
命令:(注意:這是一個命令範例,我們正在新增 -vv 選項,以在 NFS Linux 用戶端上獲得更多詳細的輸出。)
# mount -vv -t nfs -o vers=3,nolock,sec=sys,proto=tcp <ECS IP > : < 匯出路徑 >< 本機掛接點 >
範例:
[root@ nfsclient ~]# mount -vv -t nfs -o vers=3,,nolock,sec=sys,proto=tcp xxx.xxx.xxx.xxx:/namespace/nfsbucket /mnt/test
mount.nfs: timeout set for Wed Aug 14 09:37:03 2019
mount.nfs: trying text-based options 'vers=3,nolock,sec=sys,proto=tcp,addr= xxx.xxx.xxx.xxx '
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying xxx.xxx.xxx.xxx prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=6
mount.nfs: trying xxx.xxx.xxx.xxx prog 100005 vers 3 prot TCP port 2049
mount.nfs: mount(2): No such file or directory
mount.nfs: mounting xxx.xxx.xxx.xxx:/namespace/nfsbucket failed, reason given by server: No such file or directory
- 在 ECS 上驗證無法找到匯出:
命令:(請注意,這會在過去 5 分鐘內同時掃描 ECS 叢集上的所有節點記錄,以取得關鍵字 nfs)
# svc_log -i -f nfs -sr all -sn -sf -n all -start '5 分鐘前'
例子:
admin@ecsnode1:~> svc_log -i -f nfs -sr all -sn -sf -n all -start '5 minutes ago'
svc_log v0.9.19 (svc_tools v1.1.1) Started 2019-08-14 15:35:57
Running on nodes: <All nodes>
Time range: 2019-08-14 15:30:57 - 2019-08-14 15:35:57
Filter string(s): 'nfs'
Show filename(s): True
Show nodename(s): True
Search reclaim logs (if any): False
Case insensitive: True
169.254.1.1 dataheadsvc.log 2019-08-14T15:35:05,953 [RpcDispatcherMD-3082827] INFO RpcProgramMountd.java (line 101) MOUNT MNT path: /namespace/nfsbucket Client: /xxx.xxx.xxx
169.254.1.1 dataheadsvc.log 2019-08-14T15:35:05,958 [RpcDispatcherMD-3082827] INFO ExportsService.java (line 98) added key /namespace/nfsbucket/ to the cache
169.254.1.1 dataheadsvc.log 2019-08-14T15:35:05,960 [RpcDispatcherMD-3082827] ERROR RpcProgramMountd.java (line 111) Couldn't locate the exportEntry for the path /namespace/nfsbucket
- 等待約 20 分鐘,以便在 ECS 上重新整理衝突的匯出設定,然後重試掛接命令:
命令:(注意:這是一個命令範例,我們正在新增 -vv 選項,以在 NFS Linux 用戶端上獲得更多詳細的輸出。)
# mount -vv -t nfs -o vers=3,nolock,sec=sys,proto=tcp <ECS IP > : < 匯出路徑 >< 本機掛接點 >
範例:
[root@client ~]# mount -vv -t nfs -o vers=3,,nolock,sec=sys,proto=tcp xxx.xxx.xxx: /namespace/nfsbucket mnt/test
final mount options: 'vers=3,,nolock,sec=sys,proto=tcp'
mount.nfs: timeout set for Wed Aug 14 13:55:00 2019
mount.nfs: trying text-based options 'vers=3,nolock,sec=sys,proto=tcp,addr= xxx.xxx.xxx '
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying xxx.xxx.xxx prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=6
mount.nfs: trying xxx.xxx.xxx prog 100005 vers 3 prot TCP port 2049
xxx.xxx.xxx:/namespace/nfsbucket on /mnt/test type nfs (rw,vers=3,,nolock,sec=sys,proto=tcp)