Tuesday, May 14, 2024

Tính năng Swift Recon trong Swift Proxy

-

1. Tổng quan.

Swift-recon là một công cụ được cung cấp bởi OpenStack Swift, một object storage phân tán. swift-recon được sử dụng để thu thập và báo cáo thông tin về trạng thái của các node trong cụm Swift.

Cụ thể, swift-recon có thể thu thập thông tin về các vấn đề như tải hệ thống, số lượng request và thậm chí cả thông tin về việc sử dụng ổ đĩa. Điều này giúp người quản trị cụm có cái nhìn tổng quan về trạng thái của cụm và giúp xác định bất kỳ vấn đề nào có thể đang xảy ra.

Dưới đây là toàn bộ output của lệnh swift-recon --all.

shell> swift-recon --all
===============================================================================
--> Starting reconnaissance on 3 hosts (object)
===============================================================================
[2024-03-28 08:22:57] Checking async pendings
[async_pending] - No hosts returned valid data.
===============================================================================
[2024-03-28 08:22:57] Checking auditor stats
[ALL_auditor] - No hosts returned valid data.
[ZBF_auditor] - No hosts returned valid data.
===============================================================================
[2024-03-28 08:22:57] Checking updater times
[updater_last_sweep] low: 0, high: 0, avg: 0.3, total: 0, Failed: 0.0%, no_result: 0, reported: 3
===============================================================================
[2024-03-28 08:22:57] Checking on expirers
[object_expiration_pass] - No hosts returned valid data.
[expired_last_pass] - No hosts returned valid data.
===============================================================================
[2024-03-28 08:22:57] Checking on replication
[replication_time] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
[replication_failure] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
[replication_success] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
[replication_attempted] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
Oldest completion was 2024-03-28 08:22:43 (13 seconds ago) by 10.237.7.86:6200.
Most recent completion was 2024-03-28 08:22:44 (13 seconds ago) by 10.237.7.85:6200.
===============================================================================
[2024-03-28 08:22:57] Getting unmounted drives from 3 hosts...
===============================================================================
[2024-03-28 08:22:57] Checking load averages
[1m_load_avg] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
[5m_load_avg] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
[15m_load_avg] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
===============================================================================
[2024-03-28 08:22:57] Checking disk usage now
Distribution Graph:
  0%   15 *********************************************************************
Disk usage: space used: 3874713600 of 482947891200
Disk usage: space free: 479073177600 of 482947891200
Disk usage: lowest: 0.8%, highest: 0.8%, avg: 0.8023046938609347%
===============================================================================
[2024-03-28 08:22:57] Checking ring md5sums
3/3 hosts matched, 0 error[s] while checking hosts.
===============================================================================
[2024-03-28 08:22:57] Checking swift.conf md5sum
3/3 hosts matched, 0 error[s] while checking hosts.
===============================================================================
[2024-03-28 08:22:57] Checking quarantine
[quarantined_objects] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
[quarantined_containers] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
[quarantined_accounts] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
===============================================================================
[2024-03-28 08:22:57] Checking socket usage
[tcp_in_use] low: 8, high: 8, avg: 8.0, total: 24, Failed: 0.0%, no_result: 0, reported: 3
[tcp_mem_allocated_bytes] low: 4096, high: 4096, avg: 4096.0, total: 12288, Failed: 0.0%, no_result: 0, reported: 3
[tcp6_in_use] low: 1, high: 1, avg: 1.0, total: 3, Failed: 0.0%, no_result: 0, reported: 3
[time_wait] low: 4, high: 4, avg: 4.0, total: 12, Failed: 0.0%, no_result: 0, reported: 3
[orphan] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
===============================================================================
[2024-03-28 08:22:57] Validating server type 'object' on 3 hosts...
3/3 hosts ok, 0 error[s] while checking hosts.
===============================================================================
[2024-03-28 08:22:57] Checking drive-audit errors
[drive_audit_errors] - No hosts returned valid data.
===============================================================================
[2024-03-28 08:22:57] Checking time-sync
!! http://10.237.7.84:6200/recon/time current time is 2024-03-28 08:22:57, but remote is 2024-03-28 08:22:57, differs by 0.0255 sec
!! http://10.237.7.85:6200/recon/time current time is 2024-03-28 08:22:57, but remote is 2024-03-28 08:22:58, differs by 0.7097 sec
1/3 hosts matched, 0 error[s] while checking hosts.
===============================================================================
[2024-03-28 08:22:57] Checking versions
Versions matched (2.25.2), 0 error[s] while checking hosts.
===============================================================================

2. Chi tiết từng output.

Dựa trên output trên của báo cáo từ công cụ swift-recon của OpenStack Swift, chúng ta sẽ cùng phân tích ý nghĩa của report này:

Starting reconnaissance on 3 hosts (object).

swift-recon đang bắt đầu thu thập thông tin từ 3 máy chủ trong cụm Swift. (object) cho biết nó đang thu thập thông tin về object storage.

--> Starting reconnaissance on 3 hosts (object)

Checking async pending.

swift-recon đang kiểm tra số lượng yêu cầu bất đồng bộ (async pendings) đang chờ xử lý. Trong trường hợp này, không có máy chủ nào trả về dữ liệu hợp lệ, có thể do không có yêu cầu bất đồng bộ nào đang chờ xử lý.

[2024-03-28 08:22:57] Checking async pendings
[async_pending] - No hosts returned valid data.

Yêu cầu bất đồng bộ (async pending) thường liên quan đến việc cập nhật metadata của object hoặc container.

Ví dụ, khi một object được tạo hoặc cập nhật, Swift sẽ cập nhật metadata của object đó trên tất cả các bản sao của nó trong cụm. Tuy nhiên, nếu một hoặc nhiều node không khả dụng tại thời điểm đó, Swift sẽ lưu yêu cầu cập nhật đó để thực hiện sau. Những yêu cầu này được gọi là yêu cầu bất đồng bộ.

Ví dụ bạn có một cụm Swift với 3 node và bạn tạo một object mới. Swift sẽ cố gắng cập nhật metadata của object trên tất cả 3 node. Nếu một trong những node đó không khả dụng, Swift sẽ lưu yêu cầu cập nhật đó và thử lại sau. Yêu cầu cập nhật này được gọi là yêu cầu bất đồng bộ.

Checking auditor stat.

Trong OpenStack Swift, một auditor là một tiến trình nền chạy trên mỗi node lưu trữ, kiểm tra tính toàn vẹn của dữ liệu được lưu trữ trên node đó.

swift-recon đang kiểm tra thống kê từ các auditor, các tiến trình kiểm tra tính toàn vẹn của dữ liệu. Trong trường hợp này, không có máy chủ nào trả về dữ liệu hợp lệ.

[2024-03-28 08:22:57] Checking auditor stats
[ALL_auditor] - No hosts returned valid data.
[ZBF_auditor] - No hosts returned valid data.

Có hai loại auditor trong Swift: object auditor và container auditor.

Object auditor kiểm tra tính toàn vẹn của các object dữ liệu, trong khi container auditor kiểm tra tính toàn vẹn của các container, cấu trúc dữ liệu mà Swift sử dụng để tổ chức các object.

Ví dụ về công việc của một auditor như sau. Giả sử bạn có một cụm Swift với 3 node và mỗi node lưu trữ một bản sao của mỗi object. Một auditor chạy trên mỗi node sẽ kiểm tra từng object trên node đó để đảm bảo rằng nó không bị hỏng hoặc mất mát. Nếu auditor phát hiện ra một object bị hỏng, nó sẽ ghi lại sự cố và thông báo cho các tiến trình khác trong Swift để họ có thể khắc phục sự cố (ví dụ, bằng cách sao chép một bản sao hợp lệ của object từ một node khác).

Khi swift-recon báo cáo rằng Checking auditor stats, tức là nó đang thu thập thông tin về hoạt động của các auditor này, như số lượng object đã được kiểm tra, số lượng object bị hỏng đã được phát hiện và thời gian mà các auditor mất để thực hiện công việc của mình.

Checking updater times.

swift-recon đang kiểm tra thời gian mà các tiến trình updater mất để cập nhật dữ liệu. Trong trường hợp này, thời gian trung bình là 0.3 giây.

[2024-03-28 08:22:57] Checking updater times
[updater_last_sweep] low: 0, high: 0, avg: 0.3, total: 0, Failed: 0.0%, no_result: 0, reported: 3

Checking on expirers.

swift-recon đang kiểm tra các tiến trình expirer, các tiến trình xóa các object đã hết hạn. Trong trường hợp này, không có máy chủ nào trả về dữ liệu hợp lệ.

[2024-03-28 08:22:57] Checking on expirers
[object_expiration_pass] - No hosts returned valid data.
[expired_last_pass] - No hosts returned valid data.

Trong OpenStack Swift, một expirer là một tiến trình nền chạy trên mỗi node lưu trữ, có nhiệm vụ xóa các object đã hết hạn.

Khi một object được tạo hoặc cập nhật, bạn có thể đặt một thời gian hết hạn cho nó. Khi object đạt đến thời gian hết hạn, expirer sẽ tự động xóa nó khỏi hệ thống.

Ví dụ về công việc của một expirer. Giả sử bạn có một cụm Swift với 3 node và bạn tạo một object mới với thời gian hết hạn là 24 giờ. Sau 24 giờ, expirer chạy trên mỗi node sẽ kiểm tra và phát hiện rằng object đã hết hạn. Expirer sau đó sẽ xóa object khỏi hệ thống.

Khi swift-recon báo cáo rằng nó đang kiểm tra các tiến trình expirer, nó đang thu thập thông tin về hoạt động của các expirer này, như số lượng object đã hết hạn và đã được xóa và thời gian mà các expirer mất để thực hiện công việc của mình.

Checking on replication.

swift-recon đang kiểm tra trạng thái của quá trình replication data trong cụm Swift. Trong Swift, dữ liệu được sao chép giữa các node để đảm bảo tính sẵn sàng và độ bền của dữ liệu.

[2024-03-28 08:22:57] Checking on replication
[replication_time] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
[replication_failure] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
[replication_success] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
[replication_attempted] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
Oldest completion was 2024-03-28 08:22:43 (13 seconds ago) by 10.237.7.86:6200.
Most recent completion was 2024-03-28 08:22:44 (13 seconds ago) by 10.237.7.85:6200.

replication_timereplication_failurereplication_successreplication_attempted là các thống kê về quá trình replication data. Trong trường hợp này, tất cả các giá trị đều bằng 0, có thể do không có quá trình sao chép nào diễn ra trong thời gian swift-recon thu thập dữ liệu.

Ví dụ giả sử bạn có một cụm Swift với 3 node và bạn tạo một object mới. Swift sẽ sao chép object này lên tất cả 3 node để đảm bảo rằng nếu một node gặp sự cố, object vẫn có thể được truy cập từ các node khác. swift-recon sẽ thu thập thông tin về quá trình sao chép này, bao gồm thời gian mà quá trình sao chép mất, số lần sao chép thành công và số lần sao chép thất bại.

Checking load averages.

swift-recon đang kiểm tra tải trung bình của hệ thống trong 1, 5 và 15 phút qua. Trong trường hợp này, tải trung bình đều bằng 0, có thể do hệ thống không bận rộn trong thời gian swift-recon thu thập dữ liệu.

[2024-03-28 08:22:57] Checking load averages
[1m_load_avg] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
[5m_load_avg] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
[15m_load_avg] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3

Getting unmounted drives from 3 hostsswift-recon đang kiểm tra xem có ổ đĩa nào không được gắn kết (unmounted) trên 3 máy chủ không.

[2024-03-28 08:22:57] Getting unmounted drives from 3 hosts...

Checking disk usage now.

swift-recon đang kiểm tra sử dụng đĩa hiện tại. Nó báo cáo về dung lượng đã sử dụng, dung lượng trống và phần trăm sử dụng đĩa thấp nhất, cao nhất và trung bình.

[2024-03-28 08:22:57] Checking disk usage now
Distribution Graph:
  0%   15 *********************************************************************
Disk usage: space used: 3874713600 of 482947891200
Disk usage: space free: 479073177600 of 482947891200
Disk usage: lowest: 0.8%, highest: 0.8%, avg: 0.8023046938609347%

Disk usage: space free: 479073177600 of 482947891200 là tổng lượng dung lượng còn trống trên tất cả các ổ đĩa trong hệ thống. Đơn vị là byte.

Disk usage: lowest: 0.8%, highest: 0.8%, avg: 0.8023046938609347%: Đây là tỷ lệ phần trăm dung lượng đã được sử dụng trên ổ đĩa có ít dung lượng được sử dụng nhất (lowest), ổ đĩa có nhiều dung lượng được sử dụng nhất (highest) và trung bình trên tất cả các ổ đĩa (avg).

Đây không phải là dung lượng khả dụng sau khi replica, mà là tổng dung lượng của tất cả các ổ đĩa trong hệ thống. Dung lượng khả dụng sau khi replica sẽ phụ thuộc vào số lượng bản sao của mỗi object được lưu trữ trong hệ thống.

Bạn có thể sử dụng công thức sau để đổi từ Bytes sang Gigabyte.

# Define the conversion factor
BYTES_IN_A_GIGABYTE = 1024 * 1024 * 1024

# Convert the values from bytes to gigabytes
space_used_gb = 3874713600 / BYTES_IN_A_GIGABYTE
space_free_gb = 479073177600 / BYTES_IN_A_GIGABYTE
total_space_gb = 482947891200 / BYTES_IN_A_GIGABYTE

print(f"Disk usage: space used: {space_used_gb} GB of {total_space_gb} GB")
print(f"Disk usage: space free: {space_free_gb} GB of {total_space_gb} GB")

Khi chạy đoạn mã trên, bạn sẽ nhận được kết quả sau:

Disk usage: space used: 3.609375 GB of 449.9999990463257 GB
Disk usage: space free: 446.3906240463257 GB of 449.9999990463257 GB

Điều này có nghĩa là bạn đã sử dụng khoảng 3.61 GB và còn trống khoảng 446.39 GB trên tổng số 450 GB.

Checking ring md5sums.

swift-recon đang kiểm tra md5sums của các ring. Ring là một cấu trúc dữ liệu trong Swift dùng để xác định vị trí lưu trữ của các object. Md5sum là một giá trị hash được sử dụng để kiểm tra tính toàn vẹn của dữ liệu. Trong trường hợp này, md5sums của tất cả các ring trên tất cả các host đều khớp, không có lỗi nào.

[2024-03-28 08:22:57] Checking ring md5sums
3/3 hosts matched, 0 error[s] while checking hosts.

Checking swift.conf md5sum.

swift-recon đang kiểm tra md5sum của file cấu hình swift.conf. Tương tự như trên, md5sums của file cấu hình trên tất cả các host đều khớp, không có lỗi nào.

Ví dụ giả sử bạn có một cụm Swift với 3 node. Khi bạn thay đổi cấu hình Swift (ví dụ, thay đổi số lượng bản sao dữ liệu), bạn cần cập nhật file cấu hình swift.conf trên tất cả các node. swift-recon sẽ kiểm tra md5sum của file cấu hình trên tất cả các node để đảm bảo rằng chúng đều giống nhau. Nếu md5sums không khớp, điều này có thể chỉ ra rằng file cấu hình trên một hoặc nhiều node không được cập nhật đúng cách.

[2024-03-28 08:22:57] Checking swift.conf md5sum
3/3 hosts matched, 0 error[s] while checking hosts.

Checking quarantine.

swift-recon đang kiểm tra các object, container và tài khoản bị cách ly. Trong Swift, khi một object không thể được truy cập hoặc có vấn đề với tính toàn vẹn, nó sẽ được chuyển vào quarantine. Trong trường hợp này, không có object, container hoặc tài khoản nào bị cách ly.

[2024-03-28 08:22:57] Checking quarantine
[quarantined_objects] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
[quarantined_containers] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3
[quarantined_accounts] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3

Checking socket usage.

Báo cáo về số lượng socket TCP đang được sử dụng, số lượng byte được cấp phát cho bộ nhớ TCP, số lượng socket TCP6 đang được sử dụng, số lượng socket đang trong trạng thái TIME_WAIT và số lượng socket orphan.

[2024-03-28 08:22:57] Checking socket usage
[tcp_in_use] low: 8, high: 8, avg: 8.0, total: 24, Failed: 0.0%, no_result: 0, reported: 3
[tcp_mem_allocated_bytes] low: 4096, high: 4096, avg: 4096.0, total: 12288, Failed: 0.0%, no_result: 0, reported: 3
[tcp6_in_use] low: 1, high: 1, avg: 1.0, total: 3, Failed: 0.0%, no_result: 0, reported: 3
[time_wait] low: 4, high: 4, avg: 4.0, total: 12, Failed: 0.0%, no_result: 0, reported: 3
[orphan] low: 0, high: 0, avg: 0.0, total: 0, Failed: 0.0%, no_result: 0, reported: 3

Validating server type ‘object’ on 3 hosts.

Xác nhận rằng 3 máy chủ đang chạy dịch vụ Swift Object Server. Trong trường hợp này, tất cả 3 máy chủ đều chạy dịch vụ này, không có lỗi nào.

[2024-03-28 08:22:57] Validating server type 'object' on 3 hosts...
3/3 hosts ok, 0 error[s] while checking hosts.

Checking drive-audit errors.

Kiểm tra lỗi ổ đĩa. Trong trường hợp này, không có máy chủ nào trả về dữ liệu hợp lệ.

[2024-03-28 08:22:57] Checking drive-audit errors
[drive_audit_errors] - No hosts returned valid data.

Checking time-sync.

Kiểm tra đồng bộ hóa thời gian giữa các máy chủ. Trong trường hợp này, có sự khác biệt nhỏ về thời gian giữa máy chủ hiện tại và các máy chủ khác.

[2024-03-28 08:22:57] Checking time-sync
!! http://10.237.7.84:6200/recon/time current time is 2024-03-28 08:22:57, but remote is 2024-03-28 08:22:57, differs by 0.0255 sec
!! http://10.237.7.85:6200/recon/time current time is 2024-03-28 08:22:57, but remote is 2024-03-28 08:22:58, differs by 0.7097 sec
1/3 hosts matched, 0 error[s] while checking hosts.

Giả sử bạn có một cụm Swift với 3 node. Đồng bộ hóa thời gian giữa các node là rất quan trọng để đảm bảo hoạt động chính xác của Swift. swift-recon sẽ kiểm tra thời gian hiện tại trên mỗi node và so sánh nó với thời gian trên node đang chạy swift-recon. Nếu có sự khác biệt lớn về thời gian giữa các node, điều này có thể gây ra vấn đề với hoạt động của Swift

Checking versions.

Kiểm tra phiên bản Swift trên tất cả các máy chủ. Trong trường hợp này, tất cả các máy chủ đều chạy phiên bản Swift 2.25.2, không có lỗi nào.

[2024-03-28 08:22:57] Checking versions
Versions matched (2.25.2), 0 error[s] while checking hosts.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories