VMware vSphere 4: Snapshot

Tiếp theo loat bài VMware vSphere 4 tôi sẽ trình bày cho các bạn về tính năng snapshot. Và một điều tôi chắc chắn hiện h hầu hết dân ITPro đều sẽ khong quá xa lạ gì với tính năng này nó được áp dụng khá nhiều trong môi trường học tập, Lab khi làm việc với VMware Workstation và hiển nhiên đa phần trong chúng ta sẽ đánh giá rằng tính năng hữu dụng này cực kỳ đơn giản chẳng gì phải chú ý ngay cả trước khi có cơ hội present tính năng này tôi củng đã mắc phải. Trên thực tế không phải đơn giản mà là cực kỳ phức tạp bạn phải hiểu rõ data ghi ra sao cái gì được tao ra hay cái gì thay đổi, mất đi khi chúng ta thêm, xóa, revert snapshot… Và các bạn tự hỏi tại sao cần phải quan tâm nhiều chi tiết như vậy? Vì trên thực tế hiểu rõ như vậy chúng ta mởi kiểm soát được dữ liệu, hiệu suất máy ảo… vi dụ điển hình như một máy ảo đang chứa database của cty bạn đã thực hiện snapshot nhiều lần và trong cả một thời gian dài hoạt động h đây bạn muốn delete snapshot liệu bạn đã chắc rằng hành động của mình có đảm bảo toàn vẹn dữ liệu hay không hay mất gì mà không hay biết.

Trong bài viết này tôi sẽ cố gắng trình bày những thông tin mà bản thân thu thập được về snapshot cũng như những kinh nghiệm thu được cho các biệt. Để bắt đầu chúng ta sẽ sơ lược về khái niệm snapshot một tý

image

Nói đơn giản thì hành động snapshot của chúng ta chính là thực hiện hành vi lưu lại lượng Ram đang hoạt động, thông tin máy ảo và đồng thời đó là “đóng băng” các ổ Disk (.vmdk). Những hành động trên sẽ “tạo” thêm các tập tin mới trong cùng thư mục với máy ảo (default). Vậy thì có tất cả bao nhiêu tập tin được tạo ra chình xác thì có 2 tập tin tạo mới (ứng với máy 1 Disk ảo sẽ giải thích sau) và 1 tập tin có sẵn trong thư mục máy ảo dóng vai trò databse của tập hợp các snapshot máy ảo. Những file này có chi tiết như sau:

<vm>-<number>.vmdk: đầu tiên là file vmdk có format như định dạng tôi vừa đưa ra. File này thường có thuật ngữ là Child Disk. Nó sẽ tương ứng tạo ra dựa trên từng ổ đĩa ảo có trên máy ảo khi thực hiện snapshot nghĩa là với mỗi disk khi thực hiện snapshot sẽ tạo ra thêm một disk con. Disk con này sẽ lưu trữ các thông tin thay đổi về sau để đảm bảo rằng ổ Disk cha (Parent Disk) luôn toàn vẹn hay cũng có thể gọi là đóng băng. Tới điểm này thì đa số sẽ thắc mắc lưu thay đổi lưu thêm vậy cuối cùng disk này có tối đa dung lượng là bao nhiêu? Trả lời luôn là nó sẽ có khả năng tăng dung lượng lớn bằng dung lượng mà chúng ta tạo ra ổ Disk vì có khả năng xảy ra là lượng data thay đổi là toàn bộ block dữ liệu của Disk mà chúng ta cấp phát sẽ ghi lên Child Disk.

    • <vm> : đại diện cho tên máy ảo chỉ có 1 disk nếu máy ảo dùng hai nick sẽ có thêm 1 disk tên <vm-1>
    • <number>: số thứ tự cho snapshot bắt đầu là 000001
      • Ví dụ:  WindowServer2k3-000001.vmdk

<vm>-Snapshot<number>.vmsn: tập tin thứ hai được tạo ra chính là tập tin chứ các dữ liệu về Ram tại thời điểm snapshot. Chú ý trong quá trình thực hiện snapshot trên máy ảo sẽ có tùy chọn cho việc có lưu Ram hay không. Du chọn hay không chọn chế độ lưu ram thì file này vẫn được tạo ra nhưng chỉ có data khi mà có chọn lưu ram mà thôi. Đặc biệt sự khác biệt ở đây chính khi chọn lưu ram thì khi revert máy ảo vẫn sẽ ở trạng thái hoạt động nhờ vào lượng ram này tương tự như tính năng Hibernate trên máy tính. Điều chú ý là khi lưu ram lai thì revert sẽ không cần restart máy ảo nhưng nếu ko lưu ram thì chắc chắn sẽ restart máy ảo vì snapshot h chỉ dong vai trò đóng băng ổ cứng chứ không còn vai trò lưu trạng thái máy ảo.

    • Ví dụ:   WindowServer2k3.vmsd

<vm>-Snapshot<number>.vmsn: tập tin cuối cùng tuy không được tạo ra (có sẵn khi new máy ảo) nhưng nó đóng vai trò không kém phần quan trọng nó chính là database cho toàn bộ các snashot nó sẽ lưu giữ thông tin máy ảo, snapshot cũng như thông tin về mối liên hệ giữa các snapshot với nhau và cũng chỉ có duy nhất 1 database này cho mỗi máy ảo chứ không được tạo mới qua mỗi lần snapshot như 2 file trên.

    • Ví dụ: WindowServer2k3-Snapshot1.vmsn

Sau đây tôi sẽ đởn giản hóa quy trình snapshot bằng hình ảnh tuần tự như sau với ảnh đầu tiên là máy ảo khi chưa có snapshot

image

Sau đó thực hiện snapshot lần đầu tiên cho máy ảo VM 2 file tạo ra sẽ có màu da cam

image

Và cứ thế các snapshot tạo ra sau sẽ tuần tự tao ra file vmdk và vmsn tương ứng

image

Một ví dụ thực tế và đừng quan tâm quá tại sao snapshot6 mà lại có 000001.vmdk là dó trước đó tôi tạo ra nhiều snapshot rồi xóa di phần number snapshot không tự reset nên sau đó tạo mới snapshot sẽ ra tình trạng này.

image

Bây giờ chúng ta đã hiểu snapshot căn bản sẽ thao tác gì với các thành phần dữ liệu bên dưới kế tiếp cần thông đó là workflow của các request snapshot:

image

Cách thực hiện yêu cầu snapshot thì khá đơn giản chỉ cần chuột phải máy ảo và chọn snapshot. Ở đây chúng ra sẽ quan tâm các tùy chọn của nó hơn:

image

Như các bạn thấy là nó có 2 tùy chọn chính là

  • Snapshot the virtual machine’s memory: tức là lưu lại các thông tin ram như tôi đã đề cập bên trên và default là sẽ chọn sẵn cho chúng ta
  • Quisce guest file system (needs VMware Tools installed): tùy chọn hai này thì khá đặc biệt ví nó yêu cầu OS phải cài đặt VMware Tools lý do là tính năng này sẽ dùng VMware Tool nhu một agent trực tiếp trên máy ảo thực hiện các hành vị pause đăc biệt để tại điểm snapshot xảy ra (rất ngắn) đó không có bất kỳ các transaction nào xảy ra ảnh hưởng đến sự toàn vẹn dữ liệu thường áp dụng cho các ứng dụng đặc biệt như SQL server, Exchange server… đòi hỏi có sự toàn vẹn về thông tin cao (dễ bị crash).

Giờ đây chỉ còn một vướng mắc khá lớn là cái Child Disk mà tôi đề cập sẽ lưu dự liệu ra sao các bạn vui lòng xem model sau mà tôi chôm từ VMware

image

Với model này các bạn sẽ đi từng bước từ dưới lên với ổ disk đầu tiên dong vai trò parent cũng chính là ổ gốc của chúng ta trước khi thực hiện snapshot đầu tiên. Khi snapshot lần 1 xảy ra child1 sẽ sinh ra đóng vai trò là disk chính cho hoạt động của máy ảo hiện tại tuy nhiên có thể nói dung lượng của nó hiện tại là bằng 0 ( trên thực tế là vai chục MB vì dung lượng đó sẽ lưu thông tin liên kết) vì vai trò của nó là lưu các thay đổi về block dữ liệu trong quá trình hoạt động của máy ảo sau snapshot. Như khối block den (4 cái đầu tiên) trên parent là những block có thay đổi sau quảng thời gian dai thực hiện snapshot1 thì những data thay đổi sẽ nằm trên Child1 và sẽ có thông tin liên kết giữa block mới và block cũ nằm trên parent. Còn với Child2 khi tạo ra sẽ sẽ xem trực tiếp child1 là parent bất kỳ thay đổi nào trên Child1 sẽ lưu trên Child2 và thông tin liên kết sẽ được tạo ra tuy nhiên sẽ có trường hợp là block thay đổi không nằm trên parent trực tiếp như trường hợp của Child3 trong hình nó có cha trực tiếp là Child2 các thông tin thay đổi trên Child2 sẽ ghi lên Child3 nhưng nếu thông tin bị thay đổi không nằm trên Child2 mà nằm trên Child cao hơn hoặc giả parent gốc thì data mới vẫn để trên Child3 nhưng liên kết lúc này sẽ trỏ trực tiếp về child hay parent đang có data mới gần nhất với nó.

Revert Snapshot

Hành động này trả lại trạng thái của máy ảo tại thời điểm snapshot các thực hoạt động của nó như sau (dựa theo hình trên) hiệ tại điểm hoạt động của chúng ta là điểm Child3 data mới ghi trên đó và một ngày đẹp trời chúng ta muốn quay lại trạng thái cũ là snapshot1 cũng chính là bản gốc để hoạt động thì chúng ta sẽ dùng tính năng là revert snapshot. Bước đầu lượng data trên Child3 sẽ bị xóa nếu chúng ta ko snapshot trước khi revert (mất hoàn toàn dù revert lại snapshot3 vì trên logic tại thời điểm snapshot3 không có lượng data thay đổi trong khoang thoi gian su dụng) và nó sẽ tạo ra một Child4 nằm cùng cấp với Child1 xem ổ gốc như parent trực tiếp. Vấn đề này các bạn có thể thự trực tiếp trên hệ thống của mình để rút ra kq còn cái này mình rút sẵn thôi.

Delete snapshot

Mình cũng dựa trên mô hình trên thực hiện các snapshot và sau đó delete tuần từ các vị trí khác nhau và rút ra kết luận là khi delete snapshot lượng data của ổ trên và dưới snapshot sẽ merge lại với nhau chứ không phải delete snapshot là delete luôn cả Child Disk vì trên về logic data là phải toàn vẹn nếu delete cả child disk thì đồng nghĩa các liên kết như mình đề cập là gãy gánh tất cả disk sẽ mất đi tính toàn vẹn dữ liệu và faild vì lý do đó chúng sẽ merge lại với nhau mình có chụp hình lai lab ghi nhận thay đổi dữ liệu để làm mẫu cho các bạn thấy rõ

image

Kết luận:

Thuận lợi:

  • Lưu giữ trạng thái máy ảo
  • Tránh rủi ro không mong muốn (unplaned) khi thực hiện các thay đổi trên máy ảo

Hạn chế

  • Trên thực tế theo lời đề nghị của các kỹ sư VMware snapshot sẽ ảnh hưởng không nhỏ đến hiệu suất read của máy ảo do các nhiều snapshot thì dữ liệu càng rải rác nhiều đòi hỏi mỗi thao tác đọc cần liên kết hết các dữ liệu. Cũng theo như quy định VMware là một snapshot không quá 7 ngày và dung lượng cho một child disk không quá 10GB để đảm bảo hiệu suất máy ảo – trong bài VMware vSphere 4: Script và thao tác quản lý snapshot trên hệ thống.
  • Bất lợi tiếp theo là dung lượng sử dụng cho máy ảo sẽ vượt rào ảnh hưởng lớn capacity nếu không kiểm soát kỹ cũng như biết rõ hệ thống mình ai đã snapshot, snapshot bao lâu, xài bao nhiu lần snapshot và dung lượng các snapshot tăng đến đâu trog bài sau mình sẽ hướng dẫn đoạn script kiểm soát này.
  • Cái hạn chế cuối cùng là dừng xem snapshot là chiến lược backup và khôi phục hệ thống vì nó không lưu trữ bản sao dữ liệu gì cho chúng ta cả mà gần như nó chỉ giúp phân đoạn data theo thời gian hỗ trợ cho chúng ra các thao tác về thử nghiệm đặc biệt lợi ích hơn trong qua trình hỗ trợ các ứng dụng khác có thẻ backup một cách toàn vẹn những disk ảo mà thôi

Posted on 04/09/2011, in VMware and tagged , , , . Bookmark the permalink. 1 Phản hồi.

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: