赞
踩
在centos7环境部署kvm虚拟化
应用场景:
1. 割接
使用新服务器替换老旧的服务器。
2. 迁移
如果坏了,多长时间你能修好?
安装之前,将vmware中虚拟机的虚拟化功能打开,勾选上即可
(生产环境中服务器不需要这样设置)
准备工作: 内存大于8G,添加一个存储,虚拟机CPU虚拟化技术打开。
[root@kvm ~]# lftp 172.16.0.99
lftp 172.16.0.99:~> cd release/
lftp 172.16.0.99:/release> get epel-release-7-6.noarch.rpm
[root@kvm ~]# rpm -ivh epel-release-7-6.noarch.rpm
[root@kvm ~]# yum install -y libvirt-python virt-manager libguestfs-tools virt-install qemu-kvm libvirt bridge-utils kvm
准备一个虚拟机需要的资源:
CPU
直接从宿主机划分。
内存
直接从宿主机划分。
硬盘
使用lv分区方式
[root@kvm ~]# pvcreate /dev/sdb
[root@kvm ~]# vgcreate vgkvm /dev/sdb
[root@kvm ~]# lvcreate -L 50G -n lvkvm vgkvm
[root@kvm ~]# mkfs.xfs /dev/vgkvm/lvkvm
[root@kvm ~]# vim /etc/fstab
/dev/mapper/vgkvm-lvkvm /kvm xfs defaults 0 0
[root@kvm ~]# mkdir /kvm
[root@kvm ~]# mount -a
[root@kvm ~]# df -h | tail -1
/dev/mapper/vgkvm-lvkvm 50G 33M 50G 1% /kvm
如果硬盘有足够的vg空间可以扩容
[root@localhost ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/centos-root 20G 70M 20G 1% /
扩容命令
[root@localhost ~]# lvextend -L 150G -n /dev/mapper/centos-root
为了使扩容分区可以查到,使用这条命令
[root@localhost ~]# xfs_growfs /dev/mapper/centos-root
[root@kvm ~]# mkdir /kvm
[root@kvm ~]# mount -a
[root@kvm ~]# df -h | tail -1
做kvm虚拟机底层存储的有:
(1)分区
/dev/sda5 /dev/sda6
(2)lv
/dev/vgkvm/lv01 , lv02
使用物理层设备做存储,优点是读写速度快,缺点是不能迁移。
(3)文件
raw格式,默认的,基本不用
qcow2格式,用多少,占多少,直到上限 (使用这个方式比较好,跟虚拟机磁盘管理方式一样,用多少涨多少,到上限停止)
[root@kvm /kvm]# qemu-img create -f qcow2 /kvm/node.qcow2 200G
[root@kvm ~]# cd /kvm/
[root@kvm /kvm]# ls
node.qcow2
> lv,一会在使用的时候,会有警告。
[root@kvm /etc/sysconfig/network-scripts]# cp ifcfg-ens32 ifcfg-br0
[root@kvm /etc/sysconfig/network-scripts]# vim ifcfg-ens32
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens32
DEVICE=ens32
ONBOOT=yes
BRIDGE=br0 <--- 改
[root@kvm /etc/sysconfig/network-scripts]# vim ifcfg-br0
TYPE=Bridge <--- 改
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=br0 <--- 改
DEVICE=br0 <--- 改
ONBOOT=yes
IPADDR=172.16.0.29
NETMASK=255.255.0.0
GATEWAY=172.16.0.254
DNS1=211.137.32.178
DNS2=202.96.64.68
[root@kvm ~]# /etc/init.d/network restart
[root@kvm ~]# ifconfig br0
br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.0.29 netmask 255.255.0.0 broadcast 172.16.255.255
安装前确认虚拟机cpu是否开启虚拟化
如下图:
**KS部署端:**确认好硬盘设置是否是vda。(不是sda)
[root@kvm ~]# virt-install --name=node --vcpus 1 --ram 4096 --disk path=/kvm/node.qcow2,device=disk,size=200,format=qcow2,bus=virtio --network bridge=br0 --os-type linux --location 'ftp://172.16.0.99/iso/C7464' --graphics none --console pty,target_type=serial --extra-args='ks=ftp://172.16.0.99/pub/ksC7464.cfg console=ttyS0,115200n8 serial'
--name 指定虚拟机的名字
与存储的名字一致
--vcpus cpu线程数
--ram 内存,M
--disk 硬盘参数
--network 网卡参数
--os-type 安装的系统类型
--location 安装源
--graphics 文本化安装
--console 控制接口参数
--extra-args 安装参数
按键 ctrl ]
退出虚拟控制接口 (相当于切换,正常情况需要先logout登出,然后再切换)
1. 在宿主机连接console接口
只有1个控制台可以连接
[root@kvm ~]# virsh list
Id Name State
----------------------------------------------------
3 node running
查看正在运行的虚拟机
[root@kvm ~]# virsh list --all
查看所有的虚拟机
[root@kvm ~]# virsh console node
2次回车
ks1 login:
配置IP!!!
[root@ks1 ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens3
NAME="ens3"
DEVICE="ens3"
ONBOOT=yes
NETBOOT=yes
IPV6INIT=yes
BOOTPROTO=static
TYPE=Ethernet
IPADDR=172.16.0.239
NETMASK=255.255.0.0
GATEWAY=172.16.0.254
DNS1=211.137.32.178
[root@ks1 ~]# /etc/init.d/network restart
[root@ks1 ~]# ping www.baidu.com
PING www.a.shifen.com (39.156.66.18) 56(84) bytes of data.
64 bytes from 39.156.66.18 (39.156.66.18): icmp_seq=1 ttl=53 time=25.0 ms
记住!!!
退出console接口时,一定要退出虚拟机的登录。
ctrl d 按键
2. ssh
[c:~]$ ssh root@172.16.0.239
进行初始化操作。
虚拟机的开启和关闭:
关闭:
[root@kvm ~]# virsh shutdown node # 关机
[root@kvm ~]# virsh destroy node # 断开电源
启动:
[root@kvm ~]# virsh start node
[root@kvm /etc/libvirt/qemu]# ls
node.xml 配置文件
[root@kvm /kvm]# ls
node.qcow2 存储文件
解读配置文件:
[root@kvm /etc/libvirt/qemu]# vim node.xml
<domain type='kvm'> 类型
<name>node</name> 名字
<uuid>81a03bb4-0b4b-4192-ae26-7eca96172e56</uuid> UUID,唯一标识
<memory unit='KiB'>4194304</memory> 内存
<currentMemory unit='KiB'>4194304</currentMemory> 内存
<vcpu placement='static'>1</vcpu> CPU线程数
<clock offset='utc'> 改--下边改-需要关机改配置文件
utc改成localtime
<disk type='file' device='disk'> 硬盘配置
<driver name='qemu' type='qcow2'/>
<source file='/kvm/node.qcow2'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</disk>
<interface type='bridge'> 网卡配置,类型桥接
<mac address='52:54:00:f6:b8:55'/>
<source bridge='br0'/>
<model type='rtl8139'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
将内存修改为1G
时钟改成本地时区
修改虚拟机的配置,虚拟机一定是处于关机状态
[root@kvm ~]# virsh shutdown node <---先将虚拟机关机
[root@kvm ~]# virsh list --all <--- 查看列表中虚拟机的状态
[root@kvm ~]# export EDITOR=vim <--- 将EDITOR和vim关联,这样用edit编辑时会有颜色显示
[root@kvm ~]# virsh edit node <--- 编辑配置文件
<memory unit='GiB'>1</memory>
<currentMemory unit='GiB'>1</currentMemory>
<clock offset='localtime'>
[root@kvm ~]# virsh start node
[root@node ~]# grep -c "proc" /proc/cpuinfo
1
[root@node ~]# free -m
total
Mem: 992
[root@node ~]# cat /proc/partitions
major minor #blocks name
252 0 209715200 vda
252 1 204800 vda1
252 2 209509376 vda2
253 0 10485760 dm-0
253 1 524288 dm-1
方案1:
node完成初始化的centos7,满足公司内部环境的需求;
满足线上条件,还需要做安全方面的设置。
使用node克隆出所有的虚拟机,然后使用服务的一键安装脚本进行软件部署。
方案2:用这个!
node–第一代模板机
克隆
nginx-temp tomcat-temp mysql-temp …
第二代模板机
用第二代模板机,克隆出需要的节点
(1)制作二代模板机
(2)使用二代模板机克隆出需要的节点
修改虚拟机的IP 主机名
修改虚拟机的CPU和内存
(3)单机一键启动和关闭
(4)分发虚拟机
(5)虚拟机的启动控制脚本
sshpass
手动克隆:
virt-clone -o 模板机名字 -n 虚拟机名字 -f 虚拟机的存储文件的绝对路径
虚拟机必须是关机状态!!!
虚拟机必须是关机状态!!!
[root@kvm ~]# virsh shutdown node
[root@kvm ~]# virsh list
[root@kvm ~]# virt-clone -o node -n nginx-temp -f /kvm/nginx-temp.qcow2
[root@kvm ~]# virt-clone -o node -n tomcat-temp -f /kvm/tomcat-temp.qcow2
[root@kvm ~]# virt-clone -o node -n mysql-temp -f /kvm/mysql-temp.qcow2
[root@kvm ~]# virsh start nginx-temp
[root@kvm ~]# virsh start tomcat-temp
[root@kvm ~]# virsh start mysql-temp
console连接,修改IP
xshell连接,运行nginx、tomcat、mysql的一键安装脚本。
使用二代模板机之前,你要把所有需要准备的东西都想好。
[root@kvm ~]# virsh list --all
Id Name State
----------------------------------------------------
- mysql-temp shut off
- nginx-temp shut off
- node shut off
- tomcat-temp shut off
修改虚拟机的IP 主机名
修改虚拟机的CPU和内存
构建一个节点信息表格。
虚拟机的命名
阶段-功能IP地址最后一位
阶段:DEV UAT PDT
nginx11
nginx12
开始克隆:
脚本1:批量克隆
[root@kvm ~]# mkdir clone-sh
[root@kvm ~]# cd clone-sh/
[root@kvm ~/clone-sh]# ls
[root@kvm ~/clone-sh]# vim vmfile
UAT-nginx31 nginx-temp
UAT-nginx32 nginx-temp
UAT-tomcat41 tomcat-temp
UAT-tomcat42 tomcat-temp
UAT-MySQLA mysql-temp
UAT-MySQLB mysql-temp
UAT-NFS61 node
UAT-NFS62 node
[root@kvm ~/clone-sh]# vim 1-clone-forum.sh
#!/bin/bash
# 克隆出论坛项目需要的虚拟机
qcow2Dir="/kvm"
dir=`pwd`
file="${dir}/vmfile"
while read line
do
vmname=$(echo $line | awk '{print $1}')
tempname=$(echo $line | awk '{print $2}')
virt-clone -o $tempname -n $vmname -f ${qcow2Dir}/${vmname}.qcow2
done < $file
sync
sleep 2
virsh list --all
修改虚拟机的CPU和内存:
以非交互形式,修改UAT-nginx31.xml文件里面的 内存和CPU 的配置。
CPU
sed -r -i "/vcpu/s/[0-9]+/2/" UAT-nginx31.xml
内存
sed -r -i "/emory/s/K/G/" UAT-nginx31.xml
sed -r -i "/emory/s/[0-9]+/2/" UAT-nginx31.xml
脚本化:批量修改虚拟机的CPU和内存。
[root@kvm ~/clone-sh]# vim cpumem
UAT-nginx31 2 1
UAT-nginx32 2 1
UAT-tomcat41 2 1
UAT-tomcat42 2 1
UAT-MySQLA 1 2
UAT-MySQLB 1 2
UAT-NFS61 1 2
UAT-NFS62 1 2
[root@kvm ~/clone-sh]# vim 2-Modify_vmCPUMem.sh
#!/bin/bash
# 修改虚拟机的CPU和内存
dir=`pwd`
file="${dir}/cpumem"
xmldir="/etc/libvirt/qemu"
while read line
do
vmname=$(echo $line | awk '{print $1}')
vmcpu=$(echo $line | awk '{print $2}')
vmmem=$(echo $line | awk '{print $3}')
#修改CPU
sed -r -i "/vcpu/s/[0-9]+/${vmcpu}/" ${xmldir}/${vmname}.xml
#修改内存
sed -r -i "/emory/s/K/G/" ${xmldir}/${vmname}.xml
sed -r -i "/emory/s/[0-9]+/${vmmem}/" ${xmldir}/${vmname}.xml
#重新define,使修改生效
virsh define ${xmldir}/${vmname}.xml
done < $file
修改虚拟机的主机名和IP:
在关机的状态写修改。
虚拟机镜像文件的控管命令:
1. virt-ls
可以查看虚拟机镜像文件里面目录的内容。
[root@kvm ~]# virt-ls -a /kvm/UAT-nginx31.qcow2 /root
2. virt-cat
查看虚拟机镜像文件某个文件的内容
[root@kvm ~]# virt-cat -a /kvm/nginx-temp.qcow2 /etc/passwd
3. virt-edit ★★★★★
修改虚拟机镜像文件里的某个文件内容
[root@kvm ~]# virt-edit -a /kvm/UAT-nginx31.qcow2 /etc/hosts
虚拟机的密码,忘了或前任没和你交接?
[root@kvm ~]# virt-edit -a /kvm/UAT-nginx31.qcow2 /etc/passwd
root::0:0:root:/root:/bin/bash <---将密码占位符x删除掉即可无密码登录系统
4. virt-df
查看虚拟机的分区情况
[root@kvm /kvm]# virt-df -a node.qcow2
5. virt-copy-in
将宿主机的文件拷贝到虚拟机里
6. virt-copy-out
将虚拟机里的文件拷贝到宿主机
[root@kvm ~]# virt-copy-in /root/clone-sh/2-Modify_vmCPUMem.sh -a /kvm/UAT-nginx31.qcow2 /tmp/
[root@kvm ~]# virt-copy-out -a /kvm/UAT-nginx31.qcow2 /etc/passwd /tmp/
注意:拷贝看次数不看大小。
解释说明:拷贝大文件和小文件花费的时间几乎相同,但是如果多个文件拷贝多次,那么花费的时间就会更多
[root@kvm ~/clone-sh]# cat hostname
nginx1
[root@kvm ~/clone-sh]# virt-copy-in hostname -a /kvm/UAT-nginx31.qcow2 /etc/
[root@kvm ~/clone-sh]# virt-cat -a /kvm/UAT-nginx31.qcow2 /etc/hostname
nginx1
[root@kvm ~/clone-sh]# virt-copy-in ifcfg-ens3 -a /kvm/UAT-nginx31.qcow2 /etc/sysconfig/network-scripts/
脚本化:修改虚拟机的主机名和ip地址。
修改/etc/hosts,作业?
[root@kvm ~/clone-sh]# vim iphostname
UAT-nginx31 172.16.0.31 nginx1
UAT-nginx32 172.16.0.32 nginx2
UAT-tomcat41 172.16.0.41 tomcat1
UAT-tomcat42 172.16.0.42 tomcat2
UAT-MySQLA 172.16.0.51 mysqlA
UAT-MySQLB 172.16.0.52 mysqlB
UAT-NFS61 172.16.0.61 NFS1
UAT-NFS62 172.16.0.62 NFS2
[root@kvm ~/clone-sh]# ls hostname ifcfg-ens3
hostname ifcfg-ens3
[root@kvm ~/clone-sh]# cat ifcfg-ens3
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens3
DEVICE=ens3
ONBOOT=yes
IPADDR=172.16.0.31
NETMASK=255.255.0.0
GATEWAY=172.16.0.254
DNS1=211.137.32.178
脚本:
[root@kvm ~/clone-sh]# vim 3-change_vmIPhostname.sh
#!/bin/bash
# 修改虚拟机的主机名和IP
dir=`pwd`
qcow2Dir="/kvm"
file="${dir}/iphostname"
hostfile="${dir}/hostname"
ipfile="${dir}/ifcfg-ens3"
count=$(wc -l < $file)
echo "论坛项目有${count}个虚拟机."
num=1
while read line
do
vmname=$(echo $line | awk '{print $1}')
vmip=$(echo $line | awk '{print $2}')
vmhost=$(echo $line | awk '{print $3}')
echo "修改第${num}个--${vmname}"
# 修改主机名
echo $vmhost > $hostfile
virt-copy-in $hostfile -a ${qcow2Dir}/${vmname}.qcow2 /etc/
# 修改IP
sed -r -i "/^IPADDR/s/IPADDR=.*/IPADDR=${vmip}/" $ipfile
virt-copy-in $ipfile -a ${qcow2Dir}/${vmname}.qcow2 /etc/sysconfig/network-scripts/
let num++
done < $file
[root@kvm ~/clone-sh]# cat start
UAT-NFS61
UAT-NFS62
UAT-MySQLA
UAT-MySQLB
UAT-tomcat41
UAT-tomcat42
UAT-nginx31
UAT-nginx32
[root@kvm ~/clone-sh]# cat shutdown
UAT-nginx31
UAT-nginx32
UAT-tomcat41
UAT-tomcat42
UAT-MySQLA
UAT-MySQLB
UAT-NFS61
UAT-NFS62
[root@kvm ~/clone-sh]# vim 4-start_vm.sh
#!/bin/bash
# 单机一键启动虚拟机
dir=`pwd`
file="${dir}/start"
count=$(wc -l < $file)
echo "论坛项目有${count}个虚拟机."
num=1
while read vmname
do
echo "启动第${num}个虚拟机--$vmname"
virsh start $vmname &> /dev/null
sleep 3
let num++
done < $file
virsh list
[root@kvm ~/clone-sh]# vim 5-shutdown_vm.sh
#!/bin/bash
# 单机一键关闭虚拟机
dir=`pwd`
file="${dir}/shutdown"
count=$(wc -l < $file)
echo "论坛项目有${count}个虚拟机."
num=1
while read vmname
do
echo "关闭第${num}个虚拟机--$vmname"
virsh shutdown $vmname &> /dev/null
sleep 3
let num++
done < $file
sleep 10
virsh list --all
注意:virsh shutdown实现关机功能,需要依赖acpid包,在开始的时候我们已经安装过了.
一个小程序:可以查看当前运行了多少kvm虚拟机
[root@kvm ~/clone-sh]# lftp 172.16.0.99
lftp 172.16.0.99:~> cd scripts/
lftp 172.16.0.99:/scripts> get 9-VM_info.sh
冷迁移: 在虚拟机处于关机状态进行迁移操作。
虚拟机的配置文件和存储文件 scp
qcow2格式的存储文件:
优点:用多少,占多少;
缺点:一直写新块。
解决:
细致化分区。
mysql /var – rpm 创建一个新的lv mount
/data – bin 创建一个新的lv mount
压缩存储文件:
[root@kvm /kvm]# qemu-img convert -c -O qcow2 UAT-MySQLA.qcow2 UAT-MySQLA-Y.qcow2
convert 压缩
-c 创建新的存储文件
-o 指定格式
原始文件
压缩后的新的存储文件
[root@kvm /kvm]# ls -lh UAT-MySQLA*
-rw------- 1 root root 4.3G Dec 19 11:42 UAT-MySQLA.qcow2
-rw-r--r-- 1 root root 1.8G Dec 19 12:10 UAT-MySQLA-Y.qcow2
[root@kvm /kvm]# mv UAT-MySQLA.qcow2 UAT-MySQLA.qcow2.bak ; mv UAT-MySQLA-Y.qcow2 UAT-MySQLA.qcow2
[root@kvm /kvm]# virsh start UAT-MySQLA
启动
连接 都没有问题,说明压缩后的文件是好用的。
[root@kvm /kvm]# rm -f UAT-MySQLA.qcow2.bak
把UAT-MySQLA从宿主机172.16.0.29迁移到宿主机172.16.14.7:
冷迁移,UAT-MySQLA是关机状态。
172.16.0.29:
[root@kvm /kvm]# scp UAT-MySQLA.qcow2 172.16.14.7:/kvm/
[root@kvm /etc/libvirt/qemu]# scp UAT-MySQLA.xml 172.16.14.7:/etc/libvirt/qemu
172.16.14.7:
[root@kvm qemu]# ls
UAT-MySQLA.xml
[root@kvm qemu]# virsh define UAT-MySQLA.xml
克隆 冷迁移
将虚拟机复制一份。
注意:!!!
mysql
[root@mysqlA data]# cat auto.cnf <--- 这个文件要删除掉,重新启动mysql会重新生成新的uuid
[auto]
server-uuid=b2f5956e-2161-11ea-bf03-525400b78919
克隆或冷迁移之后,这个文件要删掉!!!
文件路径:
[root@mysqlA mysql]# find / -name "auto.cnf"
/data/mysql/data/auto.cnf
这种情况一般是拷贝虚拟机时,两个宿主虚拟机内置的机器名字相同导致这个提示
[root@kvm qemu]# virsh define UAT-MySQLA.xml
error: Failed to define domain from UAT-MySQLA.xml
error: operation failed: domain 'UAT-MySQLA' already exists with uuid 43d902b6-2912-486b-89c2-436af326ad91
[root@kvm qemu]# virsh edit UAT-MySQLA
error: operation failed: domain 'UAT-MySQLA' already exists with uuid 43d902b6-2912-486b-89c2-436af326ad91
Failed. Try again? [y,n,i,f,?]: 输入n
error: operation failed: domain 'UAT-MySQLA' already exists with uuid 43d902b6-2912-486b-89c2-436af326ad91
[root@kvm qemu]# cp UAT-MySQLA.xml /tmp/
[root@kvm qemu]# virsh undefine UAT-MySQLA
[root@kvm qemu]# cp /tmp/UAT-MySQLA.xml .
[root@kvm qemu]# vim UAT-MySQLA.xml
将UUID改成和原来不一样就行。
[root@kvm qemu]# virsh define UAT-MySQLA.xml
1. CPU 和内存 已完成 <— 上边已经修改完成
2. 给虚拟机加存储
UAT-NFS62
[root@kvm /kvm]# qemu-img create -f qcow2 nfs62_2.qcow2 100G
[root@kvm /kvm]# virsh edit UAT-NFS62
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/kvm/UAT-NFS62.qcow2'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</disk>
<disk type='file' device='disk'>
<driver name='qemu' type='qcow2'/>
<source file='/kvm/nfs62_2.qcow2'/>
<target dev='vdb' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
</disk>
[root@kvm /kvm]# virsh start UAT-NFS62
[root@kvm /kvm]# virsh console UAT-NFS62
[root@NFS2 ~]# fdisk -l /dev/vda
[root@NFS2 ~]# fdisk -l /dev/vdb
[root@NFS2 ~]# pvcreate /dev/vdb
[root@NFS2 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
sys 1 2 0 wz--n- 199.80g 189.30g
[root@NFS2 ~]# vgextend sys /dev/vdb
[root@NFS2 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
sys 2 2 0 wz--n- <299.80g <289.30g
3. 给虚拟机加网卡
UAT-NFS62 增加一个网卡。
关掉虚拟机。
[root@kvm /kvm]# virsh edit UAT-NFS62
<interface type='bridge'>
<mac address='52:54:00:e5:24:72'/>
<source bridge='br0'/>
<model type='rtl8139'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
<interface type='bridge'>
<mac address='52:54:00:e6:25:73'/>
<source bridge='br0'/>
<model type='rtl8139'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</interface>
[root@kvm /kvm]# virsh start UAT-NFS62
[root@kvm /kvm]# virsh console UAT-NFS62
[root@NFS2 network-scripts]# cp ifcfg-ens3 ifcfg-ens8
[root@NFS2 network-scripts]# vim ifcfg-ens8
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=ens8
DEVICE=ens8
ONBOOT=yes
IPADDR=172.17.0.62
NETMASK=255.255.0.0
[root@NFS2 ~]# /etc/init.d/network restart
应用场景:
网站的静态资源数据如何处理。
文字 小
图片 大
视频 大
与业务沟通 数
跟防火墙"商量",背板带宽是有限的
如果静态资源数据量很大,会堵死防火墙的背板带宽!!!
(1)静态资源数据量不是很高
将所有的节点都放置在防火墙内部,受其保护。
(2)静态资源的数据量很高
将静态资源节点放置在防火墙外部,通过交换机的外网vlan,直连公网。
虚拟机处于运行状态调整硬件配置。
应用场景:
监控收到了资源 灾难级别 的报警。
怎么办?
看着。(kan 一声)
只要不出其他问题,就可以。
前提:
服务器还有资源。
CPU只支持调大,不支持缩小。
查看cpu情况
[root@kvm ~]# lscpu
CPU(s): 4
On-line CPU(s) list: 0-3
编辑对应的配置文件
[root@kvm /etc/libvirt/qemu]# virsh edit UAT-MySQLA
<vcpu placement='auto' current='1'>4</vcpu>
placment='auto' 支持动态调整
current 当前线程数是1
最大支持到4
[root@kvm ~]# virsh start UAT-MySQLA
[root@mysqlA ~]# grep -c "proc" /proc/cpuinfo
1
[root@kvm ~]# virsh setvcpus UAT-MySQLA 2 --live
[root@mysqlA ~]# grep -c "proc" /proc/cpuinfo
2
CPU只支持调大,不支持缩小。
前提:应用程序可以在每个在线的CPU上都得到处理。
可以调大,也可以调小
[root@kvm /etc/libvirt/qemu]# virsh edit UAT-MySQLA
<memory unit='KiB'>2097152</memory> 能够使用的内容的上限
<currentMemory unit='KiB'>2097152</currentMemory> 当前使用的内存
关机改成
<memory unit='GiB'>4</memory>
<currentMemory unit='GiB'>1</currentMemory>
[root@kvm ~]# virsh start UAT-MySQLA
[root@mysqlA ~]# free -m
total
Mem: 879
上调到2G:
[root@kvm ~]# virsh qemu-monitor-command UAT-MySQLA --hmp --cmd balloon 2048
[root@mysqlA ~]# free -m
total
Mem: 1903
上调到2G:
[root@kvm ~]# virsh qemu-monitor-command UAT-MySQLA --hmp --cmd balloon 2048
[root@mysqlA ~]# free -m
total
Mem: 1903
下调到512M:
[root@kvm ~]# virsh qemu-monitor-command UAT-MySQLA --hmp --cmd balloon 512
[root@mysqlA ~]# free -m
total
Mem: 367
当前是1块硬盘 vda
[root@kvm /kvm]# qemu-img create -f qcow2 mysqlA-2.qcow2 100G
将硬盘加入虚拟机,作为第二块硬盘 vdb
[root@kvm ~]# virsh attach-disk UAT-MySQLA --source /kvm/mysqlA-2.qcow2 --target vdb --cache writeback --subdriver qcow2
[root@mysqlA ~]# fdisk -l /dev/vdb
Disk /dev/vdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
删除硬盘:
[root@kvm ~]# virsh detach-disk UAT-MySQLA --target vdb
应用场景:
收到分区空间不足的报警?
了解分区存储的是什么数据?
日志 清除 >
静态数据 拉伸lv
数据库数据 拉伸lv
永久增加一个网卡:(需要重启生效,写入配置文件里)
[root@kvm ~]# virsh domiflist UAT-MySQLA
Interface Type Source Model MAC
-------------------------------------------------------
vnet0 bridge br0 rtl8139 52:54:00:b6:7b:bd
永久增加一个网卡:(需要重启生效,写入配置文件里)
[root@kvm ~]# virsh attach-interface UAT-MySQLA --type bridge --source br0 --config
虚拟机名 虚拟机名.xml
[root@firewall ~]# virsh dumpxml UAT-firewall >/etc/libvirt/qemu/UAT-firewall.xml
或者
[root@kvm ~]# vim /etc/libvirt/qemu/UAT-MySQLA.xml
写入配置文件,需要重启生效。
临时添加一个网卡:(直接就生效了)
临时添加一个网卡:(直接就生效了)
[root@kvm ~]# virsh attach-interface UAT-MySQLA --type bridge --source br0
[root@kvm ~]# virsh domiflist UAT-MySQLA
Interface Type Source Model MAC
-------------------------------------------------------
vnet0 bridge br0 rtl8139 52:54:00:b6:7b:bd
vnet1 bridge br0 rtl8139 52:54:00:da:55:ad
[root@mysqlA ~]# ip a
2: ens3:
3: ens7:
删除网卡:
[root@kvm ~]# virsh detach-interface UAT-MySQLA --type bridge --mac 52:54:00:da:55:ad
一定是在虚拟机关机的状态下,创建快照。
[root@kvm ~]# virsh list --all
创建:
[root@kvm ~]# qemu-img snapshot -c init /kvm/node.qcow2
查看;
[root@kvm ~]# qemu-img snapshot -l /kvm/node.qcow2
使用:
[root@kvm ~]# qemu-img snapshot -a ID号 /kvm/node.qcow2
删除:
[root@kvm ~]# qemu-img snapshot -d ID号 /kvm/node.qcow2
[root@kvm ~]# virt-manager
[root@kvm ~]# yum install -y virt-manager xorg-x11-xauth dejavu-lgc-sans-fonts tigervnc tigervnc-server
[root@kvm ~]# virt-manager
如果无法启动,检查xshell安装是否缺少组件.
应用场景:
(1)当前宿主机硬件(CPU和内存)不足
(2)在线割接
宿主机1:172.16.0.29
宿主机2:172.16.14.7
NFS:172.16.0.30
虚拟机:
存储文件,保存在NFS上。
在宿主机本地,还有一份存储文件。
172.16.0.29:
/kvm 15个虚拟机
172.16.0.29 8个 /kvm 有8个存储文件
172.16.14.7 7个 /kvm 有7个存储文件
NFS的共享目录,挂载到 14.7和0.29 /kvm 上
共享目录里,有15个存储文件。
如果存储节点故障,虚拟机就死了。
因为宿主机本地有一份虚拟机的存储文件,直接重启宿主机,启动虚拟机的初始存储文件,再将数据导入。
两台宿主机,主机名要不一致,写好/etc/hosts!!!
[root@kvm29 ~]# vim /etc/hosts
172.16.0.29 kvm29.up.com kvm29
172.16.14.7 kvm7.up.com kvm7
[root@kvm29 ~]# scp /etc/hosts 172.16.14.7:/etc/
(1)NFS
[root@NFS ~]# yum install -y nfs-utils
[root@NFS ~]# fdisk /dev/sda
[root@NFS ~]# partx -a /dev/sda
[root@NFS ~]# pvcreate /dev/sda3
[root@NFS ~]# vgcreate vgkvm /dev/sda3
[root@NFS ~]# lvcreate -L 50G -n lvkvm vgkvm
[root@NFS ~]# lvcreate -L 1G -n xml vgkvm
[root@NFS ~]# mkfs.xfs /dev/vgkvm/lvkvm
[root@NFS ~]# mkfs.xfs /dev/vgkvm/xml
[root@NFS ~]# vim /etc/fstab
/dev/vgkvm/lvkvm /nfs/qcow2 xfs defaults 0 0
/dev/vgkvm/xml /nfs/xml xfs defaults 0 0
[root@NFS ~]# mkdir -p /nfs/{qcow2,xml}
[root@NFS ~]# mount -a
[root@NFS ~]# df -h | tail -2
/dev/mapper/vgkvm-lvkvm 50G 1.9G 49G 4% /nfs/qcow2
/dev/mapper/vgkvm-xml 1014M 33M 982M 4% /nfs/xml
[root@NFS ~]# chmod 757 /nfs/qcow2/ /nfs/xml/
[root@NFS ~]# vim /etc/exports
/nfs/qcow2 172.16.0.0/16(rw,sync,no_root_squash)
/nfs/xml 172.16.0.0/16(rw,sync,no_root_squash)
[root@NFS ~]# systemctl start nfs
[root@NFS ~]# systemctl enable nfs
(2)宿主机
开始挂载目录
[root@kvm29 ~]# yum install -y nfs-utils
[root@kvm7 ~]# yum install -y nfs-utils
[root@kvm29 ~]# showmount -e 172.16.0.30
Export list for 172.16.0.30:
/nfs/xml 172.16.0.0/16
/nfs/qcow2 172.16.0.0/16
[root@kvm7 ~]# showmount -e 172.16.0.30
Export list for 172.16.0.30:
/nfs/xml 172.16.0.0/16
/nfs/qcow2 172.16.0.0/16
临时挂载到/mnt下,为了将配置文件和磁盘文件拷到nfs共享
[root@kvm29 ~]# mkdir /mnt/{qcow2,xml}
[root@kvm29 ~]# mount 172.16.0.30:/nfs/xml /mnt/xml/
[root@kvm29 ~]# mount 172.16.0.30:/nfs/qcow2 /mnt/qcow2/
保证虚拟机是关机状态!!!
[root@kvm29 /kvm]# cp UAT-MySQLB.qcow2 /mnt/qcow2/
[root@kvm29 /etc/libvirt/qemu]# cp UAT-MySQLB.xml /mnt/xml/
[root@kvm29 ~]# umount /mnt/qcow2/
[root@kvm29 ~]# umount /mnt/xml/
停止虚拟化服务:
[root@kvm29 ~]# systemctl stop libvirtd
[root@kvm7 ~]# systemctl stop libvirtd
正式将/nfs挂载到对应宿主机的目录下,这样每台宿主机都可以获得
[root@kvm29 ~]# mount 172.16.0.30:/nfs/qcow2 /kvm/
[root@kvm29 ~]# mount 172.16.0.30:/nfs/xml /etc/libvirt/qemu
[root@kvm7 ~]# mount 172.16.0.30:/nfs/qcow2 /kvm/
[root@kvm7 ~]# mount 172.16.0.30:/nfs/xml /etc/libvirt/qemu
启动虚拟化服务:
[root@kvm29 ~]# systemctl start libvirtd
[root@kvm7 ~]# systemctl start libvirtd
[root@kvm29 ~]# virsh list --all
Id Name State
----------------------------------------------------
- UAT-MySQLB shut off
[root@kvm7 ~]# virsh list --all
Id Name State
----------------------------------------------------
- UAT-MySQLB shut off
千万不能在2个宿主机启动同一个虚拟机。
3个配置文件
编辑配置文件:
[root@kvm29 ~]# vim /etc/libvirt/libvirtd.conf <---配置安全协议和监听端口,地址
22 listen_tls = 0
33 listen_tcp = 1
45 tcp_port = "16509"
55 listen_addr = "0.0.0.0"
64 mdns_adv = 0
158 auth_tcp = "none"
[root@kvm29 ~]# scp /etc/libvirt/libvirtd.conf 172.16.14.7:/etc/libvirt/
[root@kvm29 ~]# vim /etc/sysconfig/libvirtd
9 LIBVIRTD_ARGS="--listen"
[root@kvm29 ~]# scp /etc/sysconfig/libvirtd 172.16.14.7:/etc/sysconfig/
[root@kvm29 ~]# vim /etc/libvirt/qemu.conf
66 vnc_listen = "0.0.0.0"
[root@kvm29 ~]# scp /etc/libvirt/qemu.conf 172.16.14.7:/etc/libvirt/
[root@kvm29 ~]# systemctl restart libvirtd
[root@kvm7 ~]# systemctl restart libvirtd
[root@kvm29 ~]# netstat -antp | grep 16509
tcp 0 0 0.0.0.0:16509 0.0.0.0:* LISTEN 5385/libvirtd
[root@kvm7 ~]# netstat -antp | grep 16509
tcp 0 0 0.0.0.0:16509 0.0.0.0:* LISTEN 1950/libvirtd
[root@kvm29 ~]# virsh start UAT-MySQLB <---一台启动的vm虚拟机
[root@NFS ~]# ping 172.16.0.52 <---ping的状态为了查看迁移过程中虚拟机是否中断迁移命令
[root@kvm29 ~]# virsh migrate --live --unsafe --persistent UAT-MySQLB qemu+tcp://root@172.16.14.7:16509/system
[root@kvm29 ~]# virsh list --all # 机器现在是关闭状态,开机状态给对方了
Id Name State
----------------------------------------------------
- UAT-MySQLB shut off
[root@kvm7 ~]# virsh list --all # 交给kvm7 运行这台虚拟机了
Id Name State
----------------------------------------------------
3 UAT-MySQLB running
kvm虚拟机的网络:
br0 桥接
virbr0 NAT
[root@kvm /etc/libvirt/qemu/networks]# ls
autostart default.xml
虚拟机的网卡,连接到virbr0
虚拟机可以连接外网
但是外部节点无法连接虚拟机
default active yes yes
[root@kvm ~]# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.000c29ad6032 no ens32
virbr0 8000.5254004a42db yes virbr0-nic
==========================================================
查看当前所有虚拟机的资源消耗情况
[root@kvm ~]# yum install -y virt-top
监控虚拟机消耗的资源。
[root@kvm ~]# virt-top
virt-top 17:29:08 - x86_64 8/8CPU 2266MHz 8191MB 17.1%
16 domains, 2 active, 2 running, 0 sleeping, 0 paused, 14 inactive D:0 O:0 X:0
CPU: 13.4% Mem: 5120 MB (5120 MB by guests)
ID S RDRQ WRRQ RXBY TXBY %CPU %MEM TIME NAME
1 R 0 0 0 0 12.9 50.0 1:39.26 win7
2 R 1 115 664 0 0.5 12.0 0:39.20 UAT-tomcat122
- (UAT-MySQLA)
- (UAT-mysql-22)
- (UAT-mysql131)
- (UAT-mysql132)
- (UAT-nfs141)
- (UAT-nfs142)
- (UAT-nginx111)
- (UAT-nginx112)
- (UAT-tomcat121)
- (mysql-temp)
- (nfs-temp)
- (nginx-temp)
- (node)
- (tomcat-temp)
virsh是kvm虚拟机常用的管理工具,以下是一些常用的命令。
1、查看在运行的虚拟机
virsh list
2、查看创建的所有虚拟机
virsh list --all
3、启动虚拟机
virsh start win10
win10是虚拟机的domain名称,下同。
4、挂起虚拟机
virsh suspend win10
5、恢复被挂起的虚拟机
virsh resume win10
6、开机启动虚拟机,即在虚拟机服务(libvirt)启动的时候,就启动虚拟机。
virsh autostart win10
7、关闭开机启动虚拟机
virsh auto start --disable win10
8、关闭虚拟机(需要ACPID服务的支持,ACPI是Advanced Configuration and PowerInterface缩写,高级配置和电源管理接口)
virsh shutdown win10
9、强制关闭虚拟机,这种方式是从virsh list列表中将虚拟机删除,仍然可以start起来
virsh destory win10
10、启动默认的网络
virsh net-start default
11、自启动默认网络
virsh net-autostart default
12、彻底删除虚拟机步骤
1)关闭虚拟机:virsh destroy win10
2)删除定义:virsh undefine win10
3)删除虚拟机文件(在/var/lib/libvirtd/下的相关文件)
tomcat的8005端口启动不起来的解决办法
修改$JAVA_HOME/jre/lib/security/java.security 文件中 securerandom.source 配置项:
将原本的:securerandom.source=file:/dev/random
修改为: securerandom.source=file:/dev/urandom
保存退出后,使用killall杀掉java进程:
killall java
再重新启动
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。