深入學習KVM

来源:https://www.cnblogs.com/cuiyongchao007/archive/2020/04/18/12723705.html
-Advertisement-
Play Games

深入學習KVM 一、環境準備 | 主機名 | IP | 操作系統 | 記憶體 | 硬碟 | | | | | | | | kvm01 | 10.0.0.11 | centos7 | 4G | 50G | 優化:kvm01在安裝系統的時候,不要使用自動分區,自動分區使用的LVM分區,在使用kvm的時候,特 ...


深入學習KVM

一、環境準備

主機名 IP 操作系統 記憶體 硬碟
kvm01 10.0.0.11 centos7 4G 50G

優化:kvm01在安裝系統的時候,不要使用自動分區,自動分區使用的LVM分區,在使用kvm的時候,特別卡!

  • 關閉selinux關
[root@kvm02 ~]# grep 'SELINUX=disabled' /etc/selinux/config
SELINUX=disabled
  • 閉firewalld
[root@kvm02 ~]# systemctl stop firewalld
[root@kvm02 ~]# systemctl disable firewalld
[root@kvm02 ~]# systemctl status firewalld

安裝kvm管理工具

安裝:
yum install libvirt virt-install qemu-kvm -y
介紹:
libvirt服務:管理kvm虛擬機的生命周期
virt-install工具:創建安裝虛擬機
qemu-kvm工具:使用qemu-img為虛擬機提供硬碟

Linux上幾種虛擬化軟體

  • qemu 軟體純模擬全虛擬化軟體,特別慢!
  • xen 性能特別好,需要使用專門修改之後的內核,相容性差。
  • KVM 需要cpu支持虛擬化,基於內核,不需要使用專門的內核,相容行好,性能較好。

安裝kvm虛擬機準備條件

在window上安裝TightVNC
tightvnc官網:http://www.tightvnc.com

vnc是一個跨平臺的遠程桌面軟體,待會安裝kvm虛擬機系統的時候使用

啟動libvirtd服務
systemctl start libvirtd.service
systemctl status libvirtd.service

安裝虛擬機

建議虛擬機記憶體不要低於1024M,否則安裝系統特別慢!

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos2.raw,format=raw,size=10 --cdrom /opt/CentOS-7.5-x86_64-DVD-1804.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

二、虛擬機的日常管理

日常管理一:

  • 列表list
  • 開機start
  • 關機shutdown
  • 拔電源關機destroy

常用命令:

virsh list --all
virsh destroy centos7
virsh shutdown centos7
virsh start centos7

日常管理二:

  • 導出配置dumpxml
  • 刪除undefine
  • 推薦:先destroy,在undefine
  • 導入配置define
  • 修改配置edit
  • 重命名domrename (註意:低版本不支持)
實例:
virsh dumpxml centos7 >centos7.xml
cat centos7.xml 
[root@kvm02 opt]# virsh define centos7.xml (備份的配置文件)
[root@kvm02 opt]# virsh list --all
mv centos2.raw centos7.raw
virsh edit centos7
virsh start centos7
virsh list --all
[root@kvm02 opt]# virsh domrename centos7 web01
Domain successfully renamed
[root@kvm02 opt]# virsh list --all
[root@kvm02 /]# virsh suspend web01
[root@kvm02 /]# virsh resume web01
[root@kvm02 /]# virsh vncdisplay web01
:0
[root@kvm02 /]# virsh autostart web01
域 web01標記為自動開始
[root@kvm02 /]# virsh autostart --disable web01

三、kvm虛擬機console登陸

1:常規情況下,安裝完 KVM 之後,可能都會通過 VNC 連接到 KVM 虛擬機裡面去修改 IP 等信息。但是一旦虛擬機比較多的話,打開過多的埠會造成安全問題。

2:很多時候,我們是通過跳板機連接的宿主機,你的window和kvm宿主機沒有直達的路由,這時候vnc都用不了,如何快速進入到 KVM 虛擬機裡面去排查問題呢?

在centos7的kvm虛擬機中執行:
grubby --update-kernel=ALL --args="console=ttyS0,115200n8"

reboot重啟生效
使用console登錄:
[root@kvm02 /]# virsh console web01
連接到域 web01
換碼符為 ^]

四、kvm虛擬磁碟格式轉換和快照管理

kvm虛擬機兩種常用的格式

  • raw:裸格式,占用空間比較大,不適合遠程傳輸,不支持快照功能,性能較好
  • qcow2:cow(copy on write)占用空間小,適合傳輸,支持快照,性能比raw差一點點
qemu-img create test.raw 10G
qemu-img info test.raw
qemu-img create -f qcow2 test.qcow2 5G
qemu-img info test.qcow2
qemu-img resize test.qcow2 +10G
qemu-img info test.qcow2 
修改磁碟格式:
qemu-img convert -f raw -O qcow2 test.raw test1.qcow2
[root@kvm02 opt]# qemu-img info test1.qcow2 
案例1:
將現有的虛擬機的磁碟格式由raw轉換為qcow2,並測試運行
qemu-img convert -f raw -O qcow2 centos7.raw web01.qcow2
virsh edit web01
修改磁碟的配置文件
virsh start web01

快照管理:

創建快照
virsh snapshot-create centos7
查看快照
virsh snapshot-list centos7
還原快照
virsh snapshot-revert centos7 --snapshotname 1516574134
刪除快照
virsh snapshot-delete centos7 --snapshotname 1516636570
實例:
虛擬機上創建文件:測試恢復快照後文件消失
dd if=/dev/zero of=/tmp/test.raw bs=100M count=1

virsh snapshot-create web01
virsh snapshot-list web01 
virsh snapshot-revert web01 --snapshotname 1586618763
virsh snapshot-list web01 
virsh snapshot-delete web01 --snapshotname 1586618763
virsh snapshot-list web01 

五、kvm虛擬機的克隆

完整克隆

實現方法:
	virt-clone -o web01 --auto-clone
	virsh dumpxml web01 >web01.xml
    virsh dumpxml web01-clone >web01-clone.xml
    vimdiff web01.xml web01-clone.xml 
    對比克隆前後的配置文件差異
    virsh domrename web01-clone web03
    對克隆機器重命名
    virsh list --all
    virsh edit web03

鏈接克隆
	實現方法:
	shell腳本

完整克隆:(手工克隆)

1:克隆虛擬磁碟文件
cp centos7.qcow2 web03.qcow2
2:生成新的虛擬機配置文件
name修改
uuid刪掉
disk路徑/opt/web03.qcow2
mac地址刪除
3:測試啟動
virsh define  web01.xml
實例:
cp web01.qcow2 web04.qcow2
vim web01.xml
virsh define web01.xml (virsh dumpxml web01 >web01.xml)
virsh list --all
virsh start web04

鏈接克隆

鏈接克隆實戰:
基於原磁碟克隆磁碟:
qemu-img create -f qcow2 -b cetnos7.qcow2 web02.qcow2
創建克隆機器:(區別:--boot hd)
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 1024 --vcpus 1 --disk /opt/web02.qcow2,format=qcow2,size=10 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole

案例:
[root@kvm02 opt]# qemu-img create -f qcow2 -b web01.qcow2 web02.qcow2
[root@kvm02 opt]# qemu-img info web02.qcow2 
[root@kvm02 opt]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 1024 --vcpus 1 --disk /opt/web02.qcow2,format=qcow2,size=10 --boot hd --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
[root@kvm02 opt]# virsh list --all
[root@kvm02 opt]# virsh vncdisplay web02

六、kvm虛擬機的橋接網路

我們運行虛擬機的目的是,在虛擬機中運行我們的業務,現在業務所需要的服務都已經運行了,可是除了在宿主機上能訪問,其他人都訪問不了!!!

創建橋接網路
1:virsh iface-bridge eth0 br0
如果命令創建失敗,可以手工進行創建:
[root@kvm02 opt]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE="br0"(註意點)
[root@kvm02 opt]# cat /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE="br0"
ONBOOT="yes"
TYPE="Bridge"(註意點)
BOOTPROTO="none"
IPADDR="10.0.0.12"
NETMASK="255.255.255.0"
GATEWAY="10.0.0.254"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
DHCPV6C="no"
STP="on"
DELAY="0"
[root@kvm02 opt]# 
基於橋接網路創建虛擬機(區別:--network bridge=br0)
2:virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 1024 --vcpus 1 --disk /opt/web04.qcow2,format=qcow2,size=10 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

將已有的虛機修改為橋接網路
1:virsh edit web02
    <interface type='bridge'>
      <mac address='52:54:00:55:aa:fa'/>
      <source bridge='br0’/>
2:修改虛擬機ip地址
/etc/sysconfig/network-scripts/ifcfg-eth0

kvm NAT模式網路原理圖

kvm 橋接網路原理圖

七、kvm虛擬機的熱添加技術

熱添加技術就是不停機的情況下,線上熱添加硬碟,記憶體,cpu,網卡等設備,熱添加技術一般都是在虛擬機資源不夠了,又不能停機的情況下使用的,熱添加技術是虛擬機相對於物理機的一個很大的優勢,它讓資源分配變得更靈活!

熱添加種類有:

  • 1.熱添加硬碟
  • 2.熱添加網卡
  • 3.熱添加cpu
  • 4.熱添加記憶體

熱添加硬碟

[root@kvm02 opt]# qemu-img create -f qcow2 web02-add.qcow2 10G
[root@kvm02 opt]# virsh attach-disk web02 /opt/web02-add.qcow2 vdb --live --cache=none --subdriver=qcow2
成功附加磁碟
虛擬機上配置:
fdisk /dev/vdb
mkfs.xfs /dev/vdb1
mount /dev/vdb1 /mnt
df -h
磁碟擴容案例:
虛擬機配置:
umount /mnt
宿主機配置:
[root@kvm02 opt]# virsh --help | grep disk
    attach-disk                    附加磁碟設備
    detach-disk                    分離磁碟設備
[root@kvm02 opt]# virsh detach-disk web02 vdb
成功分離磁碟
[root@kvm02 opt]# qemu-img resize web02-add.qcow2 +5G
Image resized.
[root@kvm02 opt]# qemu-img info web02-add.qcow2 
[root@kvm02 opt]# virsh attach-disk web02 /opt/web02-add.qcow2 vdb --live --cache=none --subdriver=qcow2
成功附加磁碟
虛擬機配置:
fdisk /dev/vdb
d(刪除重新配置)
mkfs.xfs /dev/vdb1
partprobe /dev/vdb
xfs_growfs /mnt(ext 格式的需要resize2fs /mnt)
mount /dev/vdb /mnt
df -h

熱添加網卡

添加網卡
virsh attach-interface web02 --type bridge  --model  virtio --source br0

熱添加CPU

安裝參數:
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 1024 --vcpus 1,maxvcpus=4 --disk /opt/web02.qcow2,format=qcow2,size=10 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole

熱添加cpu
virsh setvcpus web02 --count=2

熱添加記憶體:

安裝參數
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web02 --memory 512,maxmemory=2048 --vcpus=1,maxvcpus=2 --disk /opt/web02.qcow2,format=qcow2,size=10 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0  --noautoconsole

熱添加記憶體
virsh setmem web02 1G

八、kvm虛擬機的熱遷移

熱遷移:

相比KVM虛擬機冷遷移中需要拷貝虛擬機虛擬磁碟文件,kvm虛擬機熱遷移無需拷貝虛擬磁碟文件,但是需要遷移到的宿主機之間需要有相同的目錄結構虛擬機磁碟文件,也就是共用存儲,這次通過大家熟悉的nfs來實現,當然也可以採用Glusterfs等分散式文件系統來實現。

上一節我們學習了線上熱添加技術,就很容易理解了。假設我初級只有一臺16G記憶體的物理機,為了充分利用資源,我可能運行了8台2G記憶體的虛擬機,然後訪問量增加,虛擬機的2G記憶體不夠用了,需要擴容,擴容之前我們就需要先遷移一部分虛擬機到其他宿主機上了,有的業務特別核心,暫停的時間不能太長,這時候就要用到我們的熱遷移了。

熱遷移過程:

假設我們有2台宿主機kvm01和kvm02,在kvm01上掛起虛擬機vm01,發送vm的虛擬機配置文件和運行時記憶體中的數據到kvm02, 接受完畢,kvm02恢復vm01,熱遷移完成。

熱遷移環境準備:

主機名 ip 記憶體 網路 軟體需求 虛擬化
kvm01 10.0.0.11 2G 創建br0橋接網卡 kvm和nfs 開啟虛擬化
kvm02 10.0.0.12 2G 創建br0橋接網卡 kvm和nfs 開啟虛擬化
nfs01 10.0.0.31 1G nfs

熱遷移步驟

(一):在kvm01和kvm02上安裝kvm和nfs,配置橋接網卡

yum install libvirt* virt-* qemu-kvm* nfs-utils openssh-askpass -y

systemctl start libvirtd.service

virsh iface-bridge eth0 br0

(二):在nfs01上安裝配置nfs

yum install nfs-utils -y

mkdir /data

vim /etc/exports

/data 10.0.0.0/24(rw,async,no_root_squash,no_all_squash)

systemctl restart rpcbind

systemctl restart nfs

(三):kvm01和kvm02掛載共用目錄/opt

mount -t nfs 10.0.0.31:/data /opt

(四):安裝一臺基於橋接模式的虛擬機

virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name web04 --memory 512,maxmemory=2048 --vcpus 1 --disk /data/web04.qcow2 --boot hd --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
(這裡利用之前保存下來的硬碟,virsh edis web04,將已有的硬碟名稱配置到配置文件中)
熱遷移的命令:
virsh migrate --live --verbose web04 qemu+ssh://10.0.0.12/system --unsafe
將宿主機10.0.0.11上的kvm虛擬機web04遷移到10.0.0.12

(五):在kvm01上安裝圖形界面、vnc服務端和virt-manager

yum groups install "GNOME Desktop" -y

yum install tigervnc-server.x86_64 -y

yum install virt-manager -y

六:啟動vnc服務端

vncserver :1 啟動5901埠的vnc服務端

vncserver -kill :1 關閉5901埠的vnc服務端

七:使用vnc連接宿主機,使用virt-manager進行遷移

這時候會提醒輸入密碼,就是之前第6步的時候設置的vnc連接密碼

![1587143636550](

連接成功。

在遷移的過程中,使用ping虛擬機的ip,發現只丟了一個包 。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 只讀的自動屬性 通過聲明只有get訪問器的自動屬性,實現該屬性只讀 public string FirstName { get; } public string LastName { get; } 自動只讀屬性在能在構造函數中賦值,任何其他地方的賦值都會報編譯錯誤。 自動屬性初始化器 在聲明自動屬性 ...
  •  <import name="address" src="../Common/ui/h-ui/advance/c_address"></import> <template> <div class="container"> <address header-text="聯繫作者" header-sty ...
  • 護照資料也下方的兩行成為MRZ碼(或護照機讀碼),每行44個字元(0 9,A Z,<),如下例: 1 2 3 4 5 6 7 8 9 101 2 3 4 5 6 7 8 9 201 2 3 4 5 6 7 8 9 301 2 3 4 5 6 7 8 9 401 2 3 4 P O C H N Z H ...
  • 前幾天要做一個數據導出Excel 我就打算寫一個通用的。 這樣一來用的時候也方便,數據主要是通過Orm取的List。這樣寫一個通用的剛好。 public static void ListToExcel(List<dynamic> ts, string[] RowName, string[] List ...
  • 最近很對朋友、同事問起,vs怎麼自動把css、js合併壓縮,所以這裡簡單說說介紹 插件功能、特征說明: 1、將CSS,JavaScript或HTML文件捆綁到單個輸出文件中 2、保存源文件會自動觸發重新捆綁 3、縮小單個或捆綁的CSS,JavaScript和HTML文件 4、支持globbing模式 ...
  • 測試代碼: 1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Data; 5 using System.Drawing; 6 using System.L ...
  • 檢索 COM 類工廠中 CLSID 為 {000209FF-0000-0000-C000-000000000046} 的組件時失敗,原因是出現以下錯誤: 80070005 報錯信息為:檢索 COM 類工廠中 CLSID 為 {000209FF-0000-0000-C000-000000000046} ...
  • 本文將介紹如何在.NET Core3環境下使用MVVM框架Prism基於區域Region的導航系統 在講解Prism導航系統之前,我們先來看看一個例子,我在之前的demo項目創建一個登錄界面: 我們看到這裡是不是一開始想象到使用WPF帶有的導航系統,通過Frame和Page進行頁面跳轉,然後通過導航 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...