OneFS Cbind và DNS Caching

OneFS cbind là daemon bộ đệm DNS phân tán cho cụm PowerScale. Do đó, vai trò chính của nó là tăng tốc việc tra cứu tên miền trên cụm, đặc biệt là đối với khối lượng công việc NFS, thường có thể liên quan đến số lượng lớn yêu cầu tra cứu, đặc biệt là khi sử dụng netgroup. Bản thân Cbind được chia thành hai phần hợp lý:

Thành phần Sự miêu tả
Bộ nhớ đệm cổng Các mục mà một nút làm mới từ máy chủ DNS.
Bộ nhớ đệm cục bộ Các mục mà một nút làm mới từ nút Gateway.

Thiết kế của cbind giúp phân phối bộ nhớ đệm và khối lượng công việc DNS liên quan trên tất cả các nút trong cụm. Daemon chạy như một dịch vụ OneFS dưới sự quản lý của Master Control Program (MCP) và tập lệnh điều khiển /etc/mcp/sys/services/isi_cbind_d:

# dịch vụ isi -a | grep i liên kết
    isi_cbind_d Đã bật Bind Cache Daemon

Khi khởi động, cbind daemon isi_cbind_d đọc cấu hình của nó từ tệp gconfig cbind_config.gc. Nếu cần, có thể thực hiện thay đổi cấu hình bằng  công cụ isi network dnscache  hoặc  isi_cbind  CLI.

Daemon cbind cũng hỗ trợ đa thuê bao trên toàn cụm, với groupnet của mỗi thuê bao được phân bổ bộ đệm DNS hoàn toàn độc lập, với nhiều giao diện máy khách để phân tách các yêu cầu DNS từ các groupnet khác nhau. Cbind sử dụng phạm vi địa chỉ 127.42.xx và có thể được truy cập bởi các ứng dụng máy khách trên toàn bộ phạm vi. 16 byte thấp hơn của địa chỉ được máy khách đặt thành ID groupnet cho truy vấn. Ví dụ: nếu máy khách đang cố gắng truy vấn các máy chủ DNS trên groupnet với ID 5, nó sẽ gửi truy vấn DNS đến 127.42.0.5.

Về cơ bản,  daemon cbind bao gồm hai vùng chứa truy vấn/phản hồi DNS hoặc ‘stallset’: 

Thành phần Sự miêu tả
Bộ đếm DNS DNS stallset là tập hợp các DNS stall bao gồm một máy chủ DNS duy nhất và danh sách các truy vấn DNS đã được gửi đến các máy chủ DNS và đang chờ phản hồi.
Cụm quầy hàng Cluster stallset tương tự như DNS stallset, ngoại trừ cluster stalls đóng gói kết nối đến một nút khác trong cụm, được gọi là nút gateway. Nó cũng giữ danh sách các truy vấn DNS đã được chuyển tiếp đến nút gateway và đang chờ phản hồi.

Chứa trong một stallset là các stalls, lưu trữ các yêu cầu và phản hồi DNS thực tế. Stallset DNS cung cấp một stall riêng cho mỗi máy chủ DNS mà cbind đã được cấu hình để sử dụng và các yêu cầu được xử lý bằng thuật toán luân phiên. Tương tự như vậy, đối với stallset cụm, có một stall cho mỗi nút trong cụm. Chỉ số của stallset cụm là node cổng (devid – 1).

Mục nhập cụm stallset cho nút đang chạy daemon được coi là trường hợp đặc biệt, được gọi là ‘chế độ L1’, vì cổng cho các yêu cầu DNS này là nút đang thực thi mã. Các yêu cầu trên cổng stall cũng có một mục nhập trên DNS stallset biểu diễn yêu cầu đến máy chủ DNS bên ngoài. Tất cả các mục nhập cụm stallset tham gia tích cực khác được gọi là chế độ ‘L2+L1’. Tuy nhiên, nếu một nút không thể tiếp cận DNS, nút đó sẽ được chuyển sang chế độ L2 để ngăn không cho các nút khác sử dụng. Một mục nhập nhật ký liên quan được ghi vào /var/log/isi_cbind_d.log, có dạng:

isi_cbind_d[6204]: [0x800703800]bind: Lỗi
gửi truy vấn đến dns:10.21.25.11: Máy chủ ngừng hoạt động

Để hỗ trợ các cụm lớn, cbind sử dụng băm nhất quán để xác định nút cổng để lưu trữ yêu cầu và cụm stallset thích hợp để sử dụng. Thuật toán băm nhất quán này, quyết định nút nào sẽ lưu trữ mục nhập, được thiết kế để giảm thiểu số lần chuyển mục nhập khi các nút được thêm/xóa, đồng thời cũng giảm số luồng và cổng UDP được sử dụng. Để minh họa băm nhất quán của cbind, hãy xem xét cụm ba nút sau:

Hình ảnh này minh họa hoạt động băm nhất quán của cbind trên cụm ba nút.

Trong trường hợp này, khi dịch vụ cbind trên Node 3 hoạt động, một phần ba bộ đệm gateway từ node 1 và 2 tương ứng sẽ được chuyển đến node 3. Tương tự, nếu dịch vụ cbind của node 3 ngừng hoạt động, bộ đệm gateway của node 3 sẽ được chia đều cho node 1 và 2. Đối với yêu cầu DNS trên node 3, node sẽ kiểm tra bộ đệm cục bộ của node trước. Nếu không tìm thấy mục nhập, node sẽ tự động truy vấn gateway (ví dụ: node 2). Điều này có nghĩa là ngay cả khi node 3 không thể giao tiếp trực tiếp với máy chủ DNS, node vẫn có thể lưu bộ đệm các mục nhập từ một node khác.

Vì vậy, khi khởi động, tiến trình cbind của một nút sẽ cố gắng liên hệ hoặc ‘ping’ các máy chủ DNS. Khi nhận được phản hồi, cbind sẽ chuyển sang trạng thái hoạt động và thông báo cho GMP rằng dịch vụ isi_cbind_d đang chạy trên nút này. Đến lượt mình, GMP sẽ thông báo cho các tiến trình cbind trên phần còn lại của cụm rằng nút đã hoạt động và khả dụng.

Ngược lại, sau khi một số yêu cầu DNS đến máy chủ bên ngoài không thành công đối với một nút nhất định hoặc quy trình isi_cbind_d bị chấm dứt, thì mã GMP được thông báo rằng dịch vụ isi_cbind_d đã ngừng hoạt động đối với nút này. Sau đó, GMP thông báo cho cụm rằng nút đã ngừng hoạt động. Khi một quy trình cbind (trên nút Y) nhận được thông báo này, thuật toán băm nhất quán được cập nhật để báo cáo rằng nút X đã ngừng hoạt động. Bộ đếm cụm không được thông báo về thay đổi này. Thay vào đó, các yêu cầu DNS đã thay đổi cổng cuối cùng sẽ hết thời gian chờ và bị xóa.

Như vậy, chúng ta có thể tóm tắt quy trình yêu cầu và phản hồi của cbind như sau:

  1. Một máy khách trên nút gửi truy vấn DNS tới địa chỉ vòng lặp bổ sung 127.42.xx được cbind nhận được.
  2. Chương trình nền cbind sử dụng thuật toán băm nhất quán để tính toán giá trị cổng của truy vấn DNS và sử dụng cổng để lập chỉ mục cho cụm stallset.
  3. Nếu có lỗi trong bộ nhớ đệm, phản hồi sẽ được gửi đến máy khách và giao dịch sẽ hoàn tất.
  4. Nếu không, truy vấn DNS được đặt trong cụm stallset sử dụng gateway làm chỉ mục. Nếu đây là nút gateway, thì yêu cầu được gửi đến máy chủ DNS bên ngoài, nếu không, yêu cầu DNS được chuyển tiếp đến nút gateway.
  5. Khi máy chủ DNS hoặc cổng trả lời, một luồng khác sẽ nhận được phản hồi DNS và khớp với truy vấn trong danh sách. Phản hồi được chuyển tiếp đến máy khách và cụm stallset được cập nhật.

Tương tự như vậy, khi một yêu cầu được chuyển tiếp đến nút cổng:

  1. Chương trình nền cbind nhận được yêu cầu, tính toán giá trị cổng của truy vấn DNS bằng thuật toán băm nhất quán và sử dụng cổng để lập chỉ mục cho cụm stallset.
  2. Nếu có lỗi trong bộ nhớ đệm, phản hồi sẽ được trả về quy trình cbind từ xa và giao dịch sẽ hoàn tất.
  3. Nếu không, truy vấn DNS sẽ được đặt trong cụm stallset bằng cách sử dụng cổng làm chỉ mục và yêu cầu sẽ được gửi đến máy chủ DNS bên ngoài.
  4. Khi máy chủ DNS hoặc cổng trả về, một luồng khác sẽ nhận được phản hồi DNS và khớp với truy vấn trong danh sách. Phản hồi được chuyển tiếp đến nút gọi và cụm stallset được cập nhật.

Nếu cần, có thể bật hoặc tắt bộ nhớ đệm DNS cbind bằng  bộ lệnh isi network groupnets  , cho phép quản lý bộ nhớ đệm theo từng groupnet:

# isi network groupnets sửa đổi --id=<tên-groupnet> --dns-cache-enabled=<true/false>

Bộ lệnh dnscache mạng isi toàn cầu có thể hữu ích để kiểm tra cấu hình và giới hạn bộ nhớ đệm:

# isi mạng dnscache xem
Giới hạn mục nhập bộ nhớ đệm: 65536
  Thời gian chờ cụm: 5
      Thời gian chờ DNS: 5
    Làm mới háo hức: 0
   Kiểm tra Delta: 30
  TTL Max Không lỗi: 3600
  TTL Min Không lỗi: 30
 TTL Tối đa Nxdomain: 3600
 TTL tối thiểu Nxdomain: 15
    TTL Tối đa Khác: 60
    TTL Min Khác: 0
 Lỗi dịch vụ TTL tối đa: 3600
 TTL Min Servfail: 300

Bảng sau đây mô tả các tham số bộ đệm DNS này, có thể được cấu hình thủ công nếu muốn.

Cài đặt Sự miêu tả
TTL Không có lỗi tối thiểu Chỉ định ranh giới dưới về thời gian tồn tại cho các lần truy cập bộ đệm (giá trị mặc định = 30 giây).
TTL Không có lỗi tối đa Chỉ định ranh giới trên về thời gian tồn tại cho các lần truy cập bộ đệm (giá trị mặc định = 3600 giây).
TTL Không tồn tại Miền Tối thiểu Chỉ định ranh giới dưới về thời gian tồn tại cho nxdomain (giá trị mặc định = 15 giây).
TTL Không tồn tại Miền Tối đa Chỉ định ranh giới trên về thời gian tồn tại cho nxdomain (giá trị mặc định = 3600 giây).
TTL Các lỗi khác Tối thiểu Chỉ định ranh giới dưới về thời gian tồn tại cho các lỗi không thuộc nxdomain (giá trị mặc định = 0 giây).
TTL Các lỗi khác Tối đa Chỉ định ranh giới trên về thời gian tồn tại cho các lỗi không phải nxdomain (giá trị mặc định = 60 giây).
Giới hạn dưới TTL cho lỗi máy chủ Chỉ định ranh giới dưới về thời gian tồn tại đối với lỗi máy chủ DNS (giá trị mặc định = 300 giây).
Giới hạn trên của TTL cho lỗi máy chủ Chỉ định ranh giới trên về thời gian tồn tại cho lỗi máy chủ DNS (giá trị mặc định = 3600 giây).
Làm mới háo hức Chỉ định thời gian chờ để làm mới các mục bộ đệm sắp hết hạn (giá trị mặc định = 0 giây).
Giới hạn mục nhập bộ nhớ đệm Chỉ định số lượng mục tối đa mà bộ đệm DNS có thể chứa (giá trị mặc định = 35536 mục).
Kiểm tra Ping Delta Chỉ định delta để kiểm tra tình trạng cụm cbind (giá trị mặc định = 30 giây).

Ngoài ra, nếu cần, bạn có thể sử dụng cú pháp CLI sau để xóa bộ nhớ đệm toàn cục:

# isi mạng dnscache flush -v
Xả hoàn tất.

OneFS cũng cung cấp  tiện ích CLI isi_cbind  , có thể được sử dụng để giao tiếp với daemon cbind. Tiện ích này hỗ trợ cả cú pháp CLI thông thường, cộng với chế độ tương tác trong đó các lệnh được nhắc. Để vào chế độ tương tác, hãy gọi tiện ích mà không có đối số, ví dụ:

# isi_cbind
liên kết:
cbind: thoát
#

Các tùy chọn lệnh sau đây có sẵn:

# isi_cbind trợ giúp
        xóa - xóa số liệu thống kê máy chủ
        dump - dump trạng thái máy chủ nội bộ
        thoát - thoát khỏi chế độ tương tác
        xả - xả bộ nhớ đệm
        thoát - thoát khỏi chế độ tương tác
        thiết lập - thay đổi cài đặt dễ bay hơi
        hiển thị - hiển thị cài đặt máy chủ hoặc số liệu thống kê
        tắt máy - tắt máy chủ theo thứ tự

Bộ nhớ đệm của một groupnet riêng lẻ có thể được xóa như sau, trong trường hợp này nhắm mục tiêu vào  groupnet client1  :

# isi_cbind tuôn ra mạng nhóm client1
Xả hoàn tất.

Lưu ý rằng tất cả các thiết lập bộ đệm đều mang tính toàn cục và do đó sẽ ảnh hưởng đến tất cả bộ đệm DNS của groupnet.

Thống kê bộ nhớ đệm có sẵn bằng cách sử dụng cú pháp CLI sau, ví dụ: 

# isi_cbind hiển thị bộ nhớ đệm
  Bộ nhớ đệm:
    mục nhập: 10 - mục nhập được cài đặt trong bộ nhớ đệm
    max_entries: 338 - mục được phân bổ, bao gồm cả mục I/O và danh sách trống
    đã hết hạn: 0 - các mục đã đạt đến TTL và đã bị xóa khỏi bộ nhớ đệm
    thăm dò: 508 - số lần thử khớp với một mục trong bộ nhớ đệm
    lượt truy cập: 498 (98%) - số lần tìm thấy kết quả trùng khớp
    cập nhật: 0 - mục trong bộ nhớ đệm được thay thế bằng một phản hồi mới
    response_time: 0.000005 - thời gian xử lý trung bình cho các lần truy cập bộ nhớ đệm

Những số liệu thống kê bộ nhớ đệm này có thể được xóa như sau:

# isi_cbind xóa bộ nhớ đệm

Tương tự như vậy, số liệu thống kê DNS có thể được xem bằng  đối số show dns  :

# isi_cbind hiển thị DNS
  Máy chủ DNS 1: (dns:10.21.25.10)
    truy vấn: 862 - truy vấn được gửi đến máy chủ DNS này
    phản hồi: 862 (100%) - phản hồi khớp với truy vấn đang chờ xử lý
    giả mạo: 17315 (2008%) - phản hồi không khớp với truy vấn đang chờ xử lý
    đã bỏ: 17315 (2008%) - phản hồi không được cài đặt vào bộ nhớ đệm (lỗi)
    thời gian chờ: 0 ( 0%) - thời gian không nhận được phản hồi trong thời gian
    response_time: 0.001917 - thời gian xử lý trung bình từ yêu cầu đến phản hồi
  Máy chủ DNS 2: (dns:10.21.25.11)
    truy vấn: 861 - truy vấn được gửi đến máy chủ DNS này
    phản hồi: 860 (99%) - phản hồi khớp với truy vấn đang chờ xử lý
    giả mạo: 17314 (2010%) - phản hồi không khớp với truy vấn đang chờ xử lý
    đã bỏ: 17314 (2010%) - phản hồi không được cài đặt vào bộ nhớ đệm (lỗi)
    thời gian chờ: 1 ( 0%) - thời gian không nhận được phản hồi trong thời gian
    response_time: 0.001603 - thời gian xử lý trung bình từ yêu cầu đến phản hồi

Khi chạy isi_cbind_d, các tùy chọn bổ sung sau sẽ khả dụng và có thể được gọi bằng các cờ CLI và cú pháp sau:

Lựa chọn Lá cờ Sự miêu tả
Gỡ lỗi -d Đặt cờ gỡ lỗi để ghi nhật ký các thành phần cụ thể. Các cờ là danh sách được phân tách bằng dấu phẩy từ các thành phần sau:

             tất cả Ghi lại tất cả các thành phần.

             bộ nhớ đệm Nhật ký thông tin liên quan đến dữ liệu bộ nhớ đệm.

             cụm Nhật ký thông tin liên quan đến dữ liệu cụm.

             luồng Nhật ký thông tin liên quan đến dữ liệu luồng.

             khóa Nhật ký thông tin liên quan đến dữ liệu khóa.

             liên kết Nhật ký thông tin liên quan đến dữ liệu liên kết.

             Nhật ký bộ nhớ Thông tin liên quan đến dữ liệu bộ nhớ.

             Nhật ký mạng Thông tin liên quan đến dữ liệu mạng.

             refcount Nhật ký thông tin liên quan đến dữ liệu refcount của đối tượng bộ nhớ đệm.

             thời gian Nhật ký thông tin liên quan đến dữ liệu thời gian bộ nhớ đệm.

             Tùy chọn gỡ lỗi đặc biệt bên ngoài để cung cấp dịch vụ DNS ngoài nút.

Đầu ra -f Isi_cbind sẽ không tách khỏi thiết bị đầu cuối điều khiển và sẽ in thông báo gỡ lỗi tới stderr.
Đổ vào Tệp đích cho đầu ra dump isi_cbind.
Cảng -P Sử dụng cổng được chỉ định thay vì cổng NS mặc định là 53.

Tiến trình isi_cbind_d ghi nhật ký tin nhắn vào syslog hoặc stderr, tùy thuộc vào chế độ của daemon. Mức nhật ký có thể được thay đổi bằng cách gửi cho nó tín hiệu SIGUSR2, tín hiệu này sẽ chuyển cờ gỡ lỗi sang mức tối đa hoặc trở lại cài đặt ban đầu. Ví dụ:

# giết -USR2 `cat /var/run/isi_cbind_d.pid`

Ngoài ra, khi khắc phục sự cố cbind, các tệp sau đây có thể cung cấp thông tin hữu ích:

Tài liệu Sự miêu tả
/var/run/isi_cbind_d.pid pid của tiến trình đang chạy hiện tại
/var/crash/isi_cbind_d.dump tập tin đầu ra cho trạng thái nội bộ và số liệu thống kê
/var/log/isi_cbind_d.log tập tin đầu ra syslog
/etc/gconfig/cbind_config.gc tập tin cấu hình
/etc/resolv.conf tập tin cấu hình bind resolver

Bạn cũng có thể đổ dữ liệu trạng thái nội bộ của isi_cbind_d vào một tệp được chỉ định bằng tùy chọn -D, được mô tả trong bảng ở trên.