上传文件至 'MD'
This commit is contained in:
parent
c53aa1ba42
commit
c766934b96
|
@ -0,0 +1,587 @@
|
||||||
|
<h1><center>KVM进阶使用</center></h1>
|
||||||
|
|
||||||
|
**作者:行癫(盗版必究)**
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
## 一:KVM克隆
|
||||||
|
|
||||||
|
#### 1.图形化管理方式
|
||||||
|
|
||||||
|
关闭要克隆的虚拟机,右键点击虚拟机选择Clone
|
||||||
|
|
||||||
|
<img src="D:\行癫kubernetes\虚拟化技术\KVM进阶使用.assets\image-20220711223317768.png" alt="image-20220711223317768" style="zoom:50%;" />
|
||||||
|
|
||||||
|
#### 2.字符终端
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost ~]# virt-clone -o centos7.0 -n xingdian -f /var/lib/libvirt/images/xingdian.qcow2
|
||||||
|
Allocating 'xingdian.qcow2' | 10 GB 00:00:03
|
||||||
|
|
||||||
|
Clone 'xingdian' created successfully.
|
||||||
|
|
||||||
|
注意:
|
||||||
|
-o:需要克隆的虚拟机名字
|
||||||
|
-n:克隆后虚拟机的名字
|
||||||
|
-f:指定克隆后的镜像文件
|
||||||
|
```
|
||||||
|
|
||||||
|
验证:
|
||||||
|
|
||||||
|
<img src="D:\行癫kubernetes\虚拟化技术\KVM进阶使用.assets\image-20220711223701321.png" alt="image-20220711223701321" style="zoom:50%;" />
|
||||||
|
|
||||||
|
## 二:KVM网络
|
||||||
|
|
||||||
|
#### 1.NAT网络拓扑
|
||||||
|
|
||||||
|
![file://C:\Users\huawei\AppData\Local\Temp\ct_tmp/1.png](D:\行癫kubernetes\虚拟化技术\KVM进阶使用.assets\1.png)
|
||||||
|
|
||||||
|
注意:
|
||||||
|
|
||||||
|
默认情况下使用的就是NAT网络模式
|
||||||
|
|
||||||
|
#### 2.桥接网络拓扑
|
||||||
|
|
||||||
|
![file://C:\Users\huawei\AppData\Local\Temp\ct_tmp/1.png](D:\行癫kubernetes\虚拟化技术\KVM进阶使用.assets\1-16575503229552.png)
|
||||||
|
|
||||||
|
#### 3.网络相关基本命令
|
||||||
|
|
||||||
|
查看一个guest主机的网络接口信息:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost ~]# virsh domiflist xingdian
|
||||||
|
Interface Type Source Model MAC
|
||||||
|
-------------------------------------------------------
|
||||||
|
- network default virtio 52:54:00:89:aa:71
|
||||||
|
```
|
||||||
|
|
||||||
|
列出运行网络信息:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost ~]# virsh net-list
|
||||||
|
Name State Autostart Persistent
|
||||||
|
----------------------------------------------------------
|
||||||
|
default active yes yes
|
||||||
|
```
|
||||||
|
|
||||||
|
列出网络详细信息:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost ~]# virsh net-info default
|
||||||
|
Name: default
|
||||||
|
UUID: cdea1242-f581-4624-86d7-c52629b52774
|
||||||
|
Active: yes
|
||||||
|
Persistent: yes
|
||||||
|
Autostart: yes
|
||||||
|
Bridge: virbr0
|
||||||
|
```
|
||||||
|
|
||||||
|
导出默认网络信息:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost ~]# virsh net-dumpxml default > default.xml
|
||||||
|
[root@localhost ~]# cat default.xml
|
||||||
|
<network>
|
||||||
|
<name>default</name>
|
||||||
|
<uuid>cdea1242-f581-4624-86d7-c52629b52774</uuid>
|
||||||
|
<forward mode='nat'>
|
||||||
|
<nat>
|
||||||
|
<port start='1024' end='65535'/>
|
||||||
|
</nat>
|
||||||
|
</forward>
|
||||||
|
<bridge name='virbr0' stp='on' delay='0'/>
|
||||||
|
<mac address='52:54:00:10:80:ce'/>
|
||||||
|
<ip address='192.168.122.1' netmask='255.255.255.0'>
|
||||||
|
<dhcp>
|
||||||
|
<range start='192.168.122.2' end='192.168.122.254'/>
|
||||||
|
</dhcp>
|
||||||
|
</ip>
|
||||||
|
</network>
|
||||||
|
```
|
||||||
|
|
||||||
|
生成网络xml文件:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost ~]# cp default.xml xingdian.xml
|
||||||
|
[root@localhost ~]# cat xingdian.xml
|
||||||
|
<network>
|
||||||
|
<name>xingdian</name>
|
||||||
|
<uuid>cdea1242-f581-4624-86d7-c52629b52794</uuid>
|
||||||
|
<forward mode='nat'>
|
||||||
|
<nat>
|
||||||
|
<port start='1024' end='65535'/>
|
||||||
|
</nat>
|
||||||
|
</forward>
|
||||||
|
<bridge name='virbr1' stp='on' delay='0'/>
|
||||||
|
<mac address='52:54:00:10:81:ce'/>
|
||||||
|
<ip address='10.0.1.1' netmask='255.255.255.0'>
|
||||||
|
<dhcp>
|
||||||
|
<range start='10.0.1.2' end='10.0.1.254'/>
|
||||||
|
</dhcp>
|
||||||
|
</ip>
|
||||||
|
</network>
|
||||||
|
```
|
||||||
|
|
||||||
|
利用xml生成新的文件:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost ~]# virsh net-create xingdian.xml
|
||||||
|
Network xingdian created from xingdian.xml
|
||||||
|
```
|
||||||
|
|
||||||
|
开启持久化网络:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost ~]# virsh net-define xingdian.xml //利用xml文件开启
|
||||||
|
Network xingdian defined from xingdian.xml
|
||||||
|
[root@localhost ~]# virsh net-list
|
||||||
|
Name State Autostart Persistent
|
||||||
|
----------------------------------------------------------
|
||||||
|
default active yes yes
|
||||||
|
diandian active yes yes
|
||||||
|
xingdian active no yes
|
||||||
|
```
|
||||||
|
|
||||||
|
取消持久化网络:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost ~]# virsh net-undefine xingdian
|
||||||
|
Network xingdian has been undefined
|
||||||
|
|
||||||
|
[root@localhost ~]# virsh net-list
|
||||||
|
Name State Autostart Persistent
|
||||||
|
----------------------------------------------------------
|
||||||
|
default active yes yes
|
||||||
|
diandian active yes yes
|
||||||
|
xingdian active no no
|
||||||
|
```
|
||||||
|
|
||||||
|
自启动网络:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost ~]# virsh net-autostart --disable diandian
|
||||||
|
Network diandian unmarked as autostarted
|
||||||
|
|
||||||
|
[root@localhost ~]# virsh net-list --all
|
||||||
|
Name State Autostart Persistent
|
||||||
|
----------------------------------------------------------
|
||||||
|
default active yes yes
|
||||||
|
diandian active no yes
|
||||||
|
xingdian active no no
|
||||||
|
[root@localhost ~]# virsh net-autostart --network diandian
|
||||||
|
Network diandian marked as autostarted
|
||||||
|
|
||||||
|
[root@localhost ~]# virsh net-list --all
|
||||||
|
Name State Autostart Persistent
|
||||||
|
----------------------------------------------------------
|
||||||
|
default active yes yes
|
||||||
|
diandian active yes yes
|
||||||
|
xingdian active no no
|
||||||
|
```
|
||||||
|
|
||||||
|
查看虚拟机IP地址:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost ~]# virsh dumpxml xingdian | grep mac
|
||||||
|
<partition>/machine</partition>
|
||||||
|
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
|
||||||
|
<mac address='52:54:00:89:aa:71'/>
|
||||||
|
[root@localhost ~]# arp -a | grep 52:54:00:89:aa:71
|
||||||
|
? (192.168.122.54) at 52:54:00:89:aa:71 [ether] on virbr0
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 4.创建桥接网络
|
||||||
|
|
||||||
|
创建桥接网卡br0,把br0作为网桥使用,绑定enp2s0到br0网桥:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost ~]# virsh iface-bridge ens33 br0
|
||||||
|
```
|
||||||
|
|
||||||
|
执行上述命令,实际上就是在/etc/sysconfig/networking-script目录下增加一个虚拟网桥 br0,文件名称为ifcfg-br0
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost network-scripts]# cat ifcfg-br0
|
||||||
|
DEVICE="br0"
|
||||||
|
ONBOOT="yes"
|
||||||
|
TYPE="Bridge"
|
||||||
|
BOOTPROTO="dhcp"
|
||||||
|
IPV6INIT="yes"
|
||||||
|
IPV6_AUTOCONF="yes"
|
||||||
|
DHCPV6C="no"
|
||||||
|
STP="on"
|
||||||
|
DELAY="0"
|
||||||
|
```
|
||||||
|
|
||||||
|
查看网卡配置文件
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost network-scripts]# cat ifcfg-ens33
|
||||||
|
DEVICE="ens33"
|
||||||
|
ONBOOT="yes"
|
||||||
|
BRIDGE="br0"
|
||||||
|
```
|
||||||
|
|
||||||
|
重启网络:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost network-scripts]# systemctl restart network
|
||||||
|
```
|
||||||
|
|
||||||
|
查看桥接:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost network-scripts]# brctl show
|
||||||
|
bridge name bridge id STP enabled interfaces
|
||||||
|
br0 8000.000c29f4ba45 yes ens33
|
||||||
|
vnet1
|
||||||
|
virbr0 8000.5254001080ce yes virbr0-nic
|
||||||
|
vnet0
|
||||||
|
virbr1 8000.5254001081ce yes virbr1-nic
|
||||||
|
virbr2 8000.525400035e3c yes virbr2-nic
|
||||||
|
```
|
||||||
|
|
||||||
|
使用桥接:
|
||||||
|
|
||||||
|
![image-20220712010957461](D:\行癫kubernetes\虚拟化技术\KVM进阶使用.assets\image-20220712010957461.png)
|
||||||
|
|
||||||
|
![image-20220712011322733](D:\行癫kubernetes\虚拟化技术\KVM进阶使用.assets\image-20220712011322733.png)
|
||||||
|
|
||||||
|
## 三:KVM快照
|
||||||
|
|
||||||
|
#### 1.图形化方式
|
||||||
|
|
||||||
|
![image-20220712011431460](D:\行癫kubernetes\虚拟化技术\KVM进阶使用.assets\image-20220712011431460.png)
|
||||||
|
|
||||||
|
#### 2.命令方式
|
||||||
|
|
||||||
|
为虚拟机创建快照:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost ~]# virsh snapshot-create-as xingdian xingdian.snap
|
||||||
|
Domain snapshot xingdian.snap created
|
||||||
|
```
|
||||||
|
|
||||||
|
查看镜像信息:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost ~]# qemu-img info /var/lib/libvirt/images/xingdian.qcow2
|
||||||
|
image: /var/lib/libvirt/images/xingdian.qcow2
|
||||||
|
file format: qcow2
|
||||||
|
virtual size: 10G (10737418240 bytes)
|
||||||
|
disk size: 1.5G
|
||||||
|
cluster_size: 65536
|
||||||
|
Snapshot list:
|
||||||
|
ID TAG VM SIZE DATE VM CLOCK
|
||||||
|
1 xingdian.snap 248M 2022-07-12 01:16:13 00:40:55.839
|
||||||
|
Format specific information:
|
||||||
|
compat: 1.1
|
||||||
|
lazy refcounts: true
|
||||||
|
```
|
||||||
|
|
||||||
|
虚拟机增加内容,创建快照:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost ~]# touch a.txt
|
||||||
|
[root@localhost ~]# virsh snapshot-create-as xingdian xingdian.snap2
|
||||||
|
Domain snapshot xingdian.snap2 created
|
||||||
|
```
|
||||||
|
|
||||||
|
关闭虚拟机,恢复到第一个快照:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost ~]# virsh shutdown xingdian
|
||||||
|
Domain xingdian is being shutdown
|
||||||
|
[root@localhost ~]# virsh snapshot-revert xingdian xingdian.snap
|
||||||
|
```
|
||||||
|
|
||||||
|
验证:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost ~]# virsh list
|
||||||
|
Id Name State
|
||||||
|
----------------------------------------------------
|
||||||
|
6 xingdian running
|
||||||
|
|
||||||
|
[root@localhost ~]# ssh 192.168.122.54
|
||||||
|
root@192.168.122.54's password:
|
||||||
|
Last login: Tue Jul 12 00:56:36 2022 from 192.168.122.1
|
||||||
|
[root@localhost ~]# ls
|
||||||
|
anaconda-ks.cfg
|
||||||
|
```
|
||||||
|
|
||||||
|
注意:
|
||||||
|
|
||||||
|
没有a.txt代表恢复快照成功
|
||||||
|
|
||||||
|
## 四:脚本管理KVM
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@localhost ~]# cat kvm-manager.sh
|
||||||
|
#!/bin/bash
|
||||||
|
#kvm manager
|
||||||
|
#by xingdian.
|
||||||
|
#for centos7
|
||||||
|
|
||||||
|
images_dir=/var/lib/libvirt/images
|
||||||
|
xml_dir=/etc/libvirt/qemu
|
||||||
|
red_col="\e[1;31m"
|
||||||
|
blue_col="\e[1;34m"
|
||||||
|
reset_col="\e[0m"
|
||||||
|
|
||||||
|
centos6u8_base_img=centos6u8_base.qcow2
|
||||||
|
centos7u3_base_img=centos7u3_base.qcow2
|
||||||
|
win7_base_img=win7_base.qcow2
|
||||||
|
|
||||||
|
centos6u8_base_xml=centos6u8_base.xml
|
||||||
|
centos7u3_base_xml=centos7u3_base.xml
|
||||||
|
win7_base_xml=win7_base.xml
|
||||||
|
|
||||||
|
menu() {
|
||||||
|
cat <<-EOF
|
||||||
|
+------------------------------------------------+
|
||||||
|
| |
|
||||||
|
| ====================== |
|
||||||
|
| 虚拟机基本管理 v4.0 |
|
||||||
|
| by xingdian |
|
||||||
|
| ====================== |
|
||||||
|
| 1. 安装KVM |
|
||||||
|
| 2. 安装或重置CentOS-6.8 |
|
||||||
|
| 3. 安装或重置CentOS-7.3 |
|
||||||
|
| 4. 安装或重置Windows-7 |
|
||||||
|
| 5. 删除所有虚拟机 |
|
||||||
|
| q. 退出管理程序 |
|
||||||
|
| |
|
||||||
|
+------------------------------------------------+
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
kvm_install_hint() {
|
||||||
|
systemctl libvirtd status &>/dev/null
|
||||||
|
if [ $? -ne 0 ];then
|
||||||
|
echo -e "${red_col}未安装KVM软件或未启动libvirtd进程,请检查${reset_col}"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
download_kvm_script() {
|
||||||
|
wget -O /root/Desktop/virt-manager.desktop ftp://10.18.40.100/kvm/virt-manager.desktop &>/dev/null
|
||||||
|
wget -O /root/Desktop/Readme.txt ftp://10.18.40.100/kvm/readme.txt &>/dev/null
|
||||||
|
chmod a+x /root/Desktop/virt-manager.desktop &>/dev/null
|
||||||
|
|
||||||
|
wget -O /root/桌面/virt-manager.desktop ftp://10.18.40.100/virt-manager.desktop &>/dev/null
|
||||||
|
wget -O /root/桌面/Readme.txt ftp://10.18.40.100/kvm/readme.txt &>/dev/null
|
||||||
|
chmod a+x /root/桌面/virt-manager.desktop &>/dev/null
|
||||||
|
|
||||||
|
wget -O /usr/local/sbin/kvm-manager ftp://10.18.40.100/kvm/kvm-manager.sh &>/dev/null
|
||||||
|
chmod a+x /usr/local/sbin/kvm-manager &>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
conn_test() {
|
||||||
|
ping -c1 10.18.40.100 &>/dev/null
|
||||||
|
if [ $? -ne 0 ];then
|
||||||
|
echo -e "${red_col}无法访问10.18.40.100, 请检查网络或稍后再试!${reset_col}"
|
||||||
|
echo
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
menu
|
||||||
|
|
||||||
|
while :
|
||||||
|
do
|
||||||
|
|
||||||
|
echo -en "${blue_col}请选择相应的操作[1-7], 显示菜单[m]: ${reset_col}"
|
||||||
|
read choose
|
||||||
|
|
||||||
|
case $choose in
|
||||||
|
1)
|
||||||
|
conn_test
|
||||||
|
download_kvm_script
|
||||||
|
|
||||||
|
read -p "确认开始安装KVM [y]: " kvm_install
|
||||||
|
if [ ! "${kvm_install}" = "y" ];then
|
||||||
|
echo -e "$red_col输入不正确! $reset_col"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
rpm -q virt-manager &>/dev/null
|
||||||
|
if [ $? -ne 0 ];then
|
||||||
|
echo "开始安装KVM......"
|
||||||
|
yum -y groupinstall "virtual*"
|
||||||
|
systemctl start libvirtd
|
||||||
|
systemctl enable libvirtd
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
echo "-----------------------------------------------------------"
|
||||||
|
echo "KVM 安装完成,请查看桌面上的Readme文件..."
|
||||||
|
echo "-----------------------------------------------------------"
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
conn_test
|
||||||
|
download_kvm_script
|
||||||
|
|
||||||
|
read -p "确认重置CentOS 6.8 虚拟机吗?[y]: " rebuild_centos6u8
|
||||||
|
if [ ! "${rebuild_centos6u8}" = "y" ];then
|
||||||
|
echo -e "$red_col输入不正确! $reset_col"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f ${images_dir}/${centos6u8_base_img} ];then
|
||||||
|
echo "正在下载镜像文件,请稍候......"
|
||||||
|
wget -O ${images_dir}/${centos6u8_base_img} ftp://10.18.40.100/kvm/base_image/${centos6u8_base_img}
|
||||||
|
fi
|
||||||
|
|
||||||
|
for i in {1..5}
|
||||||
|
do
|
||||||
|
vm_name=centos6u8-${i}
|
||||||
|
vm_uuid=$(uuidgen)
|
||||||
|
vm_disk=${vm_name}.qcow2
|
||||||
|
vm_xml=${xml_dir}/${vm_name}.xml
|
||||||
|
vm_mac="52:54:$(dd if=/dev/urandom count=1 2>/dev/null | md5sum | sed -r 's/^(..)(..)(..)(..).*$/\1:\2:\3:\4/')"
|
||||||
|
base_xml=${xml_dir}/centos6u8_base.xml
|
||||||
|
|
||||||
|
virsh destroy ${vm_name} &>/dev/null
|
||||||
|
virsh undefine ${vm_name} &>/dev/null
|
||||||
|
rm -rf ${xml_dir}/${vm_xml}
|
||||||
|
rm -rf ${images_dir}/${vm_name}.*
|
||||||
|
|
||||||
|
#disk
|
||||||
|
qemu-img create -f qcow2 -b ${images_dir}/${centos6u8_base_img} ${images_dir}/${vm_disk} &>/dev/null
|
||||||
|
|
||||||
|
#xml
|
||||||
|
wget -q ftp://10.18.40.100/kvm/base_xml/${centos6u8_base_xml} -O ${base_xml}
|
||||||
|
cp ${base_xml} ${vm_xml}
|
||||||
|
sed -i -r "s#VM_NAME#$vm_name#" ${vm_xml}
|
||||||
|
sed -i -r "s#VM_UUID#$vm_uuid#" ${vm_xml}
|
||||||
|
sed -i -r "s#VM_DISK#$vm_disk#" ${vm_xml}
|
||||||
|
sed -i -r "s#VM_MAC#$vm_mac#" ${vm_xml}
|
||||||
|
|
||||||
|
#define
|
||||||
|
virsh define ${vm_xml} &>/dev/null
|
||||||
|
echo "虚拟机${vm_name} 重置完成..."
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
|
||||||
|
3)
|
||||||
|
conn_test
|
||||||
|
download_kvm_script
|
||||||
|
|
||||||
|
read -p "确认重置所有的CentOS7.3虚拟机吗?[y]: " rebuild_centos7u3
|
||||||
|
if [ ! "${rebuild_centos7u3}" = "y" ];then
|
||||||
|
echo -e "$red_col输入不正确! $reset_col"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f ${images_dir}/${centos7u3_base_img} ];then
|
||||||
|
echo "正在下载镜像文件,请稍候......"
|
||||||
|
wget -O ${images_dir}/${centos7u3_base_img} ftp://10.18.40.100/kvm/base_image/${centos7u3_base_img}
|
||||||
|
fi
|
||||||
|
|
||||||
|
for i in {1..5}
|
||||||
|
do
|
||||||
|
vm_name=centos7u3-${i}
|
||||||
|
vm_uuid=$(uuidgen)
|
||||||
|
vm_disk=${vm_name}.qcow2
|
||||||
|
vm_xml=${xml_dir}/${vm_name}.xml
|
||||||
|
vm_mac="52:54:$(dd if=/dev/urandom count=1 2>/dev/null | md5sum | sed -r 's/^(..)(..)(..)(..).*$/\1:\2:\3:\4/')"
|
||||||
|
base_xml=${xml_dir}/centos7u3_base.xml
|
||||||
|
|
||||||
|
virsh destroy ${vm_name} &>/dev/null
|
||||||
|
virsh undefine ${vm_name} &>/dev/null
|
||||||
|
rm -rf ${xml_dir}/${vm_xml}
|
||||||
|
rm -rf ${images_dir}/${vm_name}.*
|
||||||
|
|
||||||
|
#disk
|
||||||
|
qemu-img create -f qcow2 -b ${images_dir}/${centos7u3_base_img} ${images_dir}/${vm_disk} &>/dev/null
|
||||||
|
|
||||||
|
#xml
|
||||||
|
wget -q ftp://10.18.40.100/kvm/base_xml/${centos7u3_base_xml} -O ${base_xml}
|
||||||
|
cp ${base_xml} ${vm_xml}
|
||||||
|
sed -i -r "s#VM_NAME#$vm_name#" ${vm_xml}
|
||||||
|
sed -i -r "s#VM_UUID#$vm_uuid#" ${vm_xml}
|
||||||
|
sed -i -r "s#VM_DISK#$vm_disk#" ${vm_xml}
|
||||||
|
sed -i -r "s#VM_MAC#$vm_mac#" ${vm_xml}
|
||||||
|
|
||||||
|
#define
|
||||||
|
virsh define ${vm_xml} &>/dev/null
|
||||||
|
echo "虚拟机${vm_name} 重置完成..."
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
|
||||||
|
4)
|
||||||
|
conn_test
|
||||||
|
download_kvm_script
|
||||||
|
|
||||||
|
read -p "确认重置 windows 7 虚拟机吗?[y]: " rebuild_win7
|
||||||
|
if [ ! "${rebuild_win7}" = "y" ];then
|
||||||
|
echo -e "$red_col输入不正确! $reset_col"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f ${images_dir}/${win7_base_img} ];then
|
||||||
|
echo "正在下载镜像文件,请稍候......"
|
||||||
|
wget -O ${images_dir}/${win7_base_img} ftp://10.18.40.100/kvm/base_image/${win7_base_img}
|
||||||
|
fi
|
||||||
|
|
||||||
|
virsh destroy win7 &>/dev/null
|
||||||
|
virsh undefine win7 &>/dev/null
|
||||||
|
rm -rf ${xml_dir}/win7.xml
|
||||||
|
rm -rf ${images_dir}/win7.qcow2
|
||||||
|
|
||||||
|
qemu-img create -f qcow2 -b ${images_dir}/${win7_base_img} ${images_dir}/win7.qcow2 &>/dev/null
|
||||||
|
|
||||||
|
wget -q ftp://10.18.40.100/kvm/base_xml/win7_base.xml -O ${xml_dir}/win7.xml
|
||||||
|
virsh define ${xml_dir}/win7.xml &>/dev/null
|
||||||
|
echo "虚拟机 windows 重置完成..."
|
||||||
|
;;
|
||||||
|
|
||||||
|
5)
|
||||||
|
conn_test
|
||||||
|
download_kvm_script
|
||||||
|
|
||||||
|
all_vm=$(virsh list --all |awk '/[0-9]/{print $2}')
|
||||||
|
|
||||||
|
echo -en "${red_col}确认删除所有虚拟机吗?[y]:${reset_col} "
|
||||||
|
read delete_all
|
||||||
|
|
||||||
|
if [ ! "${delete_all}" = "y" ];then
|
||||||
|
echo -e "$red_col放弃删除! $reset_col"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
for vm in ${all_vm}
|
||||||
|
do
|
||||||
|
virsh destroy $vm &>/dev/null
|
||||||
|
virsh undefine $vm &>/dev/null
|
||||||
|
|
||||||
|
rm -rf ${xml_dir}/${vm}.xml
|
||||||
|
rm -rf ${images_dir}/${vm}*
|
||||||
|
echo "已删除虚拟机 $vm"
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
|
||||||
|
m)
|
||||||
|
clear
|
||||||
|
menu
|
||||||
|
;;
|
||||||
|
q)
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
'')
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "输入错误!"
|
||||||
|
|
||||||
|
esac
|
||||||
|
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,429 @@
|
||||||
|
<h1><center>KVM部署与使用</center></h1>
|
||||||
|
|
||||||
|
**作者:行癫(盗版必究)**
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
## 一:KVM安装
|
||||||
|
|
||||||
|
#### 1.普通方式安装
|
||||||
|
|
||||||
|
查看CPU是否支持VT技术::
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# cat /proc/cpuinfo | egrep 'vmx|svm'
|
||||||
|
注意:
|
||||||
|
vmx是英特尔
|
||||||
|
svm是AMD
|
||||||
|
```
|
||||||
|
|
||||||
|
安装:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# yum install *qemu* *virt* *kvm* -y
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2.组包方式安装
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# yum -y groupinstall Virtualization Host
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3.启动服务
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# systemctl start libvirtd
|
||||||
|
[root@xingdian ~]# systemctl enable libvirtd
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 4.查看kvm模块加载
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# lsmod | grep kvm
|
||||||
|
kvm_intel 53484 3
|
||||||
|
kvm 316506 1 kvm_intel
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 5.安装图形化管理工具
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# yum -y install virt-manager
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 6.使用图形化管理工具
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virt-manager
|
||||||
|
```
|
||||||
|
|
||||||
|
<img src="D:\行癫kubernetes\虚拟化技术\KVM部署与使用.assets\image-20220710224049107.png" alt="image-20220710224049107" style="zoom:50%;" />
|
||||||
|
|
||||||
|
## 二:KVM使用
|
||||||
|
|
||||||
|
#### 1.虚拟机的组成部分
|
||||||
|
|
||||||
|
虚拟机配置文件:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# ls /etc/libvirt/qemu
|
||||||
|
centos7.0.xml centos7.xml networks
|
||||||
|
```
|
||||||
|
|
||||||
|
储存虚拟机的介质:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# ls /var/lib/libvirt/images/
|
||||||
|
centos7.0.qcow2
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2.存储池
|
||||||
|
|
||||||
|
概念:
|
||||||
|
|
||||||
|
kvm必须要配置一个目录当作他存储磁盘镜像(存储卷)的目录,我们称这个目录为存储池
|
||||||
|
|
||||||
|
默认存储池:
|
||||||
|
|
||||||
|
/var/lib/libvirt/images/
|
||||||
|
|
||||||
|
创建基于文件夹的存储池(目录):
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# mkdir -p /home/vmfs
|
||||||
|
```
|
||||||
|
|
||||||
|
定义存储池与其目录:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh pool-define-as vmdisk --type dir --target /home/vmfs/
|
||||||
|
Pool vmdisk defined
|
||||||
|
```
|
||||||
|
|
||||||
|
创建已定义的存储池:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh pool-build vmdisk
|
||||||
|
Pool vmdisk built
|
||||||
|
```
|
||||||
|
|
||||||
|
查看已定义的存储池,存储池不激活无法使用:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh pool-list --all
|
||||||
|
Name State Autostart
|
||||||
|
-------------------------------------------
|
||||||
|
default active yes
|
||||||
|
vmdisk inactive no
|
||||||
|
```
|
||||||
|
|
||||||
|
激活并自动启动已定义的存储池:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh pool-start vmdisk
|
||||||
|
Pool vmdisk started
|
||||||
|
[root@xingdian ~]# virsh pool-autostart vmdisk
|
||||||
|
Pool vmdisk marked as autostarted
|
||||||
|
```
|
||||||
|
|
||||||
|
注意:
|
||||||
|
|
||||||
|
这里vmdisk存储池就已经创建好了,可以直接在这个存储池中创建虚拟磁盘文件了
|
||||||
|
|
||||||
|
在存储池中创建虚拟机存储卷:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh vol-create-as vmdisk centos7.qcow2 20G --format qcow2
|
||||||
|
Vol centos7.qcow2 created
|
||||||
|
```
|
||||||
|
|
||||||
|
根据创建的虚拟机存储卷安装虚拟机:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virt-install --name=centos7 --os-variant=RHEL7 --ram 3000 --vcpus=1 --disk path=/home/vmfs/centos7.qcow2,format=qcow2,size=20,bus=virtio --accelerate --cdrom /home/镜像/CentOS-7-x86_64-Minimal-1708.iso --vnc --vncport=5910 --vnclisten=0.0.0.0 --network=default --noautoconsole
|
||||||
|
```
|
||||||
|
|
||||||
|
注意:
|
||||||
|
|
||||||
|
KVM存储池主要是体现一种管理方式,可以通过挂载存储目录,lvm逻辑卷的方式创建存储池
|
||||||
|
|
||||||
|
KVM存储池也要用于虚拟机迁移任务
|
||||||
|
|
||||||
|
#### 3.存储池相关管理命令
|
||||||
|
|
||||||
|
在存储池中删除虚拟机存储卷:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh vol-delete --pool vmdisk oeltest03.qcow2
|
||||||
|
```
|
||||||
|
|
||||||
|
取消激活存储池:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh pool-destroy vmdisk
|
||||||
|
```
|
||||||
|
|
||||||
|
删除存储池定义的目录/data/vmfs:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh pool-delete vmdisk
|
||||||
|
```
|
||||||
|
|
||||||
|
取消定义存储池:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh pool-undefine vmdisk
|
||||||
|
```
|
||||||
|
|
||||||
|
注意:
|
||||||
|
|
||||||
|
存储池(Storage pools)是放置虚拟机的存储位置,可以是本地的,也可以是网络存储,本实例放置在卷(Volume)上
|
||||||
|
|
||||||
|
在创建卷之前,先要创建存储池,存储池可以建立在好几种方式的存储上,现在主要建立一个基于目录的存储池
|
||||||
|
|
||||||
|
#### 4.根据配置文件创建虚拟机
|
||||||
|
|
||||||
|
需要有磁盘文件:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian images]# cp centos7.qcow2 centos7-1.qcow2
|
||||||
|
```
|
||||||
|
|
||||||
|
需要有配置文件:配置文件需要修改必要的东西:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian qemu]# cp centos7.xml centos7-1.xml
|
||||||
|
```
|
||||||
|
|
||||||
|
修改配置文件:(如下)
|
||||||
|
|
||||||
|
创建虚拟机:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian qemu]# virsh define /etc/libvirt/qemu/centos7-1.xml
|
||||||
|
```
|
||||||
|
|
||||||
|
配置文件:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian qemu]# vim /etc/libvirt/qemu/centos7-1.xml
|
||||||
|
<domain type='kvm'>
|
||||||
|
<name>vm3</name>
|
||||||
|
<uuid>a2f62549-c6b7-4b8f-a8e2-c14edda35a78</uuid>
|
||||||
|
<memory unit='KiB'>2099200</memory>
|
||||||
|
<currentMemory unit='KiB'>2099200</currentMemory>
|
||||||
|
<vcpu placement='static'>2</vcpu>
|
||||||
|
<os>
|
||||||
|
<type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
|
||||||
|
<boot dev='hd'/>
|
||||||
|
</os>
|
||||||
|
<features>
|
||||||
|
<acpi/>
|
||||||
|
<apic/>
|
||||||
|
</features>
|
||||||
|
<cpu mode='custom' match='exact' check='partial'>
|
||||||
|
<model fallback='allow'>Haswell-noTSX</model>
|
||||||
|
</cpu>
|
||||||
|
<clock offset='utc'>
|
||||||
|
<timer name='rtc' tickpolicy='catchup'/>
|
||||||
|
<timer name='pit' tickpolicy='delay'/>
|
||||||
|
<timer name='hpet' present='no'/>
|
||||||
|
</clock>
|
||||||
|
<on_poweroff>destroy</on_poweroff>
|
||||||
|
<on_reboot>restart</on_reboot>
|
||||||
|
<on_crash>destroy</on_crash>
|
||||||
|
<pm>
|
||||||
|
<suspend-to-mem enabled='no'/>
|
||||||
|
<suspend-to-disk enabled='no'/>
|
||||||
|
</pm>
|
||||||
|
<devices>
|
||||||
|
<emulator>/usr/libexec/qemu-kvm</emulator>
|
||||||
|
<disk type='file' device='disk'>
|
||||||
|
<driver name='qemu' type='qcow2'/>
|
||||||
|
<source file='/var/lib/libvirt/images/vm3.img'/>
|
||||||
|
<target dev='vda' bus='virtio'/>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
|
||||||
|
</disk>
|
||||||
|
<controller type='usb' index='0' model='ich9-ehci1'>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x7'/>
|
||||||
|
</controller>
|
||||||
|
<controller type='usb' index='0' model='ich9-uhci1'>
|
||||||
|
<master startport='0'/>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0' multifunction='on'/>
|
||||||
|
</controller>
|
||||||
|
<controller type='usb' index='0' model='ich9-uhci2'>
|
||||||
|
<master startport='2'/>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x1'/>
|
||||||
|
</controller>
|
||||||
|
<controller type='usb' index='0' model='ich9-uhci3'>
|
||||||
|
<master startport='4'/>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x2'/>
|
||||||
|
</controller>
|
||||||
|
<controller type='pci' index='0' model='pci-root'/>
|
||||||
|
<controller type='virtio-serial' index='0'>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
|
||||||
|
</controller>
|
||||||
|
<interface type='network'>
|
||||||
|
<mac address='52:54:00:f2:28:6f'/>
|
||||||
|
<source network='default'/>
|
||||||
|
<model type='virtio'/>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
|
||||||
|
</interface>
|
||||||
|
<serial type='pty'>
|
||||||
|
<target type='isa-serial' port='0'>
|
||||||
|
<model name='isa-serial'/>
|
||||||
|
</target>
|
||||||
|
</serial>
|
||||||
|
<console type='pty'>
|
||||||
|
<target type='serial' port='0'/>
|
||||||
|
</console>
|
||||||
|
<channel type='unix'>
|
||||||
|
<target type='virtio' name='org.qemu.guest_agent.0'/>
|
||||||
|
<address type='virtio-serial' controller='0' bus='0' port='1'/>
|
||||||
|
</channel>
|
||||||
|
<input type='mouse' bus='ps2'/>
|
||||||
|
<input type='keyboard' bus='ps2'/>
|
||||||
|
<memballoon model='virtio'>
|
||||||
|
<address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
|
||||||
|
</memballoon>
|
||||||
|
</devices>
|
||||||
|
</domain>
|
||||||
|
```
|
||||||
|
|
||||||
|
5.图形化安装虚拟机
|
||||||
|
|
||||||
|
<img src="D:\行癫kubernetes\虚拟化技术\KVM部署与使用.assets\image-20220710232445811.png" alt="image-20220710232445811" style="zoom:50%;" />
|
||||||
|
|
||||||
|
![image-20220710232523493](D:\行癫kubernetes\虚拟化技术\KVM部署与使用.assets\image-20220710232523493.png)
|
||||||
|
|
||||||
|
![image-20220710232621518](D:\行癫kubernetes\虚拟化技术\KVM部署与使用.assets\image-20220710232621518.png)
|
||||||
|
|
||||||
|
![image-20220710232657633](D:\行癫kubernetes\虚拟化技术\KVM部署与使用.assets\image-20220710232657633.png)
|
||||||
|
|
||||||
|
![image-20220710232718965](D:\行癫kubernetes\虚拟化技术\KVM部署与使用.assets\image-20220710232718965.png)
|
||||||
|
|
||||||
|
![image-20220710232748416](D:\行癫kubernetes\虚拟化技术\KVM部署与使用.assets\image-20220710232748416.png)
|
||||||
|
|
||||||
|
![image-20220710232850844](D:\行癫kubernetes\虚拟化技术\KVM部署与使用.assets\image-20220710232850844.png)
|
||||||
|
|
||||||
|
#### 5.虚拟机基本命令
|
||||||
|
|
||||||
|
查看正在运行虚拟机:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh list
|
||||||
|
Id Name State
|
||||||
|
----------------------------------------------------
|
||||||
|
2 centos7 running
|
||||||
|
```
|
||||||
|
|
||||||
|
查看所有虚拟机:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh list --all
|
||||||
|
Id Name State
|
||||||
|
----------------------------------------------------
|
||||||
|
2 centos7 running
|
||||||
|
- centos7.0 shut off
|
||||||
|
```
|
||||||
|
|
||||||
|
查看kvm虚拟机配置文件:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh dumpxml centos7
|
||||||
|
```
|
||||||
|
|
||||||
|
将node4虚拟机的配置文件保存至node6.xml:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh dumpxml node4 > /etc/libvirt/qemu/node6.xml
|
||||||
|
```
|
||||||
|
|
||||||
|
修改node6的配置文件:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh edit node6
|
||||||
|
```
|
||||||
|
|
||||||
|
注意:
|
||||||
|
|
||||||
|
如果直接用vim编辑器修改配置文件的话,需要重启libvirtd服务
|
||||||
|
|
||||||
|
启动:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh start vm1
|
||||||
|
Domain vm1 started
|
||||||
|
```
|
||||||
|
|
||||||
|
暂停虚拟机:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh suspend vm_name
|
||||||
|
```
|
||||||
|
|
||||||
|
恢复虚拟机:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh resume vm_name
|
||||||
|
```
|
||||||
|
|
||||||
|
关闭:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh shutdown vm1
|
||||||
|
Domain vm1 is being shutdown
|
||||||
|
```
|
||||||
|
|
||||||
|
重启:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh reboot vm1
|
||||||
|
Domain vm1 is being reboote
|
||||||
|
```
|
||||||
|
|
||||||
|
重置:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh reset vm1
|
||||||
|
Domain vm1 was reset
|
||||||
|
```
|
||||||
|
|
||||||
|
删除虚拟机:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh undefine vm2
|
||||||
|
Domain vm2 has been undefined
|
||||||
|
```
|
||||||
|
|
||||||
|
注意:
|
||||||
|
|
||||||
|
虚拟机在开启的情况下undefine是无法删除的
|
||||||
|
|
||||||
|
#### 6.连接虚拟机的方法
|
||||||
|
|
||||||
|
使用virt-viewer图形连接已启动的虚拟机:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virt-viewer vm1
|
||||||
|
```
|
||||||
|
|
||||||
|
虚拟机开机自动启动:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh autostart vm1
|
||||||
|
```
|
||||||
|
|
||||||
|
此目录默认不存在,在有开机启动的虚拟机时自动创建:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# ls /etc/libvirt/qemu/autostart/
|
||||||
|
vm1.xml
|
||||||
|
```
|
||||||
|
|
||||||
|
取消开机启动:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
[root@xingdian ~]# virsh autostart --disable vm1
|
||||||
|
[root@xingdian ~]# ls /etc/libvirt/qemu/autostart/
|
||||||
|
```
|
||||||
|
|
|
@ -0,0 +1,143 @@
|
||||||
|
<h1><center>大型网站架构技术</center></h1>
|
||||||
|
|
||||||
|
**作者:行癫(盗版必究)**
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
## 一:大型架构的特点
|
||||||
|
|
||||||
|
1.高并发,大流量
|
||||||
|
|
||||||
|
goole日均pv数35亿,日均IP访问数3亿,腾讯QQ的最大在线用户数5.74 亿(2021年数据),淘宝2012年“双11”活动一天交易额超过191亿,活动开始第一分钟独立访问用户达1000万,微信以及WeChat的月活跃帐户达到12.6亿等
|
||||||
|
|
||||||
|
2.高可用
|
||||||
|
|
||||||
|
系统7x24小时不间断服务
|
||||||
|
|
||||||
|
3.海量数据
|
||||||
|
|
||||||
|
需要存储、管理海量数据,需要大量服务器。Facebook每周上传的照片数目接近10亿,百度收录的网页数据有数百亿,google有近百万台服务器为全球用户提供服务。
|
||||||
|
|
||||||
|
4.用户分布广泛,网络情况复杂
|
||||||
|
|
||||||
|
许多大型互联网站都是为全球用户提供服务的,用户分布范围广,各地网络情况千差万别。在国内,还有各个运营商网络互通困难的问题
|
||||||
|
|
||||||
|
5.安全环境恶劣
|
||||||
|
|
||||||
|
由于互联网的开放性,使得互联网站更容易受到攻击,大型网站几乎每天都会被黑客攻击
|
||||||
|
|
||||||
|
6.需求快速变更,发布频繁
|
||||||
|
|
||||||
|
和传统软件的版本发布频率不同,互联网产品为快速适应市场,满足用户需求,其产品发布频率极高
|
||||||
|
|
||||||
|
7.渐进式发展
|
||||||
|
几乎所有的大型网站都是从一个小网站开始,facebook是扎克伯格在哈弗大学的宿舍里开发的,google第一台服务器部署在斯坦福大学的实验室里,阿里巴巴是在马云家的客厅里诞生的。
|
||||||
|
|
||||||
|
## 二:架构演进
|
||||||
|
|
||||||
|
#### 1.初始阶段的网站架构
|
||||||
|
|
||||||
|
大型网站都是从小型网站发展而来,网站架构也是一样,是从小型网站架构逐步演化而来。小型网站最开始没有太多人访问,只需要一台服务器就绰绰有余,这时的网站架构如下图所示,应用程序、数据库、文件等所有资源都在一台服务器上
|
||||||
|
|
||||||
|
<img src="D:\行癫kubernetes\虚拟化技术\大型网站架构技术.assets\image-20220710151757707.png" alt="image-20220710151757707" style="zoom:50%;" />
|
||||||
|
|
||||||
|
#### 2.应用服务和数据服务分离
|
||||||
|
|
||||||
|
随着网站业务的发展,一台服务器逐渐不能满足需求:越来越多的用户访问导致性能越来越差,越来越多的数据导致存储空间不足;这时就需要将应用和数据分离;应用和数据分离后整个网站使用3台服务器:应用服务器、文件服务器和数据库服务器;这3台服务器对硬件资源的要求各不相同。
|
||||||
|
|
||||||
|
应用服务器需要处理大量的业务逻辑,因此需要更快更强大的CPU
|
||||||
|
|
||||||
|
数据库服务器需要快速磁盘检索和数据缓存,因此需要更快的磁盘和更大的内存
|
||||||
|
|
||||||
|
文件服务器需要存储大量用户上传的文件,因此需要更大的硬盘
|
||||||
|
|
||||||
|
<img src="D:\行癫kubernetes\虚拟化技术\大型网站架构技术.assets\image-20220710151937584.png" alt="image-20220710151937584" style="zoom:50%;" />
|
||||||
|
|
||||||
|
#### 3.使用缓存改善网站性能
|
||||||
|
|
||||||
|
网站访问的特点和现实世界的财富分配一样遵循二八定律:80% 的业务访问集中在20% 的数据上;既然大部分业务访问集中在一小部分数据上,那么如果把这一小部分数据缓存在内存中,就可以减少数据库的访问压力,提高整个网站的数据访问速度,改善数据库的写入性能了;网站使用的缓存可以分为两种:缓存在应用服务器上的本地缓存和缓存在专门的分布式缓存服务器上的远程缓存。
|
||||||
|
|
||||||
|
本地缓存的访问速度更快一些,但是受应用服务器内存限制,其缓存数据量有限,而且会出现和应用程序争用内存的情况
|
||||||
|
|
||||||
|
远程分布式缓存可以使用集群的方式,部署大内存的服务器作为专门的缓存服务器,可以在理论上做到不受内存容量限制的缓存服务
|
||||||
|
|
||||||
|
<img src="D:\行癫kubernetes\虚拟化技术\大型网站架构技术.assets\image-20220710152124678.png" alt="image-20220710152124678" style="zoom:50%;" />
|
||||||
|
|
||||||
|
#### 4.使用集群改善网站并发能力
|
||||||
|
|
||||||
|
应用服务器作为网站的入口,会承担大量的请求,我们往往通过应用服务器集群来分担请求数;应用服务器前面部署负载均衡服务器调度用户请求,根据分发策略将请求分发到多个应用服务器节点。
|
||||||
|
|
||||||
|
<img src="D:\行癫kubernetes\虚拟化技术\大型网站架构技术.assets\image-20220710152332946.png" alt="image-20220710152332946" style="zoom:50%;" />
|
||||||
|
|
||||||
|
常用的负载均衡技术硬件的有F5,价格比较贵,软件的有LVS、Nginx、HAProxy。LVS是四层负载均衡,根据目标地址和端口选择内部服 务器,Nginx和HAProxy是七层负载均衡,可以根据报文内容选择内部服务器,因此LVS分发路径优于Nginx和HAProxy,性能要高些,而 Nginx和HAProxy则更具配置性,如可以用来做动静分离(根据请求报文特征,选择静态资源服务器还是应用服务器)
|
||||||
|
|
||||||
|
#### 5.数据库读写分离和分库分表
|
||||||
|
|
||||||
|
随着用户量的增加,数据库成为最大的瓶颈,改善数据库性能常用的手段是进行读写分离以及分表,读写分离顾名思义就是将数据库分为读库和写库,通过主备功能实现数据同步。分库分表则分为水平切分和垂直切分,水平切换则是对一个数据库特大的表进行拆分,例如用户表。垂直切分则是根据业务不同来切换,如用户业务、商品业务相关的表放在不同的数据库中。
|
||||||
|
|
||||||
|
<img src="D:\行癫kubernetes\虚拟化技术\大型网站架构技术.assets\image-20220710152631824.png" alt="image-20220710152631824" style="zoom:50%;" />
|
||||||
|
|
||||||
|
#### 6.使用CDN和反向代理
|
||||||
|
|
||||||
|
假如我们的服务器都部署在成都的机房,对于四川的用户来说访问是较快的,而对于北京的用户访问是较慢的,这是由于四川和北京分别属于电信和联通的不 同发达地区,北京用户访问需要通过互联路由器经过较长的路径才能访问到成都的服务器,返回路径也一样,所以数据传输时间比较长。对于这种情况,常常使用 CDN解决,CDN将数据内容缓存到运营商的机房,用户访问时先从最近的运营商获取数据,这样大大减少了网络访问的路径。比较专业的CDN运营商有蓝汛、 网宿。
|
||||||
|
|
||||||
|
而反向代理,则是部署在网站的机房,当用户请求达到时首先访问反向代理服务器,反向代理服务器将缓存的数据返回给用户,如果没有没有缓存数据才会继续走应用服务器获取,也减少了获取数据的成本。反向代理有Squid,Nginx。
|
||||||
|
|
||||||
|
<img src="D:\行癫kubernetes\虚拟化技术\大型网站架构技术.assets\image-20220710152631824.png" alt="image-20220710152631824" style="zoom:50%;" />
|
||||||
|
|
||||||
|
#### 7.使用分布式文件系统
|
||||||
|
|
||||||
|
用户一天天增加,业务量越来越大,产生的文件越来越多,单台的文件服务器已经不能满足需求。需要分布式的文件系统支撑。常用的分布式文件系统有NFS。
|
||||||
|
|
||||||
|
![file://C:\Users\huawei\AppData\Local\Temp\ct_tmp/1.png](D:\行癫kubernetes\虚拟化技术\大型网站架构技术.assets\1.png)
|
||||||
|
|
||||||
|
#### 8.使用NoSql和搜索引擎
|
||||||
|
|
||||||
|
对于海量数据的查询,我们使用nosql数据库加上搜索引擎可以达到更好的性能。并不是所有的数据都要放在关系型数据中。常用的NOSQL有mongodb和redis,搜索引擎有lucene
|
||||||
|
|
||||||
|
![file://C:\Users\huawei\AppData\Local\Temp\ct_tmp/1.png](D:\行癫kubernetes\虚拟化技术\大型网站架构技术.assets\1-16574383609512.png)
|
||||||
|
|
||||||
|
#### 9.将应用服务器进行业务拆分
|
||||||
|
|
||||||
|
随着业务进一步扩展,应用程序变得非常臃肿,这时我们需要将应用程序进行业务拆分,如百度分为新闻、网页、图片等业务。每个业务应用负责相对独立的业务运作。业务之间通过消息进行通信或者同享数据库来实现。
|
||||||
|
|
||||||
|
![file://C:\Users\huawei\AppData\Local\Temp\ct_tmp/1.png](D:\行癫kubernetes\虚拟化技术\大型网站架构技术.assets\1-16574384224444.png)
|
||||||
|
|
||||||
|
#### 10.搭建分布式服务
|
||||||
|
|
||||||
|
这时我们发现各个业务应用都会使用到一些基本的业务服务,例如用户服务、订单服务、支付服务、安全服务,这些服务是支撑各业务应用的基本要素。我们将这些服务抽取出来利用分部式服务框架搭建分布式服务。淘宝的Dubbo是一个不错的选择。
|
||||||
|
|
||||||
|
![file://C:\Users\huawei\AppData\Local\Temp\ct_tmp/1.png](D:\行癫kubernetes\虚拟化技术\大型网站架构技术.assets\1-16574385141946.png)
|
||||||
|
|
||||||
|
总结:
|
||||||
|
|
||||||
|
大型网站的架构是根据业务需求不断完善的,根据不同的业务特征会做特定的设计和考虑,本文只是讲述一个常规大型网站会涉及的一些技术和手段。
|
||||||
|
|
||||||
|
## 三:架构模式
|
||||||
|
|
||||||
|
关于什么是模式,这个来自建筑学的词汇是这样定义的:"每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复工作"。模式的关键在于模式的可重复性,问题与场景的可重复性带来解决方案的可重复使用。
|
||||||
|
|
||||||
|
分层:一般可分为,应用层,服务层,数据层,管理层,分析层
|
||||||
|
|
||||||
|
分割:一般按照业务/模块/功能特点进行划分,比如应用层分为首页,用户中心
|
||||||
|
|
||||||
|
分布式:将应用分开部署(比如多台物理机),通过远程调用协同工作
|
||||||
|
|
||||||
|
集群:一个应用/模块/功能部署多份(如:多台物理机),通过负载均衡共同提供对外访问
|
||||||
|
|
||||||
|
缓存:将数据放在距离应用或用户最近的位置,加快访问速度
|
||||||
|
|
||||||
|
异步:客户端发出请求,不等待服务端响应,等服务端处理完毕后,使用通知或轮询的方式告知请求方
|
||||||
|
|
||||||
|
冗余:增加副本,提高可用性,安全性,性能
|
||||||
|
|
||||||
|
安全:对已知问题有有效的解决方案,对未知/潜在问题建立发现和防御机制
|
||||||
|
|
||||||
|
自动化:将重复的,不需要人工参与的事情,通过工具的方式,使用机器完成
|
||||||
|
|
||||||
|
敏捷性:积极接受需求变更,快速响应业务发展需求
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
<h1><center>虚拟化技术概述</center></h1>
|
||||||
|
|
||||||
|
**作者:行癫(盗版必究)**
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
## 一:虚拟化概述
|
||||||
|
|
||||||
|
#### 1.什么是虚拟化
|
||||||
|
|
||||||
|
虚拟化是云计算的基础。简单的说,虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的
|
||||||
|
|
||||||
|
物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)
|
||||||
|
|
||||||
|
那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢
|
||||||
|
|
||||||
|
主要是通过一个叫做 Hypervisor 的程序实现的
|
||||||
|
|
||||||
|
虚拟化技术最早出现在 20 世纪 60 年代的 IBM 大型机系统,在70年代的 System 370 系列中逐渐流行起来,这些机器通过一种叫虚拟机监控器(Virtual Machine Monitor,VMM)的程序在物理硬件之上生成许多可以运行独立操作系统软件的虚拟机(Virtual Machine)实例。随着近年多核系统、集群、网格甚至云计算的广泛部署,虚拟化技术在商业应用上的优势日益体现,不仅降低了 IT 成本,而且还增强了系统安全性和可靠性,虚拟化的概念也逐渐深入到人们日常的工作与生活中
|
||||||
|
|
||||||
|
虚拟化是一个广义的术语,对于不同的人来说可能意味着不同的东西,这要取决他们所处的环境。在计算机科学领域中,虚拟化代表着对计算资源的抽象,而不仅仅局限于虚拟机的概念。例如对物理内存的抽象,产生了虚拟内存技术,使得应用程序认为其自身拥有连续可用的地址空间(Address Space),而实际上,应用程序的代码和数据可能是被分隔成多个碎片页或段),甚至被交换到磁盘、闪存等外部存储器上,即使物理内存不足,应用程序也能顺利执行
|
||||||
|
|
||||||
|
#### 2.虚拟化分类
|
||||||
|
|
||||||
|
平台虚拟化(Platform Virtualization),针对计算机和操作系统的虚拟化
|
||||||
|
|
||||||
|
资源虚拟化(Resource Virtualization),针对特定的系统资源的虚拟化,比如内存、存储、网络资源等
|
||||||
|
|
||||||
|
应用程序虚拟化(Application Virtualization),包括仿真、模拟、解释技术等
|
||||||
|
|
||||||
|
我们通常所说的虚拟化主要是指平台虚拟化技术,通过使用控制程序(也被称为 Virtual Machine Monitor 或Hypervisor),隐藏特定计算平台的实际物理特性,为用户提供抽象的、统一的、模拟的计算环境(称为虚拟机)。虚拟机中运行的操作系统被称为客户机操作系统(Guest OS),运行虚拟机监控器的操作系统被称为主机操作系统(Host OS),当然某些虚拟机监控器可以脱离操作系统直接运行在硬件之上(如 VMWARE 的 ESX 产品)。运行虚拟机的真实系统我们称之为主机系统。
|
||||||
|
|
||||||
|
![file://C:\Users\huawei\AppData\Local\Temp\ct_tmp/1.png](D:\行癫kubernetes\虚拟化技术\虚拟化技术概述.assets\1.png)
|
||||||
|
|
||||||
|
部分虚拟化(Partial Virtualization):
|
||||||
|
|
||||||
|
VMM 只模拟部分底层硬件,因此客户机操作系统不做修改是无法在虚拟机中运行的,其它程序可能也需要进行修改。在历史上,部分虚拟化是通往全虚拟化道路上的重要里程碑,最早出现在第一代的分时系统 CTSS 和 IBM M44/44X 实验性的分页系统中
|
||||||
|
|
||||||
|
全虚拟化(Full Virtualization):
|
||||||
|
|
||||||
|
全虚拟化是指虚拟机模拟了完整的底层硬件,包括处理器、物理内存、时钟、外设等,使得为原始硬件设计的操作系统或其它系统软件完全不做任何修改就可以在虚拟机中运行;比较著名的全虚拟化 VMM 有 Microsoft Virtual PC、VMware Workstation、Sun Virtual Box、Parallels Desktop for Mac 和 QEMU
|
||||||
|
|
||||||
|
超虚拟化(Paravirtualization) :
|
||||||
|
|
||||||
|
这是一种修改 Guest OS 部分访问特权状态的代码以便直接与 VMM 交互的技术。在超虚拟化虚拟机中,部分硬件接口以软件的形式提供给客户机操作系统,这可以通过 Hypercall(VMM 提供给 Guest OS 的直接调用,与系统调用类似)的方式来提供,由于不需要产生额外的异常和模拟部分硬件执行流程,超虚拟化可以大幅度提高性能,比较著名的 VMM 有 Denali、Xen
|
||||||
|
|
||||||
|
硬件辅助虚拟化(Hardware-Assisted Virtualization):
|
||||||
|
|
||||||
|
硬件辅助虚拟化是指借助硬件(主要是主机处理器)的支持来实现高效的全虚拟化。例如有了 Intel-VT 技术的支持,Guest OS 和 VMM 的执行环境自动地完全隔离开来,Guest OS 有自己的“"套寄存器",可以直接运行在最高级别,Intel-VT 和 AMD-V 是目前 x86 体系结构上可用的两种硬件辅助虚拟化技术
|
||||||
|
|
||||||
|
#### 3.KVM简介
|
||||||
|
|
||||||
|
从rhel6开始使用 直接把kvm的模块做成了内核的一部分,KVM 针对运行在 x86 硬件上的、驻留在内核中的虚拟化基础结构。KVM 是第一个成为原生 Linux 内核(2.6.20)的一部分的 hypervisor,它是由 Avi Kivity 开发和维护的,现在归 Red Hat 所有
|
||||||
|
|
||||||
|
KVM 是作为内核模块实现的,因此 Linux 只要加载该模块就会成为一个hypervisor。KVM 为支持 hypervisor 指令的硬件平台提供完整的虚拟化(比如 Intel® Virtualization Technology [Intel VT] 或 AMD Virtualization [AMD-V] 产品)。KVM 还支持准虚拟化来宾操作系统,包括 Linux 和 Windows
|
||||||
|
|
||||||
|
#### 4.KVM hypervisor 视图
|
||||||
|
|
||||||
|
![file://C:\Users\huawei\AppData\Local\Temp\ct_tmp/1.png](D:\行癫kubernetes\虚拟化技术\虚拟化技术概述.assets\1-16574414328342.png)
|
||||||
|
|
||||||
|
#### 5.kvm、xen、qemu三者区别
|
||||||
|
|
||||||
|
KVM(Kernel-based Virtual Machine)基于内核的虚拟机:
|
||||||
|
|
||||||
|
KVM是集成到Linux内核的Hypervisor,是X86架构且硬件支持虚拟化技术(Intel VT或AMD-V)的Linux的全虚拟化解决方案。它是Linux的一个很小的模块,利用Linux做大量的事,如任务调度、内存管理与硬件设备交互等
|
||||||
|
|
||||||
|
Xen:
|
||||||
|
|
||||||
|
Xen是第一类运行在裸机上的虚拟化管理程序(Hypervisor)。它支持全虚拟化和半虚拟化,Xen支持hypervisor和虚拟机互相通讯,而且提供在所有Linux版本上的免费产品,包括Red Hat Enterprise Linux和SUSE Linux Enterprise Server。Xen最重要的优势在于半虚拟化,此外未经修改的操作系统也可以直接在xen上运行(如Windows),能让虚拟机有效运行而不需要仿真,因此虚拟机能感知到hypervisor,而不需要模拟虚拟硬件,从而能实现高性能
|
||||||
|
|
||||||
|
QEMU:
|
||||||
|
|
||||||
|
QEMU是一套由Fabrice Bellard所编写的模拟处理器的自由软件。它与Bochs,PearPC近似,但其具有某些后两者所不具备的特性,如高速度及跨平台的特性。经由kqemu这个开源的加速器,QEMU能模拟至接近真实电脑的速度
|
||||||
|
|
||||||
|
#### 6.KVM和QEMU的关系
|
||||||
|
|
||||||
|
准确来说,KVM是Linux kernel的一个模块。可以用命令modprobe去加载KVM模块。加载了模块后,才能进一步通过其他工具创建虚拟机。但仅有KVM模块是 远远不够的,因为用户无法直接控制内核模块去作事情,你还必须有一个运行在用户空间的工具才行。这个用户空间的工具,kvm开发者选择了已经成型的开源虚拟化软件 QEMU。说起来QEMU也是一个虚拟化软件。它的特点是可虚拟不同的CPU。比如说在x86的CPU上可虚拟一个Power的CPU,并可利用它编译出可运行在Power上的程序。KVM使用了QEMU的一部分,并稍加改造,就成了可控制KVM的用户空间工具了。所以你会看到,官方提供的KVM下载有两大部分(qemu和kvm)三个文件(KVM模块、QEMU工具以及二者的合集)。也就是说,你可以只升级KVM模块,也可以只升级QEMU工具。这就是KVM和QEMU 的关系
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue