云计算基础之01

  • 常见虚拟化产品:
  1. vSphere、VMwar Workstation---------------------------VMvare
  2. Kvm、RHEV ----------------------------------------RedHat
  3. Xen  -----------------------------------Citrix
  4. Oracle VM VirtualBox--------------Oracle
  5. VirtualPC、Hyper-V-----------------Mircrosoft
  • 安装虚拟化服务器平台
  1. Virtualization Platform---------------------虚拟化平台
  2. Virtualization Host --------------------虚拟化主机
  3. Virtualization Client---------------------虚拟化客户端

 
 

  • 配置创建纯净的虚拟机,并以此作为模版(进行了17步操作)

 1.真机配置yum源                        
mkdir /var/ftp/centos7
vim /etc/fstab  
mount -a
yum repolist
 2.真机开启路由转发                            
cd /etc/sysctl.d/
vim 99-sysctl.conf  
net.ipv4.ip_forward = 1                        
 3.真机删除当前的配置文件                
cd /etc/libvirt/qemu/networks/                
ls
cd autostart/
rm -rf ./*                                       
ls
4.真机selinux改成disable

vim  /etc/selinux/config                         
 
5.真机删除firewalld、NetworkManager

systemctl stop firewalld

systemctl stop NetworkManager
rpm -qa | grep -P "firewalld|NetworkManager"                      
yum remove firewalld-*

yum remove NetworkManager
 
6.真机创建一个新的网桥xml配置文件
cd /etc/libvirt/qemu/networks                             网桥配置文件目录            
vim vbr.xml
<network>
  <name>vbr</name>      -------------网桥名叫vbr                                         
  <forward mode='nat'/>--------路由模式为nat
  <bridge name='vbr' stp='on' delay='0'/>
  <ip address='158.158.1.254' netmask='255.255.0.0'>-------网桥ip地址为158.158.1.254
    <dhcp>--------该网桥提供dhcp服务
      <range start='158.158.1.100' end='158.158.1.200'/>-----dhcp的范围为158.158.1.100---200
    </dhcp>
  </ip>
</network>
virsh net-define vbr.xml  --------------创建虚拟网桥
virsh net-start vbr ------------------启动虚拟网桥
Ifconfig        
virsh net-autostart  vbr  -----------------  设置虚拟网桥开机自启
 
7.创建虚拟磁盘
cd /var/lib/libvirt/images/   -------------------虚拟磁盘目录
qemu-img create -f qcow2 node.qcow2 16G
 
8.装虚拟机
网络安装——>提供URL地质http|ftp|nfs://176.233.4.241/centos7 选择根据安装介质自动侦测操作系统——>2G 内存+2个CPU——>选择创建自定义存储——>选择自己创建的qcow2——>起名  选择在安装前自定义配置,选择网络——>完成
 
 
装机配置
选择英语环境——>选择最小安装——>选择手动配置磁盘——>选择标准分区,添加根分区——>去选kdump——>开始安装
 
 
配置系统:
cd /etc/yum.repos.d/
rm -rf *
vi dvd.repo                            //配置yum源
 
yum provides ifconfig
yum -y install net-tools                //tcp/ip网络工具
 
yum provides vim
yum -y install vim-enhanced        //vim
 
yum provides ip  
yum -y install iproute                //ip路由
yum -y install bash-completion         //table键补全
Yum -y install psmisc                //pstree
 
添加默认网关
 
配DNS
Vim /etc/resolve.conf
Nameserver 176.233.0.227
 
禁用空路由
Vim /etc/sysconfig/network
NOZEROCONF=”yes”
 
虚拟机上配置virsh下的cosole连接:
vim /etc/sysconfig/grub

GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL="serial console"
GRUB_SERIAL_COMMAND="serial --speed=115200"
GRUB_CMDLINE_LINUX="biosdevname=0 net.ifnames=0 console=ttyS0,115200n8"
GRUB_DISABLE_RECOVERY="true"
GRUB_DISABLE_LINUX_UUID="true"
GRUB_ENABLE_LINUX_LABEL="true"
[root@room9pc01 nsd1804]# md5sum grub
cf3397e0ac0eeb1e99becd03b7805802  grub
修改完后虚拟机输入下面命令:
grub2-mkconfig -o /boot/grub2/grub.cfg -------添加启动项
reboot--------重起
9.测试console
virsh console centos7.0 //虚拟机名称
 
10.在虚拟机上修改或创建虚拟机的网卡配置文件
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0
# Generated by dracut initrd
DEVICE="eth0"-----------设备名eth0,就是通过ip a 查看到的
HWADDR="52:54:00:da:3c:f2"
ONBOOT=yes-----------------开机自启
NM_CONTROLLED="no"-------不允许使用NetworkManager工具
UUID="5c12db5a-3adf-4e3a-a0d7-75ef8d50e7fb"
IPV6INIT=yes
BOOTPROTO="dhcp"---------ip获取方式为DHCP
TYPE="Ethernet"------设备类型为网卡

11、将uuid修改为/dev/vda1

[root@localhost ~]# blkid
/dev/vda1: UUID="fc60d80c-51da-4d30-854b-108c19ecfdb6" TYPE="xfs"

[root@localhost ~]# vim /etc/fstab

/dev/vda1          /          xfs     defaults        0 0--------将uuid修改为/dev/vda1,目的是避免以后模版机的uuid不同而无法挂载

12、安装分区扩展软件

[root@localhost ~]# yum -y install cloud-utils-growpart.noarch

扩展磁盘分区空间(让 /dev/vda1 变大)
   /usr/bin/growpart /dev/vda 1(此处一定要有空格)
   扩展文件系统识别空间(让 df -h 可使用空间变大)
   /usr/sbin/xfs_growfs   /   或者

/usr/sbin/xfs_growfs   /dev/vda1

13、关闭虚拟机,清理信息(真机)

[root@room9pc01 ~]# LANG=en_US.UTF-8------------设置语言为英文

[root@room9pc01 ~]# virsh list --all
 Id    Name                           State
----------------------------------------------------
 3     win10                          running
 -     centos7.0                      shut off
 -     classroom                      shut off
 -     desktop                        shut off
 -     rh7_node02                     shut off
 -     server                         shut off
 -     win2008                        shut off

yum -y install virt-sysprep

[root@room9pc01 ~]# virt-sysprep -d centos7.0-----清理模版虚拟机

[   0.0] Examining the guest ...
[  22.2] Performing "abrt-data" ...
[  22.2] Performing "backup-files" ...
[  22.9] Performing "bash-history" ...
[  22.9] Performing "blkid-tab" ...
[  22.9] Performing "crash-data" ...
[  22.9] Performing "cron-spool" ...
[  22.9] Performing "dhcp-client-state" ...
[  22.9] Performing "dhcp-server-state" ...
[  22.9] Performing "dovecot-data" ...
[  22.9] Performing "logfiles" ...
[  23.0] Performing "machine-id" ...
[  23.0] Performing "mail-spool" ...
[  23.0] Performing "net-hostname" ...
[  23.0] Performing "net-hwaddr" ...
[  23.0] Performing "pacct-log" ...
[  23.0] Performing "package-manager-cache" ...
[  23.1] Performing "pam-data" ...
[  23.1] Performing "passwd-backups" ...
[  23.1] Performing "puppet-data-log" ...
[  23.1] Performing "rh-subscription-manager" ...
[  23.1] Performing "rhn-systemid" ...
[  23.1] Performing "rpm-db" ...
[  23.1] Performing "samba-db-log" ...
[  23.1] Performing "script" ...
[  23.1] Performing "smolt-uuid" ...
[  23.1] Performing "ssh-hostkeys" ...
[  23.1] Performing "ssh-userdir" ...
[  23.1] Performing "sssd-db-log" ...
[  23.1] Performing "tmp-files" ...
[  23.1] Performing "udev-persistent-net" ...
[  23.1] Performing "utmp" ...
[  23.1] Performing "yum-uuid" ...
[  23.1] Performing "customize" ...
[  23.1] Setting a random seed
[  23.6] Performing "lvm-uuids" ...
[root@room9pc01 ~]#

14、删除虚拟机定义

[root@room9pc01 ~]# virsh undefine centos7.0
Domain centos7.0 has been undefined

15、以之前创建的模版虚拟机新建虚拟机

[root@room9pc01 ~]# cd /var/lib/libvirt/images/
[root@room9pc01 images]# ls
lost+found  rh254-classroom-vda.ovl  rh254-server-vda.ovl  rh7_node02.qcow2
node10.img  rh254-desktop-vda.ovl    rh254-server-vdb.ovl  win10.qcow2
node.img    rh254-desktop-vdb.ovl    rh7_node02.img        win.img
[root@room9pc01 images]# qemu-img create -b node.img -f qcow2 node1.img 32G
Formatting 'node1.img', fmt=qcow2 size=34359738368 backing_file='node.img' encryption=off cluster_size=65536 lazy_refcounts=off

[root@room9pc01 nsd1804]# ls
cloud.txt  grub  ifcfg-eth0  node.xml  NSD_CLOUD_01.pdf  ok.txt  vbr.xml

[root@room9pc01 ~]# sed 's/node/node1/' node.xml > /etc/libvirt/qemu/node1.xml

vimdiff node.xml /etc/libvirt/qemu/node1.xml---------可以自行比对查看一下
[root@room9pc01 ~]# cd /etc/libvirt/qemu/
[root@room9pc01 qemu]# ls
classroom.xml  networks   rh7_node02.xml  win10.xml
desktop.xml    node1.xml  server.xml      win2008.xml

[root@room9pc01 qemu]# virsh define node1.xml
Domain node1 defined from node1.xml

[root@room9pc01 qemu]# virsh list --all
 Id    Name                           State
----------------------------------------------------root
 3     win10                          running
 -     classroom                      shut off
 -     desktop                        shut off
 -     node1                          shut off
 -     rh7_node02                     shut off
 -     server                         shut off
 -     win2008                        shut off

[root@room9pc01 qemu]# virsh start node1
Domain node1 started

16、真机搭建配置dns 服务


  yum install bind bind-chroot
  编辑配置文件 named.conf
  listen-on port 53 { 192.168.1.254; };
  allow-query     { any; };
  forwarders { 202.106.196.115; };
  dnssec-enable no;
  dnssec-validation no;
 

17、真机搭建时间服务器


  yum install -y chrony
  server:配置 /etc/chrony.conf
  server ntp1.aliyun.com iburst
  bindacqaddress 0.0.0.0
  allow 0/0
 
  虚拟机:配置 /etc/chrony.conf
  server 192.168.1.254 iburst
 
  检查状态
  chronyc sources -v
  * 同步成功,+ 备胎 , ? 同步失败

  •  扩展知识:yum -y install lftp

lftp ftp://176.233.3.8------------------可以直接连接到对方的ftp,类似于firefox  ftp://176.233.3.8

lftp sftp://176.233.3.8 -u root-------可以加密连接到对方的主机,可以查看和修改及下载(get)任何文件。
 
 
 

  • 一台kvm虚拟机的组成

xml配置文件    /etc/libvirt/qemu
/etc/libvirt/qemu/networks
/etc/libvirt/qemu/networks/autostart
磁盘镜像文件    /var/lib/libvirt/images
快速建立系统的要点
1.准备一台模板虚拟机
2.基于磁盘复用技术快建新虚拟机的磁盘
3.通过调整模板机的配置快建新虚拟机的xml配置文件
4.导入新虚拟机
COW技术原理(copy on write,写时复制)
直接映射原始盘的数据内容
当原始盘的旧数据有修改时,在修改之前自动将旧数据存入前端盘
对前端盘的修改不回写到原始盘(后端盘)
 
 
 
 
 
批量创建虚拟机
启动虚拟机并测试
Virsh工具两种操作:交互(直接virsh)和virsh 控制指令 虚拟机名称 参数

  1. Virsh nodeinfo  --------------查看KVM节点(服务器)信息
  2. Virsh list  ---------------- 列出已运行的虚拟机
  3. virsh list --all-------------列出所有虚拟机
  4. Virsh dominfo 虚拟机名称  ----------- 查看指定虚拟机的信息
  5. Virsh start|reboot|shutdown 虚拟机名称 -----------运行|重启|关闭指定的虚拟机
  6. Virsh destroy 虚拟机名称  --------------强制关闭指定的虚拟机
  7. Virsh autostart 或加disable 虚拟机名称 -----------将指定的虚拟机设为开机自动运行

 

 

virsh

  1. net-list  -------------- 列出已运行的虚拟网桥
  2. net-list --all---------列出所有的虚拟网桥
  3. net-info  网桥   
  4. Net-start     网桥 ----------------- 启动
  5. net-destroy      网桥 -----------摧毁
  6. Net-dumpxml    网桥 ------------详细信息
  7. net-define 网桥名.xml    -------创建虚拟网桥(停止+再定义+启动 )
  8. Net-undefine  网桥         删除虚拟网桥
  9. Net-autostart vbr            自启动
  10. net-edit 网桥名-----------修改虚拟网桥的配置

 
 
xml配置文件(定义虚拟机的名称、CPU、内存、虚拟磁盘、网卡等各种参数设置)
/etc/libvirt/qemu/虚拟机名.xml-------------  默认位置
virsh dumpxml 虚拟机名 -----------查看 xml配置文件
virsh dumpxml 虚拟机名 > 虚拟机名.xml   -----------导出备份 xml配置文件
virsh edit 虚拟机名-------------修改name、memory、disk、 network,可保存为新虚拟机配置
virsh define XML描述文件路径   -----------根据修改后的独立xml文件定义新虚拟机
virsh undefine 虚拟机名  ------------去除多余的xml配置
 
 
 
创建虚拟机磁盘镜像
• 创建新的镜像盘文件
– qemu-img create -f 格式 磁盘路径 大小
• 查询镜像盘文件的信息
– qemu-img info 磁盘路径
[root@kvmsvr ~]# qemu-img create -f qcow2 disk1.qcow2
20G
.. ..
[root@kvmsvr ~]# qemu-img info disk1.qcow2
image: disk1.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes)                //虚拟大小
disk size: 196K                                        //实际数据大小
.. ..
 
 
 
创建/还原/删除快照
在虚拟机磁盘镜像内记录不同时间点的状态数据备份
必要是可将虚拟机恢复到指定的快照
 
– qemu-img snapshot -c 快照名 qcow2磁盘
– qemu-img snapshot -l qcow2磁盘
– qemu-img snapshot -a 快照名 qcow2磁盘
– qemu-img snapshot -d 快照名 qcow2磁盘
 

 
虚拟化概述
将x个物理资源实现成y个逻辑资源。
可以是完全虚拟化(从上到下的传递传递)、部分虚拟化、硬件辅助虚拟化(cpu)
硬件辅助虚拟化:真实底层的CPU支持虚拟化指令。不需要转译过程
 
 
 
企业应用:
将传统业务往虚拟化上迁移,对IO要求高的会迁移
Docker用于数据量和业务;耦合性和系统不强的业务   
 
虚拟机和容器的区别:
虚拟机都是虚拟的,有单独磁盘等。
容器用的都是物理机的。物理机什么样容器什么样。可以查看磁盘等等。Docker管理,k8s
 
容器用物理机
容器共享虚拟机内核,一开都开。一关都关。
资源控制
cgroup
 
搭个yum
安装个ftp或者http或者nfs共享
开机自动挂载目录下
然后客户机配置yum服务端地址最后yum repolist下
 
 
安装虚拟化服务器平台KVM
必备:
– qemu-kvm  -------------为kvm提供底层的支持
– libvirt-client   -------------virsh 等软件
– libvirt-daemon ----------------libvirtd 守护进程
– libvirt-daemon-driver-qemu  ------virsh 与qemu之间的
 
可选:
– virt-install  ----------系统安装工具
– virt-manager   -----------图形管理工具
– virt-v2v  ------虚拟机迁移工具
– virt-p2v  ------物理机迁移工具
 

用virsh客户端工具可以连接本地/远程的KVM
连接本地:virsh后进入到命令行后:virsh#connect qemu:///system(默认选项)
 或virsh -c qemu:///system
连接远程:virsh#connect qemu+ssh://[email protected]:port/system  
 或virsh -c qemu+ssh://177.233.5.8/system
virt-manager也可以通过add connection管理其它机器上的虚拟机,一般通过“remote tunnel over ssh” 就可以了
 

 
自己配置系统的xml配置文件
导出虚拟机
• xml配置文件
– 定义了一个虚拟机的名称、CPU、内存、虚拟磁盘、网卡等各种参数设置
– 默认位于 /etc/libvirt/qemu/虚拟机名.xml
• 导出xml配置文件
– 查看:virsh dumpxml 虚拟机名
– 备份:virsh dumpxml 虚拟机名 > 虚拟机名.xml
 
编辑虚拟机设置
• 对虚拟机的配置进行调整
– 编辑:virsh edit 虚拟机名
– 若修改 name、memory、disk、network,可自劢保存为新虚拟机配置
[root@kvmsvr ~]# virsh edit rhel-207
<domain type='kvm'>
<name>rhel-207</name>
<uuid>76d5dc2c-5eef-4e30-8b6c-e58851814f84</uuid>
<disk type='file' device='disk'>
<source file='/var/lib/libvirt/images/rhel7.2.qcow2'/>
.. ..
<interface type='network'>
<mac address='52:54:00:91:52:e4'/>
.. ..
 
导入虚拟机
• 根据修改后的独立xml文件定义新虚拟机
– virsh define XML描述文件
[root@kvmsvr ~]# virsh define /root/rhel-207.xml
定义域 rhel-207(从 /root/rhel-207.xml)
[root@kvmsvr ~]# virsh list --all
Id     名称                    状态
----------------------------------------------------
-     rhel-207                关闭
-     rhel7.2                关闭
 
删除虚拟机
• 必要时可去除多余的xml配置
– 比如虚拟机改名的情冴
– 避免出现多个虚拟机的磁盘戒MAC地址冲突
– virsh undefine 虚拟机名
[root@kvmsvr ~]# virsh undefine rhel7.2
域 rhel7.2 已经被取消定义
 
 
案例4:xml配置文件的应用
使用 virsh 调整虚拟机配置,完成下列任务
1)将虚拟机 rhel7.2 改名为 rhel-207
2)将虚拟机 rhel-207 复制为 rhel-7
3)上述虚拟机的CPU/内存/网络类型保持不变
4)但这2个虚拟机有可能会同时运行,不应出现冲突
 
 
 
自己可以创建镜像和快照
虚拟机常用的镜像格式有两种:RAW  QCOW2
KVM默认            否             是
I/O效率             高             较高
占用空间             大             小
压缩             不支持         支持
后端盘复用         不支持         支持
快照             不支持         支持
 
 
创建虚拟机磁盘镜像
– qemu-img create -f 格式 磁盘路径 大小
查询镜像盘文件的信息
– qemu-img info 磁盘路径
例如:
[root@kvmsvr ~]# qemu-img create -f qcow2 disk1.qcow2
20G
.. ..
[root@kvmsvr ~]# qemu-img info disk1.qcow2
image: disk1.qcow2
file format: qcow2
virtual size: 20G (21474836480 bytes)        //虚拟大小
disk size: 196K                            //实际数据大小
.. ..
 
 
快照有什么用?
– 在虚拟机磁盘镜像内记录不同时间点的状态数据备份
– 必要时可将虚拟机恢复到挃定的快照
 
 
快照这样用    创建删除还原
– qemu-img snapshot -c 快照名 qcow2磁盘
– qemu-img snapshot -l qcow2磁盘
– qemu-img snapshot -a 快照名 qcow2磁盘
– qemu-img snapshot -d 快照名 qcow2磁盘
 
案例5:为虚拟机制作快照备份
使用 qemu-img 及必要的工具完成下列任务
1)将虚拟机 rhel-7 关机
2)为虚拟机 rhel-7 的磁盘制作名为 snap1 的快照
3)开启并登入虚拟机 rhel-7,在桌面上新建文件 1.txt
4)再次关闭虚拟机 rhel-7,还原到快照 snap1
5)重新开启并登入虚拟机 rhel-7,检查 1.txt 文件
 
 
 
 
怎么快建
两点组成:xml配置文件   磁盘镜像文件
Xml配置文件:定义虚拟机的名称、CPU、内存、虚拟磁盘、网卡等各种参数设置
磁盘镜像文件:保存虚拟机的操作系统及文档数据,镜像路径取决于xml
配置文件中的定义
 
思路:
1)准备一台模板虚拟机(镜像磁盘+xml配置文件)
2)基于磁盘复用技术快建新虚拟机的磁盘
3)通过调整模板机的配置快建新虚拟机的xml配置文件
4)导入新虚拟机
 
cow技术原理(copy on write,写时复制)
– 直接映射原始盘的数据内容
– 当原始盘的旧数据有修改时,在修改之前自动将旧数据存入前端盘
– 对前端盘的修改不回写到原始盘(后端盘)
 
实际操作:(四步骤)
准备模板虚拟机
• 模板机的选择
– 可以用现有的虚拟机,也可再安装一台新虚拟机
• 模板机的初始化
1)预装软件/系统优化/关闭SELinux等
2)生产环境可以标记 /.unconfigured ,方便新虚拟机的配置(相当于出厂设置,提示用户刜始化)
3)备份好模板磁盘、xml配置文件
4)删除模板机(undefine)
 
快速创建qcow前端盘
• qemu-img 通过 -b 选项复用指定后端盘
– qemu-img create -f qcow2 -b 后端盘 前端盘
[root@kvmsvr ~]# cd /data/images/
[root@kvmsvr images]# qemu-img create -f qcow2 -b
rhel7_muban.qcow2 rh7_node1.qcow2
.. ..
[root@kvmsvr images]# ls -lh rh*.qcow2
-rw-r--r-- 1 root root198K 12月 9 13:55 rh7_node1.qcow2
-rw-r--r-- 1 qemu qemu 3.2G 12月 7 11:08 rhel7_muban.qcow2   
//对比前端盘、后端盘大小
 
配置新虚拟机
• 拷贝模板机的xml配置
– 按照需要修改,并据此定义新虚拟机
[root@kvmsvr ~]# cp /data/images/rhel7_muban.xml /root/
[root@kvmsvr ~]# vim /root/rhel7_muban.xml
.. ..
[root@kvmsvr images]# virsh define /root/rhel7_muban.xml
定义域 rh7_node1(从 /root/rhel7_muban.xml)
 
新虚拟机的交付使用
• 正常运行快建的新虚拟机
– 检查已有装好的操作系统,登入后不模板机一样
– 用户自行修改主机名/IP地址等参数
[root@kvmsvr images]# virsh list --all
Id        名称            状态
----------------------------------------------------
-        rhel-207        关闭
-        rhel-7        关闭
-        rh7_node1    关闭
.. ..
 
 
案例6:快建新虚拟机
快建2台新的KVM虚拟机,配置要求如下
1)svr7:svr7.tedu.cn,192.168.4.7/24
2)pc207: pc207.tedu.cn,192.168.4.207/24
3)为上述虚拟机配好网络,确认yum源可用
4)从CentOS真机可ssh进程访问这两台虚拟机
 
 
 
离线访问虚拟机
配置虚拟机系统有奇招
• 使用 guestmount 工具
– 支持离线挂载 raw、qcow2 格式虚拟机磁盘
– 可以在虚拟机关机的情况下,直接修改磁盘中的文档
– 方便对虚拟机定制、修复、脚本维护
!!! 需要注意 SELinux 机制的影响
如何挂载虚拟盘
• 基本用法
guestmount -a 虚拟机磁盘路径 -i /挂载点
[root@kvmsvr ~]# mkdir /mnt/kdisk
[root@kvmsvr ~]# guestmount -a node.qcow2 -i /mnt/kdisk
[root@kvmsvr ~]# ls /mnt/kdisk
 
注意,使用之前要装包!!!
# yum  -y install libguestfs-tools-c
# mkdir /mnt/kdisk
# guestmount -a node.qcow2 -i /mnt/kdisk
# echo 密码 | passwd --stdin 用户
# exit
[root@localhost qemu]# sed 's/node/node02/g' centos7.xml > node02.xml
[root@localhost qemu]# qemu-img create -b node.qcow2 -f qcow2 node02.img
[root@localhost qemu]# virsh define node02.xml
[root@localhost qemu]# virsh start node02
[root@localhost qemu]# virsh console node02
 
[root@localhost images]# chroot /mnt/kdisk/
bash: __vte_prompt_command: 未找到命令     //报错解决方案
[root@localhost /]# yum -y install vte-profile
[root@localhost /]# source /etc/profile

猜你喜欢

转载自blog.csdn.net/Perfect11_1/article/details/81636758