Thursday, November 21, 2024

Xác định trọng (weight) số trong OpenStack Swift

-

Trọng số trong OpenStack Swift xác định khả năng lưu trữ của một ổ đĩa so với các ổ đĩa khác trong ring. Nói cách khác, trọng số xác định phần trăm dữ liệu mà một ổ đĩa cụ thể sẽ chứa so với tổng lượng dữ liệu trong hệ thống.

Trọng số thường được xác định dựa trên dung lượng của ổ đĩa. Ví dụ, nếu bạn có hai ổ đĩa, một ổ đĩa 1TB và một ổ đĩa 2TB, bạn có thể đặt trọng số của ổ đĩa 1TB là 1 và trọng số của ổ đĩa 2TB là 2. Điều này có nghĩa là ổ đĩa 2TB sẽ chứa gấp đôi dữ liệu so với ổ đĩa 1TB.

Khi bạn thêm một ổ đĩa mới vào ring, bạn sẽ cần xác định trọng số cho nó. Trọng số này nên phản ánh dung lượng của ổ đĩa so với các ổ đĩa khác trong ring.

Ví dụ, nếu bạn thêm một ổ đĩa 3TB vào ring trong ví dụ trên, bạn có thể đặt trọng số của nó là 3. Điều này có nghĩa là ổ đĩa mới sẽ chứa ba lần dữ liệu so với ổ đĩa 1TB và 1.5 lần dữ liệu so với ổ đĩa 2TB.

Sau khi thêm ổ đĩa mới và cập nhật trọng số, bạn sẽ cần cân bằng lại ring để phân phối dữ liệu đều giữa các ổ đĩa.

Giả sử trong một cluster nếu các ổ đĩa ở các node có dung lượng bằng nhau, ví dụ như node 1 và node 2 đều sử dụng 20 ổ 1TB nhưng trọng số các ổ đĩa ở node 1 là 75 còn node 2 là 100 thì trong trường hợp này hệ thống OpenStack Swift sẽ cố gắng lưu trữ nhiều dữ liệu hơn trên node 2 so với node 1.

Cụ thể hơn mỗi ổ đĩa trên node 2 sẽ cố gắng chứa khoảng 33% dữ liệu hơn so với mỗi ổ đĩa trên node 1 (vì 100/75 = 1.33). Điều này không phụ thuộc vào dung lượng thực tế của các ổ đĩa – mặc dù tất cả các ổ đĩa đều có dung lượng 1TB, nhưng hệ thống sẽ cố gắng lưu trữ nhiều dữ liệu hơn trên các ổ đĩa của node 2 do trọng số cao hơn.

Tuy nhiên, điều quan trọng cần lưu ý là Swift sẽ không lưu trữ nhiều dữ liệu hơn dung lượng thực tế của ổ đĩa. Trong trường hợp này, mỗi ổ đĩa vẫn chỉ có thể chứa tối đa 1TB dữ liệu. Trọng số chỉ ảnh hưởng đến cách Swift phân phối dữ liệu giữa các ổ đĩa, không ảnh hưởng đến dung lượng thực tế mà mỗi ổ đĩa có thể chứa.

Khi một ổ đĩa đạt đến dung lượng tối đa của nó, OpenStack Swift sẽ không ghi thêm dữ liệu vào ổ đĩa đó. Thay vào đó, nó sẽ tìm kiếm ổ đĩa khác trong ring để lưu trữ dữ liệu.

Trong ví dụ trên, nếu tất cả các ổ đĩa trên node 2 đều đầy, Swift sẽ tiếp tục ghi dữ liệu vào các ổ đĩa trên node 1 (hoặc bất kỳ node nào khác có sẵn trong ring).

Về việc sao lưu dữ liệu, Swift sử dụng cơ chế replication (sao chép) để đảm bảo rằng mỗi mảnh dữ liệu được lưu trữ trên nhiều ổ đĩa khác nhau. Khi một mảnh dữ liệu mới được ghi vào hệ thống, Swift sẽ tự động sao chép mảnh dữ liệu đó vào một số ổ đĩa khác.

Nếu cụm chỉ gồm hai node và tất cả các ổ đĩa trên một node đều đầy, thì bạn sẽ gặp vấn đề với khả năng chịu lỗi của hệ thống.

OpenStack Swift sử dụng cơ chế replication để đảm bảo rằng mỗi mảnh dữ liệu được lưu trữ trên nhiều ổ đĩa khác nhau. Nếu tất cả các ổ đĩa trên một node đều đầy và không thể lưu trữ thêm dữ liệu, thì Swift sẽ không thể tạo ra các bản sao dự phòng cho dữ liệu mới được ghi vào node còn lại. Điều này có thể gây ra mất dữ liệu nếu node còn lại gặp sự cố.

Để giải quyết vấn đề này, bạn có thể cần phải thêm thêm dung lượng lưu trữ vào hệ thống của mình, hoặc cân nhắc việc sử dụng một cơ chế sao lưu dữ liệu khác ngoài replication của Swift.

Trọng số trong OpenStack Swift thường được xác định dựa trên dung lượng của ổ đĩa. Một cách tiếp cận phổ biến là đặt trọng số sao cho nó tương ứng với dung lượng của ổ đĩa so với dung lượng nhỏ nhất có thể của một ổ đĩa trong hệ thống.

Ví dụ tôi có 2 node, tôi có 15 ổ cứng 8TB và 5 ổ cứng 14TB thì cách xác định trọng số như sau:

Chúng ta thấy dung lượng nhỏ nhất của ổ đĩa là 8TB. Vì vậy, ta có thể đặt trọng số cho các ổ đĩa 8TB là 1.

Đối với các ổ đĩa 14TB, ta có thể đặt trọng số bằng cách chia dung lượng của chúng cho dung lượng nhỏ nhất của ổ đĩa. Trong trường hợp này, trọng số sẽ là 14/8 = 1.75.

Vì vậy, bạn sẽ đặt trọng số cho các ổ đĩa 8TB là 1 và trọng số cho các ổ đĩa 14TB là 1.75.

Trọng số trong OpenStack Swift không xác định dung lượng tuyệt đối mà một ổ đĩa sẽ chứa, mà nó xác định phần trăm dữ liệu mà một ổ đĩa cụ thể sẽ chứa so với tổng lượng dữ liệu trong hệ thống.

Với trọng số bạn đã đặt, mỗi ổ đĩa 14TB sẽ cố gắng chứa 1.75 lần dữ liệu so với mỗi ổ đĩa 8TB. Tuy nhiên, điều này không có nghĩa là ổ đĩa 14TB sẽ chứa 1.75 lần dung lượng của ổ đĩa 8TB. Thay vào đó, nếu mỗi ổ đĩa 8TB chứa 40% dung lượng của nó, thì mỗi ổ đĩa 14TB cũng sẽ cố gắng chứa 40% dung lượng của nó.

Điều này đảm bảo rằng dữ liệu được phân phối đều giữa các ổ đĩa, dựa trên dung lượng của chúng.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories