在公司工作時出現了這樣一個需求:需要在一台服務器中安裝兩個系統,分別部署不同的服務,設置不同的系統時間,並且兩個系統之間可以互相通訊。在網上查詢相關資料后,決定通過KVM實現該功能,現將步驟記錄如下。
我這邊服務器用的是CentOs7.2版本。虛擬機也使用相同版本。主機名hls 、IP:192.168.1.11。
虛擬機主機名hls01
一、安裝前准備
1、 查看CPU是否支持KVM
(e)grep -E '(vmx|svm)' /proc/cpuinfo
如果出現vmx 則表示支持
2、 關閉SELinux
將 /etc/sysconfig/selinux 中的 SELinux=enforcing 修改為 SELinux=disabled
3、 安裝KVM需要的軟件包
yum install kvm libvirt kmod-kvm qemu-kvm virt-manager bride-utils virt-install
其中:virt-manager是GUI管理窗口,bridge-utils 用於網絡橋接qemu-kvm用來創建虛擬機硬盤,libvirt用來管理虛擬機 virt-install 用來創建虛擬機
4、 安裝完成檢查模塊是否有加載。
lsmod | grep kvm
5、 檢查KVM是否安裝成功
virsh -c qemu:///system list
6、 開啟KVM服務並且設置其開機啟動
systemctl start libvirtd
systemctl enable libvirtd
查看KVM狀態操作結果
systemctl status libvirtd
systemctl is-enabled libvirtd
7、 網卡配置
啟動libvirtd,並將它設為開機啟動,啟動后使用ifconfig查看發現會自動建立一個名稱為virbr0的虛擬網橋,ip默認為192.168.122.1/24,說明libvirtd啟動成功,如果默認沒有ifconfig命令,使用yum install -y net-tools安裝。在多網卡情況下,此網橋默認與eth1網卡綁定。為了向虛擬機提供聯網功能,KVM使用virbr0作為默認網絡設備,因此在實際應用中,需要將virbr0與連接到實際網絡的網卡綁定。
1) 添加網橋br0
vi /etc/sysconfig/network-scripts/ifcfg-br0
TYPE=bridge
BOOTPROTO=static
NM_CONTROLLED=yes
NAME= br0
DEVICE= br0
ONBOOT=yes
IPADDR=192.168.1.12
GATEWAY=192.168.1.1
DNS1=192.168.1.1
也可以根據自己需要設置成自動獲取
vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=dhcp
然后修改本機的物理網卡
vi /etc/sysconfig/network-scripts/ifcfg-eth0
在最后面添加 BRIDGE=br0
重啟網卡 service network restart
現在訪問電腦 使用192.168.1.12就可以了。
二、使用KVM創建虛擬機
1、 創建安裝硬盤
使用qemu命令創建一個10G的硬盤(最小10G,可以更多這塊硬盤空間就是虛擬機系統硬盤總空間),我這邊硬盤的名稱為: CentOS-7-x86_64.raw
qemu-img create -f raw /opt/CentOS-7-x86_64.raw 10G
查看硬盤 ll -h /opt
2、 創建虛擬機
先在根目錄下創建一個ISO的目錄文件夾用來存放CentOS7的ISO文件
mkdir ISO
virt-install --virt-type kvm --name CentOS-7-x86_64 --ram 1024 --cdrom=/root/ISO/OracleLinux-R7-U2-Server-x86_64-dvd.iso --disk path=/opt/CentOS-7-x86_64.raw --network network=default --graphics vnc,listen=0.0.0.0 –-noautoconsole
其中CentOS-7-x86_64是虛擬機的名稱 可以自己隨便定 –cdrom 是我們放的ISO文件的路徑 –disk path 是我們創建的硬盤路徑。
但是我這邊在執行的時候出現了一個錯誤
Permission denied 。最開始我以為是ISO文件沒有權限,但是授權之后仍然出現這個問題於是在網上找資料,最終發現是需要修改/etc/libvirt/qemu.conf 配置文件。
vi /etc/libvirt/qemu.conf
需要配置qemu進程的用戶和組相關配置,可根據自己的實際情況進行修改,這邊我將user和group都設置成root:
配置修改完成后,需要重啟libvirtd服務
service libvirtd restart
然后再重新執行上一步就會發現已經開始安裝了
這時候使用TightVNC工具 連接主機IP 192.168.1.12
進去之后就是CentOS7的安裝界面,一步步安裝就行了。
還有一種方法是先不創建虛擬機硬盤 直接在命令中指定
mkdir –p /home/iso 將iso文件上傳到目錄下
mkdir -p /home/kvm-bak 創建虛擬機文件存放路徑
創建虛擬機
virt-install -n hls01 -r 2048 --disk /home/kvm-bak/hls01.img,format=qcow2,size=20 --network bridge=br0 --os-type=linux --os-variant=none --cdrom /home/iso/ OracleLinux-R7-U2-Server-x86_64-dvd.iso --vnc --vncport=5910 --vnclisten=0.0.0.0
然后就可以用VNC Viewer連接一步步安裝。
安裝中間出現的問題:使用VNC工具連接到虛擬機直接是黑屏,沒法顯示安裝界面。
這里困擾我幾天,找了各種資料、修改了很多配置文件、安裝很多包都沒有解決。最后偶然發現是我的Linux系統內核問題。我這邊使用的是Oracle版本的CentOS系統,默認的是3.8的uek內核與VNC圖形不匹配。改成3.10的Red Hat 內核就行。如果是原版的CentOS系統就直接沒有這個問題。算是我給自己挖的坑。
解決方法是將默認內核修改步驟如下:
cat /boot/grub2/grub.cfg |grep menuentry 查看系統可用內核
grub2-editenv list 查看系統默認內核
grub2-set-default 'Oracle Linux Server (3.10.0-327.el7.x86_64 with Linux) 7.2' 修改系統默認內核
grub2-editenv list 查看修改結果
三、虛擬機的配置工作
1、查看虛擬機信息
當KVM中的虛擬機啟動后,可以在/etc/libvirt/qemu目錄下,看到啟動的虛擬機的信息
使用命令 virsh edit CentOS-7-x86_64 我們可以看到更多信息並且可以修改。
2、配置網卡
我們可以在安裝虛擬機系統時指定使用橋接模式 br0
如果我們已經安裝好系統就需要在其XML配置文件中修改。
virsh edit CentOS-7-x86_64
將 type 改為bridge network=’default’改為bridge=’br0’
修改完成后需要重啟虛擬機
virsh shutdown CentOS-7-x86_64 ##關閉虛擬機
virsh list --all ##查看所有虛擬機狀態
virsh start CentOS-7-x86_64 ##啟動虛擬機
主機就可以和虛擬機之間相互通訊了。也可以用SSH連接虛擬機。
3、 CPU熱添加(KVM支持CPU的熱添加,不過局限是宿主機和虛擬機的系統相同才行,這里宿主機是CentOS7,虛擬機也是CentOS7,所以可以模擬CPU熱添加,不過真實生產環境不建議這樣操作)
virsh edit CentOS-7-x86_64
將 <vcpu placement='static'>1</vcpu> 修改為:
<vcpu placement='auto' current="1">4</vcpu>
意思是當前cpu為1核,最多可以有4核,修改完虛擬機的配置文件,必須關閉虛擬機再啟動,配置才能生效
在主機上通過命令添加核數
virsh setvcpus CentOS-7-x86_64 2 --live ##虛擬機的cpu添加到2core
再通過VNC工具查看虛擬機CPU信息
4、 內存熱添加
查看當前虛擬機內存
virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd info balloon
修改當前虛擬機內存為512(可根據實際需要調大或者調小虛擬機內存)
virsh qemu-monitor-command CentOS-7-x86_64 --hmp --cmd balloon 512
四、遷移虛擬機
虛擬機建好后,最大的好處就是任由我們折騰,而不用擔心重裝系統的麻煩。所以一定要知道虛擬機怎么復制遷移,這里有兩種情況,一種是本機上鏡像復制,另一種是將本機鏡像遷移到其他服務器上
1、 本機復制
先關閉虛擬機 virsh shutdown CentOS-7-x86_64
創建一個克隆的虛擬機硬盤 mkdir -p /home/kvm-img
使用 virt-clone 克隆CentOS-7-x86_64為新的虛擬機
virt-clone -o CentOS-7-x86_64 -n CentOS-7-x86_64_01 -f /home/kvm-img/ CentOS-7-x86_64_01.img
克隆完成 使用 virsh list –all 查看虛擬機的狀態
開啟CentOS-7-x86_64_01然后修改IP地址主機名
virsh start CentOS-7-x86_64_01
hostname hls02
vi /etc/hostname
重啟虛擬機 reboot
2、 將虛擬機鏡像(CentOS-7-x86_64_01)遷移到其他服務器上
先找到虛擬機的配置文件和鏡像文件的位置然后將CentOS-7-x86_64_01.img放到新服務器的/home/kvm-img目錄下,將CentOS-7-x86_64_01.xml放到 /etc/libvirt/qemu 目錄中
都改名為CentOS-7-x86_64_02
復制一個 CentOS-7-x86_64_02.xml 將里面所有CentOS-7-x86_64_01替換為CentOS-7-x86_64_02,然后把UUID換為新的 同時注意xml中的source file 文件路徑要修改。
定義新的虛擬機 virsh define /etc/libvirt/qemu/ CentOS-7-x86_64_02.xml
按照需要修改IP,主機名然后重啟就行了。
3、刪除虛擬機
如果虛擬機在工作中可以先關閉也可以直接destroy然后再undefine移除
virsh destroy CentOS-7-x86_64
virsh undefine CentOS-7-x86_64
如果虛擬機已經關閉直接undefine 移除就行
再刪除相應的文件
/var/lib/libvirt/images/CentOS-7-x86_64
/etc/libvirt/qemu/CentOS-7-x86_64