Ceph异地数据同步之-RBD异地同步复制(上)

news2025/4/8 18:38:12

#作者:闫乾苓

文章目录

  • 前言
  • 基于快照的模式(Snapshot-based Mode)
    • 工作原理
    • 单向同步配置步骤
    • 单向同步复制测试
    • 双向同步配置步骤
    • 双向同步复制测试

前言

Ceph的RBD(RADOS Block Device)支持在两个Ceph集群之间进行异步镜像复制,提供了两种主要模式:基于日志(Journal-based)和基于快照(Snapshot-based)。这两种模式各有优缺点,适用于不同的场景和需求。
根据所需的复制需求,RBD 镜像可以配置为单向或双向复制:

  • 单向复制:当数据仅从主群集镜像到辅助群集时,rbd-mirror守护进程仅在辅助群集上运行。
  • 双向复制:当数据从一个集群上的主映像镜像到另一个集群上的非主映像(反之亦然)时, rbd-mirror守护进程在两个集群上运行。

基于快照的模式(Snapshot-based Mode)

工作原理

  • 使用定期计划或手动创建的RBD镜像快照来进行集群间的复制。
  • 远程集群会比较两个快照之间的数据或元数据更新,并将差异部分复制到其本地副本。
  • 利用RBD的快速差异(fast-diff)功能,可以快速确定哪些数据块发生了变化,而无需扫描整个RBD镜像。

优点:

  • 低延迟写入:不需要额外的日志记录,写操作不会显著增加延迟。
  • 灵活性:可以根据需要手动创建快照或设置自动快照策略,灵活适应不同的业务需求。

缺点:

  • 较粗粒度:与基于日志的模式相比,快照模式不够精细,需要同步完整的差异部分,而不是逐个写操作。
  • 恢复时间较长:在故障切换时,如果部分差异未完全应用,则需要回滚到上一个完整快照状态,可能会导致更长的恢复时间。

适用场景:
对写性能要求较高且能接受一定延迟的应用,如文件存储、备份等。

单向同步配置步骤

在这里插入图片描述

  1. 在两个ceph集群上登录到cephadm shell
[root@ceph01 ~]# cephadm shell
[root@ceph-a ~]# cephadm shell
  1. 在site-b集群中ceph-b节点部署 rbd-mirror 守护进程
[ceph: root@ceph-a /]# ceph orch apply rbd-mirror ceph-b
Scheduled rbd-mirror update...

查看守护进程是否正常启动

[ceph: root@ceph-a /]# ceph orch ls |grep rbd-mirror
rbd-mirror                      1/1  5m ago     4h   ceph-b
  1. 在源集群site-a新建1个存储池名为data,并启用 RBD 应用程序,在池data中创建1个名为image1的image
[ceph: root@ceph01 /]#  ceph osd pool create data
pool 'data' created
[ceph: root@ceph01 /]# ceph osd pool application enable data rbd
enabled application 'rbd' on pool 'data'
[ceph: root@ceph01 /]# rbd create --size 1024 data/image1
  1. 在目标集群site-b新建1个同名存储池data,并启用 RBD 应用程序,不用创建image
[ceph: root@ceph-a /]# ceph osd pool create data
pool 'data' created
[ceph: root@ceph-a /]# ceph osd pool application enable data rbd
enabled application 'rbd' on pool 'data'
  1. 在site-a,site-b两个存储集群中选择 mirroring 模式为image
[ceph: root@ceph01 /]# rbd mirror pool enable data image
[ceph: root@ceph-a /]# rbd mirror pool enable data image
  1. 验证两个集群都已成功启用了镜像模式为pool
[ceph: root@ceph01 /]# rbd mirror pool info data
Mode: image
Site Name: 0978cb18-dc68-11ef-b0d7-000c29460ffd
Peer Sites: none
[ceph: root@ceph-a /]# rbd mirror pool info data
Mode: image
Site Name: baedc6c0-e058-11ef-a23a-000c29cf8329
Peer Sites: none
  1. 在site-a集群创建 Ceph 用户帐户,并将存储集群对等注册到池,将 bootstrap 令牌文件复制到site-b存储集群。
[ceph: root@ceph01 /]# rbd mirror pool peer bootstrap create --site-name site-a data > /root/bootstrap_token_site-a
  1. 在site-b集群中导入bootstrap令牌
[ceph: root@ceph-a /]# rbd mirror pool peer bootstrap import --site-name site-b --direction rx-only data /root/bootstrap_token_site-a

注意:对于单向 RBD 镜像功能,必须使用–direction rx-only参数,因为在引导 对等时双向镜像是默认设置。

  1. 在site-a集群 data池中为需要同步的image启用镜像快照同步功能
[ceph: root@ceph01 /]# rbd mirror image enable data/image1 snapshot
Mirroring enabled
  • site-a集群验证镜像同步复制状态
[ceph: root@ceph01 /]# rbd mirror image status data/image1
image1:
  global_id:   6f6c3690-df01-49dd-9508-f7c944fbcd9a
  snapshots:
    3 .mirror.primary.6f6c3690-df01-49dd-9508-f7c944fbcd9a.3da61eb1-7512-44c2-b4e9-8d6a987e1a9c (peer_uuids:[f9128159-df9f-43eb-be57-4f798da002cc])
  • site-b集群验证镜像同步复制状态
[ceph: root@ceph-a /]# rbd mirror image status data/image1
image1:
  global_id:   6f6c3690-df01-49dd-9508-f7c944fbcd9a
  state:       up+replaying
  description: replaying, {"bytes_per_second":0.0,"bytes_per_snapshot":0.0,"last_snapshot_bytes":0,"last_snapshot_sync_seconds":0,"local_snapshot_timestamp":1738897439,"remote_snapshot_timestamp":1738897439,"replay_state":"idle"}
  service:     ceph-b.tglrho on ceph-b
  last_update: 2025-02-07 03:06:22

如果镜像处于up+replaying状态,表示可以正常工作。up表示rbd-mirror守护进程正在运行,replaying表示此镜像是从另一个存储集群复制的目标。

单向同步复制测试

在同一个client端服务器映射及挂载2个集群的rbd image, 在源集群site-a写入测试数据,手动触发快照,查看数据是否同步到目标集群site-b的同名池。

  1. 准备两个集群的conf,keyring文件
    将cephadm shell 所在容器中/etc/ceph/下的conf,keyring文件复制到client服务器/etc/ceph目录并修改文件名字以示区别。
[ceph: root@ceph01 /]# ls -l /etc/ceph/
-rw------- 1 ceph ceph 323 Jan 27 05:48 ceph.conf
-rw------- 1 root root 151 Feb  7 02:35 ceph.keyring

[root@cilent ~]# ll /etc/ceph/
-rw-r--r--. 1 root root  92 10月 18  2023 rbdmap
-rw-r--r--  1 root root 186  2月  5 19:14 site-a.client.admin.keyring
-rw-r--r--  1 root root 304  2月  5 19:13 site-a.conf
-rw-r--r--  1 root root 186  2月  5 19:20 site-a.keyring
-rw-r--r--  1 root root 186  2月  5 19:15 site-b.client.admin.keyring
-rw-r--r--  1 root root 337  2月  5 19:13 site-b.conf
  1. 使用rbd map 映射源集群site-a中data/image到client本地dev设备
[root@cilent ~]#  rbd map image1 --pool data -c /etc/ceph/site-a.conf  -k /etc/ceph/site-a.client.admin.keyring
/dev/rbd0

[root@cilent ~]# lsblk  |grep rbd0
rbd0             252:0    0    1G  0 disk
  1. 将rbd0格式化并mount到目录
[root@cilent mnt]# mkfs.xfs /dev/rbd0
Discarding blocks...Done.
[root@cilent mnt]# mkdir site-a site-b
[root@cilent mnt]# ll
drwxr-xr-x 2 root root 4096  2月  7 11:41 site-a
drwxr-xr-x 2 root root 4096  2月  7 11:41 site-b
[root@cilent mnt]# mount /dev/rbd0 /mnt/site-a
[root@cilent mnt]# df -h |grep site-a
/dev/rbd0                1014M   40M  975M    4% /mnt/site-a
  1. 在挂载点/mnt/site-a 使用dd写入2个100M大小的测试文件
[root@cilent mnt]# dd if=/dev/zero of=/mnt/site-a/100M-$(date +%F_%H%M%S) bs=1M count=100
[root@cilent mnt]# tree
.
├── site-a
│   ├── 100M-2025-02-07_114953
│   └── 100M-2025-02-07_115007
└── site-b

在没同步前查看两个集群data pool的磁盘使用信息
在这里插入图片描述
在这里插入图片描述

  1. 在源集群site-a中手动为data/image1创建快照
[ceph: root@ceph01 /]# rbd mirror image snapshot data/image1
Snapshot ID: 4
  1. 在site-b集群查看同步信息已更新

在这里插入图片描述
在这里插入图片描述

  1. 在client服务器将site-a集群rbd image取消挂载,删除map映射,
[root@cilent mnt]# umount /mnt/site-a
[root@cilent mnt]#  rbd unmap image1 --pool data -c /etc/ceph/site-a.conf  

-k /etc/ceph/site-a.client.admin.keyring

[root@cilent mnt]# tree 
.
├── site-a
└── site-b

  1. 在site-a集群将data/image1降级为非主image
[ceph: root@ceph01 /]# rbd mirror image demote data/image1
Image demoted to non-primary
在site-b集群将data/image1提升为主image
[ceph: root@ceph-a /]# rbd mirror image promote data/image1
Image promoted to primary
  1. site-b集群map映射及挂载rbd image并查看数据是否同步
[root@cilent mnt]#  rbd map image1 --pool data -c /etc/ceph/site-b.conf  -k /etc/ceph/site-b.client.admin.keyring/dev/rbd0

[root@cilent mnt]# lsblk |grep rbd
rbd0             252:0    0    1G  0 disk
数据已同步
[root@cilent mnt]# mount /dev/rbd0 /mnt/site-b/
[root@cilent mnt]# tree 
.
├── site-a
└── site-b
    ├── 100M-2025-02-07_114953
    └── 100M-2025-02-07_115007
  1. 此时rab map不能映射site-a集群的data/image,因为已降级为非主,因只有主镜像有写权限,以避免数据冲突。

在这里插入图片描述
11. 在client服务器上取消挂载及site-b集群的data/image的映射。

[root@cilent mnt]# umount /mnt/site-b/
[root@cilent mnt]#  rbd unmap image1 --pool data -c /etc/ceph/site-b.conf  -k /etc/ceph/site-b.client.admin.keyring
  1. 在site-b集群将data/image降级为非主image
[ceph: root@ceph-a /]# rbd mirror image demote data/image1
Image demoted to non-primary

13.在site-a集群将data/image提升为主image

[ceph: root@ceph01 /]# rbd mirror image promote data/image1
Image promoted to primary

14.在site-b集群查看镜像同步状态,此时为split-brain(脑裂)状态
在这里插入图片描述

  1. 在site-b集群请求到site-a源镜像的重新同步
    [ceph: root@ceph-a /]# rbd mirror image resync data/image1
    Flagged image for resync from primary
    Site-b同步状态过程如下:
[ceph: root@ceph-a /]# rbd mirror image status data/image1
rbd: error opening image image1: (2) No such file or directory

[ceph: root@ceph-a /]# rbd mirror image status data/image1
image1:
  global_id:   6f6c3690-df01-49dd-9508-f7c944fbcd9a
  state:       down+unknown
  description: status not found
  last_update:

此时恢复正常同步状态

[ceph: root@ceph-a /]# rbd mirror image status data/image1
image1:
  global_id:   6f6c3690-df01-49dd-9508-f7c944fbcd9a
  state:       up+replaying
  description: replaying, {"bytes_per_second":10615398.4,"bytes_per_snapshot":106153984.0,"last_snapshot_bytes":0,"last_snapshot_sync_seconds":0,"local_snapshot_timestamp":1738909767,"remote_snapshot_timestamp":1738909767,"replay_state":"idle"}
  service:     ceph-b.tglrho on ceph-b
  last_update: 2025-02-07 06:38:22
  1. 设置镜像快照定时策略
    使用基于快照的镜像时,每当需要镜像 RBD 映像的更改内容时,都需要创建镜像快照。
    默认情况下,每个image映像最多可创建5个快照。如果达到限制,则会自动删除最新的镜像快照。如果需要,可以通过配置选项覆盖该限制rbd_mirroring_max_mirroring_snapshots 。此外,当删除映像或禁用镜像时,会自动删除镜像快照。
    可自定义了镜像快照计划,用于定期自动创建镜像快照。

镜像快照可以全局、按池或按映像级别进行安排。可以在任何级别定义多个镜像快照计划,但只有与单个镜像匹配的最具体的快照计划才会运行。
可以分别使用d、h、m、start-time后缀以天、小时或分钟为单位指定。

rbd mirror snapshot schedule add [--pool {pool-name}] [--image {image-name}] {interval} [{start-time}]

比如:在site-a集群中对data池下的image1制定每分钟创建1个快照的策略。

[ceph: root@ceph01 /]# rbd mirror snapshot schedule add --pool data --image image1 1m
[ceph: root@ceph01 /]# rbd mirror snapshot schedule ls --pool data --recursive
POOL  NAMESPACE  IMAGE   SCHEDULE
data             image1  every 1m

双向同步配置步骤

双向同步并非双向实时同步,只是在单向同步的基础上通过在源集群也部署rbd-mirror守护进程,在出现故障时,通过手动切换集群镜像的主辅角色,实现快速可以反向同步。
在这里插入图片描述

  1. 在两个ceph集群上登录到cephadm shell
[root@ceph01 ~]# cephadm shell
[root@ceph-a ~]# cephadm shell
  1. 在site-a集群中ceph02节点部署 rbd-mirror 守护进程
[ceph: root@ceph01 /]# ceph orch apply rbd-mirror ceph02
Scheduled rbd-mirror update...
在site-b集群中ceph-b节点部署 rbd-mirror 守护进程
[ceph: root@ceph-a /]# ceph orch apply rbd-mirror ceph-b
Scheduled rbd-mirror update...
查看守护进程是否正常启动
[ceph: root@ceph01 /]# ceph orch ls|grep rbd
rbd-mirror                      1/1  8s ago     20s  ceph02

[ceph: root@ceph-a /]# ceph orch ls |grep rbd       
rbd-mirror                      1/1  14s ago    24s  ceph-b  
  1. 在源集群site-a新建1个存储池名为data,并启用 RBD 应用程序,在池data中创建1个名为image1的image
[ceph: root@ceph01 /]#  ceph osd pool create data
pool 'data' created
[ceph: root@ceph01 /]# ceph osd pool application enable data rbd
enabled application 'rbd' on pool 'data'
[ceph: root@ceph01 /]# rbd create --size 1024 data/image1

查看创建的image的信息
在这里插入图片描述

  1. 在目标集群site-b新建1个同名存储池data,并启用 RBD 应用程序,不用创建image
[ceph: root@ceph-a /]# ceph osd pool create data
pool 'data' created
[ceph: root@ceph-a /]# ceph osd pool application enable data rbd
enabled application 'rbd' on pool 'data'
  1. 在site-a,site-b两个存储集群中选择 mirroring 模式为image
[ceph: root@ceph01 /]# rbd mirror pool enable data image
[ceph: root@ceph-a /]# rbd mirror pool enable data image
  1. 验证两个集群都已成功启用了镜像模式为pool
[ceph: root@ceph01 /]# rbd mirror pool info data
Mode: image
Site Name: 0978cb18-dc68-11ef-b0d7-000c29460ffd
Peer Sites: none 

[ceph: root@ceph-a /]# rbd mirror pool info data
Mode: image
Site Name: baedc6c0-e058-11ef-a23a-000c29cf8329
Peer Sites: none
  1. 在site-a集群创建 Ceph 用户帐户,并将存储集群对等注册到池,将 bootstrap 令牌文件复制到site-b存储集群。
[ceph: root@ceph01 /]# rbd mirror pool peer bootstrap create --site-name site-a data > /root/bootstrap_token_site-a
  1. 在site-b集群中导入bootstrap令牌
[ceph: root@ceph-a /]# rbd mirror pool peer bootstrap import --site-name site-b data /root/bootstrap_token_site-a
  1. 在site-a集群 data池中为需要同步的image启用镜像快照同步功能
[ceph: root@ceph01 /]# rbd mirror image enable data/image1 snapshot
Mirroring enabled
  1. site-a集群验证镜像同步复制状态
[ceph: root@ceph01 /]# rbd mirror image status data/image1

在这里插入图片描述
up 表示 rbd-mirror 守护进程正在运行,stopped 意味着此镜像不是从另一个存储集群复制的目标。这是因为镜像是这个存储集群的主要部分
peer_sites 显示了对等节点(site-b)的状态为up+replaying
说明此时的同步方向为site-a site-b

  1. site-b集群验证镜像同步复制状态
[ceph: root@ceph-a /]# rbd mirror image status data/image1

在这里插入图片描述
如果镜像处于up+replaying状态,表示可以正常工作。up表示rbd-mirror守护进程正在运行,replaying表示此镜像是从另一个存储集群复制的目标。
peer_sites 显示了对等节点的状态为up+stopped

双向同步复制测试

  1. 在client服务器端映射site-a集群的data池的image1,格式化并mount到挂载点目录。
[root@cilent mnt]#  rbd map image1 --pool data -c /etc/ceph/site-a.conf  -k /etc/ceph/site-a.client.admin.keyring
/dev/rbd0
[root@cilent mnt]# mkfs.xfs /dev/rbd0
[root@cilent mnt]# mount /dev/rbd0 /mnt/site-a
  1. dd写入1个100M的文件进行测试
[root@cilent site-a]# dd if=/dev/zero of=100M-$(date +%F_%H%M%S) bs=1M count=100
[root@cilent site-a]# tree /mnt/
/mnt/
├── site-a
│   └── 100M-2025-02-07_174949
└── site-b
  1. site-a集群为data/image1手动创建快照,查看是否同步到site-b集群
[ceph: root@ceph01 /]# rbd mirror image snapshot data/image1
Snapshot ID: 4

在这里插入图片描述在这里插入图片描述

[ceph: root@ceph01 /]# rbd mirror image status data/image1

在这里插入图片描述
(4)查看两个集群data/image1的信息

[ceph: root@ceph01 /]# rbd --image data/image1 info

在这里插入图片描述
在这里插入图片描述

  1. 模拟site-a集群故障,手动将site-a data/image1降级为非主image
[ceph: root@ceph01 /]# rbd mirror image demote data/image1
Image demoted to non-primary

此时site-a集群的date/image1高级特性自动被设置为non-primary

在这里插入图片描述

  1. 手动将site-b data/image1提升为主image,如果因为site-a集群已经宕机,降级无法传播到site-a存储集群,可以使用 --force 选项
[ceph: root@ceph-a /]# rbd mirror image promote data/image1
Image promoted to primary

此时site-b集群的date/image1高级特性non-primary被取消,允许客户端进行挂载写入数据。

在这里插入图片描述

  1. client服务器端取消site-a集群data/image1的挂载和映射,改为site-b集群data/image1的挂载和映射.
[root@cilent ~]# umount  /mnt/site-a
[root@cilent ~]# rbd unmap image1 --pool data -c /etc/ceph/site-a.conf  -k /etc/ceph/site-a.client.admin.keyring

[root@cilent ~]# rbd map image1 --pool data -c /etc/ceph/site-b.conf  -k /etc/ceph/site-b.client.admin.keyring
/dev/rbd0
[root@cilent ~]# mount /dev/rbd0 /mnt/site-b
查看之前的数据同步
[root@cilent ~]# tree /mnt/
/mnt/
├── site-a
└── site-b
    └── 100M-2025-02-07_174949
  1. 再查看2个集群的同步状态
    site-a集群的因为也部署了rbd-mirror守护程序,data/image1在被降级为非主镜像后,自动与设置过对等关系的site-b集群进行同步(up+replaying)。
    在这里插入图片描述
    site-b集群的data/image1因为被提升为主镜像,所以其状态为up+stopped
    在这里插入图片描述
  2. 在site-b集群的data/image1的挂载目录写入测试数据并手动创建快照,观察同步情况。
[root@cilent ~]# cd /mnt/site-b/
[root@cilent site-b]# dd if=/dev/zero of=100M-$(date +%F_%H%M%S) bs=1M count=100
[root@cilent site-b]# tree /mnt/
/mnt/
├── site-a
└── site-b
    ├── 100M-2025-02-07_174949
    └── 100M-2025-02-07_183332

[ceph: root@ceph-a /]# rbd mirror image snapshot data/image1
Snapshot ID: 7

在这里插入图片描述
在这里插入图片描述

  1. 如果site-b恢复正常,可以再将主镜像切换回来。
先降级site-b集群的data/image1
[ceph: root@ceph-a /]# rbd mirror image demote data/image1
Image demoted to non-primary
再提升site-a集群的data/image1
[ceph: root@ceph01 /]# rbd mirror image promote data/image1
Image promoted to primary

等待片刻,查看两集群同步状态已恢复原始状态。

在这里插入图片描述
在这里插入图片描述

(11) client服务器上重新挂载site-a集群的data/image1,并查看数据是否正常。
[root@cilent ~]# umount /mnt/site-b/
[root@cilent ~]# rbd unmap image1 --pool data -c /etc/ceph/site-b.conf  -k /etc/ceph/site-b.client.admin.keyring

[root@cilent ~]# rbd map image1 --pool data -c /etc/ceph/site-a.conf  -k /etc/ceph/site-a.client.admin.keyring
/dev/rbd0

[root@cilent ~]# rbd showmapped -c /etc/ceph/site-b.conf  -k /etc/ceph/site-b.client.admin.keyring
id  pool  namespace  image   snap  device   
0   data             image1  -     /dev/rbd0

[root@cilent ~]# mount /dev/rbd0 /mnt/site-b
[root@cilent ~]# tree /mnt/
/mnt/
├── site-a
└── site-b
    ├── 100M-2025-02-07_174949
    └── 100M-2025-02-07_183332

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

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

相关文章

【C++】STL库_stack_queue 的模拟实现

栈(Stack)、队列(Queue)是C STL中的经典容器适配器 容器适配器特性 不是独立容器,依赖底层容器(deque/vector/list)通过限制基础容器接口实现特定访问模式不支持迭代器操作(无法遍历…

一周学会Pandas2 Python数据处理与分析-编写Pandas2 HelloWord项目

锋哥原创的Pandas2 Python数据处理与分析 视频教程: 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 我们首先准备一个excel文件,用来演示pandas操作数据集(数据的集合)。excel文件属于数据集的一种&#xf…

【易订货-注册/登录安全分析报告】

前言 由于网站注册入口容易被机器执行自动化程序攻击,存在如下风险: 暴力破解密码,造成用户信息泄露,不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 ,造成用户无法登陆、注册,大量收到垃圾短信的…

如何在Windows上找到Python安装路径?两种方法快速定位

原文:如何在Windows上找到Python安装路径?两种方法快速定位 | w3cschool笔记 在 Windows 系统上找到 Python 的安装路径对于设置环境变量或排查问题非常重要。本文将介绍两种方法,帮助你找到 Python 的安装路径:一种是通过命令提…

lvgl避坑记录

一、log调试 #if LV_USE_LOG && LV_LOG_LEVEL > LV_LOG_LEVEL_INFOswitch(src_type) {case LV_IMG_SRC_FILE:LV_LOG_TRACE("lv_img_set_src: LV_IMG_SRC_FILE type found");break;case LV_IMG_SRC_VARIABLE:LV_LOG_TRACE("lv_img_set_src: LV_IMG_S…

element-plus中,表单校验的使用

目录 一.案例1:给下面的表单添加校验 1.目的要求 2.步骤 ①给需要校验的el-form-item项,添加prop属性 ②定义一个表单校验对象,里面存放了每一个prop的检验规则 ③给el-form组件,添加:rules属性 ④给el-form组件&#xff0…

PyTorch复现线性模型

【前言】 本专题为PyTorch专栏。从本专题开始,我将通过使用PyTorch编写基础神经网络,带领大家学习PyTorch。并顺便带领大家复习以下深度学习的知识。希望大家通过本专栏学习,更进一步了解人更智能这个领域。 材料来源:2.线性模型_…

Kafka+Zookeeper从docker部署到spring boot使用完整教程

文章目录 一、Kafka1.Kafka核心介绍:​核心架构​核心特性​典型应用 2.Kafka对 ZooKeeper 的依赖:3.去 ZooKeeper 的演进之路:注:(本文采用ZooKeeper3.8 Kafka2.8.1) 二、Zookeeper1.核心架构与特性2.典型…

RK3568驱动 SPI主/从 配置

一、SPI 控制器基础配置(先说主的配置,后面说从的配置) RK3568 集成高性能 SPI 控制器,支持主从双模式,最高传输速率 50MHz。设备树配置文件路径通常为K3568/rk356x_linux_release_v1.3.1_20221120/kernel/arch/arm64/boot/dts/rockchip。 …

【全队项目】智能学术海报生成系统PosterGenius--风格个性化调整

​ 🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏🏀大模型实战训练营 ​💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 1.前言 PosterGenius致力于开发一套依托DeepSeek…

【系统移植】(六)第三方驱动移植

【系统移植】(六)第三方驱动移植 文章目录 【系统移植】(六)第三方驱动移植1.编译驱动进内核方法一:编译makefile方法二:编译kconfig方法三:编译成模块 2.字符设备框架 编译驱动进内核a. 选择驱…

STM32实现一个简单电灯

新建工程的步骤 建立工程文件夹,Keil中新建工程,选择型号工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组…

【shiro】shiro反序列化漏洞综合利用工具v2.2(下载、安装、使用)

1 工具下载 shiro反序列化漏洞综合利用工具v2.2下载: 链接:https://pan.baidu.com/s/1kvQEMrMP-PZ4K1eGwAP0_Q?pwdzbgp 提取码:zbgp其他工具下载: 除了该工具之外,github上还有其他大佬贡献的各种工具,有…

vue进度条组件

<div class"global-mask" v-if"isProgress"><div class"contentBox"><div class"progresstitie">数据加载中请稍后</div><el-progress class"progressStyle" :color"customColor" tex…

CSRF跨站请求伪造——入门篇【DVWA靶场low级别writeup】

CSRF跨站请求伪造——入门篇 0. 前言1. 什么是CSRF2. 一次完整的CSRF攻击 0. 前言 本文将带你实现一次完整的CSRF攻击&#xff0c;内容较为基础。需要你掌握的基础知识有&#xff1a; 了解cookie&#xff1b;已经安装了DVWA的靶场环境&#xff08;本地的或云的&#xff09;&am…

Qt基础:主界面窗口类QMainWindow

QMainWindow 1. QMainWindow1.1 菜单栏添加菜单项菜单项信号槽 1.2 工具栏添加工具按钮工具栏的属性设置 1.3 状态栏1.4 停靠窗口&#xff08;Dock widget&#xff09; 1. QMainWindow QMainWindow是标准基础窗口中结构最复杂的窗口, 其组成如下: 提供了菜单栏, 工具栏, 状态…

32f4,usart2fifo,2025

usart2fifo.h #ifndef __USART2FIFO_H #define __USART2FIFO_H#include "stdio.h" #include "stm32f4xx_conf.h" #include "sys.h" #include "fifo_usart2.h"//extern u8 RXD2_TimeOut;//超时检测//extern u8 Timer6_1ms_flag;exte…

激光模拟单粒子效应试验如何验证CANFD芯片的辐照阈值?

在现代航天电子系统中&#xff0c;CANFD&#xff08;Controller Area Network with Flexible Data-rate&#xff09;芯片作为关键的通信接口元件&#xff0c;其可靠性与抗辐射性能直接关系到整个系统的稳定运行。由于宇宙空间中存在的高能粒子辐射&#xff0c;芯片可能遭受单粒…

从零构建大语言模型全栈开发指南:第五部分:行业应用与前沿探索-5.2.1模型偏见与安全对齐(Red Teaming实践)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 大语言模型全栈开发指南:伦理与未来趋势 - 第五部分:行业应用与前沿探索5.2.1 模型偏见与安全对齐(Red Teaming实践)一、模型偏见的来源与影响1. 偏见的定义与分类2. 偏见的实际影响案例二、安全对齐…

Docker安装开源项目x-ui详细图文教程

本章教程,主要介绍如何使用Docker部署开源项目x-ui 详细教程。 一、拉取镜像 docker pull enwaiax/x-ui:latest二、运行容器 mkdir x-ui && cd x-ui docker run -itd --network=host \-v $PWD<