Trong bài này mình sẽ tìm hiểu về các file cấu thành 1 VM và tác dụng của nó là gì. Tìm hiểu về cấu trúc khi 1 lệnh I/O đi từ VM đến Storage. Dữ liệu được ghi đọc từ vm xuống disk trên storage như thế nào
1.Vsphere VM files – Các file cấu thành 1 VM
Như sơ đồ trên ta thấy để 1 con VM được tạo và hoạt động thì cần rất nhiều file với những tính năng khác nhau để hỗ trợ bổ sung và giúp con VM hoạt động được. Các file đó được lưu trên Datastore có thể là VMFS datastore hay lưu trên NFS của Nas server. Bây giờ tìm hiểu từng file xem nó là gì và công dụng như thế nào:
.nvram file: Tệp này chứa BIOS được sử dụng khi máy ảo khởi động. Nó tương tự như chip BIOS của máy chủ vật lý. Nó được gọi là Virtual BIOS, có thể truy cập điều này khi máy ảo khởi động lần đầu bằng cách nhấn phím F2. Bất kỳ thay đổi nào được thực hiện đối với cấu hình phần cứng của máy ảo đều được lưu trong tệp NVRAM. Tệp này ở định dạng nhị phân và nếu bị xóa, nó sẽ tự động được tạo lại khi bật máy ảo.
.vmx file: Tệp này chứa tất cả thông tin cấu hình và cài đặt phần cứng của máy ảo. Bất cứ khi nào bạn chỉnh sửa cài đặt của máy ảo, tất cả thông tin đó được lưu trữ ở định dạng văn bản trong tệp này. Tệp này chứa thông tin về máy ảo, bao gồm cả cấu hình phần cứng cụ thể của nó ( RAM size, network interface card info, hard drive info and serial/parallel port info).
VMDK files – Virtual Disk Files: Tất cả các đĩa ảo đều được tạo thành từ hai tệp, một tệp dữ liệu lớn bằng kích thước của đĩa ảo và một tệp mô tả đĩa văn bản nhỏ, mô tả kích thước và hình học của tệp đĩa ảo. Tệp mô tả cũng chứa một con trỏ đến tệp dữ liệu lớn cũng như thông tin về các thành phần ổ đĩa ảo sector, head, cylinder, disk adapter type. Có 3 loại vmdk file:
The .vmss file: Tệp này được sử dụng khi máy ảo bị treo và được sử dụng để bảo toàn nội dung bộ nhớ của máy ảo để nó có thể khởi động lại từ nơi nó đã dừng. Tệp này sẽ có kích thước xấp xỉ bằng dung lượng RAM được gán cho máy ảo. Ngay cả nội dung bộ nhớ trống cũng được ghi vào tệp này. Khi một máy ảo được đưa ra khỏi trạng thái tạm ngừng, nội dung của tệp này sẽ được ghi lại vào bộ nhớ vật lý của máy chủ lưu trữ, tuy nhiên, tệp không tự động bị xóa cho đến khi máy ảo tắt nguồn, khởi động lại hệ điều hành sẽ không hoạt động. Nếu tệp tạm ngưng trước đó tồn tại khi máy ảo bị tạm ngừng lần nữa, tệp này sẽ được sử dụng lại thay vì bị xóa và tạo lại. Nếu tệp này bị xóa trong khi máy ảo bị tạm ngưng, thì máy ảo sẽ khởi động bình thường và không ở trạng thái bị treo.
The .vmsd file: Tệp này được sử dụng với ảnh chụp nhanh để lưu trữ siêu dữ liệu và thông tin khác về từng ảnh chụp nhanh đang hoạt động trên máy ảo. Tệp văn bản này ban đầu có kích thước 0 byte cho đến khi một ảnh chụp nhanh được tạo. Tệp VMSD cập nhật thông tin mỗi khi ảnh chụp nhanh được tạo hoặc xóa. Chỉ một trong những tệp này tồn tại bất kể số lượng ảnh chụp nhanh đang chạy, vì tất cả chúng đều cập nhật tệp duy nhất này.
The .vmsn file: Tệp này được sử dụng với snapshot để lưu trữ trạng thái của máy ảo khi snapshot được chụp. Tệp .vmsn riêng biệt được tạo cho mọi snapshot được tạo trên máy ảo và sẽ tự động bị xóa khi snapshot bị xóa. Kích thước của tệp này sẽ khác nhau tùy thuộc vào việc bạn có chọn đưa trạng thái memory của máy ảo vào snapshot hay không. Nếu bạn chọn lưu trạng thái bộ nhớ, tệp này sẽ lớn hơn một chút so với dung lượng RAM đã được gán cho máy ảo, vì toàn bộ nội dung bộ nhớ, bao gồm cả bộ nhớ trống, được sao chép vào tệp này. Nếu bạn không chọn lưu trạng thái bộ nhớ của ảnh chụp nhanh thì tệp này sẽ khá nhỏ (dưới 32 KB). Tệp này có bản chất tương tự như .vmss được sử dụng khi máy ảo bị tạm ngưng.
The .log file: Tệp LOG được tạo để ghi thông tin về máy ảo và thường được sử dụng cho mục đích khắc phục sự cố. Sẽ có một số tệp này hiện diện trong thư mục của máy ảo. Tệp nhật ký hiện tại luôn được đặt tên là vmware.log và tối đa sáu tệp nhật ký cũ hơn cũng sẽ được giữ lại với một số ở cuối tên của chúng (tức là vmware-2.log). Tệp nhật ký mới được tạo khi một máy ảo tắt và bật lại hoặc nếu tệp nhật ký đạt đến giới hạn kích thước xác định tối đa. Số lượng tệp nhật ký được giữ lại và giới hạn kích thước tối đa đều được xác định dưới dạng thông số cấu hình nâng cao của VM (log.rotateSize và log.keepOld).
2. ESXi I/O Flow
Sơ lượt về sơ đồ chung thì có 2 phần chính: User mode và Kernel mode
User mode ở kiến trúc này mình nói đến VMM
VMM là Virtual Machine Monitor (OS, Application, Drive Disk SCSI(x,x))
Shared Ring: Hàng đợi được chia sẻ giữa VMM và VMKernel, cả hai đều có thể truy cập vòng chia sẻ mà không bị phạt hiệu suất, bất cứ lúc nào VMM hoặc VMkernel truy cập vòng chia sẻ.
vSCSI: nhận các yêu cầu SCSI và ảo hóa các yêu cầu I / O để yêu cầu file VMDK
Flat Backend: File fiat-VMDK
RDM Backend: File rdm-VMDK
FSS (File System Switch): Được sử dụng để write file system driver
DevFS: Rất giống với bất kỳ hệ thống tệp dựa trên UNIX. Nó mô phỏng các thiết bị thực và không thực.
VMFS: vmfs datastore
NFS: nfs datastore
FDS (File Device Switch - Block Storage): Để chuyển đổi giữa Disk, SnapShot Driver và LVM.
Disk: Giả lập tất cả các thiết bị khối dựa trên đĩa thực. Nói chuyện trực tiếp với ngăn xếp lưu trữ.
SnapShot Driver: Được triển khai như một trình điều khiển bộ lọc. Do có trình điều khiển bộ lọc, nó quay trở lại FSS và chuỗi đĩa được gắn vào DevFS.
LVM (Logical Volume Manager): Định dạng VMFS hoạt động theo cách sau:
SCSI Device: Mọi thiết bị cục bộ hoặc từ xa đều có cấu trúc thiết bị SCSI (có thể không quá 256 LUN cho mỗi target).
SCSI Schedule Queue: Storage stack thực hiện một bộ chia sẻ (shares), SIOC(Storage IO Controller), trên cơ sở cluster nhưng dùng SCSI Scheduler Queues. Số lượng shares là số lượng tất cả các đĩa SCSI.
SATP (Storage Array Type Plugin - Control Plane): Loadbalancing Active Passive
PSP (Path Selection Policy - Data Plane): PSP chịu trách nhiệm về cách thức đọc và ghi được xử lý đối với backend storage. Có 3 loại PSP:
I/O nhận thông tin Flat backend (VMDKs) hoặc RDM backend
Sau khi xác định disk đó là Flat, hệ thống FileSystemSwitch tiếp tục kiểm tra xem disk đó nằm trên datastore VMFS or datastore NFS. Để xác định được thông tin dữ liệu nằm trên datastore nào, vmware nhờ vào FSS( File system switch) , có 3 trường hợp xảy ra:
Trước tiên dữ liệu truyền trong hệ thống VMware ở 2 dạng
Khi đọc ghi 1 file nào đó thì Application xác định dữ liệu sẽ đọc ghi ở đâu (ỗ đĩa nào, thư mục nào) -> Hỏi OS, OS xác định disk -> sẽ thực hiện lệnh đọc file nhờ VMware SCSI disk drive hay còn gọi là vSCSI drive (4 vSCSI như đoạn trên mình có nói gồm: BusLogic Parallel, LSI Logic Parallel, LSI Logic SAS, VMware Paravirtual (aka PVSCSI)) sau đó vSCSI drive ở VMM sẽ giao tiếp với vSCSI ở mode vmkernel thông qua Shared Ring.
Ở đây sẽ xảy ra 3 trường hợp:
- Các files cấu thành 1 VM
- ESXi I/O Flow
- Data read/write vmware to disk storage
1.Vsphere VM files – Các file cấu thành 1 VM
Như sơ đồ trên ta thấy để 1 con VM được tạo và hoạt động thì cần rất nhiều file với những tính năng khác nhau để hỗ trợ bổ sung và giúp con VM hoạt động được. Các file đó được lưu trên Datastore có thể là VMFS datastore hay lưu trên NFS của Nas server. Bây giờ tìm hiểu từng file xem nó là gì và công dụng như thế nào:
.nvram file: Tệp này chứa BIOS được sử dụng khi máy ảo khởi động. Nó tương tự như chip BIOS của máy chủ vật lý. Nó được gọi là Virtual BIOS, có thể truy cập điều này khi máy ảo khởi động lần đầu bằng cách nhấn phím F2. Bất kỳ thay đổi nào được thực hiện đối với cấu hình phần cứng của máy ảo đều được lưu trong tệp NVRAM. Tệp này ở định dạng nhị phân và nếu bị xóa, nó sẽ tự động được tạo lại khi bật máy ảo.
.vmx file: Tệp này chứa tất cả thông tin cấu hình và cài đặt phần cứng của máy ảo. Bất cứ khi nào bạn chỉnh sửa cài đặt của máy ảo, tất cả thông tin đó được lưu trữ ở định dạng văn bản trong tệp này. Tệp này chứa thông tin về máy ảo, bao gồm cả cấu hình phần cứng cụ thể của nó ( RAM size, network interface card info, hard drive info and serial/parallel port info).
VMDK files – Virtual Disk Files: Tất cả các đĩa ảo đều được tạo thành từ hai tệp, một tệp dữ liệu lớn bằng kích thước của đĩa ảo và một tệp mô tả đĩa văn bản nhỏ, mô tả kích thước và hình học của tệp đĩa ảo. Tệp mô tả cũng chứa một con trỏ đến tệp dữ liệu lớn cũng như thông tin về các thành phần ổ đĩa ảo sector, head, cylinder, disk adapter type. Có 3 loại vmdk file:
- The -flat.vmdk file: Đây là tệp dữ liệu đĩa ảo lớn mặc định được tạo khi bạn thêm ổ cứng ảo vào máy ảo không phải là RDM.
- The -delta.vmdk file: Các tệp dữ liệu đĩa ảo này chỉ được sử dụng khi tạo ảnh chụp nhanh. Khi một ảnh chụp nhanh được tạo, tất cả quá trình ghi vào -flat.vmdk gốc sẽ bị tạm dừng và nó trở thành chỉ đọc; các thay đổi đối với đĩa ảo sau đó được ghi vào các tệp -delta này để thay thế. Kích thước ban đầu của các tệp này là 16 MB và chúng được phát triển khi cần thiết với mức tăng 16 MB khi thực hiện các thay đổi đối với đĩa cứng ảo của VM. Bởi vì các tệp này là bitmap của những thay đổi được thực hiện đối với đĩa ảo, một tệp -delta.vmdk không thể vượt quá kích thước của tệp -flat.vmdk ban đầu. Khi ảnh chụp nhanh bị xóa, các tệp này sẽ tự động bị xóa sau khi chúng được hợp nhất trở lại tệp flat.vmdk ban đầu.
- The -rdm.vmdk file: Sau khi mount disk raw device mapping (RDM) vào 1 con VM thì disk đó nó sẽ sử dụng file -rdm.vmdk để dùng.
The .vmss file: Tệp này được sử dụng khi máy ảo bị treo và được sử dụng để bảo toàn nội dung bộ nhớ của máy ảo để nó có thể khởi động lại từ nơi nó đã dừng. Tệp này sẽ có kích thước xấp xỉ bằng dung lượng RAM được gán cho máy ảo. Ngay cả nội dung bộ nhớ trống cũng được ghi vào tệp này. Khi một máy ảo được đưa ra khỏi trạng thái tạm ngừng, nội dung của tệp này sẽ được ghi lại vào bộ nhớ vật lý của máy chủ lưu trữ, tuy nhiên, tệp không tự động bị xóa cho đến khi máy ảo tắt nguồn, khởi động lại hệ điều hành sẽ không hoạt động. Nếu tệp tạm ngưng trước đó tồn tại khi máy ảo bị tạm ngừng lần nữa, tệp này sẽ được sử dụng lại thay vì bị xóa và tạo lại. Nếu tệp này bị xóa trong khi máy ảo bị tạm ngưng, thì máy ảo sẽ khởi động bình thường và không ở trạng thái bị treo.
The .vmsd file: Tệp này được sử dụng với ảnh chụp nhanh để lưu trữ siêu dữ liệu và thông tin khác về từng ảnh chụp nhanh đang hoạt động trên máy ảo. Tệp văn bản này ban đầu có kích thước 0 byte cho đến khi một ảnh chụp nhanh được tạo. Tệp VMSD cập nhật thông tin mỗi khi ảnh chụp nhanh được tạo hoặc xóa. Chỉ một trong những tệp này tồn tại bất kể số lượng ảnh chụp nhanh đang chạy, vì tất cả chúng đều cập nhật tệp duy nhất này.
The .vmsn file: Tệp này được sử dụng với snapshot để lưu trữ trạng thái của máy ảo khi snapshot được chụp. Tệp .vmsn riêng biệt được tạo cho mọi snapshot được tạo trên máy ảo và sẽ tự động bị xóa khi snapshot bị xóa. Kích thước của tệp này sẽ khác nhau tùy thuộc vào việc bạn có chọn đưa trạng thái memory của máy ảo vào snapshot hay không. Nếu bạn chọn lưu trạng thái bộ nhớ, tệp này sẽ lớn hơn một chút so với dung lượng RAM đã được gán cho máy ảo, vì toàn bộ nội dung bộ nhớ, bao gồm cả bộ nhớ trống, được sao chép vào tệp này. Nếu bạn không chọn lưu trạng thái bộ nhớ của ảnh chụp nhanh thì tệp này sẽ khá nhỏ (dưới 32 KB). Tệp này có bản chất tương tự như .vmss được sử dụng khi máy ảo bị tạm ngưng.
The .log file: Tệp LOG được tạo để ghi thông tin về máy ảo và thường được sử dụng cho mục đích khắc phục sự cố. Sẽ có một số tệp này hiện diện trong thư mục của máy ảo. Tệp nhật ký hiện tại luôn được đặt tên là vmware.log và tối đa sáu tệp nhật ký cũ hơn cũng sẽ được giữ lại với một số ở cuối tên của chúng (tức là vmware-2.log). Tệp nhật ký mới được tạo khi một máy ảo tắt và bật lại hoặc nếu tệp nhật ký đạt đến giới hạn kích thước xác định tối đa. Số lượng tệp nhật ký được giữ lại và giới hạn kích thước tối đa đều được xác định dưới dạng thông số cấu hình nâng cao của VM (log.rotateSize và log.keepOld).
2. ESXi I/O Flow
Sơ lượt về sơ đồ chung thì có 2 phần chính: User mode và Kernel mode
User mode ở kiến trúc này mình nói đến VMM
VMM là Virtual Machine Monitor (OS, Application, Drive Disk SCSI(x,x))
Shared Ring: Hàng đợi được chia sẻ giữa VMM và VMKernel, cả hai đều có thể truy cập vòng chia sẻ mà không bị phạt hiệu suất, bất cứ lúc nào VMM hoặc VMkernel truy cập vòng chia sẻ.
vSCSI: nhận các yêu cầu SCSI và ảo hóa các yêu cầu I / O để yêu cầu file VMDK
Flat Backend: File fiat-VMDK
RDM Backend: File rdm-VMDK
FSS (File System Switch): Được sử dụng để write file system driver
DevFS: Rất giống với bất kỳ hệ thống tệp dựa trên UNIX. Nó mô phỏng các thiết bị thực và không thực.
VMFS: vmfs datastore
NFS: nfs datastore
FDS (File Device Switch - Block Storage): Để chuyển đổi giữa Disk, SnapShot Driver và LVM.
Disk: Giả lập tất cả các thiết bị khối dựa trên đĩa thực. Nói chuyện trực tiếp với ngăn xếp lưu trữ.
SnapShot Driver: Được triển khai như một trình điều khiển bộ lọc. Do có trình điều khiển bộ lọc, nó quay trở lại FSS và chuỗi đĩa được gắn vào DevFS.
LVM (Logical Volume Manager): Định dạng VMFS hoạt động theo cách sau:
- Đầu 1 logical volume với LVM được tạo
- Sau đó định dạng VMFS trên đĩa này
SCSI Device: Mọi thiết bị cục bộ hoặc từ xa đều có cấu trúc thiết bị SCSI (có thể không quá 256 LUN cho mỗi target).
SCSI Schedule Queue: Storage stack thực hiện một bộ chia sẻ (shares), SIOC(Storage IO Controller), trên cơ sở cluster nhưng dùng SCSI Scheduler Queues. Số lượng shares là số lượng tất cả các đĩa SCSI.
SATP (Storage Array Type Plugin - Control Plane): Loadbalancing Active Passive
PSP (Path Selection Policy - Data Plane): PSP chịu trách nhiệm về cách thức đọc và ghi được xử lý đối với backend storage. Có 3 loại PSP:
- Most Recently Used (MRU): Chọn path đường đi
- Fixed (Fixed): Chỉ điểm
- Round Robin (RR): Vòng
I/O nhận thông tin Flat backend (VMDKs) hoặc RDM backend
Sau khi xác định disk đó là Flat, hệ thống FileSystemSwitch tiếp tục kiểm tra xem disk đó nằm trên datastore VMFS or datastore NFS. Để xác định được thông tin dữ liệu nằm trên datastore nào, vmware nhờ vào FSS( File system switch) , có 3 trường hợp xảy ra:
- Với case dữ liệu liên quan đến Snapshot thì nó sẽ chọn DevFS datastore -> FDS( FileDeviceSwitch) chỗ này sẽ nói ở case VMFS
- Với case là file VMDK nằm trên NFS: Đầu tiên sẽ đi vào triển khai SUNRPC của ESXi và sử dụng ngăn xếp TCP / IP cũng như VMkernel (vmk) interface để xử lý I / O -> Disk hardware.
- Với case là file VMDK nằm trên VMFS: Ở trên VMFS nó sẽ hỏi thiết bị của tệp là thiết bị gì nhờ FDS(FileDeviceSwitch), Disk (normal non-snapshot I/O), the Snapshot Driver or the LVM (logical volume manager).
- Disk: VMDK I/O thông thường: Đọc ghi dữ liệu
- Snapshot Driver: Khi VMware Trigger kích hoạt một snapshot hoặc đang chạy 1 snapshot với mọi I/O luôn được thông qua FSS một lần nữa khi chuỗi ảnh chụp nhanh được gắn kết thông qua triển khai DevFS.
- LVM: Khi đĩa được tạo, mở rộng hoặc kéo dài spanned.
- Khi I/O đi vào PSA (Pluggable Storage Architecture)
- Device Queue:
- SCSI Device
- SCSI Sched Queue
- Powerpath
- NMP(Native Multipathing Plugin):
- SATP (Storage Array Type Plugin): Điều khiển hệ thống lưu trữ storage
- PSP (Path Selection Policy): triển khai dataplane xử lý I / O
- Cuối cùng I / O đã vào được Lớp giữa SCSI quản lý HBA vật lý, queuing và xử lý lỗi SCSI.
Trước tiên dữ liệu truyền trong hệ thống VMware ở 2 dạng
- Block storage: Dữ liệu sẽ truyền theo dạng khối block, mapped from local disk, Fibre Channel LUNs or iSCSI - Raw Device Mapping:
- Fibre Channel (FC)
- Internet Small Computer Systems Interface (iSCSI)
- Fibre Channel over Ethernet (FCoE)
- File Storage: Dữ liệu sẽ truyền theo dạng file. Cụ thể nó truyền dữ liệu ở lớp TCP/IP:
- Network File System (NFS)
Khi đọc ghi 1 file nào đó thì Application xác định dữ liệu sẽ đọc ghi ở đâu (ỗ đĩa nào, thư mục nào) -> Hỏi OS, OS xác định disk -> sẽ thực hiện lệnh đọc file nhờ VMware SCSI disk drive hay còn gọi là vSCSI drive (4 vSCSI như đoạn trên mình có nói gồm: BusLogic Parallel, LSI Logic Parallel, LSI Logic SAS, VMware Paravirtual (aka PVSCSI)) sau đó vSCSI drive ở VMM sẽ giao tiếp với vSCSI ở mode vmkernel thông qua Shared Ring.
Ở đây sẽ xảy ra 3 trường hợp:
- Flat vmdk (virtual disk): Khi thực hiện đọc ghi 1 file thuộc virtual disk thì nó sẽ truy cập vào file vmdk của con VM đó nằm trên VMFS. Hệ thống VMFS sẽ xác định file vmdk của con VM đó được lưu ở đâu, nằm trên LUN nào trong datastore. Sau khi xác định được dữ liệu nằm trên LUN nào, hệ thống VMware sẽ tìm đường đi xuống storage thông qua hệ thống PSA (Pluggable Storage Architecture): Hệ thống PSA có nhiệm vụ là định tuyến, loadbalancing cho các path, LUN kết nối giữa storage và hệ thống vmware -> Sau đó sẽ thực hiện chuyển tiếp lệnh SCSI cho interface của host được connect với RDM physical (storage) thông qua Storage FC hoặc iSCSI.
- RDM vmdk (RDM logical): Khi thực hiện đọc ghi 1 file thuộc rdm logical thì nó sẽ truy cập vào file rdm-vmdk của con VM đó nằm trên VMFS (VMFS datastore được coi như proxy cho RDM physical). Hệ thống VMFS sẽ xác định file rdm-vmdk của con vm đó nằm trên RDM physical nào. Sau khi xác định được dữ liệu nằm trên LUN nào, hệ thống VMware sẽ tìm đường đi xuống storage thông qua hệ thống PSA (Pluggable Storage Architecture): Hệ thống PSA có nhiệm vụ là định tuyến, loadbalancing cho các path, LUN kết nối giữa storage và hệ thống vmware -> Sau đó sẽ thực hiện chuyển tiếp lệnh SCSI cho interface của host được connect với RDM physical (storage) thông qua Storage FC hoặc iSCSI.
- RDM physical: Khi thực hiện đọc ghi 1 file thuộc rdm physical. Hệ thống sẽ đi xuống trực tiếp xuống PSA mà không cần thông qua datastore VMFS gì PSA(Pluggable Storage Architecture): Hệ thống PSA có nhiệm vụ là định tuyến, loadbalancing cho các path, LUN kết nối giữa storage và hệ thống vmware -> Sau đó sẽ thực hiện chuyển tiếp lệnh SCSI cho interface của host được connect với RDM physical (storage) thông qua Storage FC hoặc iSCSI.
Last edited: