ASM – Automatic Storage Management – là 1 công nghệ lưu trữ, 1 hệ thống quản lý tập tin (cluster file system) của Oracle. Xuất hiện từ phiên bản 10g, ASM đem đến rất nhiều lợi ích cho việc lưu trữ database. Đến phiên bản 11g, ASM còn có khả năng hỗ trợ các loại tập tin khác (file hình ảnh, âm thanh, file text, file thực thi…) , đem lại khả năng lưu trữ toàn diện hơn.

 

Khả năng và lợi thế của ASM

 

  • Lưu trữ, quản lý các tập tin của Oracle database cũng như các tập tin khác. Hỗ trợ cơ chế OMF.
  • Hỗ trợ cả hệ thống đơn cũng như hệ thống database cluster (RAC)
  • Tự động phân bổ I/O, phân bổ dữ liệu, đảm bảo hiệu năng tốt nhất
  • Hỗ trợ cơ chế redundancy đảm bảo an toàn cho dữ liệu, hoặc hỗ trợ thêm khả năng cho hệ thống lưu trữ
  • Linh động, dễ dàng trong việc quản trị, bảo trì, tăng tính sẵn sàng cho hệ thống

 

Kiến trúc ASM

asm_structure

 

Trong ASM, đơn vị lớn nhất là ASM disk group. Mỗi disk group sẽ có tên đại diện để chúng ta truy cập và lưu trữ các tập tin bên trong (VD +DATA, +FRA).

Mỗi diskgroup bao gồm nhiều ASM disk bên trong (có thể là physical disk, LUN, logical volume… được format thành ASM disk). Các disk này có thể thêm vào rút ra để tăng/giảm dung lượng disk group.

Mỗi ASM disk được chia ra thành nhiều allocation unit (AU), theo kích thước 1, 2, 4, 8, 16, 32 hoặc 64MB tùy ta cấu hình. 

1 hoặc nhiều AU sẽ tạo thành ASM extent. ASM extent là đơn vị  để lưu trữ dữ liệu. Có các kích thước ASM extent như 1*AU, 4*AU, 16*AU

1 database file nếu lưu trong ASM sẽ là 1 ASM file. 1 ASM file bao gồm 1 hoặc nhiều ASM extent.

 

Cơ chế mirror

Không như trên hardware nếu mirror là mirror toàn bộ disk, ASM mirror theo từng file (mirror từng ASM extent).

Trong trường hợp hệ thống bên dưới không chạy RAID hay có cơ chế redundancy, ASM có thể hỗ trợ mirror theo 2 mức:

  • Normal redundancy (2-way mirroring): cần ít nhất 2 disk, mỗi extent sẽ được mirror ra 1 extent ở trên disk khác
  • High redundancy (3-way mirroring): cần ít nhất 3 disk, mỗi extent sẽ được mirror ra 2 extent ở trên 2 disk khác

 

Thông thường các hệ thống lớn đều chạy RAID, nên thường ta chỉ để External redundancy, là không mirror trên ASM, phần việc đó để cho hệ thống storage lo.

 

Cơ chế stripe

Với 1 file có nhiều extent, ASM sẽ chia các extent đó ra các disk khác nhau, để dàn đều dữ liệu giữa các disk, cũng như tăng tốc độ đọc ghi dữ liệu. 

Như vậy, nếu đã dùng ASM với nhiều disk trong 1 diskgroup, các disk đó lại được hỗ trợ stripe từ hệ thống storage (vd chạy RAID 0, RAID 10…), tốc độ đọc ghi dữ liệu sẽ tăng lên đáng kể do dữ liệu được stripe tới 2 lần. 

 

Cơ chế automatic rebalancing

Khi 1 diskgroup gần đầy, ta có thể dễ dàng add thêm ASM disk vào để tăng dung lượng. ASM sẽ tự dàn đều lại dữ liệu giữa các disk để đảm bảo I/O. Việc rebalancing này được thực hiện “âm thầm” và tự động bên dưới, không đòi hỏi phải shutdown database đang chạy, và cũng ảnh hưởng rất ít đến performance hệ thống.

Trong trường hợp chạy normal hay high redundancy, nếu có disk bị hư, có thể rút ra để sửa chữa/thay thế rồi gắn lại trong thời gian quy định. Việc đọc ghi trên những ASM disk còn lại cũng sẽ được tự động phân bổ cân bằng.

 

Failure group 

Mặc định nếu không chỉ rõ, mỗi ASM disk sẽ nằm trong 1 failure group của riêng nó. Nếu dùng External redundancy, ta không cần quan tâm khái niệm này. 

Trong trường hợp dùng Normal redundancy hay High redundancy, ta có thể chỉ định Failure group cho từng ASM disk, để đảm bảo khả năng chịu lỗi cao hơn.

Ta lấy 1 ví dụ đơn giản. Giả sử ta có 2 disk và không chỉ định rõ failure group, lúc đó disk 1 sẽ nằm trong failure group 1, và disk 2 sẽ nằm trong failure group 2.

1 extent trong disk 1 được mirror sang disk 2. Cả 2 disk này đều dùng chung 1 disk controller. Như vậy, nếu disk controller hư -> cả disk 1 và disk 2 đều không truy xuất được -> việc chạy Normal redundancy cũng không có tác dụng.

 

Để an toàn hơn, nếu ta có các disk khác nhau ở 2 controller khác nhau, ta chỉ định các ASM disk dùng controller 1 vào failure group 1, các ASM disk dùng controller 2 vào failure group 2.

Khi đó, việc mirror sẽ diễn ra giữa 1 disk trong failgroup này với 1 disk trong failgroup kia. Nếu có hư 1 disk controller -> 1 failgroup hư, ta vẫn đảm bảo có đầy đủ dữ liệu ở failgroup còn lại.

 

asm_failure_group

 

ASM instance

Do ASM là công nghệ của Oracle, phục vụ trực tiếp cho database, nên để quản lý ASM, Oracle cũng dùng instance để quản lý ASM cho đồng bộ.

Tương tự như database instance, ASM instance cũng có parameter file, phần memory và các background process (tham khảo Kiến trúc Oracle Database 11g (P2) ). 

 

asm_instance

 

SGA của ASM instance gồm 4 phần bộ nhớ nhỏ:

  • Shared pool: chứa metadata (các view thông tin về ASM)
  • Large pool: dùng cho các hoạt động parallel
  • ASM Cache: dùng đọc ghi trong quá trình rebalance
  • Free memory: dự trữ

 

ASM instance thường cần tối thiểu 256MB để chạy. Trong ASM instance, AMM (Automatic Memory Management) được bật mặc định, và sẽ điều chỉnh cho phù hợp, tùy vào dung lượng đĩa ASM mà nó cần quản lý.

Để quản trị ASM, có thể dùng các tool như SQL*Plus, srvctl, và dùng thêm những tool bổ trợ khác như asmcmd, asmca…