Computer >> Máy Tính >  >> Phần mềm >> Máy ảo

Cách sao chép máy ảo trong KVM - hướng dẫn

Lưu ý:Hướng dẫn này giả định rằng bạn không có virt-sysprep; xem bên dưới!

Không, đây không phải là một hướng dẫn chung khác về cách sử dụng virt-clone. Mặc dù virt-clone là một công cụ khá hữu ích để tạo các bản sao máy ảo của bạn, nhưng trong cấu hình hiện tại, nó sẽ chỉ gán địa chỉ MAC và ID duy nhất cho hệ thống nhân bản của bạn, buộc bạn phải thực hiện các chỉnh sửa và tùy chỉnh bổ sung sau khi bản sao khởi động. Điều này có nghĩa là bạn có thể phải can thiệp khá nhiều, đó không phải là điều bạn muốn.

Được rồi, tôi sẽ chỉ cho bạn một cách khác để tạo các bản sao giống hệt nhau của các máy ảo của bạn trong công nghệ KVM, với thông tin duy nhất trên mỗi máy chủ để bất kỳ số lượng bản sao nào cũng trở thành các máy chủ riêng lẻ trên mạng của bạn. Nói cách khác, hãy cài đặt một lần và sau đó tạo bao nhiêu phiên bản khách tùy ý, mỗi phiên bản có tên máy chủ, địa chỉ MAC, địa chỉ IP, v.v. Hoàn toàn có thể viết kịch bản và tất cả những thứ đó. Vì vậy, hãy làm theo tôi.

Lưu ý:Hình ảnh này được lấy từ Wikimedia, được cấp phép theo CC BY 2.0.

Cách kém hiệu quả hơn

Hãy thảo luận ngắn gọn về virt-clone trong giây lát. Nó không phải là một tiện ích tồi, nhưng việc sử dụng nó không phải là tiêu chuẩn trên các bản phân phối. Một số cung cấp cả thành phần GUI, như một phần của Trình quản lý máy ảo, một số khác cũng cung cấp công cụ dòng lệnh. Trong cả hai trường hợp, các bản sao sẽ chỉ được gán ID và địa chỉ MAC duy nhất mới chứ không có thông tin nào khác. Các tệp cấu hình sẽ được lưu trữ trong /etc/libvirt/qemu.

Đây là một ví dụ:

Bây giờ, chúng tôi không muốn điều này. Không hoàn hảo.

Nhân bản + công cụ buôn bán

Bây giờ, đúng cách. Bạn sẽ cần rất ít công cụ để đạt được kết quả mong muốn; trên thực tế, chỉ một công cụ và nó được gọi là kpartx, một tiện ích có thể tạo bản đồ thiết bị từ các bảng phân vùng. Cụ thể ở đây, bạn có thể sử dụng nó để tạo ánh xạ phân vùng cho các máy khách của mình bằng cách truy vấn các đĩa ảo. Chúng tôi sẽ minh họa bằng cách sử dụng Linux, nhưng hầu hết các hệ thống dựa trên UNIX sẽ hoạt động.

Vì vậy, những gì chúng ta cần làm là đọc bảng phân vùng từ đĩa ảo. Trước tiên, chúng ta phải tạo một bản sao của đĩa ảo, vì mỗi máy sẽ có một đĩa riêng. Đây là một bước chậm của quy trình sao chép và nó sẽ phụ thuộc vào dung lượng tệp của bạn và tốc độ của ổ đĩa. Nói chung, bạn sẽ cần vài phút để sao chép một tệp đĩa 20 GB điển hình.

cp

Bây giờ, bảng phân vùng:

kpartx -a

Điều này sẽ tạo ra một số đầu ra. Trên thực tế, bạn sẽ thấy một trình ánh xạ riêng cho từng phân vùng riêng lẻ có trong máy ảo. Chẳng hạn, nếu bạn có / và /home, bạn sẽ có hai người lập bản đồ.

kpartx -av /kvm/disk.raw
thêm bản đồ loop0p1 (253:0):0 4206592 tuyến tính /dev/loop0 2048
thêm bản đồ loop0p2 (253:1):0 79677440 tuyến tính /dev/loop0 4208640

Bây giờ, vấn đề là gắn thiết bị có liên quan và thực hiện các thay đổi trên mỗi máy chủ:

mount /dev/mapper/ /mountpoint

Ví dụ:

gắn kết /dev/mapper/loop0p1 /mnt

Thay đổi máy chủ duy nhất

Bây giờ máy ảo của bạn rất có thể yêu cầu những thay đổi sau:

/etc/hosts
/etc/HOSTNAME

Và tùy thuộc vào việc bạn đang sử dụng Debian hay RedHat/SUSE, các cấu hình mạng, mặc dù những cấu hình này có thể không cần thiết nếu bạn đang sử dụng DHCP. Tuy nhiên, nếu bạn đang sử dụng địa chỉ IP tĩnh thì đây là điều bắt buộc:

/etc/sysconfig/mạng/ifcfg-

HOẶC

/etc/mạng/giao diện

Những thay đổi khác có thể cần thiết, nhưng có những thay đổi cơ bản. Khi bạn lưu các thay đổi, umount. Bước tiếp theo của bạn là chỉnh sửa tệp cấu hình KVM cho bản sao mới. Các tệp XML thường được lưu trong các thư mục /etc/kvm/vm hoặc /etc/libvirt/qemu, nếu các máy được tạo tự động bằng Trình quản lý máy ảo.

Các thay đổi đối với tệp XML

Đầu tiên, tạo một bản sao của cấu hình mẫu.

Bây giờ, bạn sẽ cần chỉnh sửa ID, tên và địa chỉ MAC duy nhất của miền của mình. Giống như trước đây, bạn sẽ phải áp dụng một số loại logic duy nhất, có thể sử dụng grep, awk và tìm kiếm nội tuyến &thay thế bằng sed, cộng với một lượng biểu thức chính quy hợp lý khi được yêu cầu, để bạn có thể viết đầy đủ quy trình của mình. Đương nhiên, bạn cũng sẽ cần trỏ chỉ thị đĩa cứng tới đúng tệp.

Ví dụ, đây là tập hợp các lệnh bạn có thể cần:

sed -i -e 's/\.*/\<\/uuid\>/uuid\>dedoimedo\<\/uuid/'
tập tin.xml

Và với grep để đảm bảo nó hoạt động:

sed -i -e 's/\.*/\<\/uuid\>/uuid\>dedoimedo\<\/uuid/'
tập tin.xml. | grep dedoimedo

dedoimedo

Tổng hợp tất cả lại với nhau

Do đó, một tập lệnh sao chép hoàn chỉnh sẽ là - Tôi đang đưa ra một ví dụ điển hình về RedHat, bạn có thể tự điều chỉnh. Tương tự như vậy, một số phần của tập lệnh sẽ yêu cầu logic của riêng bạn, chẳng hạn như quyết định cách phân tích cú pháp đầu ra của phân vùng. Ngoài ra, bạn có thể cần thực hiện thêm một số công việc trong việc phân tích cú pháp đầu ra của tệp XML và loại bỏ các dấu ngoặc mở và đóng, dấu ngoặc kép và các ký tự khác.

#!/bin/bash

# tạm dừng hệ điều hành mẫu trong khi sao chép

virsh đình chỉ
cp <đĩa cũ> <đĩa mới>
sơ yếu lý lịch virsh

kpartx -a <đĩa mới>

# một số logic để đọc các phân vùng có liên quan

mount <điểm gắn kết>

# một số logic để phân tích nội dung của các tệp duy nhất trên máy chủ

sed -i -e 's/dòng tên máy chủ cũ/dòng tên máy chủ mới/' /etc/HOSTNAME
sed -i -e 's/dòng tên máy chủ cũ/dòng tên máy chủ mới/' /etc/hosts
sed -i -e 's/cấu hình IP cũ/cấu hình IP mới/' /etc/sysconfig/mạng/ifcfg-eth0

umount <điểm gắn kết>

cp /etc/kvm/vm/old.xml /etc/kvm/vm/new.xml

# một số logic để tạo uuid, tên, mac mới, v.v.
# một số logic để phân tích chính xác các tệp XML

sed -i -e 's/uuid cũ/uuid mới/' /etc/kvm/vm/new.xml
sed -i -e 's/tên cũ/tên mới/' /etc/kvm/vm/new.xml
sed -i -e 's/Mac cũ/Mac mới/' /etc/kvm/vm/new.xml
sed -i -e 's/đĩa cũ/đĩa mới/' /etc/kvm/vm/new.xml

virsh tạo /etc/kvm/vm/new.xml

thoát 0

Và chúng tôi đã hoàn thành. Khởi động và tận hưởng!

Tương lai rất có thể:virt-sysprep

Toàn bộ hướng dẫn này trở nên vô dụng nếu bạn có sẵn virt-sysprep trên hộp của mình, điều đó có thể có nghĩa là bạn đang sử dụng một trong những phiên bản mới hơn của hệ điều hành yêu thích của mình. Tuy nhiên, trong môi trường kinh doanh, điều này rất có thể không xảy ra, vì vậy hầu hết các quản trị viên hệ thống sẽ không sử dụng được công cụ này. Nếu bạn có cơ hội sử dụng nó, nó sẽ cung cấp một số cải tiến thực sự hữu ích cho công cụ nhân bản cơ bản. Trích dẫn tài liệu gốc:

Virt-sysprep đặt lại hoặc hủy định cấu hình máy ảo để có thể tạo bản sao từ máy ảo. Các bước trong quy trình này bao gồm xóa khóa máy chủ SSH, xóa cấu hình MAC mạng liên tục và xóa tài khoản người dùng. Mỗi bước có thể được bật hoặc tắt theo yêu cầu. Virt-sysprep sửa đổi hình ảnh khách hoặc đĩa tại chỗ. Khách phải được tắt máy. Nếu bạn muốn giữ nguyên nội dung hiện có của khách, trước tiên bạn phải sao chép hoặc sao chép đĩa.

Chúng ta SẼ thảo luận riêng về công cụ hữu ích này trong một hướng dẫn khác.

Đọc thêm

Để biết thêm về niềm vui của KVM:

KVM + VirtualBox chung sống hòa thuận

Hướng dẫn mạng cầu nối KVM

KVM lưu trữ và quản trị mạng

Và đây là cách sao chép máy ESXi - tương tự như khái niệm

Một tài nguyên tuyệt vời khác của các công cụ hình ảnh đĩa máy ảo  - libguestfs

Kết luận

Đây là một hướng dẫn rất đơn giản và thanh lịch. Tôi nghĩ bạn sẽ thấy nó cực kỳ hữu ích vì nó bổ sung cho các quy trình nhân bản thủ công chủ yếu bằng các công cụ khác. Bạn nhận được một tập hợp các lệnh mà bạn có thể dễ dàng đặt vào một tập lệnh BASH duy nhất, và sau đó, Bob là chú của bạn.

Một lưu ý quan trọng hơn, bạn đã tìm hiểu thêm một chút về cấu hình KVM và vị trí tệp, cách sử dụng virt-clone rất thô sơ, cách gắn đĩa máy ảo và chỉnh sửa dữ liệu trong các phân vùng có liên quan bằng partx, bao gồm cấu hình mạng và máy chủ, và cách gán các trường duy nhất cho miền ảo của bạn. Và cũng có libguestfs. Cộng với một số hướng dẫn rất hữu ích khác. Nói chung, không tệ trong năm phút làm việc.

Cuối cùng, virt-sysprep làm cho việc nhân bản trở nên dễ dàng hơn rất nhiều, tuy nhiên, phương pháp thủ công, mặc dù phức tạp hơn một chút, nhưng lại hoàn toàn có thể thực hiện được. Bạn có thể làm bất cứ điều gì bạn muốn bằng cách sử dụng nó và bạn không bị giới hạn trong một tập hợp con các tùy chọn và công tắc dòng lệnh hiện có. Nó sẽ luôn hoạt động và nó luôn có thể được viết đầy đủ. lộng lẫy.

Vâng, tôi đoán đó sẽ là tất cả.

Chúc mừng.