当前位置: 首页 > news >正文

OpenStack对接Ceph平台

OpenStack对接Ceph平台

目录
  • OpenStack对接Ceph平台
    • 1、创建后端需要的存储池(ceph-01节点操作)
    • 2、创建后端用户
      • 2.1 创建密钥(ceph-01节点操作)
        • 2.1.1 创建用户client.cinder
        • 2.1.2 创建用户client.glance
        • 2.1.3 创建用户client.cinder-backup
      • 2.2 导出密钥(ceph-01节点操作)
      • 2.3 拷贝密钥
        • 2.3.1 创建存放目录(openstack三节点执行)
        • 2.3.2 拷贝密钥到控制节点(ceph-01节点操作)
        • 2.3.3 拷贝密钥到计算节点(ceph-01节点操作)
    • 3、添加libvirt密钥(计算节点执行)
    • 4、安装ceph客户端(openstack三节点执行)
    • 5、配置glance后端存储
      • 5.1 配置glance后端存储(控制节点执行)
      • 5.2 验证镜像(ceph-01节点执行)
    • 6、配置cinder后端存储
      • 6.1 更改cinder密钥属性(openstack三节点执行)
      • 6.2 修改cinder配置文件
      • 6.3 创建卷类型(控制节点执行)
    • 7、卷备份
      • 7.1 配置卷备份(计算节点执行)
      • 7.2 创建卷备份(控制节点执行)
      • 7.3 验证卷备份(ceph-01节点执行)
    • 8、配置nova集成ceph
      • 8.1 修改nova配置文件(计算节点执行)
      • 8.2 创建实例测试(控制节点执行)
      • 8.3 验证是否到ceph中的vms存储池(ceph-01节点执行)
      • 8.4 热迁移配置(计算节点执行)
      • 8.5 测试是否能互相通信连接,互通测试再进行热迁移
      • 8.6 查看云主机

1、创建后端需要的存储池(ceph-01节点操作)

# cinder卷的存储池
root@ceph-01:~# ceph osd pool create volumes 32# glance存储池
root@ceph-01:~# ceph osd pool create images 32# 备份存储池
root@ceph-01:~# ceph osd pool create backups 32# 创建实例存储池
root@ceph-01:~# ceph osd pool create vms 32
# 查看存储池
root@ceph-01:~# ceph osd pool ls
.mgr
volumes
images
backups
vmsroot@ceph-01:~# ceph osd pool ls detail
pool 1 '.mgr' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 1 pgp_num 1 autoscale_mode on last_change 21 flags hashpspool stripe_width 0 pg_num_max 32 pg_num_min 1 application mgr
pool 2 'volumes' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 24 flags hashpspool stripe_width 0
pool 3 'images' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 27 flags hashpspool stripe_width 0
pool 4 'backups' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 30 flags hashpspool stripe_width 0
pool 5 'vms' replicated size 3 min_size 2 crush_rule 0 object_hash rjenkins pg_num 32 pgp_num 32 autoscale_mode on last_change 33 flags hashpspool stripe_width 0

2、创建后端用户

2.1 创建密钥(ceph-01节点操作)

在ceph上创建cinder、glance、cinder-backup、nova用户创建密钥,允许访问使用Ceph存储池

2.1.1 创建用户client.cinder

# 对volumes存储池有rwx权限,对vms存储池有rwx权限,对images池有rx权限
root@ceph-01:~# ceph auth get-or-create client.cinder mon "allow r" osd "allow class-read object_prefix rbd_children,allow rwx pool=volumes,allow rwx pool=vms,allow rx pool=images"
  • class-read:x的子集,授予用户调用类读取方法的能力
  • object_prefix 通过对象名称前缀。下例将访问限制为任何池中名称仅以 rbd_children 为开头的对象。

2.1.2 创建用户client.glance

# 对images存储池有rwx权限
root@ceph-01:~# ceph auth get-or-create client.glance mon "allow r" osd "allow class-read object_prefix rbd_children,allow rwx pool=images"

2.1.3 创建用户client.cinder-backup

# 对backups存储池有rwx权限
root@ceph-01:~# ceph auth get-or-create client.cinder-backup mon "profile rbd" osd "profile rbd pool=backups"

使用 rbd profile 为新的 cinder-backup 用户帐户定义访问权限。然后,客户端应用使用这一帐户基于块来访问利用了 RADOS 块设备的 Ceph 存储。

2.2 导出密钥(ceph-01节点操作)

# 切换到ceph目录
root@ceph-01:~# cd /etc/ceph/# 导出glance密钥
root@ceph-01:/etc/ceph# ceph auth get client.glance -o ceph.client.glance.keyring# 导出cinder密钥
root@ceph-01:/etc/ceph# ceph auth get client.cinder -o ceph.client.cinder.keyring# 导出cinder-backup密钥
root@ceph-01:/etc/ceph# ceph auth get client.cinder-backup -o ceph.client.cinder-backup.keyring

2.3 拷贝密钥

2.3.1 创建存放目录(openstack三节点执行)

root@controller:~# mkdir /etc/ceph/

2.3.2 拷贝密钥到控制节点(ceph-01节点操作)

# 拷贝glance密钥
root@ceph-01:/etc/ceph# scp ceph.client.glance.keyring root@192.168.200.30:/etc/ceph/# 拷贝cinder密钥
root@ceph-01:/etc/ceph# scp ceph.client.cinder.keyring root@192.168.200.30:/etc/ceph/# 拷贝ceph集群认证配置文件
root@ceph-01:/etc/ceph# scp ceph.conf root@192.168.200.30:/etc/ceph/

2.3.3 拷贝密钥到计算节点(ceph-01节点操作)

# 拷贝cinder密钥
root@ceph-01:/etc/ceph# scp ceph.client.cinder.keyring root@192.168.200.31:/etc/ceph/
root@ceph-01:/etc/ceph# scp ceph.client.cinder.keyring root@192.168.200.32:/etc/ceph/# 拷贝cinder-backup密钥(backup服务节点)
root@ceph-01:/etc/ceph# scp ceph.client.cinder-backup.keyring root@192.168.200.31:/etc/ceph/
root@ceph-01:/etc/ceph# scp ceph.client.cinder-backup.keyring root@192.168.200.32:/etc/ceph/# 拷贝ceph集群认证配置文件
root@ceph-01:/etc/ceph# scp ceph.conf root@192.168.200.31:/etc/ceph/
root@ceph-01:/etc/ceph# scp ceph.conf root@192.168.200.32:/etc/ceph/

3、添加libvirt密钥(计算节点执行)

# 生成密钥(PS:注意,如果有多个计算节点,它们的UUID必须一致)
root@compute-01:~# cd /etc/ceph/
root@compute-01:/etc/ceph# UUID=bf168fa8-8d5b-4991-ba4c-12ae622a98b1
root@compute-01:/etc/ceph# cat >> secret.xml << EOF
<secret ephemeral='no' private='no'><uuid>$UUID</uuid><usage type='ceph'><name>client.cinder secret</name></usage>
</secret>
EOF# 执行命令写入secret
[root@compute01 ~]# virsh secret-define --file secret.xml# 查看添加后端密钥
root@compute-01:/etc/ceph# virsh secret-listUUID                                   Usage
-------------------------------------------------------------------bf168fa8-8d5b-4991-ba4c-12ae622a98b1   ceph client.cinder secret
# 加入key
# 将key值复制出来
[root@compute01 ~]# cat ceph.client.cinder.keyring
AQCvztRk8ssALhAAXshR1E+Y90HvIyxkhal1cQ==[root@compute01 ~]# virsh secret-set-value --secret ${UUID} --base64 $(cat ceph.client.cinder.keyring | grep key | awk -F ' ' '{print $3}')

4、安装ceph客户端(openstack三节点执行)

# 主要作用是OpenStack可调用Ceph资源
root@controller:~# apt install -y ceph-common

5、配置glance后端存储

5.1 配置glance后端存储(控制节点执行)

# 更改glance密钥属性
root@controller:~# chown glance.glance /etc/ceph/ceph.client.glance.keyring# 修改配置文件
root@controller:~# vim /etc/glance/glance-api.conf
root@controller:~# sed -n "14,23p" /etc/glance/glance-api.conf
[glance_store]
# stores = file,http
# default_store = file
# filesystem_store_datadir = /var/lib/glance/images/
stores = rbd,file,http
default_store = rbd
rbd_store_pool = images
rbd_store_user = glance
rbd_store_ceph_conf = /etc/ceph/ceph.conf
rbd_store_chunk_size = 8# 安装缺失aws的模块
root@controller:~# apt install -y python3-boto3# 重启生效ceph配置
root@controller:~# systemctl restart glance-api
# 设置开机自启动
root@controller:~# systemctl enable glance-api# 上传镜像
root@controller:~# openstack image create cirros_v1 --disk-format qcow2 --file cirros-0.4.0-x86_64-disk.img

5.2 验证镜像(ceph-01节点执行)

root@ceph-01:/etc/ceph# rbd ls images

6、配置cinder后端存储

6.1 更改cinder密钥属性(openstack三节点执行)

root@controller:~# chown cinder.cinder /etc/ceph/ceph.client.cinder.keyring

6.2 修改cinder配置文件

控制节点执行

# 指定存储类型,否则在创建卷时,类型为 __DEFAULT__
root@controller:~# vim /etc/cinder/cinder.conf
root@controller:~# sed -n "1,2p" /etc/cinder/cinder.conf
[DEFAULT]
default_volume_type = ceph# 重启服务生效配置
root@controller:~# systemctl restart cinder-scheduler

计算节点执行

root@controller:~# vim /etc/cinder/cinder.conf
root@compute-01:/etc/ceph# sed -n "1,2p;28,39p" /etc/cinder/cinder.conf
[DEFAULT]
enabled_backends = ceph,lvm[ceph]
volume_driver = cinder.volume.drivers.rbd.RBDDriver
rbd_pool = volumes
rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_flatten_volume_from_snapshot = false
rbd_max_clone_depth = 5
rbd_store_chunk_size = 4
rados_connect_timeout = -1
glance_api_version = 2
rbd_user = cinder
rbd_secret_uuid = bf168fa8-8d5b-4991-ba4c-12ae622a98b1
volume_backend_name = ceph# 重启服务生效配置
root@compute-01:/etc/ceph# systemctl restart cinder-volume

6.3 创建卷类型(控制节点执行)

# 创建卷类型
root@controller:~# openstack volume type create ceph# 设置卷类型元数据
root@controller:~# cinder --os-username admin --os-tenant-name admin type-key ceph set volume_backend_name=ceph# 查看存储类型
root@controller:~# openstack volume type list
+--------------------------------------+-------------+-----------+
| ID                                   | Name        | Is Public |
+--------------------------------------+-------------+-----------+
| ccb0cd1e-562a-42e0-b0d0-3818d6910528 | ceph        | True      |
| 5ffdbebe-4f37-4690-8b40-36c6e6c63233 | lvm         | True      |
| c5b71526-643d-4e9c-b0b7-3cdf8d1e926b | __DEFAULT__ | True      |
+--------------------------------------+-------------+-----------+# 创建卷测试
root@controller:~# openstack volume create ceph01 --type ceph --size 1
# 查看volumes存储池是否存在卷
root@ceph-01:/etc/ceph# rbd ls volumes

7、卷备份

7.1 配置卷备份(计算节点执行)

# 安装服务
root@compute-01:/etc/ceph# apt -y install cinder-backup# 更改密钥属性
root@compute-01:/etc/ceph# chown cinder.cinder /etc/ceph/ceph.client.cinder-backup.keyring
# 修改配置文件
root@compute-01:/etc/ceph# vim /etc/cinder/cinder.conf
root@compute-01:/etc/ceph# sed -n "1,9p" /etc/cinder/cinder.conf
[DEFAULT]
backup_driver = cinder.backup.drivers.ceph.CephBackupDriver
backup_ceph_conf=/etc/ceph/ceph.conf
backup_ceph_user = cinder-backup
backup_ceph_chunk_size = 4194304
backup_ceph_pool = backups
backup_ceph_stripe_unit = 0
backup_ceph_stripe_count = 0
restore_discard_excess_bytes = true# 重启生效配置
root@compute-01:/etc/ceph# systemctl restart cinder-backup
# 设置开机自启动
root@compute-01:/etc/ceph# systemctl enable cinder-backup

7.2 创建卷备份(控制节点执行)

root@controller:~# openstack volume backup create --name ceph_backup ceph01

7.3 验证卷备份(ceph-01节点执行)

root@ceph-01:/etc/ceph# rbd ls backups

8、配置nova集成ceph

8.1 修改nova配置文件(计算节点执行)

# 修改nova配置文件
root@compute-01:/etc/ceph# vim /etc/nova/nova.conf
root@compute-01:/etc/ceph# sed -n "1,2p;47,52p" /etc/nova/nova.conf
[DEFAULT]
live_migration_flag = "VIR_MIGRATE_UNDEFINE_SOURCE,VIR_MIGRATE_PEER2PEER,VIR_MIGRATE_LIVE"[libvirt]
images_type = rbd
images_rbd_pool = vms
images_rbd_ceph_conf = /etc/ceph/ceph.conf
rbd_user = cinder
rbd_secret_uuid = bf168fa8-8d5b-4991-ba4c-12ae622a98b1
# 安装qemu支持rbd
root@compute-01:/etc/ceph# apt install -y qemu-block-extra# 重启nova服务生效配置
root@compute-01:/etc/ceph# systemctl restart nova-compute

8.2 创建实例测试(控制节点执行)

# 安全组对应admin项目ID
openstack server create --flavor C1-512MB-1G --image cirros_v1 --security-group default --nic net-id=$(vxlan网络id) --key-name mykey vm02root@controller:/etc/ceph# openstack server create --flavor C1-512MB-1G --image cirros --security-group default --nic net-id=a371c907-a326-4869-ab35-8ea53d838a98 --key-name mykey vm03

8.3 验证是否到ceph中的vms存储池(ceph-01节点执行)

root@ceph-01:/etc/ceph# rbd ls vms
0e1edb02-ec96-46f3-8e03-0599f06a1564_disk

8.4 热迁移配置(计算节点执行)

# 备份配置文件
root@compute-01:/etc/ceph# cp /etc/libvirt/libvirtd.conf{,.bak}# 配置监听地址
root@compute-01:/etc/ceph# vim /etc/libvirt/libvirtd.conf
root@compute-01:/etc/ceph# cat /etc/libvirt/libvirtd.conf
listen_tls = 0
listen_tcp = 1
tcp_port = "16509"
listen_addr = "192.168.200.32"     # 注意自己的主机地址
auth_tcp = "none"
# 备份配置文件
root@compute-01:/etc/ceph# cp /etc/default/libvirtd{,.bak}# 开启监听地址
root@compute-01:/etc/ceph# vim /etc/default/libvirtd
root@compute-01:/etc/ceph# sed -n "3p" /etc/default/libvirtd
LIBVIRTD_ARGS="--listen"
# 屏蔽libvirtd服务
root@compute-01:/etc/ceph# systemctl mask libvirtd.socket libvirtd-ro.socket libvirtd-admin.socket libvirtd-tls.socket libvirtd-tcp.socket# 重启libvirtd生效配置
root@compute-01:/etc/ceph# systemctl restart libvirtd# 重启计算节点nova服务
root@compute-01:/etc/ceph# systemctl restart nova-compute

8.5 测试是否能互相通信连接,互通测试再进行热迁移

# compute-01连接compute-02
root@compute-01:/etc/ceph# virsh -c qemu+tcp://compute-02/system
Welcome to virsh, the virtualization interactive terminal.Type:  'help' for help with commands'quit' to quitvirsh # # compute-02连接compute-01
root@compute-02:/etc/ceph# virsh -c qemu+tcp://compute-01/system
Welcome to virsh, the virtualization interactive terminal.Type:  'help' for help with commands'quit' to quitvirsh #

8.6 查看云主机

# 查看云主机
root@controller:/etc/ceph# openstack server list --all
+--------------------------------------+------+--------+---------------------------------------+--------------------------+-------------+
| ID                                   | Name | Status | Networks                              | Image                    | Flavor      |
+--------------------------------------+------+--------+---------------------------------------+--------------------------+-------------+
| 0e1edb02-ec96-46f3-8e03-0599f06a1564 | vm03 | ACTIVE | Intnal=192.168.100.94                 | cirros                   | C1-512MB-1G |
| 5db90dbb-9a25-46da-8d3a-24334c540d1f | vm02 | ACTIVE | Intnal=192.168.100.202                | N/A (booted from volume) | C1-512MB-1G |
| 77705e1a-8dfb-4b07-886b-c773b4b9be4a | vm01 | ACTIVE | Intnal=192.168.100.81, 192.168.200.59 | cirros                   | C1-512MB-1G |
+--------------------------------------+------+--------+---------------------------------------+--------------------------+-------------+
# 查看需要迁移的云主机详细信息
root@controller:/etc/ceph# openstack server show 0e1edb02-ec96-46f3-8e03-0599f06a1564
+-------------------------------------+----------------------------------------------------------+
| Field                               | Value                                                    |
+-------------------------------------+----------------------------------------------------------+
| OS-DCF:diskConfig                   | MANUAL                                                   |
| OS-EXT-AZ:availability_zone         | nova                                                     |
| OS-EXT-SRV-ATTR:host                | compute-01                                               |
| OS-EXT-SRV-ATTR:hypervisor_hostname | compute-01                                               |
| OS-EXT-SRV-ATTR:instance_name       | instance-00000003                                        |
| OS-EXT-STS:power_state              | Running                                                  |
| OS-EXT-STS:task_state               | None                                                     |
| OS-EXT-STS:vm_state                 | active                                                   |
| OS-SRV-USG:launched_at              | 2023-08-10T13:29:39.000000                               |
| OS-SRV-USG:terminated_at            | None                                                     |
| accessIPv4                          |                                                          |
| accessIPv6                          |                                                          |
| addresses                           | Intnal=192.168.100.94                                    |
| config_drive                        |                                                          |
| created                             | 2023-08-10T13:29:32Z                                     |
| flavor                              | C1-512MB-1G (bcdee760-b585-4455-8a06-825db740e988)       |
| hostId                              | 993f86bcdaeeaac9c515a989902788bf8c3050973d4a5c07a30f97fb |
| id                                  | 0e1edb02-ec96-46f3-8e03-0599f06a1564                     |
| image                               | cirros (ca7a8fff-7296-4907-894d-a84825955ad2)            |
| key_name                            | mykey                                                    |
| name                                | vm03                                                     |
| progress                            | 0                                                        |
| project_id                          | d511671fdcbc408fbe1978da791caa46                         |
| properties                          |                                                          |
| security_groups                     | name='default'                                           |
| status                              | ACTIVE                                                   |
| updated                             | 2023-08-10T13:29:39Z                                     |
| user_id                             | 3a66f914c2804018a416255998dda997                         |
| volumes_attached                    |                                                          |
+-------------------------------------+----------------------------------------------------------+
# 热迁移到另一个计算节点
root@controller:/etc/ceph# nova live-migration 0e1edb02-ec96-46f3-8e03-0599f06a1564 compute-02

相关文章:

OpenStack对接Ceph平台

OpenStack对接Ceph平台 目录 OpenStack对接Ceph平台 1、创建后端需要的存储池(ceph-01节点操作)2、创建后端用户 2.1 创建密钥(ceph-01节点操作) 2.1.1 创建用户client.cinder2.1.2 创建用户client.glance2.1.3 创建用户client.cinder-backup2.2 导出密钥(ceph-01节点操作)2.3 …...

【Vue2】动态组件的使用-切换组件和keep-alive,以及异步组件

目录 想实现切换不同列表展示不同数据方法一方法二&#xff0c;动态组件动态组件的父组件如何传的值动态组件的子组件如何接受传的值 认识keep-alive缓存组件的生命周期 异步组件&#xff0c;单独打包&#xff0c;实现webpack分包&#xff0c;如何对组件进行单独打包&#xff0…...

C++的IO流

目录 C语言的输入与输出 流是什么 CIO流 C标准IO流 C文件IO流 stringstream的简单介绍 在C语言中&#xff0c;如果想要将一个整形变量的数据转化为字符串格式&#xff0c;如何去做&#xff1f; 将数值类型数据格式化为字符串 字符串拼接 序列化和反序列化结构数据 注…...

nodejs+vue+elementui电影订票网站系统_wqc3k

电影订票系统在国内有很多值得借鉴的例子&#xff0c;功能也都趋于完善&#xff0c;因此此次电影订票系统将轻量化开发&#xff0c;要完成以下功能&#xff1a; &#xff08;1&#xff09;要支持完整的用户注册&#xff0c;登录功能&#xff0c;账号的管理通过管理员来实现。 &…...

2023-08-14 linux 串口终端输入长命令不换行,覆盖前面内容,stty命令设置串口终端行列数

一、linux 串口终端输入长命令不换行&#xff0c;覆盖前面内容&#xff0c;现象如下图&#xff1a; 二、解决方法&#xff1a;用stty 命令设置行列数 stty columns 200 stty rows 10三、参考文章 https://www.cnblogs.com/goloving/p/15170537.html 常用Linux串口设备操作命…...

根据指定日期获取周,月,季度,年的第一天和最后一天

1. 根据指定日期获取周&#xff0c;月&#xff0c;季度&#xff0c;年的第一天和最后一天 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date;/*** 根据给定时间获取周、月度、季度、年度开始结束时间*…...

CRMEB商城系统:便捷、安全、多样化的购物方式

商城系统是当今社会商业发展的重要组成部分&#xff0c;它以数字化、网络化的方式提供商品和服务。商城系统通过互联网技术&#xff0c;将商品和消费者紧密连接&#xff0c;方便了购物的流程和效率。 商城系统的特点之一是无国界化。传统实体商店通常受限于地理位置和时间&…...

同步_异步请求和Ajax并利用axios框架简化

目录 同步和异步 原生的Ajax 创建XMLHttpRequest对象 常用方法 常用属性 axios框架 同步和异步 同步请求&#xff1a;发送请求后&#xff0c;会做出回应&#xff0c;回应的内容会覆盖浏览器中的内容&#xff0c;这样会打断其他正常的操作&#xff0c;显得不太友好&#…...

取个对象值导致系统崩溃

取个对象值导致系统崩溃 前言 想必各位小伙经常在项目中遇到一些错误&#xff0c;取对象值的时候&#xff0c;经常报错,又或者某些项目突然就挂经常都是出现在一些对象取值上面&#xff0c;然后就被领导一顿训斥 报错分析 例如&#xff1a; 下面这个报错大家想必不会陌生&am…...

nestjs 基础、使用 passport 来进行鉴权

回顾一些定义 NestJS 部分 Module 模块结构 模块是一个图状引用关系。 模块的实例化有三种模式。默认情况是 singletones 模式&#xff0c;也就是模块可能被引用&#xff0c;但不同的引用处拿的是同一个共享实例&#xff0c;也就是说一个进程有一个唯一的实例被共享。 模块&a…...

1.1 : DNA 螺旋

概述 脱氧核糖核酸(DNA)是负责在所有生物体和大多数病毒中代代相传性状的遗传物质。DNA由两条相互缠绕形成双螺旋的核苷酸链组成。DNA 结构的发现是在近一个世纪的时间里逐步发现的,代表了科学史上最著名、最迷人的故事之一。 DNA 结构详细信息 每条 DNA 链均由称为核苷酸…...

.gitignore匹配规则

目录 1.直接一个名称2.斜杠 /3.符号 *4.问号 &#xff1f;5.感叹号 &#xff01;6.gitkeep 借鉴抖音账号&#xff1a; 渡一前端提薪课 1.直接一个名称 会忽略目录下的所有该名称文件和文件夹&#xff0c;无论嵌套多深。 2.斜杠 / 1.斜杠在开头(/dist)&#xff1a;忽略和.gitig…...

Python-OpenCV中的图像处理-GrabCut算法交互式前景提取

Python-OpenCV中的图像处理-GrabCut算法交互式前景提取 Python-OpenCV中的图像处理-GrabCut算法交互式前景提取 Python-OpenCV中的图像处理-GrabCut算法交互式前景提取 cv2.grabCut(img: Mat, mask: typing.Optional[Mat], rect, bgdModel, fgdModel, iterCount, mode…) img…...

JAVA 鼠标控制与键盘输入控制

核心类&#xff1a;java.awt.Robot 该类是JDK定义的电脑系统的抽象类,可以用来模拟实现鼠标点击与键盘输入等信息 简单实现一个自动抢票代码&#xff1a; Robot rt new Robot();//可以认为是操作间隔的停歇时间&#xff0c;比如等待页面加载&#xff0c;等弹框内容展示等 r…...

VB+SQL宿舍管理系统设计与实现

摘要 统是采用Visual Basic作为前台开发工具,SQL Server作为后台数据库平台的基于C/S的两层模式的管理系统。宿舍管理系统是目前各所高校后勤管理之中的重要部分,如何能科学有效的开展好宿舍管理部分的工作,是当前高校领导人和后勤管理人员关心的问题。因此,宿舍管理部分工…...

自律人生:戒断视频、游戏、小说、躺在床上不玩手机、睡觉前总结和冥想(提升注意力、专注度)

以下是一些方法来戒断视频、游戏、小说、躺在床上不玩手机&#xff0c;以及提高注意力和专注力。 制定计划 制定一个详细的计划&#xff0c;包括要戒断的东西、时间表以及对于成功戒断的奖励。这将帮助你保持目标&#xff0c;让你更容易达到成功。 找到替代品 尝试找到其他…...

学习笔记十四:K8S最小调度单元POD概述

K8S最小调度单元POD概述 k8s核心资源Pod介绍Pod是什么Pod如何管理多个容器Pod网络Pod存储代码自动发版更新收集业务日志 Pod工作方式自主式Pod控制器管理的Pod(防误删除) 如何基于Pod运行应用 k8s核心资源Pod介绍 K8s官方文档&#xff1a;https://kubernetes.io/ K8s中文官方文…...

ARM--day2(cpsr、spsr、数据搬移指令、移位操作指令、位运算操作指令、算数运算指令、比较指令、跳转指令)

.text .global _gcd _gcd:mov r0,#9mov r1,#15b loop loop:cmp r0,r1beq stopsubhi r0,r1bhi loopsubcc r1,r0bcc loopstop:b stop.end用for循环实现1~100之间和5050 .text .global _gcd _gcd:mov r0,#0x0mov r1,#0x1mov r2,#0x64b loop loop:cmp r1,r2bhi stopadd r0,r0,r1ad…...

idea报错:java: 程序包org.springframework.web.bind.annotation不存在

这个错误通常都是maven仓库的问题&#xff0c;试了网上很多方法&#xff0c;都没有解决&#xff0c;如果大家有遇到这个问题&#xff0c;且试了很多方法之后都没有解决&#xff0c;不妨可以试试我这个方法 先编译一下已经写好的代码&#xff0c;这时候会出现以上报错&#xff…...

Android平台GB28181设备接入端如何实现多视频通道接入?

技术背景 我们在设计Android平台GB28181设备接入模块的时候&#xff0c;有这样的场景诉求&#xff0c;一个设备可能需要多个通道&#xff0c;常见的场景&#xff0c;比如车载终端&#xff0c;一台设备&#xff0c;可能需要接入多个摄像头&#xff0c;那么这台车载终端设备可以…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...