Tuesday, July 2, 2024

Tối ưu hóa hiệu suất của ZFS sử dụng ổ đĩa cache

-

1. Tổng quan.

Trong lưu trữ dữ liệu, việc sử dụng ổ đĩa cache hiệu suất cao là một phương pháp quan trọng để tăng tốc độ truy cập dữ liệu và cải thiện hiệu suất tổng thể của hệ thống. Ổ đĩa cache, thường được triển khai dưới dạng bộ nhớ SSD (Solid State Drive) hoặc các loại bộ nhớ nhanh khác, đóng vai trò là một tầng lưu trữ tạm thời giữa CPU và bộ nhớ chính hoặc giữa bộ nhớ chính và các thiết bị lưu trữ dữ liệu chậm hơn như HDD (Hard Disk Drive).

Bài viết về nội dung cache của ZFS sẽ cung cấp một cái nhìn tổng quan về cách ZFS sử dụng cache để tối ưu hóa hiệu suất lưu trữ.

Tại Sao Cần Ổ Đĩa Cache?

  • Giảm Độ Trễ: Ổ đĩa cache giúp giảm độ trễ trong việc truy cập dữ liệu bằng cách lưu trữ dữ liệu thường xuyên được truy cập và dữ liệu gần đây trong một thiết bị nhanh hơn.
  • Tăng Tốc Độ Đọc/Ghi: Cải thiện tốc độ đọc/ghi dữ liệu đến và từ thiết bị lưu trữ, nhờ vào tốc độ cao của ổ đĩa cache so với ổ HDD truyền thống.
  • Hiệu Suất Cao: Đối với các ứng dụng đòi hỏi hiệu suất cao, như cơ sở dữ liệu lớn và máy chủ web, việc sử dụng ổ đĩa cache có thể mang lại sự cải thiện đáng kể về hiệu suất.

Cách Hoạt Động.

Ổ đĩa cache hoạt động dựa trên nguyên tắc “đọc trước” (read-ahead) và “ghi trễ” (write-back):

  • Đọc Trước: Khi dữ liệu được yêu cầu, ổ đĩa cache sẽ kiểm tra xem dữ liệu đó có sẵn trong cache hay không. Nếu có, dữ liệu sẽ được truy cập từ cache thay vì từ ổ đĩa chậm hơn, giảm thiểu thời gian chờ.
  • Ghi Trễ: Dữ liệu mới hoặc dữ liệu được sửa đổi được ghi vào cache trước, sau đó mới được chuyển đến ổ đĩa lưu trữ chính vào một thời điểm sau đó, giúp tăng tốc độ ghi dữ liệu.

Lựa Chọn Ổ Đĩa Cache.

Khi lựa chọn ổ đĩa cache, cần xem xét các yếu tố sau:

  • Dung Lượng: Dung lượng của ổ đĩa cache cần đủ lớn để chứa dữ liệu thường xuyên được truy cập.
  • Tốc Độ: Tốc độ đọc/ghi của ổ đĩa cache cần phải cao để cải thiện hiệu suất.
  • Độ Bền: SSDs, đặc biệt là những loại được thiết kế cho mục đích cache, thường có độ bền cao hơn để chịu đựng số lần ghi xóa nhiều hơn.

2. Thực hành.

2.1. Tạo pool.

Lab này mình thực hiện trên ảo hóa, mình đang có tổng cổng 5 disk tham gia ZFS. Mình lựa chọn sdb, sdc, sdd để Raid 5 và sde và sdf là cache cho Raid này.

shell> lsblk 
NAME                      MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
loop0                       7:0    0   62M  1 loop /snap/core20/1587
loop1                       7:1    0 79.9M  1 loop /snap/lxd/22923
loop2                       7:2    0   47M  1 loop /snap/snapd/16292
sda                         8:0    0   50G  0 disk 
├─sda1                      8:1    0    1M  0 part 
├─sda2                      8:2    0    2G  0 part /boot
└─sda3                      8:3    0   48G  0 part 
  └─ubuntu--vg-ubuntu--lv 253:0    0   24G  0 lvm  /
sdb                         8:16   0   30G  0 disk 
sdc                         8:32   0   30G  0 disk 
sdd                         8:48   0   30G  0 disk 
sde                         8:64   0   30G  0 disk 
sdf                         8:80   0   30G  0 disk 
sr0                        11:0    1 1024M  0 rom

Tạo ZFS raidz tương đương Raid5.

zpool create zpool_vol01 raidz /dev/sdb /dev/sdc /dev/sdd

Verify với zfs list.

shell> zfs list
NAME          USED  AVAIL     REFER  MOUNTPOINT
zpool_vol01   125K  57.8G     30.6K  /zpool_vol0

Verify với zpool list.

shell> zpool list
NAME          SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zpool_vol01  89.5G   187K  89.5G        -         -     0%     0%  1.00x    ONLINE  -

Verify với zpool status.

shell> zpool status
  pool: zpool_vol01
 state: ONLINE
config:

        NAME         STATE     READ WRITE CKSUM
        zpool_vol01  ONLINE       0     0     0
          raidz1-0   ONLINE       0     0     0
            sdb      ONLINE       0     0     0
            sdc      ONLINE       0     0     0
            sdd      ONLINE       0     0     0

errors: No known data errors

Verify với lsblk.

shell> lsblk | grep 'sd[b-d]'
sdb                         8:16   0   30G  0 disk 
├─sdb1                      8:17   0   30G  0 part 
└─sdb9                      8:25   0    8M  0 part 
sdc                         8:32   0   30G  0 disk 
├─sdc1                      8:33   0   30G  0 part 
└─sdc9                      8:41   0    8M  0 part 
sdd                         8:48   0   30G  0 disk 
├─sdd1                      8:49   0   30G  0 part 
└─sdd9                      8:57   0    8M  0 part

2.2. Thêm một device cache.

  • Để sử dụng đĩa sde làm cache cho pool ZFS zpool_vol01, bạn cần thực hiện các bước sau:
    • Kiểm tra đĩa sde: Đảm bảo rằng đĩa sde không chứa dữ liệu quan trọng hoặc đã được sao lưu, vì việc thêm nó làm cache sẽ thay đổi cấu trúc của đĩa.
    • Thêm đĩa vào pool như một cache device: Sử dụng lệnh zpool add để thêm đĩa sde vào pool zpool_vol01 như một cache device. Cache devices trong ZFS được sử dụng để lưu trữ dữ liệu đọc thường xuyên, giúp tăng tốc độ đọc dữ liệu.

Dưới đây là lệnh để thực hiện việc này:

sudo zpool add zpool_vol01 cache sde

Lưu ý rằng việc thêm cache device không yêu cầu phân vùng hoặc định dạng đĩa trước, ZFS sẽ tự động xử lý đĩa.

Mặc dù việc thêm cache device có thể được thực hiện mà không làm mất dữ liệu trên pool, bạn vẫn nên thực hiện sao lưu dữ liệu trước khi thực hiện bất kỳ thay đổi nào đối với cấu hình ZFS của mình.

Sau khi thêm cache, ZFS sẽ tự động sử dụng đĩa sde để lưu trữ dữ liệu cache. Hiệu suất đọc từ pool có thể được cải thiện đáng kể tùy thuộc vào mô hình truy cập dữ liệu và kích thước của cache.

Verify với lsblk bạn thấy sde đã tham gia vào pool.

shell> lsblk | grep 'sd[b-e]'
sdb                         8:16   0   30G  0 disk 
├─sdb1                      8:17   0   30G  0 part 
└─sdb9                      8:25   0    8M  0 part 
sdc                         8:32   0   30G  0 disk 
├─sdc1                      8:33   0   30G  0 part 
└─sdc9                      8:41   0    8M  0 part 
sdd                         8:48   0   30G  0 disk 
├─sdd1                      8:49   0   30G  0 part 
└─sdd9                      8:57   0    8M  0 part 
sde                         8:64   0   30G  0 disk 
├─sde1                      8:65   0   30G  0 part 
└─sde9                      8:73   0    8M  0 part

Verify với zpool status bạn thấy sde cũng đã tham gia vào pool với vai trò là cache.

shell> zpool status
  pool: zpool_vol01
 state: ONLINE
config:

        NAME         STATE     READ WRITE CKSUM
        zpool_vol01  ONLINE       0     0     0
          raidz1-0   ONLINE       0     0     0
            sdb      ONLINE       0     0     0
            sdc      ONLINE       0     0     0
            sdd      ONLINE       0     0     0
        cache
          sde        ONLINE       0     0     0

errors: No known data errors

Verify với zpool status bạn không thấy thay đổi gì vì sde chỉ là cache.

shell> zpool list
NAME          SIZE  ALLOC   FREE  CKPOINT  EXPANDSZ   FRAG    CAP  DEDUP    HEALTH  ALTROOT
zpool_vol01  89.5G   235K  89.5G        -         -     0%     0%  1.00x    ONLINE  -

Tương tự verify với zfs list bạn cũng không thấy thay đổi gì vì sde chỉ là cache.

shell> zfs list
NAME          USED  AVAIL     REFER  MOUNTPOINT
zpool_vol01   157K  57.8G     30.6K  /zpool_vol01

Nếu bạn muốn thêm một đĩa cache nữa vào pool ZFS của mình, bạn chỉ cần lặp lại lệnh tương tự với tên của thiết bị mới. Giả sử thiết bị mới của bạn là sdf, lệnh sẽ như sau:

zpool add zpool_vol01 cache sdf

Verify với zpool status bạn thấy sdf đã tham gia vào pool cùng với sde với vai trò là cache.

shell> zpool status
  pool: zpool_vol01
 state: ONLINE
config:

        NAME         STATE     READ WRITE CKSUM
        zpool_vol01  ONLINE       0     0     0
          raidz1-0   ONLINE       0     0     0
            sdb      ONLINE       0     0     0
            sdc      ONLINE       0     0     0
            sdd      ONLINE       0     0     0
        cache
          sde        ONLINE       0     0     0
          sdf        ONLINE       0     0     0

errors: No known data errors

Tương tự với lệnh lsblk.

shell> lsblk | grep sd['b-f']
sdb                         8:16   0   30G  0 disk 
├─sdb1                      8:17   0   30G  0 part 
└─sdb9                      8:25   0    8M  0 part 
sdc                         8:32   0   30G  0 disk 
├─sdc1                      8:33   0   30G  0 part 
└─sdc9                      8:41   0    8M  0 part 
sdd                         8:48   0   30G  0 disk 
├─sdd1                      8:49   0   30G  0 part 
└─sdd9                      8:57   0    8M  0 part 
sde                         8:64   0   30G  0 disk 
├─sde1                      8:65   0   30G  0 part 
└─sde9                      8:73   0    8M  0 part 
sdf                         8:80   0   30G  0 disk 
├─sdf1                      8:81   0   30G  0 part 
└─sdf9                      8:89   0    8M  0 part

3. Xóa một device cache.

3.1. Quy trình ZFS xử lý khi xóa cache.

Khi bạn xóa một thiết bị cache khỏi pool ZFS, quá trình xóa không diễn ra ngay lập tức mà là một quá trình từng bước. Dữ liệu đang được cache sẽ không được di chuyển đến các thiết bị cache khác hoặc được viết lại vào pool chính. Thay vào đó, dữ liệu trên thiết bị cache bị xóa sẽ không còn được sử dụng nữa, và ZFS sẽ dừng việc ghi thêm dữ liệu mới vào thiết bị đó.

Quá trình xóa thiết bị cache khỏi ZFS diễn ra như sau:

  • Ngừng sử dụng thiết bị cache: Ngay khi lệnh xóa được phát hành, ZFS ngừng sử dụng thiết bị đó cho bất kỳ hoạt động cache mới nào. Dữ liệu hiện tại trên thiết bị cache vẫn còn đó nhưng sẽ không được truy cập nữa.
  • Xóa dữ liệu cache: Dữ liệu trên thiết bị cache không được di chuyển đến nơi khác; thay vào đó, nó sẽ bị xóa khi thiết bị được loại bỏ khỏi pool.
  • Loại bỏ thiết bị: Thiết bị được loại bỏ khỏi cấu hình pool và không còn đóng góp vào hiệu suất cache của hệ thống.

Quá trình này đảm bảo rằng việc xóa thiết bị cache không gây ra mất mát dữ liệu trong pool ZFS, vì dữ liệu quan trọng vẫn được lưu trữ trên các thiết bị lưu trữ chính của pool. Tuy nhiên, việc loại bỏ thiết bị cache có thể ảnh hưởng đến hiệu suất đọc dữ liệu, vì dữ liệu thường được truy cập sẽ không còn được lưu trữ trên thiết bị cache để tăng tốc độ truy cập nữa.

3.2. Quy trình xóa 1 device cache.

Để xóa một ổ cache (ví dụ, sdf) khỏi pool ZFS của bạn, bạn sẽ sử dụng lệnh zpool remove.

zpool remove zpool_vol01 sdf

Lệnh này sẽ xóa ổ sdf khỏi danh sách các thiết bị cache của pool zpool_vol01. Quá trình này không ảnh hưởng đến dữ liệu lưu trữ trên các thiết bị khác trong pool, nhưng nên lưu ý rằng việc xóa cache có thể ảnh hưởng đến hiệu suất đọc dữ liệu từ pool, vì dữ liệu cache sẽ không còn được lưu trữ trên ổ sdf nữa.

shell> zpool status
  pool: zpool_vol01
 state: ONLINE
config:

        NAME         STATE     READ WRITE CKSUM
        zpool_vol01  ONLINE       0     0     0
          raidz1-0   ONLINE       0     0     0
            sdb      ONLINE       0     0     0
            sdc      ONLINE       0     0     0
            sdd      ONLINE       0     0     0
        cache
          sde        ONLINE       0     0     0

errors: No known data errors

3.3. Một số lưu ý khi xóa cache ra khỏi pool.

Trong một môi trường đang có lượng dữ liệu hoạt động lớn, việc xóa một thiết bị cache vào lúc cao điểm không được khuyến nghị vì có thể ảnh hưởng đến hiệu suất của hệ thống. Cache giúp tăng tốc độ truy cập dữ liệu, và việc loại bỏ nó có thể làm tăng độ trễ và giảm hiệu suất, đặc biệt trong thời gian cao điểm khi hệ thống đang xử lý nhiều yêu cầu.

Nếu việc xóa thiết bị cache là cần thiết, dưới đây là quy trình bạn nên tuân thủ:

  • Lập kế hoạch: Chọn một thời điểm ít bận rộn nhất để thực hiện việc này, như ngoài giờ làm việc hoặc khi hệ thống có ít giao dịch.
  • Thông báo: Thông báo cho người dùng và các bên liên quan về kế hoạch bảo trì và ảnh hưởng tiềm ẩn đến hiệu suất.
  • Sao lưu: Đảm bảo rằng bạn có bản sao lưu đầy đủ của dữ liệu, để phòng trường hợp có sự cố xảy ra trong quá trình xóa thiết bị.
  • Giám sát: Giám sát hiệu suất hệ thống cẩn thận sau khi xóa thiết bị cache để đánh giá ảnh hưởng và xác định nếu cần phải thực hiện thêm bất kỳ điều chỉnh nào.
  • Xóa thiết bị cache: Sử dụng lệnh zpool remove để xóa thiết bị cache khỏi pool.
  • Đánh giá: Sau khi xóa, tiếp tục giám sát hệ thống để đánh giá ảnh hưởng đến hiệu suất và đảm bảo rằng mọi thứ vẫn hoạt động ổn định.
  • Khôi phục nếu cần: Nếu việc xóa thiết bị cache gây ra vấn đề không thể giải quyết, hãy sẵn sàng khôi phục từ bản sao lưu hoặc xem xét việc thêm lại thiết bị cache hoặc thiết bị tương tự để cải thiện hiệu suất.

Việc tuân thủ quy trình này giúp đảm bảo rằng việc xóa thiết bị cache diễn ra một cách mượt mà và giảm thiểu rủi ro đối với hiệu suất hệ thống.

4. Kết luận.

Ổ đĩa cache hiệu suất cao là một thành phần quan trọng trong việc tối ưu hóa hiệu suất lưu trữ và truy cập dữ liệu. Bằng cách giảm độ trễ và tăng tốc độ đọc/ghi, ổ đĩa cache giúp cải thiện đáng kể hiệu suất tổng thể của hệ thống, đặc biệt là trong các ứng dụng đòi hỏi tốc độ truy cập dữ liệu nhanh.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories