openstack部署后实战

分布式部署规则

1、平常都是两台Node安装OpenStack平台,那如果想分布式部署该怎么做?比如:部署两台Nova服务,一台单独的Neutron服务,一台单独的存储节点等。

整体思想:

  • 如果想要部署两台Nova服务,那就在controller节点安装管理端服务,分别在不同的节点安装Nova服务端。并且运行"su -s /bin/sh -c “nova-manage cell_v2 discover_hosts --verbose” nova"命令去发现新添加的Nova节点。如果想把Controller节点也变成一个计算服务节点,也是安装Nova(compute)节点安装的一样,其中修改配置文件时,有许多部分都是已经修改过的,需要修改两点(这里只是大概,具体的操作看实际情况):[VNC]中需要修改,[libvirt]中virt_type = qemu需要修改。

    最后别忘重启systemctl restart libvirtd.service openstack-nova-compute.service服务,这个是点睛之笔。

  • 普遍的情况下,除了controller节点安装neutron组件,每一个安装了Nova节点上需要安装neutron服务。

    如果想单独一台节点作为neutron服务那就直接按照部署在Nova节点的方式一样就行。

    但是记得如果想要云主机能上网,一台neutron需要三个网卡:一个用于提供provider网络(flat),一个用于Vxlan网络,一个用于集群内部通信网络。

  • 如果想要一台节点单独做存储节点的话(这里指的是LVM类型的存储),如果是分布式存储,比如:Ceph,Swift那就另当别论)直接按照cinder客户端的方式安装就行,my_ip别忘修改。

网络实战

1、前面也已经说过了,只要云主机想访问外网,就需要三块网卡:

  • provider网络(flat),这个网络是provider network(物理网络),必须要由admin用户创建,在配置文件中关于flat网络的配置:provider:ens33,实际上就是做了物理网络和虚拟网络的映射,provider可以随意定义,但是在创建flat网络指定物理网络名称是需要指定自定义的名称。我们创建了flat网络后,虚拟机使用了flat网络后,所发出的数据包实际上就是相当于是由ens33网络发出去的数据包,这样只要ens33网卡能上网那云主机也能上网,所以ens33网卡所在的网络类型需要是NAT模式(这个是在VM Workstation说的,因为实验室基于虚拟机做的),当然这个ens33网卡就需要配置网关,DNS等,而且在创建的flat网络时也需要配置网关和DNS,须和ens33的配置信息保持一致。在OpenStack中创建flat网络选上"external(外部网络)",然后共享网络

    当然vlan类型的网络也是一样的。因为flat和vlan在openstack中是属于同一种网络的,只是底层实现效果不一样,具体的:vlan出去的数据包需要打tag,而flat出去的数据包不需要打tag。

    重要思想:就可以把flat网络实现的效果理解为公有云上的公网IP。只要有了它云主机就能上网。

  • Vxlan网络:它是一个虚拟的网络,也叫做tenant network,所以vxlan网络是由tenant(租户创建的)这样它才有实际意义。为啥说Vxlan是个虚拟的网络?因为它本身不需要依赖于具体的物理网络,它不需要和某个物理网络对应,满足Vxlan的条件,在虚拟机上单独添加一块网卡,比如:ens38,这个ens38的类型是NAT,Host Only,桥接都行,并且ens38网卡配置信息,不需要网关。然后在创建Vxlan网络时,首先/etc/neutron/plugins/ml2/linuxbridge_agent.ini 配置文件中的[vxlan]分组中的local_ip = 192.168.17.10,填写本地你想当做Vxlan那块网卡的IP就行了。

    然后是在Openstack中创建Vxlan,网段随便创建,并不需要和实际的物理网络相对应,因为Vxlan是个基于IP叠加的网络,也就是说只要Vxlan底层有个IP就行,网关不用写,这样就行了。

    重要思想:Vxlan网络的效果就相当于公有云中云服务器中的私网IP,它既不能上外网,也不能和其它不同网段的服务器的通信。

    但是想要使得具有Vxlan的网络的云主机能上外网并且和不同网络的云主机通信该怎么解决?

    这就需要路由器,接口,浮动IP的接入了,稍后实战。

2、创建flat网络:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

flat的网络就这样设置,DNS应该不用个ens33的一致,也能上网,但是必须有效。

就这样创建一台云主机并且使用flat网络,云主机就能上网了。

3、密钥对的使用

创建密钥分为两种:

  • 创建密钥对:创建好之后会下载,注意这个密钥只能下载一次,所以妥善保管:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 导入公钥

我们现在服务器上创建个密钥对

#生成密钥对,-t rsa指定rsa算法
[root@controller ~]# ssh-keygen -t rsa 

#copy公钥到openstack中
[root@controller ~]# cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGbJMMjvMc/T0mQAWvjXxCbefIeamvWEk2AAAi3jUudLCsmtzswIFkgNTASiXQbx1OtYkfpPC5seulEAO9+RxPfE4v8G4xQAHC8mERrUavj+L3OUc0le9UsFsxmJ6dC/OJD8+zUOEVvwiku03au7mBYMtn4soBzzHwKuRXJZdkW4yY9GaYmvdOdONmQs4mEP+PPc7CTE7u+npnsdr1BusmyqkIXLGbjnGPMOeOXPmOyhU4PKktZFmGfOqChMbrWGZB/4kDCqcuhuSAK77oauYMTEhBBSIut/ubJYWOsh8hB2jiydsnqZOlVpD6Oat/B6cCv2BiXkIy1ZhJkEk0SsKN root@controller

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

密钥对有了,然后创建云主机,看看如何使用密钥去连接云主机:

在Win的DOC窗口测试,xshell过几天研究。

1、这个是使用密钥对的方式连接

#centos.pem是在下载下来密钥文件
C:\Users\郑波>ssh -i centos.pem cirros@192.168.9.183     #可以看到登陆成功!!!
Warning: Identity file centos.pem not accessible: No such file or directory.
cirros@192.168.9.183's password:
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether fa:16:3e:22:f6:a3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.9.183/24 brd 192.168.9.255 scope global eth0
    inet6 fe80::f816:3eff:fe22:f6a3/64 scope link
       valid_lft forever preferred_lft forever

2、使用导入公钥的方式连接:

[root@controller ~]# ssh cirros@192.168.9.173    #在controller,compute等节点连接可以,在Win上一样也可以。
The authenticity of host '192.168.9.173 (192.168.9.173)' can't be established.
RSA key fingerprint is SHA256:wJuOUWxA/6S++RA0p/bfJpOkmW7MvcJtGn33ia5YCr4.
RSA key fingerprint is MD5:2a:6a:5d:01:ed:22:0d:55:71:39:8c:21:c1:d7:c4:b2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.9.173' (RSA) to the list of known hosts.
cirros@192.168.9.173's password: 
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether fa:16:3e:59:7e:13 brd ff:ff:ff:ff:ff:ff
    inet 192.168.9.173/24 brd 192.168.9.255 scope global eth0
    inet6 fe80::f816:3eff:fe59:7e13/64 scope link 
       valid_lft forever preferred_lft forever
$ 

4、创建Vxlan

在项目中创建的网络默认就是Vxlan网络,在管理员中创建也行。在管理员中创建Vxlan网络需要制定个段ID,只要在配置文件中的范围就行。

这里在项目中创建Vxlan网络,就正常创建即可,这里不再演示。

当然如果想要上外网还需要配置DNS:114.114.114.114(这个随意,只要有效即可),IP池还规定一下吧0.100-0.200

1、重点:现在Vxlan网络和外界是完全不互通的,要想胡同需要创建路由器。因此在创建了Vxlan网络之后,接下来就需要创建路由器。

在项目—>路由中创建路由:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2、重点:创建了路由,我们要在路由中创建个接口。

点击路由器名称—>接口会发现有一个接口了,而且IP是:192.168.9.109,

会显示flat网络中的IP地址,问什么?其实是这样的:这是个路由器,是负责实现nat工作的。我现在想使用Vxlan网络去上网,而Vxlan默认是私网IP不可能可外部网络进行通信,但是现在flat能访问外网啊,因此我们在添加个Vxlan网络的接口,将此接口和192.168.9.109接口做映射,其实就是SNAT,DNAT转换,这一样以来Vxlan就能上网了。

创建如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个网关IP通常是172.30.0.1或172.30.0.254

创建好之后,刷新查看,是否是"UP"的状态,如果是"DOWN"的状态,那就是L3-agent代理配置错了。

接下来使用此Vxlan网络创建实例,检测其网络的可通性。

重点结论!!!:

  • 此时在云主机上可以ping通baidu.com,还可以ping controller,compute等节点,也就是说使用Vxlan网络的云主机已经可以访问外网了。
  • 但是!!!在我Win这个物理机上,或者controller,compute等主机上都不能ping通云主机,

这时如果还想实现外面的平通云主机,就需要浮动IP了(Float IP)

(1)在项目中创建浮动IP:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(2)创建好了浮动IP,我们需要将此浮动IP绑定在"vm02-vxlan"云主机上

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这样绑定之后,在Win上或者controller,compute上就能ping通云主机了,只不过ping的是192.168.9.101,

此时我们可以ssh连接vm02-vxlan主机上。

#需要注意的是,绑定的192.168.9.101浮动IP不会在云主机中显示,云主机是无感知的。
[root@controller ~]# ssh cirros@192.168.9.101
The authenticity of host '192.168.9.101 (192.168.9.101)' can't be established.
RSA key fingerprint is SHA256:pJIDlBRxckl5eeFjVwVT1iJOT1UjqDstgHeqpmmO7uE.
RSA key fingerprint is MD5:3a:51:5e:b2:e2:2d:7c:63:53:b0:b0:79:85:4c:52:11.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.9.101' (RSA) to the list of known hosts.
cirros@192.168.9.101's password: 
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc pfifo_fast qlen 1000
    link/ether fa:16:3e:7c:16:85 brd ff:ff:ff:ff:ff:ff
    inet 172.30.0.193/24 brd 172.30.0.255 scope global eth0
    inet6 fe80::f816:3eff:fe7c:1685/64 scope link 
       valid_lft forever preferred_lft forever

网络拓扑分析

基于以上实验,形成如下网络拓扑

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5、Vxlan使用的一些场景

场景一:同一网络下各子网默认互通

此测试:在同一个Vxlan网络下,其包含的各个子网是否能互通?

答案:默认能互通(标题既是答案)

实验测试:
在vxlan_172.30网络已经有个172.30.0.0/24的网络了,现在在创建个子网:172.30.1.0/24

创建步骤:

  • 创建vxlan_172.30.1

  • 创建路由

  • 基于上述路由创建接口,做NAT映射转换,具体来说时SNAT,因为外部ping不通内部所以没有DNAT,

  • 创建实例,用于检测。为了创建的云主机实例在172.30.1.0/24这个网络下面,我们可以通过指定端口的方式操作。

    在项目—>网络—>网络名称—>端口操作:
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 创建实例。既然指定了端口,那就直接选端口即可。

场景二:不同网络下的子网不能互通,需要添加静态路由实现

实验步骤:

  • 创建个Vxlan_172.40.0网络(172.40.0.0/24)
  • 基于172.40创建个路由
  • 基于路由创建接口,用于SNAT转换
  • 创建云主机实例

现在172.40.0和172.30.0是不互通的,那如何实现互通?
答案:做静态路由

1、记录下40,30外部网关的IP,在路由器中

40的外部网关IP:192.168.9.145

30的外部网关IP:192.168.9.109

2、添加静态路由,现在40网络上面添加:

项目—>路由—>点击40的路由—>静态路由:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那如上配置之后,在40上就可以ping通30了,但是我们没有在30上配置40的静态路由,因此在30上还不能ping通40

3、添加静态路由,在30上面添加,做法和上面一样,不在演示。

这样不同网络的云主机实例就能互相ping通了。

6、实例的升降配与实例的冷迁移

在定义实例规格时,不建议定义根磁盘大小,如果定义,则将所有规格对磁盘大小定义设置为相同

根磁盘大小可以由镜像上传时定义最小根磁盘大小,也可以在创建实例时指定根磁盘大小。

1、实例升降配时均会重启实例

2、实例升降配时需要手动确认,若需要自动确认,需要在计算节点[DEFAULT]部分增加,如下配置:

  • 计算节点上添加,用于实例升降配自动确认,自动确认时间,0是禁止,1代表1s自动确认:

    resize_confirm_window = 1

3、实例升降配会出现实例迁移(当前所在计算节点资源不够时),所以还需要添加如下参数,同时要配置支持冷迁移或热迁移:

  • allow_resize_to_same_host = true
  • allow_migrate_to_same_host = true

但是通常情况下冷迁移会报错,因为一个计算节点资源不够,会迁移到另一个计算节点上去,但由于计算节点的nova用户不能互相通信,所以我们需要进行配置:

冷迁移配置

1、配置计算节点之间nova用户ssh对等性,即互相访问免密登陆

nova用户在安装nova软件时就已经创建了,只是限制登陆,需要修改为允许登陆,这个可以在/etc/passwd中查看。

如下配置:

#设置nova用户可登录
[root@compute01 ~]# usermod -s /bin/bash nova

#给nova用户设置密码,便于后面scp密钥使用,要是不设置密码,还需要切换至root用户去scp密码
[root@compute01 ~]# echo "nova" |passwd --stdin nova

#登陆nova用户
[root@compute01 ~]# su - nova
Last login: Sat Apr 30 10:46:39 EDT 2022 from controller on pts/3
-bash-4.2$ pwd
/var/lib/nova

#生成密钥对
-bash-4.2$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/var/lib/nova/.ssh/id_rsa): 
Created directory '/var/lib/nova/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /var/lib/nova/.ssh/id_rsa.
Your public key has been saved in /var/lib/nova/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:DO85l2PxWiTRVjORpAYEUrJVRgUEm2sqJz0OSzHc7Mc nova@compute01
The key's randomart image is:
+---[RSA 2048]----+
|      o.=BOo..*o |
|       = + o o.o |
|      o o . =    |
|   . o + . +     |
|    + o S o .    |
|     = = . *     |
|    = * E = o    |
|   . B o + +     |
|    . .   .      |
+----[SHA256]-----+

#在一个计算节点生成密钥以及authorized_keys文件
-bash-4.2$ ssh-copy-id compute01


#把密钥scp至每一个计算节点上面:
-bash-4.2$ scp -rp .ssh/ compute02:~/
                     
#注意scp的文件要保证文件的属性一致
#登陆测试
测试本身,测试非本身的登陆
比如我们在compute01上测试 
-bash-4.2$ ssh compute02        #02的免密登陆
Last login: Sun May  1 10:57:00 2022
-bash-4.2$ exit
logout
Connection to compute02 closed.
-bash-4.2$ ssh compute01        #01的也免密登陆  
Last login: Sun May  1 10:49:23 2022
同样在compute02上也测试一下

2、修改配置文件/etc/nova/nova.conf

[DEFAULT]
allow_resize_to_same_host= true      #允许在本机进行迁移
allow_migrate_to_same_host= true
resize_confirm_window=1      #这个和冷迁移关系不大

7、主机聚合

主机聚合(Host Aggregate)允许将硬件进行逻辑分组,并在用户创建实例时能指定对应的组,通常将相同规格硬件计算节点归类在一个组,

1、只有计算节点才能使用主机聚合

2、创建主机聚合时,必须要自定义一个域(可用区/可用域)

3、创建主机聚合时,会自动添加一个元数据avaliability_zone,值默认等于主机聚合名称

4、通过一个计算节点只能归属于一个可用域,即不能同属于两个或两个以上可用域

5、删除主机聚合时,必须先移除该主机聚合组下的所有计算节点,否则无法删除该主机聚合。

6、主机聚合可以让实例创建在指定的计算节点上。大部分情况,实例创建时是由调度器决定创建在哪台计算节点上,但在需要错误排查或编排服务资源分配时,希望能够直接在指定计算节点上创建实例,就可以用到主机聚合来实现。

7、主机聚合可以让管理员对终端用户透明的方式定义计算资源,同时根据目的进行逻辑地分组,当主机分组的元数据与实例类型的元数据匹配,并且使用该类型启动实例时,就会调度主机聚合中的计算节点创建实例。

8、可用域(可用区)是对计算资源的逻辑隔离,用户启动实例时可以选择选择对应的可用域,如果没有自定义可用域,默认为nova域。如果有多个可用域,则用户创建多个实例时可以指定不同的可用域,避免某-个可用域故障带来的问题。

8、主机组与虚拟机调度

主机组与主机聚合作用的对象不同。

主机聚合是针对宿主机计算节点,而主机组是针对虚拟机实例

1、按照关联、不关联、软关联、软不关联四种策略对用户创建的虚拟机进行管理。实现约束虚拟机与虚拟机在物理机上的部署关系。

(1)、关联:将实例创建在同-个计算节点上, 当该计算节点资源不够时就会失败。例如, 2个计算节点,批量创建3个实例, 选择"关联”组,则实例全部创建在其中-个计算节点上, 不会在另-个计算节点若资源不够时将会失败,关联组实例不支持迁移。

(2)、不关联:将实创建在不同计算节点上,当计算节点数等于“不关联“组中实例个数时,再创建实例到“不关联"组就失败。

(3)、软关联:将实例尽量创建在同-个计算节点上,当评估该计算节点资源不够时不会失败,会落到另一个计算节点。

(4)、软不关联:将实例尽量创建在不同计算节点上,当计算节点数量不够时,实例会落到同一个计算节点上。

2、Openstack的虚拟机调度策略默认是用FilterScheduler来实现。通过调度算法实现

(1)、先过滤掉不满足虚机flavor要求的计算节点

(2)、对剩余计算节点进行权重计算

(3)、选取权重值最优的计算节点返回

3、在控制节点上nova.conf中的vailable. filters用于配置可用的fiter,默认所有nova内置的ilter都可以用于过滤操作。 enabled, filters用于指定可用的过滤器。

filter. scheduler将按照enabled. filters值的顺序进行过滤。

[iter. scheduler]

available_ filters=nova.scheduler.fiters.all filters
enabled_fltrs=RtrylilteravailabilityZoneFilter,RamFilter,ComputeFilter,ComputeCapaliltieFilter,ImagePropertiesFilter,ServerGroupAtiftinityFilterServerGroupAinityFilter

  1. RetryFilter
    过滤掉已经尝试过调度且失败的节点
  2. AvibiltyZoneFilter
    为提高容灾性和隔离性,可以将计算节点划分到不同的可用域中,Openstack默认只有一 个命名为"nova"的可用域, 所有计算节点默认都是放在"nova”可用域中,用户可以通过主机聚合创建自定义域,在创建实例时可以选择自定义域。
  3. RamFilter
    将不能满足flavor内存的计算节点过滤掉,为了提高系统的资源使用率,Openstack允许计算节点超额使用内存,也就是可以超过实际内存大小,可通过ram. alocation. ration=1.5 配置,默认初始超比率initial ram. alcation. ratio=1.5.同样还有CPU和磁盘超额配置。
    [DEFAULT]
    cpu
    allocation
    ratio=1.0
    ram_ allocation ratio=1.0
    initial .cpu_ allocation_ ratio=16.0
    initial_ ram_ allocation_ ratio=1.5
    、 ComputeFilter
    确保只能正常的计算节点才能被nova-scheduler调度, ComputeFilter 是必须的过滤器
  4. ComputeCapabiltiesFilter
    根据计算节点的特性来过滤,比如计算节点有x86和ARM架构,如果想指定实例部署到x86_ 64架构节点上,就要使用ComputeCapailisiter,.同时还需要在flavor中添加metadata.添加Architecture=>86. .64
    6、ImagePropertiesFilter
    根据所选image的属性来过滤计算节点跟favor类似,image也有metadata, 用于指定其属性。
  5. ServerGroupfityFiltr (亲和性)
    将实例尽量创建在同一个计算节点上,结合主机组实现.要创建一个关联"主机组或"软关联“组。
    03:53

ram,cpu配额的参数配置

[root@compute02 ~]# vi /etc/nova/nova.conf
[DEFAULT]
cpu_allocation_ratio=1.0
ram_allocation_ratio=1.0
initial_cpu_allocation_ratio=1.0
initial_ram_allocation_ratio=1.0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/132339.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3 使用element plus 打包时 报错

vue3vitetselementPlus中运行正常打包出错 能正常运行&#xff0c;但是打包出错 解决打包时出现导入element plus相关的爆红&#xff0c;导致无法打包的问题 如若出现类似于&#xff1a;Module ‘“element-plus”’ has no exported member ‘ElMessage’. Did you mean to…

94.二叉树的中序遍历

描述 : 给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 题目 : LeetCode 94.二叉树的中序遍历 : 94. 二叉树的中序遍历 分析 : 这个代码还是很好写的 ...... 解析 : /*** Definition for a binary tree node.* public class TreeNode {* int val;…

前端开发项目中使用字体库

开发中有些项目要求使用固定的字体&#xff0c;这就需要项目中使用字体库。 首先需要下载字体库 将下载的字体文件放进项目中 在项目代码样式文件中定义字体 font-face {font-family: "Tobias-SemiBold";src: url("./assets/font/Tobias-SemiBold.ttf"…

Gogs安装和部署教程-centos上

0、什么是 Gogs? Gogs 是一款极易搭建的自助 Git 服务。 Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自助 Git 服务。使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发&#xff0c;并且支持 Go 语言支持的 所有平台&#xff0c;包括 Linux、Mac OS X、Windo…

「题解」环形链表的约瑟夫问题

文章目录 &#x1f349;题目&#x1f349;解析&#x1f34c;创建环形链表&#x1f34c;释放指定节点&#x1f34c;其他思路 &#x1f349;写在最后 &#x1f349;题目 &#x1f349;解析 题目的意思就是从环形链表的第一个节点开始数&#xff0c;数到第 m 的时候释放对应的节点…

CMake教程--QT项目使用CMake

CMake教程--QT项目使用CMake Chapter1 CMake教程--QT项目使用CMake1. Basic Cmake Based Project2. Executable VS Library3. Every module has its own CMakeList.txt in its folder3.1 不推荐的做法&#xff1a;3.2 推荐的做法 4. 强制以Debug, Release, RelWithDebInfo, Min…

Mac安装与配置eclipse

目录 一、安装Java&#xff1a;Mac环境配置&#xff08;Java&#xff09;----使用bash_profile进行配置&#xff08;附下载地址&#xff09; 二、下载和安装eclipse 1、进入eclipse的官网 (1)、点击“Download Packages ”​编辑 (2)、找到macOS选择符合自己电脑的框架选项…

人工智能基础_机器学习023_理解套索回归_认识L1正则---人工智能工作笔记0063

然后上一节我们说了L1,L2正则是为了提高,模型的泛化能力, 提高泛化能力,实际上就是把模型的公式的w,权重值,变小对吧. 然后我们这里首先看第一个L1正则,是怎么做到把w权重变小的 可以看到最上面是线性回归的损失函数,然后 L1可以看到,这个正则,就是在损失函数的基础上给损失…

轻松按需缩放图片像素——批量处理图片,满足不同需求!

在图片使用过程中&#xff0c;我们经常需要按照不同的要求调整图片的像素大小。如果一张一张地手动调整&#xff0c;不仅耗时而且容易出错。这款软件可以帮助您轻松实现批量处理图片&#xff0c;按需缩放图片像素&#xff0c;让您的图片管理更加高效、便捷&#xff01; 第一步…

Vuex持久化插件

Vuex数据默认是存储在内存中的&#xff0c;当然我们也可以将它存储在Local Storage&#xff0c;也可以指定某些数据存储在Local Storage 这样我们就用到了Vuex持久化插件vuex-persistedstate 安装vuex-persistedstate插件 npm install vuex-persistedstate --save 案列&#x…

MPSO-WPA

MPSO-WPA算法 DCAP means ’ discretized Cauchy’s argument principle’ 辅助信息 作者未提供代码

数据结构线性表——带头双向循环链表

前言&#xff1a;小伙伴们好久不见啦&#xff0c;上篇文章我们一起学习了数据结构线性表其一的单链表&#xff0c;了解了单链表的不少好处&#xff0c;但是不可能有完美的数据结构&#xff0c;就算是单链表&#xff0c;也会有很多缺点。 那么今天这篇文章&#xff0c;我们就来…

node插件MongoDB(五)—— 库mongoose 的模块化(五)

文章目录 一、使用mongoose 模块化的原因二、准备工作2. 启动mongo.exe 和mongod.exe 两个程序连接数据库 三、基本模块的拆分1、基本逻辑2、代码3、代码图示说明 四、在index.js 中进一步的拆分1.拆分原因2.新建model文件夹存储文档的结构对象3.代码4.代码实际演示和注意点 一…

用volta管理不同项目node版本

1 什么是volta volta是一个node.js的版本管理工具&#xff0c;你的电脑上安装了很多个node版本&#xff0c;volta可以让你在不同的项目中使用不同版本的node.js,并且可以切换node.js版本 Volta会自动将安装的Node.js版本与该项目绑定&#xff0c;使得您在该项目中执行 node、np…

Linux centos系统中添加磁盘

为了学习与训练文件系统或磁盘的分区、格式化和挂载/卸载&#xff0c;我们需要为虚拟机添加磁盘。根据需要&#xff0c;可以添加多块不同大小的磁盘。具体操作讨论如下&#xff0c;供参考。 一、添加 1.开机前 有两个地方&#xff0c;可选择打开添加硬盘对话框 (1)双击左侧…

2024“点点点”测试员如何上岸测试开发岗?附完整学习路线

有很多人员会不断问自己&#xff0c;自己到底要不要学测试&#xff0c;或者要不要坚持做测试&#xff0c;测试的职业发展到底怎么样&#xff1f;如果你还在迷茫&#xff0c;在到处找各种大牛问类似的问题&#xff0c;我希望这篇文章&#xff0c;你看完能够结束你的这个烦恼&…

iPad系列将在2024年全面更新!

今年还会有新iPad发布吗&#xff1f;答案是否定的。因为早在前几天的季度电话会议上&#xff0c;苹果公司CEO蒂姆・库克就已经宣布&#xff0c;今年不会推出任何新的iPad产品。 这也意味着&#xff0c;今年将是苹果公司自2010年推出首款iPad设备以来&#xff0c;第一次没有发布…

模块化之CJS, AMD, UMD 和 ESM

[[toc]] 模块化优点 防止命名冲突代码复用高维护性CJS, AMD, UMD 和 ESM 历史 ES6之前,JS一直没有自己的模块体系后来社区出现了CommonJS和AMD,CommonJS 主要用于服务器(Node)AMD 主要用于浏览器ES6引入了ESM到此,JS终于有了自己的模块体系,基本上可以完全取代CJS和AMD…

Java基础-面向对象进阶-多态, 包, final, 权限修饰符,代码块

Java基础-面向对象进阶-多态, 包, final, 权限修饰符,代码块 多态多态的概述多态中调用成员的特点多态的优势和弊端多态练习 包final权限修饰符代码块来源Gitee地址 多态 多态的概述 多态: 对象的多种形态多态的前提 有继承/实现关系有父类引用指向子类对象有方法的重写 多态…

ScrollView 与 SliverPadding 的关系

基本页面布局 Scaffold 中有个 ListView&#xff0c;ListView 中有 100 个高 50 的 Container 用作辅助观看&#xff0c;ListView 中第三个元素是一个 GridView&#xff0c;GridView 的滑动效果被禁止。 class GiveView extends GetView<GiveController> {const GiveVi…