ZFS: Phân phối lại zvol trên tất cả các đĩa trong zpool?


12

Có cách nào để ZFS có thể được nhắc phân phối lại một hệ thống tập tin nhất định trên tất cả các đĩa trong zpool của nó không?

Tôi đang nghĩ về một kịch bản trong đó tôi có một khối ZFS có kích thước cố định được xuất dưới dạng LUN trên FC. Zpool hiện tại nhỏ, chỉ có hai đĩa nhân đôi 1TB và zvol có tổng dung lượng 750GB. Nếu tôi đột nhiên mở rộng kích thước của zpool thành, ví dụ, 12 đĩa 1TB, tôi tin rằng zvol vẫn sẽ chỉ được 'đặt' trên hai trục đầu tiên.

Cho rằng nhiều trục quay hơn = nhiều IOPS hơn, tôi có thể sử dụng phương pháp nào để 'phân phối lại' zvol trên tất cả 12 trục xoay để tận dụng lợi thế của chúng?

Câu trả lời:


8

Bạn sẽ cần phải viết lại dữ liệu của mình vào zpool mở rộng để cân bằng lại nó. Mặt khác, khi thời gian trôi qua, bài viết của bạn sẽ được phân phối trên toàn bộ nhóm.


Tôi không cho rằng có một cách nhanh chóng và dễ dàng để làm điều đó ...?
triển

7
zfs send | zfs recv
the-wợi

Tôi sẽ đi kiểm tra rằng - không thể tin một cái gì đó đơn giản sẽ làm được như vậy. :)
growse

3
Hãy báo cáo lại, tôi chưa bao giờ làm điều này và tôi cũng tò mò.
StrangeWill

3

Không có lý do gì để zvol chỉ được lưu trữ trên các thiết bị ban đầu. Nếu bạn phóng to nhóm, ZFS sẽ mở rộng dữ liệu cập nhật trên tất cả các thiết bị cơ bản có sẵn. Không có phân vùng cố định với ZFS.


4
Theo kinh nghiệm của tôi, điều này không đúng. Mặc dù không có 'phân vùng cố định', ZFS sẽ không di chuyển dữ liệu xung quanh ý chí tự do của mình bên ngoài các yêu cầu IO của khách hàng. Nếu bạn tạo kịch bản mà tôi đã mô tả, hãy thêm nhiều đĩa và sau đó thực hiện một số IO nặng trên LUN ban đầu, bạn sẽ chỉ thấy hoạt động trên hai đĩa đầu tiên trong mảng, vì đó là nơi chứa dữ liệu. ewwhite chỉ ra rằng theo thời gian nó sẽ được cân bằng, nhưng tôi tò mò muốn biết liệu có cách nào nhanh hơn để làm điều này không.
triển

1
Xin lỗi nếu tôi không rõ ràng. Tất nhiên, dữ liệu hiện tại sẽ không di chuyển một cách kỳ diệu. Chỉ dữ liệu cập nhật sẽ được di chuyển đồng đều. Đó là những gì tôi muốn nói với "IO mới". Theo như dữ liệu tĩnh hiện có, bộ nhớ đệm cũng sẽ cải thiện hiệu suất miễn là các khối được đọc nhiều lần.
jlliagre

0

Đây là "sự tiếp nối" của câu trả lời của ewwhite:

Bạn sẽ cần phải viết lại dữ liệu của mình vào zpool mở rộng để cân bằng lại nó

Tôi đã viết một tập lệnh PHP ( có sẵn trên github ) để tự động hóa tập lệnh này trên máy chủ Ubuntu 14.04 của tôi.

Người ta chỉ cần cài đặt công cụ PHP CLI sudo apt-get install php5-clivà chạy tập lệnh, chuyển đường dẫn đến dữ liệu nhóm của bạn làm đối số đầu tiên. Ví dụ

php main.php /path/to/my/files

Tốt nhất bạn nên chạy tập lệnh hai lần trên tất cả dữ liệu trong nhóm. Lần chạy đầu tiên sẽ cân bằng việc sử dụng ổ đĩa, nhưng các tệp riêng lẻ sẽ được phân bổ quá mức cho các ổ đĩa được thêm vào trước đó. Lần chạy thứ hai sẽ đảm bảo rằng mỗi tệp được phân phối "khá" trên các ổ đĩa. Tôi nói một cách công bằng thay vì đồng đều vì nó sẽ chỉ được phân bổ đều nếu bạn không trộn dung lượng ổ đĩa như tôi với cuộc đột kích 10 cặp kích thước khác nhau của tôi (gương 4tb + gương 3TB + gương 3TB).

Lý do sử dụng tập lệnh

  • Tôi phải sửa vấn đề "tại chỗ". Ví dụ, tôi không thể ghi dữ liệu ra hệ thống khác, xóa nó ở đây và ghi lại tất cả.
  • Tôi đã lấp đầy nhóm của mình hơn 50%, vì vậy tôi không thể sao chép toàn bộ hệ thống tập tin cùng một lúc trước khi xóa bản gốc.
  • Nếu chỉ có một số tệp nhất định cần hoạt động tốt, thì người ta chỉ có thể chạy tập lệnh hai lần so với các tệp đó. Tuy nhiên, lần chạy thứ hai chỉ hiệu quả nếu lần chạy đầu tiên được quản lý để thành công trong việc cân bằng việc sử dụng ổ đĩa.
  • Tôi có rất nhiều dữ liệu và muốn có thể thấy một dấu hiệu của sự tiến bộ đang được thực hiện.

Làm thế nào tôi có thể biết nếu đạt được ngay cả việc sử dụng ổ đĩa?

Sử dụng công cụ i điều chỉnh trong một khoảng thời gian (ví dụ iostat -m 5) và kiểm tra ghi. Nếu chúng giống nhau, thì bạn đã đạt được một mức chênh lệch. Chúng không hoàn hảo ngay cả trong ảnh chụp màn hình bên dưới vì tôi đang chạy một cặp 4TB với 2 cặp ổ 3TB trong RAID 10, vì vậy hai số 4 sẽ được ghi nhiều hơn một chút. nhập mô tả hình ảnh ở đây

Nếu việc sử dụng ổ đĩa của bạn là "không cân bằng", thì iuler sẽ hiển thị một cái gì đó giống như ảnh chụp màn hình bên dưới nơi các ổ đĩa mới đang được ghi không tương xứng. Bạn cũng có thể nói rằng chúng là các ổ đĩa mới vì số lần đọc là 0 vì chúng không có dữ liệu về chúng. nhập mô tả hình ảnh ở đây

Kịch bản không hoàn hảo, chỉ có một cách giải quyết, nhưng nó hoạt động với tôi trong thời gian đó cho đến khi ZFS một ngày thực hiện một tính năng cân bằng lại như BTRFS có (ngón tay đan chéo).


Ôi ... Wow ...
ewwhite

0

Vâng, đây là một chút hack nhưng do bạn đã dừng máy bằng zvol, bạn có thể zfs gửi hệ thống tệp đến một tệp cục bộ trên localhost có tên là bar.zvol, và sau đó bạn lại nhận được hệ thống tệp. Điều đó sẽ cân bằng lại dữ liệu cho bạn.

zfs send tank/bar > bar.zvol

zfs receive tank/bar < bar.zvol

-1

giải pháp tốt nhất tôi tìm thấy là sao chép một nửa dữ liệu của bạn trên nhóm mở rộng và sau đó xóa dữ liệu trùng lặp ban đầu.


3
Bạn có thể xây dựng?
ewwhite

@reco: zvols không phải là hệ thống tệp nên bạn không thể xóa hoặc sao chép dữ liệu trên chúng. Bạn có thể ghi đè lên dữ liệu nhưng điều đó sẽ làm hỏng dữ liệu trừ khi bạn làm điều đó với cùng một nội dung sẽ kéo dài dữ liệu trên các tập cơ bản một cách hiệu quả, nhưng đây là điều mà ewwhite đã đề xuất một năm trước.
jlliagre

vâng bạn đúng tôi đã nhìn xung quanh và nghiên cứu cùng một chủ đề. những gì tôi nhận ra là với zfs phân phối lại dữ liệu trên vdevs là không cần thiết. nhưng nếu bạn vẫn muốn vì bất kỳ lý do nào, việc sao chép dữ liệu và xóa bản gốc sẽ tăng tốc những gì zfs sẽ làm theo thời gian.
reco

1
Phân phối lại dữ liệu trên vdevs là một yêu cầu hợp pháp. Tôi e rằng bạn vẫn còn thiếu câu hỏi là về zvols chứ không phải hệ thống tập tin. Bạn không thể sao chép hoặc xóa dữ liệu trên một ổ đĩa, điều đó không có ý nghĩa.
jlliagre

chào jlliagre. vâng, bạn đúng xin lỗi
reco
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.