小阿轩yx-KVM+GFS 分布式存储系统构建 KVM 高可用
小阿轩yx-KVM+GFS 分布式存储系统构建 KVM 高可用
案例分析
案例概述
- 使用 KVM 及 GlusterFS 技术,结合起来实现 KVM 高可用
- 利用 GlusterFS 分布式复制卷对 KVM 虚拟机文件进行分布存储和冗余
分布式复制卷
- 主要用于需要冗余的情况下把一个文件存放在两个或两个以上的节点,当其中一个节点数据丢失或损坏后,KVM 仍然能够通过卷组找到另一个节点上存储的虚拟机文件,保证虚拟机正常运行
- 节点修复后,GlusterFS 会自动同步同一组卷组里有数据的节点数据
案例前置知识点
GlusterFS 分布式文件系统简介
- 由 Gluster 公司创始人兼首席执行官 Anand BabuPeriasamy 编写
- 于 2011 年 10 月 7 日被 Red Hat 收购
特性
- 可扩展的分布式文件系统
- 可运行与廉价的普通硬件上
- 提供容错功能
- 也可以给大量用户提供总体性能较高的服务
- 可以根据存储需求快速调配存储,内含丰富的自动故障转移功能
- 且摒弃集中元数据服务器的思想
- 适用于数据密集型任务的可扩展网络文件系统
- 免费开源
优势
- 可用于大型的、分布式的、对大量数据进行访问的应用
特点
- GlusterFS 体系结构,将计算、存储和 |0 资源聚合到全局名称空间中,每台服务器都被视为节点,通过添加附加节点或向每个节点添加额外存储来扩展容量。通过在更多节点之间部署存储来提高性能。
- GlusterFS 支持基于文件的镜像和复制、分条、负载平衡、故障转移、调度、磁盘缓存、存储配额、卷快照等功能。
- GlusterFS 各客户端之间无连接,本身依赖于弹性哈希算法,而不是使用集中式或分布式元数据模型。
- GlusterFS 通过各种复制选项提供数据可靠性和可用性,例如复制卷、分布卷。
案例环境
主机 | 操作系统 | 主机名/IP地址 | 主要软件及版本 |
服务器 | CentOS7.9 | node1/192.168.10.101 | GlusterFS 3.10.2 |
服务器 | CentOS7.9 | node2/192.168.10.102 | GlusterFS 3.10.2 |
服务器 | CentoS7.9 | node3/192.168.10.103 | GlusterFS 3.10.2 |
服务器 | CentoS7.9 | node4/192.168.10.104 | GlusterFS 3.10.2 |
服务器 | CentoS7.9 | kvm/192.168.10.201 | KVMGluster-client |
服务器 | CentoS7.9 | kvm/192.168.10.202 | KVMGluster-client |
案例需求
- 部署 GlusterFS 文件系统
- 实现 KVM 虚拟主机不会因宿主机宕机而宕机
案例实现思路
- 安装 KVM
- 所有节点部署 GlusterFS
- 客户端挂载 GlusterFS
- KVM 使用挂载的 GlusterFS 目录创建虚拟机
案例实施
部署 GFS 高可用分布式存储环境
安装部署 KVM 虚拟化平台
部署 GlusterFS
先开启四台机器,并会话同步
- 192.168.10.101
- 192.168.10.102
- 192.168.10.103
- 192.168.10.104
关闭防火墙、内核机制
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
修改 hosts 文件
[root@localhost ~]# vim /etc/hosts
//添加节点
192.168.10.101 node1
192.168.10.102 node2
192.168.10.103 node3
192.168.10.104 node4
192.168.10.201 kvm01
192.168.10.202 kvm02
设置好阿里巴巴仓库
[root@localhost ~]# rm -rf /etc/yum.repos.d/*
[root@localhost ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@localhost ~]# curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
[root@localhost ~]# yum clean all
安装 GlusterFS 包
[root@localhost ~]# yum -y install centos-release-gluster
进入目录查看文件
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
Cent0s-Base.repo ent0S-Gluster-9.mepo Cent0S-Storage-common.repo epel.repo
查看当前查看状态
[root@localhost ~]# yum repolist
这一步的状态都是0,下面解决方法
修改 GlusterFS 文件
[root@localhost yum.repos.d]# vim CentOS-Gluster-9.repo
//修改前
mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=$releasever&repostorage-qluster-9
#baseurl=http://mirror.centos,org/$contentdir/$releasever/storage/$basearch/gluste~-9/
//修改后
#mirrorlist=http://mirrorlist.centos.org?arch=$basearch&release=$releasever&repostorage-qluster-9
baseurl=http://mirrors.aliyun.com/$contentdir/$releasever/storage/$basearch/gluste~-9/
再次查看
[root@localhost ~]# yum repolist
源标识 源名称 状态
base/7/x86 64 Cent0S-7- Base - mirrors.aliyun.com 10,072
centos-gluster9/7/x86_64 Cent0s-7 - Gluster 9 181
epel/x86_64 Extra Packages for Enterprise Linux 7 - x86 64 13,791
extras/7/x86_64 Cent0S-7- Updates - mirrors.aliyun.com 526
updates/7/x86 64 Cent0S-7-Extras - mirrors.aliyun.com 6,173
repolist: 30,743
安装软件包
[root@localhost ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
启动服务并设置开机自启
[root@localhost ~]# systemctl start glusterd
[root@localhost ~]# systemctl enable glusterd
这里取消会话同步
在101上加入其它节点
[root@localhost ~]# gluster peer probe node2
peer probe: success
[root@localhost ~]# gluster peer probe node3
peer probe: success
[root@localhost ~]# gluster peer probe node4
peer probe: success
查看状态
[root@localhost ~]# gluster peer status
Hostname: node2
Uuid:b5f43fc7-2f68-4bf9-8721-eb6d1bbdd98b
State: Peer in Cluster (connected)Hostname: node3
Uuid:bblcdlad-f396-403e-bf68-c96147466043
State: Peer in Cluster (Connected)Hostname: node4
Uuid: ea66c509-4fcf-4b17-9bf-1d7b00608a7e
State: Peer in Cluster (Connected)
开启会话同步
创建目录
[root@localhost ~]# mkdir /data
取消会话同步
在101上创建分布式复制卷
[root@localhost ~]# gluster volume create models replica 2 node1:/data node2:/data node3:/data node4:/data force
volume create: models: success: please start the volume to access data
启动
[root@localhost ~]# gluster volume start models
查看信息
[root@localhost ~]# gluster volume info models
201和202恢复kvm01快照,XShell 连接客户端
- 192.168.10.201
- 192.168.10.202
开启会话同步
打开 hosts 文件添加节点
[root@localhost ~]# vim /etc/hosts
//添加节点
192.168.10.101 node1
192.168.10.102 node2
192.168.10.103 node3
192.168.10.104 node4
安装 glusterfs 客户端软件
[root@kvm01 ~]# yum -y install glusterfs glusterfs-fuse
创建挂载目录
[root@kvm01 ~]# mkdir /kvmdata
挂载 models 卷
[root@kvm01 ~]# mount -t glusterfs node1:models /kvmdata/
修改 fstab 文件
[root@localhost ~]# vi /etc/fstab
//添加配置
node1:models /kvmdata glusterfs defaults,_netdev 0 0
查看挂载卷
[root@kvm01 ~]# df
取消会话同步
进入目录
[root@kvm01 ~]# cd /opt
在201上打开 Xftp把用到的系统镜像上传到/opt目录中。这里直接使用CentOS官方提供的qcow2格式的系统镜像(CentOS-7-x86_64-GenericCloud-2009.qcow2),这个镜像可以直接部署到kvm或openstack的平台中
拷贝镜像到新目录下
[root@kvm01 opt]# cp CentOS-7-x86_64-GenericCloud-2009.qcow2 /kvmdata/test01.qcow2
为系统镜像设置密码
[root@kvm01 ~]# virt-customize -a /kvmdata/test01.qcow2 --root-password password:123
[ 0.0] Examining the guest ...
[ 17.3] Setting a random seed
[ 17.4] Setting passwords
[ 19.3] Finishing off
用新的镜像文件生成虚拟机
[root@kvm01 opt]# virt-install --name=test01 -r 1024 --vcpus=1 --disk device=disk,bus=virtio,path='/kvmdata/test01.qcow2',size=10 -w bridge:br0 --virt-type=kvm --boot hd
登录测试
[root@kvm01 opt]# virt-manager
测试实时迁移环境
配置kvm01的无密码登录环境(生成密钥对)
[root@kvm01 ~]# ssh-keygen -t rsa
把公钥拷贝给kvm02
[root@kvm01 ~]# ssh-copy-id kvm02
kvm01留一份
[root@kvm01 ~]# ssh-copy-id kvm01
配置kvm02的无密码登录环境(生成密钥对)
[root@kvm02 ~]# ssh-keygen -t rsa
拷贝给kvm01
[root@kvm02 ~]# ssh-copy-id kvm01
再拷贝给自己
[root@kvm02 ~]# ssh-copy-id kvm02
将 kvm01 迁移到 kvm02 上
[root@kvm01 opt]# virsh migrate --persistent --undefinesource test01 qemu+ssh://kvm02/system
查看状态
[root@kvm01 opt]# virsh list --all
Id 名称 状态
--------------------------------
查看 kvm02 上的状态
[root@kvm01 opt]# virsh list --allId 名称 状态
----------------------------------------------------1 test01 running
把 kvm02 迁回到 kvm01上
[root@kvm01 opt]# virsh migrate --persistent --undefinesource test01 qemu+ssh://kvm01/system
202上查看状态
[root@kvm02 ~]# virsh list --all
Id 名称 状态
---------------------------------
201再查看状态
[root@kvm01 opt]# virsh list --all
Id 名称 状态
---------------------------------
3 test01 running
创建虚拟机资源
退出 /opt 目录,为配置文件创建共享目录
[root@kvm01 ~]# mkdir /kvmdata/config
将 test01 的配置文件拷贝到共享目录
[root@kvm01 ~]# cp /etc/libvirt/qemu/test01.xml /kvmdata/config/
关闭 test01
[root@kvm01 ~]# virsh shutdown test01
域 test01 被关闭
取消定义 test01 虚拟机
[root@kvm01 ~]# virsh undefine test01
域 test01 已经被取消定义
查看状态
[root@kvm01 ~]# virsh list --all
Id 名称 状态
--------------------------------
重新定义 test01 虚拟机
[root@kvm02 ~]# virsh define /kvmdata/config/test01.xml
定义域 test01 (从 /kvmdata/config/test01.xml)
查看状态
[root@kvm01 ~]# virsh list --all
Id 名称 状态
---------------------------------
- test01 关闭
启动 test01
[root@kvm01 ~]# virsh start test01
域 test01 已开始
再查看状态
[root@kvm01 ~]# virsh list --allId 名称 状态
----------------------------------------------------6 test01 running
202 进入目录并查看状态
[root@kvm02 ~]# cd /kvmdata/
[root@kvm02 kvmdata]# ls
test01.qcow2
[root@kvm02 kvmdata]# virsh list --all
Id 名称 状态
--------------------------------------
部署群集
这里201和202会话同步
设置好阿里巴巴仓库
[root@kvm01 ~]# rm -rf /etc/yum.repos.d/*
[root@kvm01 ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[root@kvm01 ~]# curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
[root@kvm01 ~]# yum clean all
安装群集组件(201和202都要安装)
[root@kvm01 ~]# yum -y install pcs pacemaker fence-agents-all
[root@kvm02 ~]# yum -y install pcs pacemaker fence-agents-all
- Pacemaker 是一个集群管理器。它利用OpenAIS 或 heartbeat提供的消息和成员能力,由辅助节点和系统进行故障检测和回收,实现性群集服务(亦称资源)的高可用性。
- Fence agent是集群管理中的一个概念,用于在发生电源故障或其他故障时确保集群的稳定性。
- pcs 是集群管理的一个守护进程,利用pcs提供的工具可以对集群环境进行状态的管理
查看 passwd 检查 hacluster 账号
[root@kvm01 ~]# cat /etc/passwd
hacluster:x:189:189:cluster user:/home/hacluster:/sbin/nologin
设置密码
[root@kvm01 ~]# passwd hacluster
-
两台 kvm 机器密码要一致
启动服务并设置开机自启
[root@kvm01 ~]# systemctl start pcsd
[root@kvm01 ~]# systemctl enable pcsd
Created symlink from /etc/systemd/system/multi-user.target.wants/pcsd.service to
/usr/lib/systemd/system/pcsd.service.
取消会话同步
认证组成群集的节点(只在kvm01上操作)
[root@kvm01 ~]# pcs cluster auth kvm01 kvm02 -u hacluster -p aptech
kvm01: Authorized
kvm02: Authorized
自动生成配置文件(只在kvm01上操作)
[root@kvm01 ~]# pcs cluster setup --name cluster-kvm kvm01 kvm02
启动群集(只在kvm01上操作)
[root@kvm01 ~]# pcs cluster start --all
kvm01: Starting Cluster (corosync)...
kvm02: Starting Cluster (corosync)...
kvm0l: Starting Cluster (pacemaker)...
kvm@2: Starting Cluster (pacemaker)...
设置开机自启
[root@kvm01 ~]# pcs cluster enable --all
kvm01: Cluster Enabled
kvm02: Cluster Enabled
-
enable:将群集设置为开机自启
201和202查看pcs群集状态
[root@kvm01 ~]# pcs status2 nodes configured
0 resource instances configuredOnline: [ kvm01 kvm02 ]No resource
[root@kvm02 ~]# pcs status2 nodes configured
0 resource instances configuredOnline: [ kvm01 kvm02 ]No resource
关闭其中一个节点
[root@kvm01 ~]# pcs cluster stop kvm01
kvm01: Stopping Cluster (pacemaker)...
kvm01: Stopping Cluster (corosync)...
在另一个节点查看状态
[root@kvm02 ~]# pcs statusOnline: [ kvm02 ]
OFFLINE: [ kvm01 ]
启动服务
[root@kvm01 ~]# pcs cluster start kvm01
kvm01: Starting Cluster (pacemaker)...
kvm01: Starting Cluster (corosync)...
查看状态
[root@kvm02 ~]# pcs status2 nodes configured
0 resource instances configuredOnline: [ kvm01 kvm02 ]No resource
开启会话同步
关闭隔离设备的功能(每个设备都执行)
[root@kvm01 ~]# pcs property set stonith-enabled=false
取消会话同步
向群集中添加资源
[root@kvm01 ~]# pcs resource create test01 VirtualDomain hypervisor="qemu:///system" config="/kvmdata/config/test01.xml" migration_transport=ssh meta allow-migrate="true"Assumed agent name 'ocf:heartbeat:VirtualDomain'(deduced from 'VirtualDomain')
-
meta allow-migrate="true" :允许迁移模式
查看群集状态
[root@kvm01 ~]# pcs status
Cluster name: cluster-kvmWARNINGS:
No stonith devices and stonith-enabled is not falseStack: corosync
Current DC: kvm02 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
Last updated: Wed Aug 31 19:55:48 2022
Last change: Wed Aug 31 19:55:43 2022 by root via cibadmin on kvm012 nodes configured
1 resource instance configuredOnline: [ kvm01 kvm02 ]Full list of resources:test01 (ocf::heartbeat:VirtualDomain): Started kvm01Daemon Status:corosync: active/enabledpacemaker: active/enabledpcsd: active/enabled
KVM 群集验证
kvm01 的状态
[root@kvm01 ~]# virsh list --allId 名称 状态
----------------------------------------------------6 test01 running
查看资源限制
[root@kvm01 ~]# pcs constraint
//查询限制情况,如下显示结果为无限制
Location Constraints:
Ordering Constraints:
Colocation Constraints:
Ticket Constraints:
清除某个 pcs 资源只能在某个主机上运行的限制
[root@kvm01 ~]# pcs resource clear test01
手动迁移
[root@kvm01 ~]# pcs resource move test01
Warning: Creating location constraint cli-ban-test01-on-kvm@l with a score of -INFINITY for resource test@l on node kvm01.
This will prevent test0l from running on kvm0l until the constraint is removed.his will be the case even if kvm0l is the last node in the cluster.
-
会自动选择其他节点进行迁移
201上查看状态
[root@kvm01 ~]# pcs status
Cluster name: cluster-kvm
Stack: corosync
Current DC: kvm01 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
Last updated: Wed Aug 31 21:54:15 2022
Last change: Wed Aug 31 21:52:31 2022 by root via crm_resource on kvm012 nodes configured
1 resource instance configuredOnline: [ kvm01 kvm02 ]Full list of resources:test01 (ocf::heartbeat:VirtualDomain): Started kvm02Daemon Status:corosync: active/enabledpacemaker: active/enabledpcsd: active/enabled
[root@kvm01 ~]# virsh list --allId 名称 状态
----------------------------------------------------- test01 关闭
202上查看状态
[root@kvm02 ~]# virsh list --allId 名称 状态
----------------------------------------------------2 test01 running
-
迁移后,test01运行在kvm02上
查看是否有限制
[root@kvm02 ~]# pcs constraint
Location Constraints:Resource: test0lDisabled on: kvm01(score:-INFINITY)(role: Started)
Ordering Constraints:
Colocation Constraints:
Ticket Constraints:
- Resource: test01:被限制了
202上清除 test01 限制
[root@kvm02 ~]# pcs resource clear test01
202查看限制情况
[root@kvm02 ~]# pcs constraint
//查询限制情况,如下显示结果为无限制
Location Constraints:
Ordering Constraints:
Colocation Constraints:
Ticket Constraints:
201查看限制情况
[root@kvm01 ~]# pcs constraint
//查询限制情况,如下显示结果为无限制
Location Constraints:
Ordering Constraints:
Colocation Constraints:
Ticket Constraints:
202虚拟机挂起模拟故障
201上查看状态
[root@kvm01 ~]# pcs status2 nodes configured
1 resource instance configuredOnline: [ kvm@l ]
OFFLINE: [ kvm02 ]Full list of resources:test01 (ocf::heartbeat:VirtualDomain): Started kvm01
查看状态
[root@kvm01 ~]# virsh list --all
Id 名称 状态
--------------------------------------
5 test01 running
小阿轩yx-KVM+GFS 分布式存储系统构建 KVM 高可用
相关文章:
小阿轩yx-KVM+GFS 分布式存储系统构建 KVM 高可用
小阿轩yx-KVMGFS 分布式存储系统构建 KVM 高可用 案例分析 案例概述 使用 KVM 及 GlusterFS 技术,结合起来实现 KVM 高可用利用 GlusterFS 分布式复制卷对 KVM 虚拟机文件进行分布存储和冗余 分布式复制卷 主要用于需要冗余的情况下把一个文件存放在两个或两个…...
centos安装mysql 5.7版本
因为要继续第二阶段的学习,windows里面的mysql版本,很多设置没有。因此弄了一个虚拟机,安装了centos,在里面安装mysql。 看了《centos安装mysql 5.7版本》里面有设置my.cnf文件,这个在虚拟机里面编辑,手动敲…...
SQL——查询sql执行顺序
在SQL查询中,虽然我们在编写查询时遵循一定的逻辑顺序(SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY),但实际上,数据库在执行这些查询时遵循的是不同的物理执行顺序。这个物理执行顺序是数据库管理系统࿰…...
钉耙编程(3)
1001深度自同构 Problem Description 对于无向图中的点,定义一个点的度为与其相连的边的条数。 对于一棵有根树,定义一个点的深度为该点到根的距离。 对于由若干有根树构成的森林,定义该森林是深度自同构的,当且仅当森林中任意…...
python 线程池处理文件
使用多线程来加速文件复制的过程,可以使用Python的concurrent.futures模块中的ThreadPoolExecutor。代码如下: import glob import os import shutil from concurrent.futures import ThreadPoolExecutordef copy_image(image):imagepath image.replace…...
AI技术和大模型对人才市场的影响
012024 AI技术和大模型 2024年AI技术和大模型呈现出多元化和深入融合的趋势,以下是一些关键的技术方向和特点: 1. 生成式AI 生成式AI(Generative AI)在2024年继续快速发展,它能够创造全新的内容,而不仅仅…...
解释“location”和“position”
Explanation of “Location” and “Position” Location and position are terms often used interchangeably in everyday language, but they can have distinct meanings depending on the context. Below, we explore their definitions, differences, and examples of u…...
Netty 必知必会(三)—— ByteBuf
Netty ByteBuf工作原理,和NIO里ByteBuffer区别? Java NIO 提供了ByteBuffer 作为它 的字节容器,但是这个类使⽤起来过于复杂,⽽且也有些繁琐。 ByteBuf是Netty框架中的一个关键类,专门设计来处理字节数据,…...
芋道以开源之名行下作之事 恬不知耻 标榜自己开源 公开源码+sql 不用再加入知识星球
资源 链接: https://pan.baidu.com/s/1TeuxbAUfLQ5_BqMBF1kniQ?pwdcqud 提 取码: cqud 依次为后端、补充版的sql、前端 此文档内安装部署等一应俱全...
wordpress中,wp_posts 文章的状态 有哪些,分别对应什么数值
在WordPress中,wp_posts 表存储了网站上的所有内容,包括文章(posts)、页面(pages)、自定义文章类型(custom post types)等。这个表有一个名为 post_status 的字段,用于标…...
输入成绩问题(c语言)
1.问题:期中考试开始了,大家想要取得好成绩,争夺前五名,从键盘输入n个学生成绩(不超过40个),输出每组的前五名的成绩 两行,第一行输入一个整数,表示n个学生(…...
基于域名+基于ip+基于端口的虚拟主机+上线商务系统
一、回顾 1.jdk环境 tomcat服务器需要jdk环境 版本对应 tomcat9>jdk1.8 配置系统变量JAVA_HOME sed -i $aexport JAVA_HOME/usr/local/jdk22/ /etc/profile sed -i $aexport PATH$JAVA_HOME/bin:$PATH /etc/profile source /etc/profile java -version java…...
vue每次路由跳转前将页面滚动到顶部
在Vue.js应用中,特别是使用Vue Router进行页面路由管理时,router.beforeEach是一个非常有用的导航守卫(Navigation Guard)。它允许你在路由跳转之前执行一些逻辑,比如权限验证、页面跳转前的数据加载、滚动位置重置等。…...
【Qt】QDateTimeEdit
在Qt中,QDateEdit是用于选择日期的微调框,QTimeEdit是用于选择小时和分钟的微调框 QDateTimeEdit则是基于QDateEdit和QTimeEdit的组合控件,能够同时显示日期和时间,并允许用户以交互方式编辑日期 常用属性 属性说明dateTime时间…...
Redis和Mysql如何保持数据一致性
一般情况下,Redis是用来实现应用和数据库之间读操作得缓存层,主要目的是减少数据库IO,还可以提升数据的IO性能。 当应用程序需要去读取某个数据时,会首先尝试去Redis里面加载,如果命中就直接返回,如果没有…...
Java中Optional相关
Java中Optional相关 orElse 提供默认值以确保不会返回 null。 适用于默认情况下的备选值或简单计算结果。 // 如果 optionalName 为空,返回 "Unknown" Optional<String> optionalName Optional.empty(); String result optionalName.orElse(&q…...
AI在HR候选人关系管理中的革新应用
一、引言 随着人工智能(AI)技术的快速发展,其在人力资源管理(HR)领域的应用也日益广泛。特别是在候选人关系管理方面,AI技术不仅提高了管理效率,还使得候选人体验得到了极大的改善。本文将深入分…...
HTML+CSS+JavaScript制作七夕表白网页(含音乐+自定义文字+烟花特效)
利用HTMLCSSJavaScript制作了一个简单的七夕表白网页: 这是一个简单的表白功能,可以用于小哥哥小姐姐在情人节向心爱的人表白使用点击信封中间的爱心,会出现一封信由信封向外展开,与此同时会有烟花绽放,并且自动播放背…...
【Python机器学习系列】一文教你实现决策树模型可视化(案例+源码)
这是我的第335篇原创文章。 一、引言 决策树是一个有监督分类模型,本质是选择一个最大信息增益的特征值进行输的分割,直到达到结束条件或叶子节点纯度达到阈值。根据分割指标和分割方法,可分为:ID3、C4.5、CART算法。每一种颜色代…...
如何在Python中使用网页抓取API获得Google搜索结果
SERP是搜索引擎结果页的缩写,它是你在百度、谷歌、Bing等搜索引擎中提交查询后所得到的页面。搜索引擎需要给所有页面做排序,把最能解决我们需求的页面展示给我们,企业会非常关注结果页的排序,也就是本企业内容的自然排名情况。手…...
Postman高频面试题及答案汇总(接口测试必备)
Postman在软件测试的面试中,可以说是必考题了,既然是高频考题,当然得为粉丝宝宝们整理一波题库喽~ 一、Postman在工作中使用流程是什么样的? 二、你使用过Postman的哪些功能? 三、Postman如何管理测试环境ÿ…...
JavaEE 初阶(13)——多线程11之“定时器”
目录 一. 什么是“定时器” 二. 标准库的定时器 三. 定时器的实现 MyTimer 3.1 分析思路 1. 创建执行任务的类。 2. 管理任务 3. 执行任务 3.2 线程安全问题 四. 拓展 一. 什么是“定时器” 定时器是软件开发中的一个重要组件,类似于一个“闹钟”࿰…...
2024最新全开源付费进群系统源码二开修复版 支持易支付
内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 全开源付费进群系统源码,开源无加密无授权,优化电脑端访问布局,支持dai理,对接易支付通道,dai理可以配置自己易支付接口&am…...
【奥顺苹果CMS二开泛目录4.X版】PHP站群程序新增首页堆砌关键词新增四套seo模板
演示站(赠送四套模板): https://macfan.qdwantong.com https://macfan2.qdwantong.com https://macfan3.qdwantong.com https://macfan4.qdwantong.com 4.X版程序特色功能: 后台除了可以设置干扰码、转码、插入符号和拼音这…...
day06 项目实践:router,axios
vue组件的生命周期钩子 今天几乎没有讲什么新内容,就是一起做项目,只有一个小小的知识点,就是关于vue组件的生命周期钩子,其中最重要的四个函数—— beforeCreate():组件创建之间执行 created():组件创建…...
⌈ 传知代码 ⌋ 基于矩阵乘积态的生成模型
💛前情提要💛 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间,对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…...
软件测试必备技能
在软件测试领域,以下是一些必备的技能和能力,可以帮助你成为一名优秀的软件测试工程师: 1. 测试基础知识: 熟悉软件测试的基本概念、原则和流程,包括不同类型的测试(如单元测试、集成测试、系统测试&#…...
TL3568编译uboot报错
编译uboot前,需要 ① sudo apt-get install device-tree-compiler 否则会报“ERROR: No dtc” ② sudo apt install python 装个Python2,否则会报“ERROR: No python2”...
qiankun 微前端 隔离子应用样式,解决 ant-design-vue 子应用样式污染问题(已落地)
样式冲突产生原因 先分析乾坤qiankun 构建之后,会根据你的配置 给每个子应用生成一个id, 当加载到对应子应用的时候,就把内容放到对应的id 标签里去, 这样能有效的隔离 js 代码,但是样式是加载在全局的 所以 当两个子…...
一个前后端分离架构的低代码开发平台,支持微服务架构,支持开发SAAS项目(附源码)
前言 在当前的企业软件开发领域,开发者常常面临着代码重复性高、开发效率低、项目周期长等挑战。现有的软件解-决方案往往难以满足快速变化的市场需求,特别是在SAAS项目、企业信息管理系统(MIS)、内部办公系统(OA&…...
好的wordpress主题/网店代运营公司靠谱吗
当我们使用类型number的input输入框的时候,我们可能需要限制输入的位数,这个时候通常会想到maxlength,但是maxlength是在number类型的时候是不支持的,下面是一些解决这种问题的方法。1)max和min max和min是number输入框…...
大型网站开发语言框架工具/软文营销经典案例优秀软文
一:Spring相关API 笔记二程序源码下载 applicationContext:接口类型,代表应用上下文,可以通过其实例获得 Spring 容器中的 Bean 对象 ApplicationContext的实现类 1)ClassPathXmlApplicationContext 它是从类的…...
山西省建设厅网站/seo优化在线诊断
组合优化问题的近似算法 当问题规模为n,近似率ρ(n)满足:max(CC∗,C∗C)≤ρ(n)当问题规模为n,近似率\rho(n)满足:max(\frac{C}{C^*},\frac{C^* }{C})\leq \rho(n)当问题规模为n,近似率ρ(n)满足:max(C∗C,CC∗)≤ρ(n) 顶点覆盖问题 图…...
深圳做网站优化工资多少/百度助手下载安装
Window对象 Window对象是客户端JavaScript程序的全局对象。 计时器 setTimeout() 和 setInterval() 可以用来注册在指定的时间之后单词或重复调用的函数。 Window对象的setTimeout()方法用来实现一个函数在指定的毫秒之后运行。setTimeout()返回一个值,这个值可以…...
一个人可以做网站吗/网址导航哪个好
类定义void threadFn(int max);方法是DefineClass类中定义的私有的方法,可以作为thread的线程处理函数;void startThread(int index);方法用来给外部调用,在类中启动线程;class DefineClass {public: DefineClass(); ~Defin…...
奉贤网站建设公司/公司品牌宣传
一、百度上输入百度地图API 点击进入 二、下拉页面到底部 点击地图快速生成工具,进去 四、当前城市下面的框里输入你想定位的地点,再点击查找 五、下拉网页,网页中间看到生成代码按钮点击,就能看到生成的代码块 (1&…...