Linux虚拟化————KVM
1、安装kvm虚拟化套件
[root@bogon ~]# yum -y install virt*
2、启动服务
[root@bogon ~]# systemctl start libvirtd
[root@bogon ~]# systemctl status libvirtd
● libvirtd.service - Virtualization daemonLoaded: loaded (/usr/lib/systemd/system/libvirtd.service; disabled; preset: disabled)Active: active (running) since Fri 2024-03-15 18:27:06 CST; 1s ago
......
libvirtd:可以管理虚拟化
3、命令行删除默认的Linux bridge
查看虚拟网桥,这个网桥是在安装虚拟化软件之后会自动创建出来的
[root@bogon ~]# ip a show virbr0
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000link/ether 52:54:00:2d:af:d0 brd ff:ff:ff:ff:ff:ffinet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0valid_lft forever preferred_lft forever
安装管理libvirt-client,可以使用这个来管理提供的网桥
[root@bogon ~]# yum -y install libvirt-client
[root@bogon ~]# virsh net-list --allName State Autostart Persistent
--------------------------------------------default active yes yess
清理网桥
[root@bogon ~]# virsh net-undefine default
Network default has been undefined[root@bogon ~]# virsh net-list --allName State Autostart Persistent
--------------------------------------------default active no no
4、通过nmcli创建Linux bridge
[root@bogon ~]# nmcli connection add con-name vm-bridge ifname vm-bridge type bridge ipv4.method disabled ipv6.method ignore
5、关闭selinux和防火墙
[root@bogon ~]# sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
[root@bogon ~]# setenforce 0
[root@bogon ~]# systemctl disable firewalld.service --now
6、使用cloud镜像
KVM虚拟化创建的虚拟机,虚拟磁盘的后缀名叫做qcow2,当你通过图形创建了一个虚拟机之后,将会生成一个qcow2的虚拟机磁盘文件,里面就有你安装的操作系统,但是作为一个运维人员不可能每次都装系统,一般多多少少都会偷点懒,所以就出现了一个叫做模板化部署虚拟机的方法
无论是ubuntu还是centos还是fedora还是debian这类主流的linux发行版本,官方都会给你qcow2的模板
AlmaLinux:Generic Cloud (Cloud-init) | AlmaLinux Wiki
centos-steam:CentOS Cloud images
rocky:Cloud Images | Rocky Linux
7、下载cloud镜像
[root@bogon ~]# wget https://repo.almalinux.org/almalinux/9/cloud/x86_64/images/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2
8、创建虚拟机
通过cloud image使用命令行创建虚拟机
下载virt-install
[root@bogon ~]# yum -y install virt-install
[root@bogon ~]# mkdir /opt/image_qcow2 -p
[root@bogon ~]# mv AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2 /opt/image_qcow2/
创建虚拟机
[root@bogon ~]# virt-install --name AlmaLinux-1 --memory 1024 --vcpus 1 --import --os-variant almalinux9 --disk path=/opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2,bus=virtio --network bridge=vm-bridge,model=virtio --noautoconsole
WARNING KVM acceleration not available, using 'qemu'
WARNING Requested memory 1024 MiB is less than the recommended 1536 MiB for OS almalinux9Starting install...
Creating domain... | 00:00:00
Domain creation completed.
[root@bogon ~]# virsh listId Name State
-----------------------------1 AlmaLinux-1 running
-
--memory:虚拟机内存 -
--vcpus:虚拟机cpu -
--import:将现有虚拟机导入 -
--os-variant:虚拟机类型 -
--disk:磁盘路径 -
bus=virtio:设置驱动磁盘类型可以识别成为vda,vdb等,如果不加,就会识别成sda,sdb -
--network:设置网卡 -
model=virtio:设置网卡驱动,使用virtio -
--noautoconsole:设置命令行启动
进入控制台
[root@bogon ~]# virsh console AlmaLinux-1
Connected to domain 'AlmaLinux-1'
Escape character is ^] (Ctrl + ])
Ctrl + ]可以退出控制台
已经创建了虚拟机,我们也能访问到虚拟机的控制台,但是我们进不去,我们只能在外面蹭蹭,所以呢,究极难受,因为我们不知道root用户的密码
9、删除虚拟机
virsh destroy [name]:关机
virsh undefine [name]:删除
[root@bogon ~]# virsh listId Name State
-----------------------------1 AlmaLinux-1 running
[root@bogon ~]# virsh destroy AlmaLinux-1
Domain 'AlmaLinux-1' destroyed
[root@bogon ~]# virsh undefine AlmaLinux-1
Domain 'AlmaLinux-1' has been undefined
[root@bogon ~]# virsh listId Name State
--------------------
10、自定义cloud image
qcow2文件是可以修改的,但是需要工具,这个工具的名字叫做libguestfs
下载libguestfs
[root@bogon ~]# yum -y install libguestfs libguestfs-tools-c
修改qcow2密码
[root@bogon ~]# virt-customize -a /opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2 --root-password password:000000 --selinux-relabel
[ 0.0] Examining the guest ...
[ 55.5] Setting a random seed
[ 55.6] Setting the machine ID in /etc/machine-id
[ 55.6] Setting passwords
[ 70.1] SELinux relabelling
[ 183.0] Finishing off
拉起虚拟机
[root@bogon ~]# virt-install --name AlmaLinux-1 --memory 1024 --vcpus 1 --import --os-variant almalinux9 --disk path=/opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2,bus=virtio --network bridge=vm-bridge,model=virtio --noautoconsole
WARNING KVM acceleration not available, using 'qemu'
WARNING Requested memory 1024 MiB is less than the recommended 1536 MiB for OS almalinux9Starting install...
Creating domain... | 00:00:00
Domain creation completed.
进入虚拟机
...
localhost login: root
Password:
[root@localhost ~]#
11、配置网络
配置虚拟机AlmaLinux-1的网络
[root@localhost ~]# nmcli con add con-name static-eth0 type ethernet ipv4.address 172.24.10.20/24 ipv4.method man
[root@localhost ~]# ip a show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 52:54:00:78:34:cc brd ff:ff:ff:ff:ff:ffaltname enp1s0inet 172.24.10.20/24 brd 172.24.10.255 scope global noprefixroute eth0valid_lft forever preferred_lft foreverinet6 fe80::4613:29fd:e79:e20a/64 scope link noprefixroute valid_lft forever preferred_lft forever
配置host的网络
[root@bogon ~]# nmcli connection modify vm-bridge ipv4.address 172.24.10.3/24 ipv4.method manual
[root@bogon ~]# nmcli connection up vm-bridge
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)
[root@bogon ~]# ip a show vm-bridge
3: vm-bridge: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ffinet 172.24.10.3/24 brd 172.24.10.255 scope global noprefixroute vm-bridgevalid_lft forever preferred_lft forever
由于网桥是十分脆弱的,当改了网桥之后,就需要重新桥接上去
简单的方式,重启
[root@bogon ~]# virsh destroy AlmaLinux-1
[root@bogon ~]# virsh start AlmaLinux-1
12、重新拉起虚拟机,配置额外的磁盘空间
创建lv
[root@bogon ~]# pvcreate /dev/sda Physical volume "/dev/sda" successfully created.
[root@bogon ~]# vgcreate data /dev/sda Volume group "data" successfully created
[root@bogon ~]# lvcreate -n data -L 9G dataLogical volume "data" created.
重新拉起虚拟机
[root@bogon ~]# virsh destroy AlmaLinux-1
Domain 'AlmaLinux-1' destroyed
[root@bogon ~]# virsh undefine AlmaLinux-1
Domain 'AlmaLinux-1' has been undefined
[root@bogon ~]# virt-install --name AlmaLinux-1 --memory 1024 --vcpus 1 --import --os-variant almalinux9 --disk path=/opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2,bus=virtio --disk path=/dev/data/data,bus=virtio --disk path=/dev/sdb,bus=virtio --network bridge=vm-bridge,model=virtio --noautoconsole
data
[root@bogon ~]# virt-install --name AlmaLinux-1 --memory 1024 --vcpus 1 --import --os-variant almalinux9 --disk path=/opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2,bus=virtio --disk path=/dev/data/data,bus=virtio --disk path=/dev/sdb,bus=virtio --network bridge=vm-bridge,model=virtio --noautoconsole
data
[root@bogon ~]# virt-install --name AlmaLinux-1 --memory 1024 --vcpus 1 --import --os-variant almalinux9 --disk path=/opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2,bus=virtio --disk path=/dev/data/data,bus=virtio --disk path=/dev/sdb,bus=virtio --network bridge=vm-bridge,model=virtio --noautoconsole
WARNING Requested memory 1024 MiB is less than the recommended 1536 MiB for OS almalinux9Starting install...
Creating domain... | 00:00:00
Domain creation completed.
13、将cloud镜像文件的根分区扩大
因为根分区是标准的分区,所以没办法使用逻辑卷的方法进行扩容,所以我们要用到一个工具叫做virtresize
删除虚拟机
[root@bogon ~]# virsh destroy AlmaLinux-1
Domain 'AlmaLinux-1' destroyed[root@bogon ~]# virsh undefine AlmaLinux-1
Domain 'AlmaLinux-1' has been undefined
查看qcow2的磁盘情况
[root@bogon ~]# virt-filesystems --long -h --all -a /opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2
Name Type VFS Label MBR Size Parent
/dev/sda1 filesystem unknown - - 1.0M -
/dev/sda2 filesystem vfat - - 200M -
/dev/sda3 filesystem xfs - - 448M -
/dev/sda4 filesystem xfs - - 9.2G -
/dev/sda1 partition - - - 1.0M /dev/sda
/dev/sda2 partition - - - 200M /dev/sda
/dev/sda3 partition - - - 512M /dev/sda
/dev/sda4 partition - - - 9.3G /dev/sda
/dev/sda device - - - 10G -
创建一个19G的qcow2文件,用来“夺舍”
[root@bogon ~]# qemu-img create -f qcow2 /opt/os_qcow2/os.qocow2 19G
Formatting '/opt/os_qcow2/os.qocow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=20401094656 lazy_refcounts=off refcount_bits=16
查看创建的这个qcow2文件
[root@bogon ~]# qemu-img info /opt/os_qcow2/os.qcow2
image: /opt/os_qcow2/os.qcow2
file format: qcow2
virtual size: 19 GiB (20401094656 bytes)
disk size: 196 KiB
cluster_size: 65536
Format specific information:compat: 1.1compression type: zliblazy refcounts: falserefcount bits: 16corrupt: falseextended l2: false
Child node '/file':filename: /opt/os_qcow2/os.qcow2protocol type: filefile length: 192 KiB (197120 bytes)disk size: 196 KiBFormat specific information:extent size hint: 1048576
使用新创建的9G的qcow2文件来替换原来的qcow2文件,这里的磁盘是指qcow2里的磁盘
[root@bogon ~]# virt-resize --expand /dev/sda1 /opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2 /opt/os_qcow2/os.qcow2
[ 0.0] Examining /opt/image_qcow2/AlmaLinux-9-GenericCloud-9.3-20231113.x86_64.qcow2100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
**********Summary of changes:virt-resize: /dev/sda1: This partition will be resized from 1.0M to 9.0G.virt-resize: /dev/sda2: This partition will be left alone.virt-resize: /dev/sda3: This partition will be left alone.virt-resize: /dev/sda4: This partition will be left alone.**********
[ 21.2] Setting up initial partition table on /opt/os_qcow2/os.qcow2
[ 35.6] Copying /dev/sda1
[ 35.6] Copying /dev/sda2
[ 36.8] Copying /dev/sda3100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00
[ 40.7] Copying /dev/sda4100% ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒⟧ 00:00virt-resize: Resize operation completed with no errors. Before deleting
the old disk, carefully check that the resized disk boots and works
correctly.
查看新的文件,可以看到虚拟磁盘变大了
[root@bogon ~]# virt-filesystems --long -h --all -a /opt/os_qcow2/os.qcow2
Name Type VFS Label MBR Size Parent
/dev/sda1 filesystem unknown - - 9.0G -
/dev/sda2 filesystem vfat - - 200M -
/dev/sda3 filesystem xfs - - 448M -
/dev/sda4 filesystem xfs - - 9.2G -
/dev/sda1 partition - - - 9.0G /dev/sda
/dev/sda2 partition - - - 200M /dev/sda
/dev/sda3 partition - - - 512M /dev/sda
/dev/sda4 partition - - - 9.3G /dev/sda
/dev/sda device - - - 19G -
使用新的qcow2拉起虚拟机
[root@bogon ~]# virt-install --name AlmaLinux-1 --memory 1024 --vcpus 1 --import --os-variant almalinux9 --disk path=/opt/os_qcow2/os.qcow2,bus=virtio --disk path=/dev/data/kvm,bus=virtio --network bridge=vm-bridge,model=virtio --noautoconsole
WARNING Requested memory 1024 MiB is less than the recommended 1536 MiB for OS almalinux9Starting install...
Creating domain... | 00:00:00
Domain creation completed.
14、XML文件
[root@bogon ~]# ll /etc/libvirt/qemu/AlmaLinux-1.xml
-rw------- 1 root root 7110 Apr 11 08:26 /etc/libvirt/qemu/AlmaLinux-1.xml
如果virsh destory之后再virsh undefine虚拟机,这个文件就会消失。
如果你的xml文件做过高度定制化修改,那么一定要备份,下次拉起虚拟机就应该是用virsh define/path/xxx.xml,因为有一些xml文件支持的高级部分并不被virt-install的所有参数所支持。
相关文章:
Linux虚拟化————KVM
1、安装kvm虚拟化套件 [rootbogon ~]# yum -y install virt* 2、启动服务 [rootbogon ~]# systemctl start libvirtd [rootbogon ~]# systemctl status libvirtd ● libvirtd.service - Virtualization daemonLoaded: loaded (/usr/lib/systemd/system/libvirtd.service; di…...
【b站李同学的Lee】Part 2 模块化开发 NodeJS+Gulp基础入门+实战
课程地址:【NodeJSGulp基础入门实战】 https://www.bilibili.com/video/BV1aE411n737/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 4 Node.js模块化开发 4.1 JavaScript开发弊端 4.1.1 文件依赖 4.1.2 命名冲突 4.2 生活中的…...
AI大模型日报#0415:贾佳亚团队新作王炸、马斯克首款多模态大模型、ChatGPT to B
导读: 欢迎阅读《AI大模型日报》,内容基于Python爬虫和LLM自动生成。目前采用“文心一言”生成了每条资讯的摘要。标题: 融合ChatGPTDALLE3,贾佳亚团队新作开源:识图推理生图一站解决 摘要: 贾佳亚团队推出了多模态模型Mini-Gem…...
基于GRU实现评论文本情感分析
一、问题建模 在线评论的细粒度情感分析对于深刻理解商家和用户、挖掘用户情感等方面有至关重要的价值,并且在互联网行业有极其广泛的应用,主要用于个性化推荐、智能搜索、产品反馈、业务安全等。此博文,共包含6大类20个细粒度要素的情感倾…...
【C 数据结构】线性表
文章目录 【 1. 线性表 】【 2. 顺序存储结构、链式存储结构 】【 3. 前驱、后继 】 【 1. 线性表 】 线性表,全名为线性存储结构,线性表结构存储的数据往往是可以依次排列的(不考虑数值大小顺序)。 例如,存储类似 {1…...
C++初级----list(STL)
1、 list介绍 1.1、 list介绍 1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。 1. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向 其前一…...
web安全学习笔记(9)
记一下第十三课的内容。 准备工作:在根目录下创建template目录,将login.html放入其中,在该目录下新建一个reg.html。在根目录下创建一个function.php 一、函数声明与传参 PHP中的函数定义和其他语言基本上是相同的。我们编辑function.php …...
【Python-基础】字符串合集
字符串格式化 f # 例如: # f{train_path}/{f}: 将train_path字符串和f字符串结合 # f{root}.csv:将root字符串和.csv字符串结合判断字符串是否以…结尾 root.endswith(".csv") # True未待完续…...
Scala之List
列表 不可变列表(List) 在Scala中,通过List来定义不可变列表,需要注意的是,List本身是一个抽象类,所以并不能直接使用List来构建对象,需要使用它的伴生对象来构建 package com.fesco.listimport scala.::object ListD…...
Springboot+Vue项目-基于Java+MySQL的在线视频教育平台系统(附源码+演示视频+LW)
大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &…...
Java IO流-字节流
简介 IO流的输入与输出,都在站在内存的角度来看的,因为毕竟是和内促你打交道的嘛! 分类 IO流是可以根据方向,或者最小单位进行划分的 上述两两结合一下,就得到四种大的分类 IO流的继承体系 字节输入流InputStream 创建…...
第十五届蓝桥杯复盘python大学A组——试题B 召唤数学精灵
按照正常思路解决,由于累乘消耗大量时间,因此这不是一个明智的解决方案。 这段代码执行速度非常慢的原因在于它试图计算非常大的数的阶乘(累乘),并且对于每一个i的值都执行这个计算。阶乘的增长是极其迅速的ÿ…...
网络通信——常见结构及强联网游戏和弱联网游戏区别
声明:本文为个人笔记,用于学习研究使用非商用,内容为个人研究及综合整理所得,若有违规,请联系,违规必改。 网络通信——常见结构及强联网游戏和弱联网游戏区别 文章目录 网络通信——常见结构及强联网游戏和…...
如何安装PyFluent
0.什么是PyFluent? 官方介绍如下: PyFluent 是 PyAnsys 生态系统的一部分, 允许您在所选的 Python 环境中结合使用 Fluent 与其他 PyAnsys 库和外部 Python 库一起使用。 PyFluent 实现了客户端-服务器体系结构。它使用谷歌遥控器 过程调用或 gRPC 接…...
Qt 2 QMapQHashQVector类实例
1. QMap // 1:QMap的使用// 创建一个QMap 实例 key 为 QString value 为 intQMap<QString,int> Grade;// 插入方式有两种插入方式// 1.map[key] valueGrade["语文"] 90;Grade["数学"] 120;// 2.map.insert(key,value);Grade.insert("英语&qu…...
使用Git将文件夹上传到Github以及使用Git LFS上传大文件
使用Git将文件夹上传到Github以及使用Git LFS上传大文件...
1.SCI各模块
1.学会“抄” 写论文,一定要学会“抄”!这样才能事半功倍,尤其是对于初次写作的新手,否则写作过程一定会让你痛不欲生,而且写出来的东西就是一坨shi,不仅折磨自己,也折磨导师。 写论文与建大楼…...
记录shell编程中$1,$@等符号的含义
笔者最近老是遇到shell中的$相关的题目,于是打算写篇文章记录一下。考虑到并没有特别多需要解释的内容,所以并不会进行介绍,上图上表上代码,让机器说话,machine always right test.sh #/bin/bash echo $# $# echo …...
单链表的应用
文章目录 目录1. 单链表经典算法OJ题目1.1 [移除链表元素](https://leetcode.cn/problems/remove-linked-list-elements/description/)1.2 [链表的中间节点](https://leetcode.cn/problems/middle-of-the-linked-list/description/)1.3 [反转链表](https://leetcode.cn/problem…...
手机副业赚钱秘籍:让你的手机变成赚钱利器
当今社会,智能手机已然成为我们生活不可或缺的一部分。随着技术的飞速进步,手机不再仅仅是通讯工具,而是化身为生活伴侣与工作助手。在这个信息爆炸的时代,我们时常会被一种焦虑感所困扰:如何能让手机超越消磨时光的定…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
