ubuntu18.04部署cephfs

比起君子讷于言而敏于行,我更喜欢君子善于言且敏于行。

目录

一. 准备工作(所有节点)

1. /etc/hosts

2. 安装python2

3. 配置普户免密sudo

4. 准备好四块盘,一块hdd+sdd为一组,一台设备上有一组

5. 添加源

二. 安装 Ceph

在node1上执行 ceph-deploy,作为部署节点

三. 创建 Ceph 集群

四. 安装 MON、MGR 到所有节点

1. 一些报错

2. 生成key并分发

在使用 ceph-deploy 工具部署 Ceph 集群时,ceph.client.admin.keyring 文件会自动生成。如果是手动部署 Ceph 集群,需要手动生成 ceph.client.admin.keyring 文件

五. 配置OSD和缓存池

cache-tier + ceph-deploy 模型:SSD 本身作为 单独的缓存池

SSD 作为独立缓存池

SSD 作为 OSD 的 DB/WAL

1. 创建主存储池(用 HDD 组成)

2. 创建缓存池(用 SSD 组成)

3. 创建 OSD ,分别将设备添加为 OSD

报错问题1:[errno 13] RADOS permission denied (error connecting to the cluster) 说明 Ceph 仍然无法通过 client.bootstrap-osd keyring 连接到集群

报错问题2:ceph-volume lvm create: error: GPT headers found, they must be removed on: /dev/sdg意思是 /dev/sdg 上存在 GPT 分区表,Ceph 不允许直接在带有分区表的磁盘上创建 OSD,需要先清理干净。

4. 把缓存池设置为写回模式

Error EINVAL: pool 'cache' is not a tier如果遇到了这个报错,那就先执行5挂接,再执行4设置写回模式

5. 把缓存池挂接到主存储池上(建立Tier关系)

6. 将客户端流量指向缓存池(设置Overlay)

7. 设置缓存池的缓存命中策略为 Bloom 过滤器

8. 设置缓存命中计数和时间周期

9. 设置缓存池最大容量(以字节为单位)

10. 设置缓存池提升对象的读写最短时间(秒)

11. 设置缓存池容量阈值,触发刷写和驱逐操作

12. 设置缓存池最大容量和最大对象数(可选)

13. 设置缓存池对象最短刷写周期(秒)

14. 设置缓存池对象最短驱逐周期(秒)

六. 缓存池卸载流程(以后有需要再用)

1. 禁用缓存池(将缓存模式改为 none)

2. 移除流量指向缓存池(取消 Overlay)

3. 从主存储池中移除缓存池

七. 彻底从集群移除 OSD(以后有需要再用)

1. 查看id号并停止写入数据

2.在 MON 中删除 OSD 注册信息

总结


ubuntu01ubuntu02ubuntu03
MONMONMON
MONMGRMGR
MDSMDS
OSDOSD

由于我只有两台设备有可用的磁盘和ssd,但是mon最少要奇数才能选举。所以第三台我这里只部署mon和mgr,仅参与选举。这样的话,第三台机器哪怕是台虚拟机或者笔记本,都可以。三台机器都是ubuntu18.04


一. 准备工作(所有节点)

1. /etc/hosts

$ cat  /etc/hosts
127.0.0.1	localhost
127.0.1.1	ubuntu01
10.xxx.xxx.xxx  ubuntu01
10.xxx.xxx.xxx	ubuntu02

2. 安装python2

sudo apt-get install python2.7
which  python2.7
sudo ln -s /usr/bin/python2.7 /usr/bin/python2
python2 --version

3. 配置普户免密sudo

echo "ubuntu ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/ubuntu-nopasswd
sudo chmod 440 /etc/sudoers.d/ubuntu-nopasswd
#可以测试一下
sudo -k
sudo ls /root

4. 准备好四块盘,一块hdd+sdd为一组,一台设备上有一组

# 清除所有文件系统签名(wipefs)
sudo wipefs -a /dev/sdb
sudo wipefs -a /dev/sde
sudo wipefs -a /dev/sdf
sudo wipefs -a /dev/sdg#创建新的 GPT 分区表(确保干净)
sudo parted /dev/sdb mklabel gpt
sudo parted /dev/sde mklabel gpt
sudo parted /dev/sdf mklabel gpt
sudo parted /dev/sdg mklabel gptubuntu01$: lsblk /dev/sdb              
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdb    8:16   0  7.3T  0 disk ubuntu01$: lsblk /dev/sde
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sde    8:64   0  1.9T  0 disk ubuntu02$: lsblk /dev/sdf
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdf    8:80   0  7.3T  0 disk ubuntu02$:~/storcli64/Linux OS$ lsblk /dev/sdg
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sdg    8:96   0  1.9T  0 disk 

5. 添加源

wget -q -O- 'https://download.ceph.com/keys/release.asc' | sudo apt-key add -echo "deb https://download.ceph.com/debian-octopus bionic main" | sudo tee /etc/apt/sources.list.d/ceph.listsudo apt-get cleansudo apt-get update

二. 安装 Ceph

在node1上执行 ceph-deploy,作为部署节点

sudo apt install ceph-deploy ceph-common ceph-mds ceph-mon ceph-osd -y#升级的话用这条命令,只升级已安装的 Ceph 包,而不是全新安装。所有节点都执行升级
sudo apt install --only-upgrade ceph ceph-common ceph-mon ceph-osd ceph-mds ceph-mgr ceph-deploy -y#查看版本
ceph --version

三. 创建 Ceph 集群

ceph-deploy new ubuntu01 ubuntu02 ubuntu03

创建完之后会生成一些文件,我们做一下conf的优化,做好后分发

~/ceph-cluster$ ls
ceph.conf  ceph-deploy-ceph.log  ceph.mon.keyringubuntu01:/etc/ceph$ cat ceph.conf
[global]
fsid =  xxxxxx-xxxx-xxxx-xxxx-xxxxx
mon_initial_members = ubuntu01, ubuntu02,ubuntu03
mon_host = 10.xxx.xxx.xxx,10.xxx.xxx.xxx,10.xxx.xxx.xxxpublic_network = 10.xxx.xxx.0/24
cluster_network = 10.xxx.xxx.0/24auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephxosd_journal_size = 2048
osd_pool_default_size = 2
osd_pool_default_min_size = 1# MON节点
[mon.ubuntu-R730xd-01]
host = ubuntu-R730xd-01
mon_addr = 10.xxx.xxx.xxx[mon.ubuntu-R730-02]
host = ubuntu-R730-02
mon_addr = 10.xxx.xxx.xxx[mon.ubuntu-T630]
host = ubuntu-T630
mon_addr = 10.xxx.xxx.xxx# MDS 节点
[mds.ubuntu-R730xd-01]
host = ubuntu-R730xd-01[mds.ubuntu-R730-02]
host = ubuntu-R730-02[client.admin]
keyring = /etc/ceph/ceph.client.admin.keyring[osd]
osd journal size = 10240
###################################################cp ~/ceph-cluster/ceph.conf /etc/ceph/scp /etc/ceph/ceph.conf ubuntu@ubuntu02:/tmp/ssh ubuntu@ubuntu02 'sudo mv /tmp/ceph.conf /etc/ceph/ceph.conf && sudo chmod 644 /etc/ceph/ceph.conf'scp /etc/ceph/ceph.conf ubuntu@ubuntu03:/tmp/ssh ubuntu@ubuntu03 'sudo mv /tmp/ceph.conf /etc/ceph/ceph.conf && sudo chmod 644 /etc/ceph/ceph.conf'

四. 安装 MON、MGR 到所有节点

1. 安装 Ceph 的相关软件包并创建所需目录

ceph-deploy install ubuntu01 ubuntu02 ubuntu03#所有节点创建目录
sudo mkdir -p /var/lib/ceph
sudo chown ceph:ceph /var/lib/ceph
sudo chmod 755 /var/lib/ceph

如果遇到报错版本冲突问题,那就清理一下,重新install

vim /etc/apt/sources.list.d/ceph.list
deb https://download.ceph.com/debian-nautilus/ bionic mainsudo apt-get clean
sudo apt-get update
sudo apt-get purge ceph ceph-osd ceph-mds ceph-mon radosgw ceph-common ceph-mgr librgw2
sudo apt-get autoremoveceph-deploy install ubuntu01 ubuntu02

一些报错

ceph-deploy install 如果遇到[ubuntu01][WARNIN] E: Sub-process /usr/bin/dpkg returned an error code (1)
这个错误是 dpkg 安装包出错 的通用错误码,说明某个包在安装过程中出错了。

先验证系统状态,看是否都在 ii 状态(已安装)。如果都在,就代表系统层面一切 OK。状态是 iU(表示“Unpacked”,但未完全配置),这说明安装过程未完成或中断

dpkg -l | grep ceph

用这个命令它会尝试完成所有“iU”状态软件包的配置,报错也会更详细

sudo dpkg --configure -a

我遇到的报错:Failed to restart lvm2-lvmetad.service: Unit lvm2-lvmetad.socket is masked.lvm2 没有配置成功,导致 ceph-osdceph 也配置失败。

解决方案:解除 mask 并启用 lvm2 的相关服务。然后再去执行sudo dpkg --configure -a,全部ii 状态,那就可以放心的去执行ceph-deploy install  ubuntu01 ubuntu02了。

sudo systemctl unmask lvm2-lvmpolld.socket
sudo systemctl unmask lvm2-lvmpolld.service
sudo systemctl enable lvm2-lvmpolld.socket
sudo systemctl start lvm2-lvmpolld.socketsudo dpkg --configure -a

2. 生成key并分发


在使用 ceph-deploy 工具部署 Ceph 集群时,ceph.client.admin.keyring 文件会自动生成。如果是手动部署 Ceph 集群,需要手动生成 ceph.client.admin.keyring 文件。建议手动生成

#生成 ceph.client.admin.keyring,这个密钥环文件用于管理员用户,执行各种管理操作。
sudo ceph-authtool --create-keyring /etc/ceph/ceph.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'sudo cp /home/ubuntu/ceph-cluster/ceph.client.admin.keyring /etc/ceph/
sudo  chmod 644 /etc/ceph/ceph.client.admin.keyring
sudo  chown ubuntu:ubuntu /etc/ceph/ceph.client.admin.keyring#生成 ceph.mon.keyring
sudo ceph-authtool --create-keyring /etc/ceph/ceph.mon.keyring --gen-key -n mon. --cap mon 'allow *'# 生成 ceph.bootstrap-osd.keyring
sudo ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/ceph.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd'#生成 ceph.bootstrap-mds.keyring
sudo ceph-authtool --create-keyring /var/lib/ceph/bootstrap-mds/ceph.keyring --gen-key -n client.bootstrap-mds --cap mon 'profile bootstrap-mds'sudo cp /var/lib/ceph/bootstrap-mds/ceph.keyring /etc/ceph/ceph.bootstrap-mds.keyringls /etc/ceph/
#应该看到
ceph.client.admin.keyring
ceph.conf
ceph.mon.keyring
ceph.bootstrap-osd.keyring
ceph.bootstrap-mds.keyring#分发到所有节点上
sudo scp /etc/ceph/ceph.mon.keyring ubuntu@ubuntu02:/etc/ceph/
sudo scp /etc/ceph/ceph.bootstrap-osd.keyring ubuntu@ubuntu02:/etc/ceph/
sudo scp /etc/ceph/ceph.bootstrap-mds.keyring ubuntu@ubuntu02:/etc/ceph/
sudo scp /etc/ceph/ceph.mon.keyring ubuntu@ubuntu03:/etc/ceph/
sudo scp /etc/ceph/ceph.bootstrap-osd.keyring ubuntu@ubuntu03:/etc/ceph/
sudo scp /etc/ceph/ceph.bootstrap-mds.keyring ubuntu@ubuntu03:/etc/ceph/sudo mkdir -p /var/lib/ceph/mon/ceph-ubuntu01sudo systemctl start ceph-mon@ubuntu01

ceph.client.admin.keyring Ceph 官方建议它只让 Ceph 用户或 root 读,不能所有人都能读(600 root:root ceph:ceph 或者我们有的用户免密sudo 也可以用哪个账户)一定要保证所有地方的conf和keying全部一致且权限正确,才能执行成功下面的命令

3. 初始化MON、创建MGR

#初始化mon
ceph-deploy mon create-initialceph-deploy --overwrite-conf  mgr create  ubuntu01 ubuntu02 ubuntu03

ceph-deploy mon create-initial 的主要作用是:

  1. 创建第一个监控节点:初始化 Ceph 集群的第一个监控节点。

  2. 生成必要的配置文件:生成 ceph.confceph.client.admin.keyring 文件。

  3. 设置监控节点的密钥:为监控节点生成密钥,并将其存储在密钥环文件中。

  4. 启动监控节点服务:启动监控节点服务,使监控节点开始运行。

五. 配置OSD和缓存池

cache-tier + ceph-deploy 模型:SSD 本身作为 单独的缓存池

理论内容:在 Ceph 存储系统中,SSD 可以被用作独立的缓存池(Cache Pool)或者作为 OSD 的 DB/WA

SSD 作为独立缓存池

优势劣势
高性能:独立缓存池可以显著提高读写性能,特别是对于频繁访问的数据。

成本较高:需要额外的 SSD 设备来构建缓存池,增加了硬件成本。

资源隔离:缓存池与其他存储池隔离,不会互相影响,确保了性能的稳定性。管理复杂:需要额外的管理开销来维护缓存池,包括监控缓存命中率和调整缓存策略。
灵活性:可以根据需要动态调整缓存池的大小和配置。数据一致性:需要确保缓存数据与后端存储的一致性,特别是在缓存失效或故障时。

SSD 作为 OSD 的 DB/WAL

优势劣势
性能提升:将 DB/WAL 放在 SSD 上可以显著提高 OSD 的性能,特别是对于随机写入操作。性能上限:虽然性能有所提升,但可能不如独立缓存池的性能提升明显。
成本效益:不需要额外的 SSD 设备作为缓存池,减少了硬件成本。资源争抢:如果多个 OSD 共享同一个 SSD 设备作为 DB/WAL,可能会发生资源争抢。
简化管理:减少了管理复杂性,因为 DB/WAL 是 OSD 的一部分,不需要额外的缓存管理策略。写入放大:频繁的写入操作可能会导致 SSD 的写入放大问题,影响其寿命。

总结

  • 如果你的应用场景需要极高的读写性能,并且预算允许,使用 SSD 作为独立缓存池是一个不错的选择。

  • 如果你希望在成本和性能之间取得平衡,将 SSD 用作 OSD 的 DB/WAL 是一个更经济的选择。

理论结束,上实践命令

在管理节点ubuntu01执行

1. 创建主存储池(用 HDD 组成)

sudo ceph osd pool create storage 64 64

2. 创建缓存池(用 SSD 组成)

sudo ceph osd pool create cache 64 64

3. 创建 OSD ,分别将设备添加为 OSD

在管理节点执行(会远程操作指定服务器和设备)

# ubuntu01
ceph-deploy osd create ubuntu01:/dev/sdb
ceph-deploy osd create ubuntu01:/dev/sde# ubuntu02
ceph-deploy osd create ubuntu02:/dev/sde
ceph-deploy osd create ubuntu02:/dev/sdg

报错问题1:[errno 13] RADOS permission denied (error connecting to the cluster) 说明 Ceph 仍然无法通过 client.bootstrap-osd keyring 连接到集群
 

# 删除旧的 bootstrap-osd key
sudo ceph auth del client.bootstrap-osd#重新创建 bootstrap-osd key(带正确权限)
sudo ceph auth get-or-create client.bootstrap-osd mon 'profile bootstrap-osd' > /var/lib/ceph/bootstrap-osd/ceph.keyring
sudo chown ceph:ceph /var/lib/ceph/bootstrap-osd/ceph.keyring
sudo chmod 600 /var/lib/ceph/bootstrap-osd/ceph.keyring
#注意:这里使用的是 默认路径 /var/lib/ceph/bootstrap-osd/ceph.keyring,ceph-volume 会自动读取。# 验证 key 是否有效
sudo ceph --cluster ceph --name client.bootstrap-osd --keyring /var/lib/ceph/bootstrap-osd/ceph.keyring -s
#如果能看到集群状态输出(即使 OSD 还没创建),说明 key 有效。
如果仍然报 [errno 13] RADOS permission denied,说明 Mon 没有正确加载 key,需要重启 Mon:sudo systemctl restart ceph-mon@ubuntu-R730-02#创建OSD
sudo ceph-volume lvm create --data /dev/sde
#ceph-volume 会自动使用 /var/lib/ceph/bootstrap-osd/ceph.keyring。
创建完成后可以查看 OSD 是否成功:sudo ceph -s
sudo ceph osd tree

报错问题2:ceph-volume lvm create: error: GPT headers found, they must be removed on: /dev/sdg
意思是 /dev/sdg 上存在 GPT 分区表,Ceph 不允许直接在带有分区表的磁盘上创建 OSD,需要先清理干净。

#完全清理磁盘分区表(注意:会删除磁盘上所有数据):
sudo sgdisk --zap-all /dev/sde
sudo wipefs -a /dev/sde
sudo dd if=/dev/zero of=/dev/sde bs=1M count=100
#sgdisk --zap-all → 删除 GPT/MBR 分区表
wipefs -a → 清除文件系统签名
dd → 清零开头的 100MB,确保无残留数据#确认磁盘干净:应该看到 没有分区。
sudo lsblk /dev/sde
sudo fdisk -l /dev/sde#执行 OSD 创建:
sudo ceph-volume lvm create --data /dev/sde

4. 把缓存池设置为写回模式

ceph osd tier cache-mode cache writeback

Error EINVAL: pool 'cache' is not a tier如果遇到了这个报错,那就先执行5挂接,再执行4设置写回模式
 

5. 把缓存池挂接到主存储池上(建立Tier关系)

ceph osd tier add storage cache

6. 将客户端流量指向缓存池(设置Overlay)

ceph osd tier set-overlay storage cache

7. 设置缓存池的缓存命中策略为 Bloom 过滤器

ceph osd pool set cache hit_set_type bloom

8. 设置缓存命中计数和时间周期

ceph osd pool set cache hit_set_count 1
ceph osd pool set cache hit_set_period 3600

9. 设置缓存池最大容量(以字节为单位)

ceph osd pool set cache target_max_bytes 1000000000000

10. 设置缓存池提升对象的读写最短时间(秒)

ceph osd pool set cache min_read_recency_for_promote 1
ceph osd pool set cache min_write_recency_for_promote 1

11. 设置缓存池容量阈值,触发刷写和驱逐操作

ceph osd pool set cache cache_target_dirty_ratio 0.4
ceph osd pool set cache cache_target_dirty_high_ratio 0.6
ceph osd pool set cache cache_target_full_ratio 0.8

12. 设置缓存池最大容量和最大对象数(可选)

ceph osd pool set cache target_max_bytes 1073741824
ceph osd pool set cache target_max_objects 256

13. 设置缓存池对象最短刷写周期(秒)

ceph osd pool set cache cache_min_flush_age 600

14. 设置缓存池对象最短驱逐周期(秒)

ceph osd pool set cache cache_min_evict_age 1800

六. 生成元数据池启动MDS

#创建元数据池
sudo ceph osd pool create cephfs_meta 64 64#创建CephFS文件系统
sudo ceph fs new cephfs cephfs_meta storage#需要给mds服务新建路径和获取key
#目录名称格式为 ceph-<fs_name>,其中 <fs_name> 是你的 CephFS 文件系统的名称。
sudo mkdir -p /var/lib/ceph/mds/ceph-cephfs#创建key
sudo ceph auth get-or-create mds.cephfs mon 'allow profile mds' mds 'allow *' osd 'allow *'#把key写到mds的数据目录
sudo ceph auth get mds.cephfs -o /var/lib/ceph/mds/ceph-cephfs/keyring
#设置正确的权限
sudo chown -R ceph:ceph /var/lib/ceph/mds/ceph-cephfs
sudo chmod 700 /var/lib/ceph/mds/ceph-cephfs
sudo chmod 600 /var/lib/ceph/mds/ceph-cephfs/keyring#检查并启动 MDS 服务
sudo systemctl status ceph-mds@cephfs
sudo systemctl start ceph-mds@cephfs
sudo systemctl status ceph-mds@cephfs
sudo systemctl enable ceph-mds@cephfs#检查文件系统状态
sudo ceph fs status
sudo ceph mds stat

拿数据的流程是:客户端 → MDS(元数据池)获取文件位置 → 数据池/缓存池读写数据

  • 元数据池(Metadata Pool)

    • 存储的是 目录结构、文件名、权限、文件大小、文件块位置等信息

    • 客户端通过 MDS 请求元数据,MDS 会从元数据池读取这些信息。

  • 数据池(Data Pool)

    • 存储 实际的文件内容块

    • 文件数据先写入数据池,也可以经过缓存层加速。

  • 缓存池(Cache Pool)

    • 挂在数据池 storage 前端,作为 高速缓存

    • 读操作:先到缓存池,如果命中就直接返回,未命中则去数据池取,再更新缓存池。

    • 写操作(写回模式):

      1. 数据先写到缓存池(高速写入)。

      2. 缓存池在触发刷写条件后,把修改的数据异步写回数据池。

七. 缓存池卸载流程(以后有需要再用)

写回模式,要确保缓存池数据刷写到底层池后才移除缓存。可以用下面命令查看缓存池内对象:

rados ls -p cache

手动触发刷写和驱逐:

rados -p cache cache-flush-evict-all

1. 禁用缓存池(将缓存模式改为 none)

ceph osd tier cache-mode cache none

2. 移除流量指向缓存池(取消 Overlay)

ceph osd tier remove-overlay storage

3. 从主存储池中移除缓存池

ceph osd tier remove storage cache

八. 彻底从集群移除 OSD(以后有需要再用)

1. 查看id号并停止写入数据

sudo ceph osd tree## 先把 OSD 从 CRUSH map 中移除(停止写入数据)假设要删除的是4
sudo ceph osd out 4

2.在 MON 中删除 OSD 注册信息

sudo ceph osd crush remove osd.4
sudo ceph auth del osd.4
sudo ceph osd rm 4
#执行完之后再查看一下
sudo ceph osd tree
sudo ceph -s


总结

部署中遇到了很多问题,不只文章中写的这几个,初次接触,难免思绪不够清晰。ubuntu03的机器也是我做OSD发现,MON必须三台否则无法创建成功,才又加到集群中的,可能某些地方写的不正确,望及时指出,我进行更改。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMD+皮尔逊+降噪+重构(送报告+PPT)Matlab程序

1.程序介绍:以含白噪声信号为例&#xff1a;1.对信号进行VMD分解2.通过皮尔逊进行相关性计算3.通过设定阈值将噪声分量和非噪声分量分别提取出4.对非噪声信号进行重构达到降噪效果包含评价指标&#xff1a;% SNR&#xff1a;信噪比% MSE&#xff1a;均方误差% NCC&#xff1a;波…

UE5多人MOBA+GAS 45、制作冲刺技能

文章目录添加技能需要的东西添加本地播放GC添加冲刺tag添加一个新的TA用于检测敌方单位添加冲刺GA到角色中监听加速移动速度的回调创建蒙太奇添加GE添加到数据表中添加到角色中纠错添加技能需要的东西 添加本地播放GC 在UCAbilitySystemStatics中添加 /*** 在本地触发指定的游…

分库分表和sql的进阶用法总结

说下你对分库分表的理解分库分表是⼀种常⽤的数据库⽔平扩展&#xff08;Scale Out&#xff09;技术&#xff0c;⽤于解决单⼀数据库性能瓶颈和存储容量限制的问题。在分库分表中&#xff0c;数据库会根据某种规则将数据分散存储在多个数据库实例和表中&#xff0c;从⽽提⾼数据…

紫金桥RealSCADA:国产工业大脑,智造安全基石

在工业4.0时代&#xff0c;数字化转型已成为企业提升竞争力的核心路径。作为工业信息化的基石&#xff0c;监控组态软件在智能制造、物联网、大数据等领域发挥着关键作用。紫金桥软件积极响应国家“两化融合”战略&#xff0c;依托多年技术积淀与行业经验&#xff0c;重磅推出跨…

朗空量子与 Anolis OS 完成适配,龙蜥获得抗量子安全能力

近日&#xff0c;苏州朗空后量子科技有限公司&#xff08;以下简称“朗空量子”&#xff09;签署了 CLA&#xff08;Contributor License Agreement&#xff0c;贡献者许可协议&#xff09;&#xff0c;加入龙蜥社区&#xff08;OpenAnolis&#xff09;。 朗空量子是一家后量子…

C#WPF实战出真汁08--【消费开单】--餐桌面板展示

1、功能介绍在这节里&#xff0c;需要实现餐桌类型展示&#xff0c;类型点击切换事件&#xff0c;餐桌面板展示功能&#xff0c;细节很多&#xff0c;流程是UI设计布局-》后台业务逻辑-》视图模型绑定-》运行测试2、UI设计布局TabControl&#xff0c;StackPanel&#xff0c;Gri…

2025年机械制造、机器人与计算机工程国际会议(MMRCE 2025)

&#x1f916;&#x1f3ed;&#x1f4bb; 探索未来&#xff1a;机械制造、机器人与计算机工程的交汇点——2025年机械制造、机器人与计算机工程国际会议&#x1f31f;MMRCE 2025将汇聚全球顶尖专家、学者及行业领袖&#xff0c;聚焦机械制造、机器人和计算机工程领域的前沿议题…

Vue Router 嵌套路由与布局系统详解:从新手到精通

在Vue单页应用开发中&#xff0c;理解Vue Router的嵌套路由机制是构建现代管理后台的关键。本文将通过实际案例&#xff0c;深入浅出地解释Vue Router如何实现布局与内容的分离&#xff0c;以及<router-view>的嵌套渲染原理。什么是嵌套路由&#xff1f;嵌套路由是Vue Ro…

Grafana 与 InfluxDB 可视化深度集成(二)

四、案例实操&#xff1a;以服务器性能监控为例 4.1 模拟数据生成 为了更直观地展示 Grafana 与 InfluxDB 的集成效果&#xff0c;我们通过 Python 脚本模拟生成服务器性能相关的时间序列数据。以下是一个简单的 Python 脚本示例&#xff0c;用于生成 CPU 使用率和内存使用量…

.net印刷线路板进销存PCB材料ERP财务软件库存贸易生产企业管理系统

# 印刷线路板进销存PCB材料ERP财务软件库存贸易生产企业管理系统 # 开发背景 本软件原为给苏州某企业开发的pcb ERP管理软件&#xff0c;后来在2021年深圳某pcb 板材公司买了我们的软件然后在此基础上按他行业的需求多次修改后的软件&#xff0c;适合pcb板材行业使用。 # 功能…

基于飞算JavaAI的可视化数据分析集成系统项目实践:从需求到落地的全流程解析

引言&#xff1a;为什么需要“可视化AI”的数据分析系统&#xff1f; 在数字化转型浪潮中&#xff0c;企业/团队每天产生海量数据&#xff08;如用户行为日志、销售记录、设备传感器数据等&#xff09;&#xff0c;但传统数据分析存在三大痛点&#xff1a; 技术门槛高&#xff…

MqSQL中的《快照读》和《当前读》

目录 1、MySQL读取定义 1.1、锁的分类 1.2、快照读与当前读 1.3、使用场景 1.4、区别 2、实现机制 2.1、实现原理 2.2、隔离级别和快照联系 1、隔离级别 2、快照读 2.3、快照何时生成 3、SQL场景实现 3.1、快照读 3.2、当前读 4、锁的细节&#xff08;与当前读相…

【Docker项目实战】使用Docker部署Notepad轻量级记事本

【Docker项目实战】使用Docker部署Notepad轻量级记事本一、 Notepad介绍1.1 Notepad简介1.2 Notepad特点1.3 主要使用场景二、本次实践规划2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、下载Note…

开疆智能ModbusTCP转Ethernet网关连接FBOX串口服务器配置案例

本案例是串口服务器通过串口采集第三方设备数据转成ModbusTCP的服务器后欧姆龙PLC通过Ethernet连接到网关&#xff0c;读取采集到的数据。具体配置过程如下。配置过程&#xff1a;Fbox做从站FBox采集PLC数据&#xff0c;通过Modbus TCP Server/Modbus RTU Server协议配置地址映…

Vue中的数据渲染【4】

目录1.页面样式绑定&#xff1a;1.概述&#xff1a; 2.绑定方式&#xff1a;1.通过类名绑定&#xff1a;1.通过动态类名绑定&#xff1a;&#xff08;&#xff1a;class&#xff09;2.通过类名数组绑定&#xff1a;3.通过类名对象进行绑定&#xff1a;2.内联样式绑定&#xff1…

LeeCode 39.组合总和

给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。candidates 中的 同一个 数字可以 无限制重复被选取 。如果…

基于Python3.10.6与jieba库的中文分词模型接口在Windows Server 2022上的实现与部署教程

该教程详细阐述了在Windows Server 2022上基于Python3.10.6与jieba库实现并部署中文分词模型接口的完整流程&#xff0c;涵盖技术栈&#xff08;Python3.10.6、jieba、Flask、Waitress、Nginx、NSSM等&#xff09;与环境准备&#xff08;Python安装、虚拟环境配置、依赖包安装及…

java基础(九)sql基础及索引

一、NoSQL 和 SQL 数据库的区别1. 基本概念SQL 数据库&#xff08;关系型数据库&#xff09; 代表产品&#xff1a;SQL Server, Oracle, MySQL (开源), PostgreSQL (开源)。 存储方式&#xff1a;结构化数据&#xff0c;逻辑上以二维表&#xff08;行 & 列&#xff09;形式…

ffmpeg-调整视频分辨率

ffmpeg -i input.mp4 -vf scale1280:720 output_1280x720.mp4-i input.mp4: 指定输入视频文件。-vf scale1280:720: 使用 scale 视频滤镜&#xff0c;将视频宽度设置为 1280 像素&#xff0c;高度设置为 720 像素。output_1280x720.mp4: 指定输出视频文件。 16&#xff1a;9 常…

前端vue3+后端spring boot导出数据

有个项目需要提供数据导出功能。 该项目前端用vue3编写&#xff0c;后端是spring boot 2&#xff0c;数据库是mysql8。 工作流程是&#xff1a;1&#xff09;前端请求数据导出 2&#xff09;后端接到请求后&#xff0c;开启一个数据导出线程&#xff0c;然后立刻返回信息到前端…