配置 iSCSI 服务并实现客户端自动挂载块设备

news2025/2/24 12:03:45

文章目录

  • 前言
  • 1. iSCSI 简介
  • 2. iSCSI Server 端配置
    • 2.1. 添加磁盘
    • 2.2. 安装 targetcli 软件包
    • 2.3. 创建块设备
    • 2.4. 创建 Target
    • 2.5. 创建 LUN
    • 2.6. 创建 ACL
    • 2.7. 配置门户创建监听
    • 2.8. 查看全部配置信息并保存退出
    • 2.9. 启用 Target 服务
  • 3. iSCSI Client 端配置
    • 3.1. 安装 iscsi-initiator-utils 软件包
    • 3.2. 重置 IQN
    • 3.3. 发现目标
    • 3.4. 登录
    • 3.5. 查看已挂载的块设备信息
    • 3.6. 查看 iSCSI 会话信息
  • 总结


前言

最近需要基于共享存储去配置 LVM 镜像,由于没有 FCSAN 环境,就想通过部署 iSCSI 服务来提供共享存储。下面是本次实验环境的基本信息:

OS Version:Red Hat Enterprise Linux Server release 7.9 (Maipo)

No.HostnameIPRole
1iscsi-server172.16.206.30Server
2iscsi-client1172.16.206.31Client
3iscsi-client2172.16.206.32Client

另外,为了配置更加方便,所有节点的系统防火墙以及 SELinux 模块都被博主禁用了;如果大家的环境里面有安全方面的要求,还需要自己放行相应的端口。


1. iSCSI 简介

iSCSI(Internet Small Computer System Interface),即 Internet 小型计算机系统接口。iSCSI 是一个基于 TCP/IP 的协议,用于通过 IP 网络仿真 SCSI 高性能本地存储总线,从而为远程块存储设备提供数据传输和管理。下图为块 I/O 网络堆栈组件:

在这里插入图片描述


2. iSCSI Server 端配置

2.1. 添加磁盘

博主使用的是 SmartX 超融合平台的虚拟机,默认会将系统盘的盘符识别成 vda 而不是我们常见的 sda 标识。在 Server 节点上,除了 vda 系统盘,博主还额外添加了4块 50GB 的磁盘,本次实验就是将这4块磁盘共享给两台 Client 节点当做块设备使用。

[root@iscsi-server ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda           252:0    0  100G  0 disk 
├─vda1        252:1    0    2M  0 part 
├─vda2        252:2    0  500M  0 part /boot
└─vda3        252:3    0 99.5G  0 part 
  ├─rhel-root 253:0    0 83.5G  0 lvm  /
  └─rhel-swap 253:1    0   16G  0 lvm  [SWAP]
vdb           252:16   0   50G  0 disk 
vdc           252:32   0   50G  0 disk 
vdd           252:48   0   50G  0 disk 
vde           252:64   0   50G  0 disk 

2.2. 安装 targetcli 软件包

targetcli 既是命令行实用程序,也是一个交互式 shell;我们可以通过配置本地 yum 源直接安装该工具包。

[root@iscsi-server ~]# yum -y install targetd targetcli

2.3. 创建块设备

直接运行 targetcli 命令进入交互模式,Server 端所有配置都在交互模式下进行。

[root@iscsi-server ~]# targetcli
targetcli shell version 2.1.51
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
/> ls
o- / ......................................................................................................................... [...]
  o- backstores .............................................................................................................. [...]
  | o- block .................................................................................................. [Storage Objects: 0]
  | o- fileio ................................................................................................. [Storage Objects: 0]
  | o- pscsi .................................................................................................. [Storage Objects: 0]
  | o- ramdisk ................................................................................................ [Storage Objects: 0]
  o- iscsi ............................................................................................................ [Targets: 0]
  o- loopback ......................................................................................................... [Targets: 0]
  /> cd backstores/block 
/backstores/block> create block01 /dev/vdb
Created block storage object block01 using /dev/vdb.
/backstores/block> create block02 /dev/vdc
Created block storage object block02 using /dev/vdc.
/backstores/block> create block03 /dev/vdd
Created block storage object block03 using /dev/vdd.
/backstores/block> create block04 /dev/vde
Created block storage object block04 using /dev/vde.

2.4. 创建 Target

关于为 Target 创建 IQN,有以下几点需要进行说明:

  • 在为 Target 创建 IQN 时会在此 IQN 下面创建一个默认的 TPG。
  • IQN 即 iSCSI 限定名称,一个全球唯一名称,用于以强制命名格式来识别启动器(initiator)和目标(target)。
    • 通用格式:iqn.YYYY-MM.com.reversed.domain[:optional_string];
    • iqn:表示此名称将使用域作为其标识符;
    • YYYY-MM:拥有域名的第一个月;
    • com.reversed.domain:此 iSCSI 名称的创建组织的逆向域名;
    • optional_string:以冒号为前缀的可选字符串。
  • 管理员如果不指定要创建的 IQN,系统会自动生成一个 IQN。
  • 建议管理员根据需要指定一个具有一定意义的 IQN。
/backstores/block> cd /iscsi 
/iscsi> create iqn.2023-09.com.example.lab:remotedisk
Created target iqn.2023-09.com.example.lab:remotedisk.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.

2.5. 创建 LUN

/iscsi> ls
o- iscsi .............................................................................................................. [Targets: 1]
  o- iqn.2023-09.com.example.lab:remotedisk .............................................................................. [TPGs: 1]
    o- tpg1 ................................................................................................. [no-gen-acls, no-auth]
      o- acls ............................................................................................................ [ACLs: 0]
      o- luns ............................................................................................................ [LUNs: 0]
      o- portals ...................................................................................................... [Portals: 1]
        o- 0.0.0.0:3260 ....................................................................................................... [OK]
/iscsi> cd iqn.2023-09.com.example.lab:remotedisk/tpg1/luns 
/iscsi/iqn.20...isk/tpg1/luns> create /backstores/block/block01
Created LUN 0.
/iscsi/iqn.20...isk/tpg1/luns> create /backstores/block/block02
Created LUN 1.
/iscsi/iqn.20...isk/tpg1/luns> create /backstores/block/block03
Created LUN 2.
/iscsi/iqn.20...isk/tpg1/luns> create /backstores/block/block04
Created LUN 3.

2.6. 创建 ACL

下面创建的 ACL 表示将 Target 配置为仅接受以 iqn.2023-09.com.example.lab:client 作为其启动器 IQN 的客户端的连接。

/iscsi/iqn.20...isk/tpg1/luns> cd ../acls 
/iscsi/iqn.20...isk/tpg1/acls> create iqn.2023-09.com.example.lab:client
Created Node ACL for iqn.2023-09.com.example.lab:client
Created mapped LUN 3.
Created mapped LUN 2.
Created mapped LUN 1.
Created mapped LUN 0.

2.7. 配置门户创建监听

管理员需要创建一个门户配置以指定监听 IP 地址和端口;如果未指定 IP 则默认使用 0.0.0.0 地址;如果未指定端口号则默认使用 3260 端口。

/iscsi/iqn.20...isk/tpg1/acls> cd ../portals/
/iscsi/iqn.20.../tpg1/portals> ls
o- portals ............................................................................................................ [Portals: 1]
  o- 0.0.0.0:3260 ............................................................................................................. [OK]
/iscsi/iqn.20.../tpg1/portals> delete 0.0.0.0 3260
Deleted network portal 0.0.0.0:3260
/iscsi/iqn.20.../tpg1/portals> create 172.16.206.30
Using default IP port 3260
Created network portal 172.16.206.30:3260.

2.8. 查看全部配置信息并保存退出

/iscsi/iqn.20.../tpg1/portals> cd /
/> ls
o- / ......................................................................................................................... [...]
  o- backstores .............................................................................................................. [...]
  | o- block .................................................................................................. [Storage Objects: 4]
  | | o- block01 ......................................................................... [/dev/vdb (50.0GiB) write-thru activated]
  | | | o- alua ................................................................................................... [ALUA Groups: 1]
  | | |   o- default_tg_pt_gp ....................................................................... [ALUA state: Active/optimized]
  | | o- block02 ......................................................................... [/dev/vdc (50.0GiB) write-thru activated]
  | | | o- alua ................................................................................................... [ALUA Groups: 1]
  | | |   o- default_tg_pt_gp ....................................................................... [ALUA state: Active/optimized]
  | | o- block03 ......................................................................... [/dev/vdd (50.0GiB) write-thru activated]
  | | | o- alua ................................................................................................... [ALUA Groups: 1]
  | | |   o- default_tg_pt_gp ....................................................................... [ALUA state: Active/optimized]
  | | o- block04 ......................................................................... [/dev/vde (50.0GiB) write-thru activated]
  | |   o- alua ................................................................................................... [ALUA Groups: 1]
  | |     o- default_tg_pt_gp ....................................................................... [ALUA state: Active/optimized]
  | o- fileio ................................................................................................. [Storage Objects: 0]
  | o- pscsi .................................................................................................. [Storage Objects: 0]
  | o- ramdisk ................................................................................................ [Storage Objects: 0]
  o- iscsi ............................................................................................................ [Targets: 1]
  | o- iqn.2023-09.com.example.lab:remotedisk ............................................................................ [TPGs: 1]
  |   o- tpg1 ............................................................................................... [no-gen-acls, no-auth]
  |     o- acls .......................................................................................................... [ACLs: 1]
  |     | o- iqn.2023-09.com.example.lab:client ................................................................... [Mapped LUNs: 4]
  |     |   o- mapped_lun0 ............................................................................... [lun0 block/block01 (rw)]
  |     |   o- mapped_lun1 ............................................................................... [lun1 block/block02 (rw)]
  |     |   o- mapped_lun2 ............................................................................... [lun2 block/block03 (rw)]
  |     |   o- mapped_lun3 ............................................................................... [lun3 block/block04 (rw)]
  |     o- luns .......................................................................................................... [LUNs: 4]
  |     | o- lun0 .................................................................... [block/block01 (/dev/vdb) (default_tg_pt_gp)]
  |     | o- lun1 .................................................................... [block/block02 (/dev/vdc) (default_tg_pt_gp)]
  |     | o- lun2 .................................................................... [block/block03 (/dev/vdd) (default_tg_pt_gp)]
  |     | o- lun3 .................................................................... [block/block04 (/dev/vde) (default_tg_pt_gp)]
  |     o- portals .................................................................................................... [Portals: 1]
  |       o- 172.16.206.30:3260 ............................................................................................... [OK]
  o- loopback ......................................................................................................... [Targets: 0]
  /> exit
Global pref auto_save_on_exit=true
Configuration saved to /etc/target/saveconfig.json

2.9. 启用 Target 服务

[root@iscsi-server ~]# systemctl start target.service 
[root@iscsi-server ~]# systemctl enable target.service

3. iSCSI Client 端配置

两台 Client 节点的配置方法一样,下面仅以 iscsi-client1 节点进行配置示例。

3.1. 安装 iscsi-initiator-utils 软件包

  • 先检查系统是否已安装该软件包(博主的环境在安装系统时已经自动安装过了)。
[root@iscsi-client1 ~]# rpm -qa |grep -i iscsi-initiator
iscsi-initiator-utils-iscsiuio-6.2.0.874-19.el7.x86_64
iscsi-initiator-utils-6.2.0.874-19.el7.x86_64
  • 如果未安装此软件包,可以配置本地 yum 源直接进行安装即可。
[root@iscsi-client1 ~]# yum -y install iscsi-initiator-utils

3.2. 重置 IQN

作为 iSCSI 节点,客户端需要一个唯一的 IQN;默认的 /etc/iscsi/initiatorname.iscsi 文件包含一个使用红帽的域生成的 IQN,管理员通常会将 IQN 重置为自己的域以及相应的客户端系统字符串。

[root@iscsi-client1 ~]# vim /etc/iscsi/initiatorname.iscsi 
[root@iscsi-client1 ~]# cat /etc/iscsi/initiatorname.iscsi 
InitiatorName=iqn.2023-09.com.example.lab:client
[root@iscsi-client1 ~]# systemctl restart iscsi
[root@iscsi-client1 ~]# systemctl restart iscsid

3.3. 发现目标

[root@iscsi-client1 ~]# iscsiadm -m discovery -t st -p 172.16.206.30
172.16.206.30:3260,1 iqn.2023-09.com.example.lab:remotedisk

3.4. 登录

[root@iscsi-client1 ~]# iscsiadm -m node -T iqn.2023-09.com.example.lab:remotedisk -p 172.16.206.30:3260 -l
Logging in to [iface: default, target: iqn.2023-09.com.example.lab:remotedisk, portal: 172.16.206.30,3260] (multiple)
Login to [iface: default, target: iqn.2023-09.com.example.lab:remotedisk, portal: 172.16.206.30,3260] successful.

3.5. 查看已挂载的块设备信息

[root@iscsi-client1 ~]# lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda             8:0    0   50G  0 disk 
sdb             8:16   0   50G  0 disk 
sdc             8:32   0   50G  0 disk 
sdd             8:48   0   50G  0 disk 
vda           252:0    0  100G  0 disk 
├─vda1        252:1    0    2M  0 part 
├─vda2        252:2    0  500M  0 part /boot
└─vda3        252:3    0 99.5G  0 part 
  ├─rhel-root 253:0    0 83.5G  0 lvm  /
  └─rhel-swap 253:1    0   16G  0 lvm  [SWAP]

3.6. 查看 iSCSI 会话信息

使用 -P N(0 ≤ N ≤ 3) 选项可以获取有关 Target 的信息,N 的值越大,获取到的信息越详细。

[root@iscsi-client1 ~]# iscsiadm -m session -P 3
iSCSI Transport Class version 2.0-870
version 6.2.0.874-19
Target: iqn.2023-09.com.example.lab:remotedisk (non-flash)
	Current Portal: 172.16.206.30:3260,1
	Persistent Portal: 172.16.206.30:3260,1
		**********
		Interface:
		**********
		Iface Name: default
		Iface Transport: tcp
		Iface Initiatorname: iqn.2023-09.com.example.lab:client
		Iface IPaddress: 172.16.206.31
		Iface HWaddress: <empty>
		Iface Netdev: <empty>
		SID: 1
		iSCSI Connection State: LOGGED IN
		iSCSI Session State: LOGGED_IN
		Internal iscsid Session State: NO CHANGE
		*********
		Timeouts:
		*********
		Recovery Timeout: 120
		Target Reset Timeout: 30
		LUN Reset Timeout: 30
		Abort Timeout: 15
		*****
		CHAP:
		*****
		username: <empty>
		password: ********
		username_in: <empty>
		password_in: ********
		************************
		Negotiated iSCSI params:
		************************
		HeaderDigest: None
		DataDigest: None
		MaxRecvDataSegmentLength: 262144
		MaxXmitDataSegmentLength: 262144
		FirstBurstLength: 65536
		MaxBurstLength: 262144
		ImmediateData: Yes
		InitialR2T: Yes
		MaxOutstandingR2T: 1
		************************
		Attached SCSI devices:
		************************
		Host Number: 2	State: running
		scsi2 Channel 00 Id 0 Lun: 0
			Attached scsi disk sda		State: running
		scsi2 Channel 00 Id 0 Lun: 1
			Attached scsi disk sdd		State: running
		scsi2 Channel 00 Id 0 Lun: 2
			Attached scsi disk sdc		State: running
		scsi2 Channel 00 Id 0 Lun: 3
			Attached scsi disk sdb		State: running

总结

关于 iSCSI 有两个配置文件以及一个数据目录值得关注,分别是:

  • 配置文件
    • /etc/iscsi/initiatorname.iscsi
    • /etc/iscsi/iscsid.conf
  • 数据目录
    • /var/lib/iscsi/

其中 /etc/iscsi/initiatorname.iscsi 配置文件的作用在前面已经说过了,而 /etc/iscsi/iscsid.conf 配置文件可以用来定义 iSCSI 超时以及队列深度等参数,修改这些文件需要重启 iscsi 和 iscsid 服务。

当在 Client 节点上发现了目标后,会将目标节点的信息和配置存储在 /var/lib/iscsi/nodes/ 目录中;当我们在登录出现报错时,往往需要清理掉这些目录下的残留信息,下面博主以 iscsi-client2 节点为例。

博主在配置 iscsi-client2 节点时写错了 /etc/iscsi/initiatorname.iscsi 配置文件,导致在登录时出现如下报错:

[root@iscsi-client2 iscsi]# iscsiadm -m node -T iqn.2023-09.com.example.lab:remotedisk -p 172.16.206.30:3260 -l
Logging in to [iface: default, target: iqn.2023-09.com.example.lab:remotedisk, portal: 172.16.206.30,3260] (multiple)
iscsiadm: Could not login to [iface: default, target: iqn.2023-09.com.example.lab:remotedisk, portal: 172.16.206.30,3260].
iscsiadm: initiator reported error (24 - iSCSI login failed due to authorization failure)
iscsiadm: Could not log into all portals

最后的解决方法如下所示

  • 将 /etc/iscsi/initiatorname.iscsi 配置文件修改正确。
  • 删除残留信息。
[root@iscsi-client2 ~]# rm -rf /var/lib/iscsi/nodes/*
[root@iscsi-client2 ~]# rm -rf /var/lib/iscsi/send_targets/*
  • 重启服务。
[root@iscsi-client2 ~]# systemctl restart iscsi
[root@iscsi-client2 ~]# systemctl restart iscsid
  • 重新发现。
[root@iscsi-client2 ~]# iscsiadm -m discovery -t st -p 172.16.206.30
172.16.206.30:3260,1 iqn.2023-09.com.example.lab:remotedisk
[root@iscsi-client2 ~]# iscsiadm -m node -T iqn.2023-09.com.example.lab:remotedisk -p 172.16.206.30:3260 -l
Logging in to [iface: default, target: iqn.2023-09.com.example.lab:remotedisk, portal: 172.16.206.30,3260] (multiple)
Login to [iface: default, target: iqn.2023-09.com.example.lab:remotedisk, portal: 172.16.206.30,3260] successful.

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

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

相关文章

前端框架vBean admin

文章目录 引言I 数据库表设计1.1 用户表1.2 角色表1.3 菜单表II 接口引言 文档:https://doc.vvbin.cn/guide/introduction.html http://doc.vvbin.cn 仓库:https://github.com/vbenjs/vue-vben-admin git clone https://github.com/vbenjs/vue-vben-admin-doc 在线体验demo:…

台积电没有想到,当初拒绝的中国芯片企业,如今反过来抢夺市场了,后悔莫及...

台积电二季度的营收已经出现下滑&#xff0c;本来它希望四季度在以往苹果销售旺季的支持下再度推高收入&#xff0c;然而如今中国手机企业自研的国产5G芯片正在反过来抢占市场&#xff0c;台积电四季度的收入恐怕也将下降。 苹果的销售旺季为每年的四季度&#xff0c;不过此时恰…

通过已有虚拟机快照创建虚拟机

我们在搭建redis、k8s等集群的时候&#xff0c;需要创建多台虚拟机&#xff0c;而且这几台虚拟机的配置基本上是一样的&#xff0c;这种情况下我们可以先创建一台虚拟机&#xff0c;安装需要的应用后导出快照&#xff0c;然后通过快照生成其他的虚拟机 1、生成快照 2、通过快照…

用小程序,轻松识别纸质表格并转换成Excel表格,解放双手

来百度APP 职场小伙伴们&#xff0c;有没有遇到过将纸质表格转化为Excel表格的任务&#xff1f;如果你没有经验&#xff0c;手工处理不仅效率低&#xff0c;而且容易出错。这真是一个费时费力的任务呀&#xff01;但别担心&#xff0c;现在我们有更好的解决方案——百度小程序…

neo4j下载安装配置步骤

目录 一、介绍 简介 Neo4j和JDK版本对应 二、下载 官网下载 直接获取 三、解压缩安装 四、配置环境变量 五、启动测试 一、介绍 简介 Neo4j是一款高性能的图数据库&#xff0c;专门用于存储和处理图形数据。它采用节点、关系和属性的图形结构&#xff0c;非常适用于…

大模型训练之加速篇 -attention优化【MQA-> flashAttention】

MQA (multi query attention) Fast Transformer Decoding: One Write-Head is All You Need MQA 是 19 年提出的一种新的 Attention 机制&#xff0c;其能够在保证模型效果的同时加快 decoder 生成 token 的速度。 那到底能提升多少的速度呢&#xff0c;我们来看论文中给出的结…

慢SQL原因分析之索引失效 | 京东物流技术团队

现象 最近收到一个慢sql工单,慢sql大概是这样&#xff1a;“select xxx from tabel where type 1”。 咦&#xff0c;type字段明明有索引啊&#xff0c;为啥是慢sql呢&#xff1f; 原因 通过执行explain&#xff0c;发现实际上数据库执行了全表扫描&#xff0c;从而被系统…

excel的vlookup函数用法

vlookup函数功能&#xff1a;在表格的首列查找指定的数值&#xff0c;并返回表格当前行中指定列处的数值。 结构&#xff1a;VLOOKUP(查找值,查找区域,列序数,匹配条件) 解释&#xff1a;VLOOKUP(找谁,在哪里找,第几列,0或1) 说明&#xff1a; 1、第一参数&#xff1a;查找…

【Linux is not Unix】Linux前言

目录 二战军工的产物——第一台现代电子数字计算机ENIAC&#xff08;埃尼阿克&#xff09; Unix Linux Linux企业应用现状 如今计算机已经应用在我们生活的各个层面&#xff0c;像我们日常使用的笔记本是计算机的一类&#xff0c;可以解决我们生活中遇到的很多问题&#xff…

【数据分享】2023年全国乡镇(街道)点位数据(免费获取\shp格式\excel格式)

乡镇&#xff08;街道&#xff09;点位数据是我们各项研究中经常使用到的数据&#xff0c;在之前的文章中我们分享过2022年度的乡镇&#xff08;街道&#xff09;点位数据&#xff08;可查看之前推送的文章获悉详情&#xff09;。本次我们带来的是2023年度的全国范围的乡镇&…

Labelme分割标注软件

Labelme分割标注软件 1、环境配置与安装1.1 创建conda虚拟环境(建议)1.2 安装Labelme 2、简单使用2.1 创建label标签文件2.2 启动labelme2.3 打开文件/文件夹2.4 设置保存结果路径2.5 标注目标2.6 保存json文件格式 3 格式转换3.1 转换语义分割标签3.2 转换实例分割标签 相关重…

CUDA小白 - NPP(11) 图像处理 Comparison Operations

cuda小白 原始API链接 NPP GPU架构近些年也有不少的变化&#xff0c;具体的可以参考别的博主的介绍&#xff0c;都比较详细。还有一些cuda中的专有名词的含义&#xff0c;可以参考《详解CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid》 常见的NppStatus&#xf…

显示器有白点闪烁、间歇黑屏解决办法

问题描述 以上三张图片是不到一秒内通过手机视频拍摄显示器画面&#xff0c;可以看到第一张图大桥下和第二张图片右下角岛屿初均有红点闪烁。当触发黑屏时&#xff0c;显示器整体白点闪烁。并且时常黑屏&#xff0c;几秒后恢复。 解决办法 检查HDMI连接线是否脱落&#xff0c…

初识canvas

对于一个前端人员来说&#xff0c;canvas是必须掌握的技能之一。如果你想像画画一样在浏览器上作画&#xff0c;那么canvas就可以做你的画布。 接下啦我们就以画画的标准来初步认识下canvas 1.画布 画画的第一步你得有一张画纸或者画布&#xff0c;canvas标签就是我们的画布…

查看mysql 容量

SQL SELECT table_schema "database", sum( data_length index_length) / 1024 / 1024 /1024 "size in GB" FROM information_schema.TABLES GROUP BY table_schema;结果

CSS 之 grid 网格布局

一、简介 ​ display: grid;用于设置元素内部的布局类型为网格布局&#xff0c;其外显类型为块级元素。该类型的元素将内部分为行和列&#xff0c;划分成一个个单元格&#xff0c;并通过一系列相关属性控制单元格及其内容的布局和大小。 ​ 该属性值的主要应用场景为&#xf…

1297. 子串的最大出现次数

1297. 子串的最大出现次数 // 返回子串的最大出现次数&#xff1a;用hash表 // 子串中 不同字母的次数 < maxLetters && 子串长度> minSize && 子串长度 < maxSizeint maxFreq(char * s, int maxLetters, int minSize, int maxSize){}

【算法】矩阵快速幂优化动态规划

文章目录 知识讲解题目列表[矩阵快速幂] 题目列表&#x1f4d5;70. 爬楼梯解法1——线性DP解法2——矩阵快速幂 509. 斐波那契数1137. 第 N 个泰波那契数1220. 统计元音字母序列的数目解法1——线性DP解法2——矩阵快速幂优化DP 552. 学生出勤记录 II&#xff08;&#x1f6b9;…

Kafka 常见问题

文章目录 kafka 如何确保消息的可靠性传输Kafka 高性能的体现利用Partition实现并行处理利用PageCache 如何提高 Kafka 性能调整内核参数来优化IO性能减少网络开销批处理数据压缩降低网络负载高效的序列化方式 kafka 如何确保消息的可靠性传输 消费端弄丢了数据 唯一可能导致…

第N个数字

给你一个整数 n &#xff0c;请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …] 中找出并返回第 n 位上的数字。 我觉得这题是哪以理解的 看这个题解 func findNthDigit(n int) int {digit : 1start : 1count : 9for n > count {n - countdigitstart start …