rbd-nbd单节点最大限制参数nbds_max调整

背景

rbd-nbd的挂载依赖内核的nbd模块,由于nbd模块默认支持16个nbd块设备(nbds_max=16),如果超过16个会挂载失败,在k8s中,我们通过cephcsi使用ceph rbd镜像作为块存储,当使用rbd-nbd挂载超过最大的16个之后,由于当前阶段已经过了k8s的调度计算,此失败会一直持续下去,这还是小问题,只是一个业务受到影响,可怕的是cephcsi的bug会在当前节点上死循环创建无效的nbd块,nbd17,nbd18,nbd19.......,导致服务器的块设备资源被占满,最终机器上的所有业务都受到影响。为了解决此问题,我们提出两个方案:一、扩展单节点支持的最大nbd块数,解决不够用的问题;二、自定义调度插件,在调度到节点之前对节点的可用nbd数进行判断及打分,保障调度到节点上的可用nbd块数是足够并且各节点的调度是均衡的;

本文主要介绍单节点nbd最大块数的调整操作,特别是把nbd编译到内核的修改方案,小编踩了不少坑,本来要放弃了,最后柳暗花明又一村,特此记录。

nbds_max调整

rbd-nbd挂载ceph镜像基于内核的nbd模块,内核对nbd模块的支持有两种方式:
  1. 通过modprobe nbd命令以插件的方式动态加载
  2. 内核编译的时候指定CONFIG_BLK_DEV_NBD=y,直接把nbd模块编译到内核中
内核编译方式查看方式:
#方法1
zcat /proc/config.gz | grep CONFIG_BLK_DEV_NBD
#方法2
cat /boot/config-$(uname -r) | grep CONFIG_BLK_DEV_NBD
如果CONFIG_BLK_DEV_NBD=y表示内核编译的时候指定了nbd的编译选项,直接内置到内核中,如果CONFIG_BLK_DEV_NBD=m,表示以插件的方式动态加载

基于动态加载nbd模块的nbds_max调整

通过lsmod | grep nbd 查看是否已加载nbd内核模块, 如果返回空,则通过modprobe nbd加载,即可使用rbd-nbd挂载块设备,扩展最大nbd块设备数,修改方法如下:

临时方案

modprobe nbd nbds_max=48,此方式机器重启之后会失效,可以临时添加

永久方案

/etc/modprobe.d/nbd.conf中增加options nbd max_part=16 nbds_max=48
  • max_part:块设备支持的最大分区数,默认值为0,不修改的话部分情况会无法显示分区
  • nbds_max: nbd设备(即/dev/nbd*)的个数, 设备系统默认只有16个,请根据实际情况酌情修改,不能高于255
modprobe nbd 加载nbd模块

rbd-nbd命令行

rbd-nbd --help可以看到此命令是支持--nbds_max参数修改内核支持的最大块数,但是如果已经加载了nbd需要先modprobe -r nbd卸载nbd,否则会提示加载失败,细节可以看rbd-nbd源码。rbd-nbd --nbds_max 64 map rbdpool/images进行扩容挂载镜像,源码里此命令会自动调用modprobe rbd nbds_max=64

基于内置的nbd模块nbds_max调整

由于已经把nbd模块编译到了内核中,无法通过上述modprobe动态加载,需要修改内核启动加载参数,并重启生效

修改grub配置

修改/etc/default/grub在GRUB_CMDLINE_LINUX这行的最后加上nbd.nbds_max=64,修改完/etc/default/grub的配置如下

GRUB_CMDLINE_LINUX="crashkernel=auto rhgb quiet ixgbe.allow_unsupported_sfp=1,1 vsyscall=emulate noibrs noibpb
nopti nospectre_v2 nospectre_v1 l1tf=off nospec_store_bypass_disable no_stf_barrier mds=off cgroup_no_v1=io nbd.
nbds_max=64"

更新grub配置

grub2-mkconfig -o /boot/gru

reboot生效

验证生效

重启之后通过cat /sys/module/nbd/parameters/nbds_max查看是否配置的值

参考

v4.14/drivers/block/nbd.c

rbd-nbd.cc

rbd-nbd挂载配置

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

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

相关文章

零基础Java第十九期:认识String(一)

目录 一、String的重要性 二、String的常用方法 2.1. 字符串构造 2.2. String对象的比较 2.3. 字符串查找 2.4. 转化 2.4. 字符串替换 2.5. 字符串拆分 2.6. 字符串截取 一、String的重要性 在C语言中已经涉及到字符串了,但是在C语言中要表示字符串只能…

HarmonyOS4+NEXT星河版入门与项目实战--------ArkTs语言与TypeScript语法

文章目录 1、ArkTs语言1、ArkTs 特点2、ArkTs与Javascript关系 2、TypeScript 语法 1、ArkTs语言 在html的开发中,实现一个页面元素,比如Button,往往包含了以下三种要素:JS、HTML、CSS。JS处理逻辑与响应、HTML 用来声明标签生成…

使用yak编写yakit漏洞检测插件

前言 在使用yakit进行编写yaml插件的时候遇到了yaml无法处理的情况,我不知道是不是yaml无法处理或者说是yakit和yaml的兼容还不够,面对变量的处理还是有些难受,于是花了点时间看了官网的yak语法的手册和其他人写的yak插件尝试使用yak语言来完…

信也科技和云杉网络的AI可观测性实践分享

1. 信也科技 2、云杉网络 2.1 中国移动

Blossom:开源私有部署的markdown笔记软件

在信息化、数字化时代,我们每个人的生活和工作都离不开笔记和知识管理。从简单的待办事项,到复杂的项目计划,再到存储大量个人知识的工具,如何选择一个高效、便捷且符合个人需求的笔记软件,成了许多人的难题。最近在逛…

Spring:DI依赖注入的方式

Spring为我们提供了两种注入方式,分别是: setter注入 简单类型引用类型 构造器注入 简单类型引用类型 setter注入 在bean中定义引用类型属性,并提供可访问的set方法配置中使用property标签ref属性注入引用类型对象 (1)项目中添加BookDao、BookDaoIm…

逆向攻防世界CTF系列37-crackme

逆向攻防世界CTF系列37-crackme 参考https://blog.csdn.net/xiao__1bai/article/details/120230397 nspack的壳,查了一下好像是北斗的一个壳 没找到什么脱壳软件,只能手动脱壳了 手动脱壳的最终要的是ESP定律 ESP定律的原理就是“堆栈平衡”原理 涉及…

按钮权限的操作方法

首先先在你的本地储存里边,加入一些你指定的字段 然后创建一个文件夹,在此文件夹下创建一个js文件,文件内容如下 在你所需要隐藏按钮的页面引入此js文件,并且通过 directives自定义指令绑定你的每一个按钮。在js文件中通过三个常量…

vscode 关闭绑定元素 隐式具有“any”类型这类错误

在vue的项目里面,经常看到any类型的报错,真的很烦的 在tsconfig.json中配置以下参数 “noImplicitAny”: false 就可以了 出现类型“never”上不存在属性“userName”。ts-plugin(2339) 配置该参数 modeuleResolution : node "compilerOptions&qu…

springboot 的 Profile

什么是 Profile ? 应用所在的运行环境发生切换时,配置文件常常就需要随之修改。 Profile:——就是一组配置文件及组件的集合。 可以整个应用在不同的profile之间切换(设置活动profile),整个应用都将使用该…

onvif协议相关:4.1.6 Digest方式云台控制启动

背景 关于onvif的其实很早之前我已经在专栏中写了不少了, 使用onvif协议操作设备 但最近有陆陆续续的粉丝问我, 希望我在写一些关于 onvif的设备自动发现、预置位跳转、云台操作的博客。 满足粉丝的需求,安排。 今天我们来实现 设备云台的控制(启动) 实现 1.在ONVIF Devi…

【JAVA毕业设计】基于Vue和SpringBoot的农机电招平台

本文项目编号 T 615 ,文末自助获取源码 \color{red}{T615,文末自助获取源码} T615,文末自助获取源码 随着农机电招行业的不断发展,农机电招在现实生活中的使用和普及,农机电招行业成为近年内出现的一个新行业&#x…

基于Jmeter的分布式压测环境搭建及简单压测实践

写在前面 平时在使用Jmeter做压力测试的过程中,由于单机的并发能力有限,所以常常无法满足压力测试的需求。因此,Jmeter还提供了分布式的解决方案。本文是一次利用Jmeter分布式对业务系统登录接口做的压力测试的实践记录。按照惯例&#xff0…

代码随想录算法训练营day41|动态规划04

最后一块石头的重量|| 返回剩余最后一块石头石头最小的可能重量,那么就应该最后剩余的两块石头尽量都等于或接近总重量的一半,这样剩下的就是一半的质量 目标和 给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有…

Python+Flask实现随机选谷票游戏

西方曾进行一项著名的投资随机性实验,对比基金经理与猴子在选股上的表现。 实验方法:主持人提供一系列股票,基金经理依靠其专业知识(如财务报表、行业趋势、产品市场及公司文化与管理层分析等)进行筛选;而…

【Python数据可视化分析实战】数据爬取—京东手机品牌信息数据爬取和数据分析与可视化

大数据分析设计方案 1.数据集来源:https://search.jd.com 2.实现思路: (1)数据爬取 首先,我们需要从京东平台上采集手机品牌的相关数据。可以通过网络爬虫或API接口等方式获取数据。为了保证数据的完整性和准确性&…

使用 TensorFlow 实现 ZFNet 进行 MNIST 图像分类

ZFNet(ZF-Net)是由 Matthew Zeiler 和 Rob Fergus 提出的卷积神经网络架构,它在图像分类任务中取得了显著的效果。它在标准卷积神经网络(CNN)的基础上做了一些创新,例如优化了卷积核大小和池化策略&#xf…

11.15 HTML

传统路线 HTML、CSS、JS AjaxJQueryMySQLJDBCServletJSPEL&JSTLCookieSessionFilterServlet案例MybatisSpringSpringMVCSpringBoot 全新路线 HTM、CSS、JSAjax、AxiosVue、Element前端工程化 vue脚手架MavenSpringBoot基础 基于SpringBoot进行讲解Spring的IOC&#xff…

打造旅游卡服务新标杆:构建SOP框架与智能知识库应用

随着旅游业的蓬勃兴起,旅游卡产品正逐渐成为市场的焦点。为了进一步提升服务质量和客户体验,构建一套高效且标准化的操作流程(SOP)变得尤为重要。本文将深入探讨如何构建旅游卡的SOP框架,并介绍如何利用智能知识库技术…

Java 简单家居开关系统

1.需求: 面向对象编程实现智能家居控制系统(简单的开关) 2.实现思路 1.定义设备类:创建设备对象代表家里的设备 JD类: import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;D…