Khóa và báo cáo OneFS NFS – Phần 2

Trong bài viết trước của loạt bài này , chúng ta đã xem xét các khóa NFS mới và các trình chờ báo cáo tập lệnh CLI và điểm cuối API. Tiếp theo, chúng ta sẽ chú ý đến một số ngữ cảnh bổ sung, cảnh báo và xóa khóa NFSv3.

Trước khi có những cải tiến về khóa NFS trong OneFS 9.5, các lệnh CLI cũ có phần kém hiệu quả. Đầu ra của chúng cũng bao gồm các khóa miền tư vấn khác như SMB, khiến đầu ra khó phân tích hơn. Bảng bên dưới ánh xạ các lệnh CLI 9.5 mới (và các trình xử lý tương ứng) với cú pháp NLM cũ.

Kiểu / Bộ lệnh OneFS 9.5 trở lên OneFS 9.4 trở về trước
Khóa khóa isi nfs isi nfs nlm khóa
Phiên họp isi nfs nlm phiên bản isi nfs nlm phiên bản
Người phục vụ isi nfs khóa bồi bàn isi nfs nlm khóa bồi bàn

Lưu ý rằng các lệnh CLI  khóa và chờ nfs isi_classic cũng đã bị loại bỏ trong OneFS 9.5.

Khi nâng cấp lên OneFS 9.5 hoặc mới hơn từ bản phát hành trước đó, trình xử lý API nền tảng cũ vẫn tiếp tục hoạt động trong và sau khi nâng cấp. Do đó, mọi tập lệnh và tự động hóa cũ đều được bảo vệ khỏi việc báo cáo khóa này. Ngoài ra, trong khi trình xử lý API nền tảng mới sẽ hoạt động trong quá trình nâng cấp liên tục ở chế độ hỗn hợp, chúng sẽ chỉ trả về kết quả cho các nút đã được nâng cấp (‘nút cao’).

Lưu ý rằng khung CLI khóa NFS không hỗ trợ phản hồi một phần. Tuy nhiên, nếu một nút ngừng hoạt động hoặc cụm đang trong quá trình nâng cấp liên tục, giải pháp thay thế là truy vấn điểm cuối API nền tảng tương đương.

Về mặt hiệu suất, trên các cụm bận rộn rất lớn, có khả năng đầu ra của lệnh CLI lock và wait sẽ chậm. Trong những trường hợp như vậy, cờ  –timeout có thể được sử dụng để tăng cửa sổ thời gian chờ lệnh. Lọc đầu ra cũng có thể được sử dụng để giảm số lượng khóa được báo cáo.

Khi một khóa ở trạng thái chuyển tiếp, có khả năng khóa đó không có/báo cáo phiên bản. Trong những trường hợp này, trường Phiên bản  sẽ được biểu diễn là  . Ví dụ:

# isi nfs khóa danh sách -v
Khách hàng: 1/TMECLI1:487722/10.22.10.250
Mã khách hàng: 487722351064074
LIÊN: 4295164422
Đường dẫn: /ifs/locks/nfsv3/10.22.10.250_1
Loại khóa: độc quyền
Phạm vi: 0, 92233772036854775807
Ngày tạo: 2023-08-18T08:03:52
Phiên bản: -
-------------------------------------------------- -------------
Tổng cộng: 1

Hành vi này rất hiếm khi xảy ra. Tuy nhiên, nếu gặp phải, chỉ cần thực hiện lại lệnh CLI và phiên bản khóa sẽ được báo cáo chính xác.

Khi nói đến việc khắc phục sự cố NFSv3/NLM, nếu máy khách NFSv3 liên tục gặp phải NLM_DENIED hoặc các sự cố quản lý khóa khác, thì điều này thường là do các quy tắc tường lửa được cấu hình không đúng. Ví dụ, hãy lấy đoạn trích chụp gói tin (PCAP) sau đây từ máy khách Linux NFSv4:

   21 08:50:42.173300992 10.22.10.100 → 10.22.10.200 NLM 106 V4 LOCK Trả lời (Gọi vào 19) NLM_DENIED

Thông thường, giả định là chỉ cần mở các cổng lockd hoặc statd ở phía máy chủ của tường lửa và máy khách luôn thực hiện kết nối theo cách đó. Tuy nhiên, điều này không đúng. Thay vào đó, máy chủ sẽ liên tục phản hồi bằng câu ‘để tôi liên lạc lại với bạn’, sau đó kết nối lại với máy khách. Do đó, nếu tường lửa chặn quyền truy cập vào rcpbind trên máy khách và/hoặc lockd hoặc statd trên máy khách, khả năng xảy ra lỗi kết nối là rất cao.

Thỉnh thoảng, cần phải xóa khóa NLM và waiter khỏi cụm. Theo truyền thống, lệnh isi_classic nfs clients rm được sử dụng, tuy nhiên lệnh đó có những hạn chế và đã bị loại bỏ hoàn toàn trong OneFS 9.5 trở lên. Thay vào đó, phương pháp được ưa thích là sử dụng tiện ích CLI isi nfs nlm sessions kết hợp với nhiều lệnh CLI OneFS phụ trợ khác để xóa khóa và waiter có vấn đề. 

Lưu ý rằng lệnh CLI isi nfs nlm sessions  , có trong tất cả các phiên bản OneFS hiện tại, là Zone-Aware. Định dạng đầu ra được nhìn thấy trong đầu ra cho máy khách đang giữ khóa vì bây giờ nó hiển thị số ID vùng ở đầu. Ví dụ:

 4 /tme-linux1/10.22.10.250

Điều này thể hiện:

ID vùng 4 / Máy khách tme-linux1 / Địa chỉ IP của nút cụm giữ kết nối.

Quy trình cơ bản để xóa khóa NLM và trình chờ khỏi cụm như sau:  1.

Liệt kê các khóa NFS và tìm kiếm tên tệp có liên quan.

Trong OneFS 8.5 trở lên, danh sách khóa có thể được lọc bằng  đối số –path .

# isi nfs khóa danh sách --path=<đường dẫn> | grep <tên tệp>

Xin lưu ý rằng đường dẫn đầy đủ phải được chỉ định, bắt đầu bằng /ifs . Không có sự khớp lệnh hoặc thay thế một phần nào cho đường dẫn trong bộ lệnh này.

Đối với OneFS 9.4 trở về trước, có thể sử dụng cú pháp CLI sau:

# isi_for_array -sX 'isi nfs nlm khóa danh sách | grep <tên tệp>'

2. Liệt kê các trình chờ khóa được liên kết với cùng một tên tệp bằng cách sử dụng  |grep .

Đối với OneFS 8.5 trở lên, danh sách người chờ cũng có thể được lọc bằng cú pháp –path :

# isi nfs khóa người phục vụ –path=<đường dẫn> | grep <tên tệp>

Với OneFS 9.4 trở về trước, có thể sử dụng cú pháp CLI sau:

# isi_for_array -sX 'isi nfs nlm khóa người phục vụ |grep -i <tên tệp>'

3. Xác nhận máy khách và số inode logic (LIN) đang được chờ. 

Điều này có thể thực hiện được bằng cách truy vấn efs.advlock.failover.lock_waiters sysctrl. Ví dụ:

# isi_for_array -sX 'sysctl efs.advlock.failover.lock_waiters'

[đầu ra bị cắt bớt]
 ...
 khách hàng = { '4/tme-linux1/10.20.10.200', 0x26593d37370041 }
 ...
tài nguyên =  2:df86:0218

Lưu ý rằng để kiểm tra tính hợp lệ, tiện ích CLI isi get -L có thể được sử dụng để xác nhận đường dẫn của tệp từ LIN của tệp đó:

isi lấy -L <LIN>

4. Tháo bỏ những ổ khóa không mong muốn khiến người phục vụ phải xếp hàng dài. 

Hãy nhớ rằng cú pháp lệnh  isi nfs nlm sessions có thể truy cập theo vùng.

Liệt kê các vùng truy cập theo ID của chúng.

# isi zone danh sách các vùng -v | grep -iE "ID vùng|tên"

Sau khi xác định được ID vùng mong muốn, tiện ích CLI isi_run -z  có thể được sử dụng để chỉ định vùng thích hợp để chạy lệnh isi nfs nlm sessions : 

# isi_run -z 4 -l gốc

Tiếp theo, lệnh isi nfs nlm sessions delete CLI sẽ xóa trình chờ khóa cụ thể gây ra sự cố. Cú pháp lệnh yêu cầu chỉ định tên máy chủ của máy khách và IP nút của nút giữ khóa. 

# isi nfs nlm phiên xóa –-zone <AZ_zone_ID> <hostname> <cluster-ip>

Ví dụ:

# isi nfs nlm phiên xóa –zone 4 tme-linux1 10.20.10.200
 Bạn có chắc chắn muốn xóa tất cả các khóa NFSv3 được liên kết với máy khách tme-linux1 đối với cụm IP 10.20.10.100 không? (có/[không]): có

5. Lặp lại các lệnh ở bước 1 để xác nhận rằng các khóa và trình chờ NLM mong muốn đã được loại bỏ thành công.
TRƯỚC KHI áp dụng quy trình này….

 # isi_for_array -sX 'isi nfs nlm khóa danh sách |grep JUN'
 TME-1: 4/tme-linux1/192.168.2.214 /ifs/tmp/TME/sequences/mncr_fabjob_seq_file_27THÁNG 6 NĂM 2017
 TME-1: 4/ tme-linux1/192.168.2.214 /ifs/tmp/TME/sequences/mncr_fabjob_seq_file_28THÁNG 6 NĂM 2017
 TME-2: 4/ tme-linux1/192.168.2.214 /ifs/tmp/TME/sequences/mncr_fabjob_seq_file_27THÁNG 6 NĂM 2017
 TME-2: 4/ tme-linux1/192.168.2.214 /ifs/tmp/TME/sequences/mncr_fabjob_seq_file_28THÁNG 6 NĂM 2017
 TME-3: 4/ tme-linux1/192.168.2.214 /ifs/tmp/TME/sequences/mncr_fabjob_seq_file_27THÁNG 6 NĂM 2017
 TME-3: 4/ tme-linux1/192.168.2.214 /ifs/tmp/TME/sequences/mncr_fabjob_seq_file_28THÁNG 6 NĂM 2017
 TME-4: 4/ tme-linux1/192.168.2.214 /ifs/tmp/TME/sequences/mncr_fabjob_seq_file_27THÁNG 6 NĂM 2017
 TME-4: 4/ tme-linux1/192.168.2.214 /ifs/tmp/TME/sequences/mncr_fabjob_seq_file_28THÁNG 6 NĂM 2017
 TME-5: 4/ tme-linux1/192.168.2.214 /ifs/tmp/TME/sequences/mncr_fabjob_seq_file_27THÁNG 6 NĂM 2017
 TME-5: 4/ tme-linux1/192.168.2.214 /ifs/tmp/TME/sequences/mncr_fabjob_seq_file_28THÁNG 6 NĂM 2017
 TME-6: 4/ tme-linux1/192.168.2.214 /ifs/tmp/TME/sequences/mncr_fabjob_seq_file_27THÁNG 6 NĂM 2017
 TME-6: 4/ tme-linux1/192.168.2.214 /ifs/tmp/TME/sequences/mncr_fabjob_seq_file_28THÁNG 6 NĂM 2017
 
 
 # isi_for_array -sX 'isi nfs nlm khóa người phục vụ |grep -i JUN'
 TME-1: 4/ tme-linux1/192.168.2.214 /ifs/tmp/TME/sequences/mncr_fabjob_seq_file_28THÁNG 6 NĂM 2017
 TME-1: 4/ tme-linux1/192.168.2.214 /ifs/tmp/TME/sequences/mncr_fabjob_seq_file_28THÁNG 6 NĂM 2017
 TME-2 đã thoát với trạng thái 1
 TME-3 đã thoát với trạng thái 1
 TME-4 đã thoát với trạng thái 1
 TME-5 đã thoát với trạng thái 1
 TME-6 đã thoát với trạng thái 1

SAU ĐÓ…

TME-1# isi nfs nlm phiên xóa --hostname= tme-linux1 --cluster-ip=192.168.2.214
 Bạn có chắc chắn muốn xóa tất cả các khóa NFSv3 được liên kết với máy khách tme-linux1 đối với cụm IP 192.168.2.214 không? (có/[không]): có
 TME-1#
 TME-1#
 TME-1# isi_for_array -sX 'sysctl efs.advlock.failover.locks |grep 2:ce75:0319'
 TME-1 đã thoát với trạng thái 1
 TME-2 đã thoát với trạng thái 1
 TME-3 đã thoát với trạng thái 1
 TME-4 đã thoát với trạng thái 1
 TME-5 đã thoát với trạng thái 1
 TME-6 đã thoát với trạng thái 1
 TME-1#
 TME-1# isi_for_array -sX 'isi nfs nlm khóa danh sách |grep -i JUN'
 TME-1 đã thoát với trạng thái 1
 TME-2 đã thoát với trạng thái 1
 TME-3 đã thoát với trạng thái 1
 TME-4 đã thoát với trạng thái 1
 TME-5 đã thoát với trạng thái 1
 TME-6 đã thoát với trạng thái 1
 TME-1#
 TME-1# isi_for_array -sX 'isi nfs nlm khóa người phục vụ |grep -i JUN'
 TME-1 đã thoát với trạng thái 1
 TME-2 đã thoát với trạng thái 1
 TME-3 đã thoát với trạng thái 1
 TME-4 đã thoát với trạng thái 1
 TME-5 đã thoát với trạng thái 1
 TME-6 đã thoát với trạng thái 1

 

Tác giả : Nick Trimbee