Ceph配置参数

本文详细介绍了Ceph存储系统的各项配置参数,包括POOL、JOURNAL、MESSAGING等关键配置,以及OSD、MONITOR、网络配置等内容,为Ceph的部署与优化提供了全面的技术指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、POOL, PG AND CRUSH CONFIG REFERENCE
所属配置段: 【global】
格式: osd pool default pg num = 250
  • 每个存储池最大pg数:mon max pool pg num
  • 同一个OSD Daemon中创建PG所间隔的秒数:mon pg create interval
  • 等待多少秒PG可被认为被卡主:mon pg stuck threshold
  • Ceph OSD Daemon对PG的标志位位数:osd pg bits
  • Ceph OSD Daemon对PGP的标志位位数:osd pgp bits
           注:pg和pgp大部分情况是一样的,但是一个pg分裂成多个时就不一样了
  • CRUSH规则用到chooseleaf时的bucket的类型:osd crush chooseleaf type
  • 创建复制存储池时用到的CRUSH规则:osd pool default crush replicated ruleset
  • 纠删码池中对象被分割成的条带大小:osd pool erasure code stripe width
  • 副本数:osd pool default size
  • 最小副本数:osd pool default min size
           注:如果这个数目没达到,ceph不会通知客户端写以完成
  • pg数:osd pool default pg num
  • pgp数:osd pool default pgp num
  • 新创建的存储池的flag:osd pool default flags
  • 列表中最大的PG数:osd max pgls
  • 修建PGLog是保留的最小PGLog数:osd min pg log entries
  • OSD等待客户端相应一个请求的最大秒数:osd default data pool replay window

2、JOURNAL CONFIG REFERENCE
Journal的作用:
(1)速度:随机小块的写操作就直接写入journal,合并成顺序IO再下刷,建议用SSD存放
(2)一致性:为保证操作的事务性,先将操作记录在journal中再应用到文件系统。每隔一段时间, Ceph OSD Daemon停止写操作,将journal和文件系统同步,删除一部分journal使得空间能够被再次利用。故障时,   Ceph OSD Daemon从最近的一次同步后的journal的开头按照其内容重新做一次操作。
  • 开启直写Journal(大概是因为journal一般都是存储在块设备上,即在OSD的空间或SSD单独存储):journal dio
  • 开启异步写journal(“直写”设为true这个参数才能设):journal aio
  • 块对齐(这个参数设为true上面两个参数才能设):journal block align
  • 一次写journal的最大byte数:journal max write bytes
  • 最多一次能并行写多少个journal:journal max write entries
  • 任意时刻队列中存储的最大操作数:journal queue max ops
  • 任意时刻队列中存储的最大byte数(10 << 20,即(2^10)<<20=10MB):journal queue max bytes
  • 最小对齐大小:journal align min size
  • 在创建文件系统期间用0填充整个日志:journal zero on create

3、MESSAGING
  • 消息传递的TCP会话中禁用nagle算法:ms tcp nodelay
  • 错误重连的初始等待时间:ms initial backoff
  • 错误重连的最大等待时间:ms max backoff
  • 禁用crc校验(在CPU有限的情况下能都提升性能):ms nocrc
  • debug设置(不配置):ms die on bad msg
  • 等待派遣的最大消息数:ms dispatch throttle bytes
  • 将进程绑定为IPV6的IP:ms bind ipv6
  • 堆栈大小的debug设置(不配置):ms rwthread stack bytes
  • 等待多少秒关闭空闲连接:ms tcp read timeout
  • debug设置(不配置):ms inject socket failures

4、GENERAL CONFIG REFERENCE
  • 文件系统ID,一个集群一个:fsid
  • 执行管理命令的socket路径(/var/run/ceph/$cluster-$name.asok):admin socket
  • mom,osd,mds写PID的文件(/var/run/$cluster/$type.$id.pid ):pid file
  • 守护进程运行的路径:chdir
  • 最大可以打开的文件数量(防止文件描述符被用光):max open files
  • 可以用信号(通信啥的……):fatal signal handlers

5、FILESTORE CONFIG REFERENCE
  • 开启同步时的调试检查(开销大):filestore debug omap check
(1)扩展属性(重要)
         扩展属性就是在文件系统(XFS、ext4等)固有属性之外的属性,以下的参数是配置如何存储这些参数的,这对系统性能很重要。有些文件系统对属性的长度有限制,比如ext4限制属性长度不超过4KB,如果没有长度限制,ceph的扩展属性也是存储在底层文件系统中的,如果超过了长度限制,则是存主一个key/value数据库中(aka omap)。
  • 使用数据库存储扩展属性(ext4必须这么做):filestore xattr use omap
  • 最大的扩展属性长度(不能超过文件规定的长度):filestore max inline xattr size
  • 每一个对象在文件系统中最多可以存储的扩展属性数量:filestore max inline xattrs
(2)同步间隔
        减小同步频率可以多合并一点写操作和元数据更新。
  • 最大同步间隔秒数:filestore max sync interval
  • 最小同步间隔秒数:filestore min sync interval
(3)下刷
        filestore flusher使得大文件写scyn前会先排序以求顺序下刷提高性能(事实证明关掉更好,默认也是关掉的)。
  • 开启filestore flusher:filestore flusher
  • flusher的最大文件描述符数量:filestore flusher max fds
  • 开启同步flusher:filestore sync flush
  • 文件系统同步时下刷journal数据:filestore fsync flushes journal data
(4)文件系统队列 (filestore queue)
  • 队列上可以存储的最大操作数:filestore queue max ops
  • 队列上可以存储的最大btye数:filestore queue max bytes
  • 一次最大可以提交的操作数:filestore queue committing max ops
  • 一次最大可以提交的byte数:filestore queue committing max bytes
(5)超时
  • 并行线程数:filestore op threads
  • 文件操作线程超时秒数:filestore op thread timeout
  • 提交一个操作多少秒都可以取消:filestore op thread suicide timeout
(6)B-TREE FILESYSTEM
  • 开启btrfs的快照:filestore btrfs snap
  • 开启btrfs的克隆:filestore btrfs clone range
(7)日志
  • 开启并行日志:filestore journal parallel
  • 开启预写式日志:filestore journal writeahead
(8)MISC
  • 前一个子类目录中的文件合并到父类的最小数量:filestore merge threshold
  • 前一个子目录分裂成子目录中的文件的最大数量:filestore split multiple
  • 限制文件存储自动升级到指定的版本:filestore update to
  • 丢弃任何讨论中的事务:filestore blackhole
  • 存储事务转储目的文件:filestore dump file
  • 在第 N 次机会后注入一个失效:filestore kill at
  • 在 eio错误的时候失败或崩溃:filestore fail eio

 

6、KEYVALUESTORE CONFIG REFERENCE
KeyValueStore is an alternative OSD backend compared to FileStore. Currently, it uses LevelDB as backend. KeyValueStore doesn’t need journal device. Each operation will flush into the backend directly.
  • KeyValueStore所用的后端(leveldb):keyvaluestore backend
(1)队列
  • 队列上可以存储的最大操作数:keyvaluestore queue max ops
  • 队列上可以存储的最大btye数:keyvaluestore queue max bytes
(2)线程
  • 并行线程数:keyvaluestore op threads
  • 文件操作线程超时秒数:keyvaluestore op thread timeout
  • 提交一个操作多少秒都可以取消:keyvaluestore op thread suicide timeout
(3)MISC
  • 条带大小:keyvaluestore default strip size
          注:每个对象会分割成多个键值对存储在后端
  • header cache大小:keyvaluestore header cache size
          注:存的东西和文件系统中的inode差不多

7、OSD CONFIG REFERENCE
(1)通用设置
  • OSD的UUID:osd uuid

          注:一个uuid作用于一个OSD Daemon,一个fsid作用于整个cluster,这两个不一样

  • OSD数据存储的路径:osd data
           注:实际底层设备挂载的地方e.g. /var/lib/ceph/osd/$cluster-$id
  • 一次写入最大的MB数(默认90):osd max write size
  • 在内存中允许存储的最大客户端数据信息(默认500MB):osd client message size cap
  •  RADOS class插件地址($libdir/rados-classes):osd class dir
(2)文件系统设置
  • 生成文件系统的类型:osd mkfs options {fs-type}
           注:对XFS默认-f -i 2048,其他类型无默认,e.g. osd mkfs options xfs = -f -d agcount=24
  • 挂载选项:osd mount options {fs-type}
            注:对XFS默认rw,noatime,inode64,其他类型rw, noatime,e.g. osd mount options xfs = rw, noatime, inode64, nobarrier, logbufs=8 其中noatime表示取消读文件时记录最后一次读取的时间(access time),节省时间,inode64表示inode数有64位(近乎无限制)现在的很多文件系统会在数据提交时强制底层设备刷新cache,避免数据丢失,称为write barriers。但是,其实我们数据库服务器底层存储设备要么采用RAID卡,RAID卡本身的电池可以掉电保护;要么采用Flash卡,它也有自我保 护机制,保证数据不会丢失。所以我们可以安全的使用nobarrier挂载文件系统。
(3)日志设置
  • 日志路径:osd journal
         注:建议使用硬盘或SSD单独存放,默认/var/lib/ceph/osd/$cluster-$id/journal
  • 日志大小(默认5120MB,即5G):osd journal size
         注:如果是0表示整个块设备都用来存日志,建议初始设为1G,至少为2 * (expected throughput * filestore max sync interval),其中throughput 为磁盘转速和网络速率的最小值,filestore max sync interval参数在上文filestore参数设置中有解释。
(4)SCRUBBING
          scrubbing相当于一个周期性检查工作,保证数据完整性,对象没有丢失,轻量级的scrubbing每天进行,它检查对象的大小和属性,深度scrubbing每周进行,它读取数据并进行校验和来保证数据的完整性。
  • 一个Ceph OSD Daemon内能够同时进行的scrubbing操作(默认1):osd max scrubs
  • scrub线程超时(默认60秒):osd scrub thread timeout
  • 终止一个scrub最终线程(finalize thread)的超时(默认600秒):osd scrub finalize thread timeout
  • 最大负载(超过这个负载scrub不进行):osd scrub load threshold
  • 最小scrub间隔(负载低时进行,默认每天):osd scrub min interval
  • 最大scrub间隔(不管负载如何,默认每周):osd scrub max interval
  • 深层scrub间隔(默认每周):osd deep scrub interval
  • 深层scrub时的读大小(默认512K):osd deep scrub stride
(5)操作
  • Ceph OSD Daemon 并行线程数(0表示关闭多线程,默认是2):osd op threads
  • 客户端操作的优先级(默认63):osd client op priority
  • 修复操作的优先级(默认10):osd recovery op priority
  • 线程超时(默认30秒):osd op thread timeout
  • 一个操作变成 complaint worthy (不造啥意思)的超时(默认30s):osd op complaint time
  • 后端磁盘线程数(如scrub操作和snap trimming操作。默认为1):osd disk threads
  • 磁盘线程优先级(默认不设置)类:osd disk thread ioprio class
         注:idle-磁盘线程优先级比任何一个OSD线程都低,这有助于在一个繁忙的OSD上不让他scrub;rt-磁盘线程优先级比任何一个OSD线程都高,如果scrub比较需要。这个参数要将内核设置为CFQ调度才有用。
  • 磁盘线程优先级(默认是-1):osd disk thread ioprio priority
         注:这个参数要个上面那个参数一起使用,有0-7(最低)个级别,-1表示不设置,单独设置每个OSD scrub的优先级,拥塞或存在IO竞争是可以用这个,这个参数要将内核设置为CFQ调度才有用。
  • 可以跟踪到的已完成的操作数量(默认20):osd op history size
  • 最老可以跟踪到的已完成的操作(默认600):osd op history duration
  • 一次显示多少操作的log(默认5):osd op log threshold
(6)BACKFILLING
       当新加入OSD或删除OSD时,部分PG会迁移已达到新的平衡,这一行为会导致性能下降,为避免性能下降,可以设置迁移为backfill操作,并设置它的优先级低于正常读写。(backfill我猜是先标志一下,等空闲的时候在实际操作)
  • 一个OSD运行的最大的backfill操作数(默认10):osd max backfills
  • 每一个backfill扫描的最小对象数(默认64):osd backfill scan min
  • 每一个backfill扫描的最大对象数(默认512):osd backfill scan max
  • 如果OSD Daemon的使用率高于这个值测不响应backfills请求(默认0.85):osd backfill full ratio
  • backfill请求重试间隔(默认10秒):osd backfill retry interval
(7)OSD MAP 
        osd map记录着OSD所有信息,包括节点的改变,加入和退出等等信息,随着集群的运行,这个map会越变越大,一下一些配置保证了在map变大的情况下集群仍然能够运行良好。
  • 开启删除Map中的重复内容(默认是true):osd map dedup
  • map的cache大小(默认500MB):osd map cache size
  • OSD进程运行时map在内存中的cache大小(默认50MB):osd map cache bl size
  • OSD进程运行时map在内存中的cache的增量大小:osd map cache bl inc size
  • 每个MOSDMap消息的最大的映射项:osd map message max
(8)RECOVERY
  • 延迟多少秒开始修复对象(默认0):osd recovery delay start
  • 每个OSD一次可以接受的修复请求(默认15):osd recovery max active
        注:增大会加速修复但同时也会增加集群负载
  • 修复最大的chunk大小:osd recovery max chunk
  • 修复过程的线程数量(默认1):osd recovery threads
  • 修复线程超时(默认30s):osd recovery thread timeout
  • 在恢复过程中保留克隆重叠(应始终设置为true):osd recover clone overlap
(9)杂项
  • snap trim线程的超时设定(默认1小时):osd snap trim thread timeout
  • 后台log线程的超时设定(默认1小时):osd backlog thread timeout
  • 默认通知超时(默认30s):osd default notify timeout
  • 检查日志文件是否损坏(代价大,默认false):osd check for log corruption
  • 命令线程超时设定(默认10分钟):osd command thread timeout
  • 返回最大的丢失对象数(默认256):osd command max records
  • 将tmap用作omap(默认false):osd auto upgrade tmap
  • 只将tmap用作调试(默认false):osd tmapput sets users tmap
  • 不删减log空间,多用磁盘空间(默认false):osd preserve trimmed log
8、MONITOR CONFIG REFERENCE
        客户端在读写数据前,都比去和monitor取得联系,获得cluster map,结合CRUSH算法计算得到对象的位置。
(1)最小配置
        生成一个fsid和monitorde的最小配置,配置字段[mon]或[mon.a],ceph监视器默认监听6789端口。
  • 主机名(e.g. mon host = hostname1,hostname2,hostname3): mon host
  • 主机IP(e.g. mon addr = 10.0.0.10:6789,10.0.0.11:6789,10.0.0.12:6789):mon addr
(2)初始成员
        必须是个奇数,表示一个初始的最小monitor数,active的monitor达到这个数才能启动。
  • 初始monitor成员ID: mon initial members
(3)数据
        monitor存储数据的路径,因为monitor也是在节点上的,monitor会做很多fsync()操作,影响OSD的工作负载,在0.58以前的版本中,monitor的数据是以文件形式存放的,可以用ls,cat等命令直接查看,但是一致性难以保障。之后的版本,数据以key/value的形式存放,并且需要原子性操作,保证一致性,数据保存路径不建议改动。
  • monitor数据保存路径(e.g. /var/lib/ceph/mon/$cluster-$id):mon data
(4)存储容量
        当集群的使用率接近"最大容量"时,monitor会阻止对OSD的读写请求以避免数据丢失,考虑到多个主机可能同时断电造成集群容量剧减,这个"最大容量"通常小于实际的集群总容量,配置段位[global]。
  • 被认为集群已满的最大使用百分比(默认.95):mon osd full ratio
  • 被认为集群接近已满的最大使用百分比(默认.85):mon osd nearfull ratio
(5)monitor间的同步
       集群间存在多Monitor共同工作时,存在同步的问题,不必每个monitor都active集群才工作,只要达到最小可工作数量就行了,这个数量在mon initial members中规定,所以有可能一些mon在某一时刻不工作,后来恢复正常后状态就落后了。monitor三种角色:leader,最先获得最新的cluster map;provider,拥有最新的cluster map,但不是最先获得的;requester,状态落后,必须同步后方可工作。
        在一个同步过程中,requester向leader请求同步,leader负责分派同步工作给provider,并告知requester去找provider,这样做分摊了工作负载。provider以chunk为单位发给requester最新的状态数据,同步完后,requester告知leader完成,leader恢复一个ACK宣布同步结束。
        同步总是在一个新的monitor加入集群时发生。在运行过程中,cluster map不断更新,这三个角色也不断变化,如果provider接受到同步任务但自身状态落后于leader时,它可以终止同步并告知leader。同步完成后,ceph发出一个trimming,这个操作大概是修剪多余的状态数据,并且这个操作必须在PG状态是active+clean时进行。
  • trimming操作超时(默认30s):mon sync trim timeout
  • 同步时心跳超时(monotor之间的心跳检查,默认30s):mon sync heartbeat timeout
  • 同步时心跳检查间隔(默认5s):mon sync heartbeat interval
  • 同步超时(默认30s):mon sync timeout
  • 同步最大重试次数(默认5):mon sync max retries
  • 同步最大负载量(默认1045676):mon sync max payload size
  • leader等待requester同步的最大时间(默认10s):mon accept timeout
  • map更新前收集更新信息的时间间隔(默认1s):paxos propose interval
  • 收集更新信息的最小时间(默认0.05s):paxos min wait
  • trimming操作前能容忍的最大proposal数(默认30):paxos trim tolerance
  • 未trimming时最大的版本数(默认100):paxos trim disabled max versions
  • Monitor版本租约秒数(默认5):mon lease
  • leader去更新其他monitor租约的时间间隔数(默认3s):mon lease renew interval
  • leader等待provider告知其版本的秒数:mon lease ack timeout
  • OSD map维持的最小版本号数量(默认500):mon min osdmap epochs
  • monitor维护的最多的PG map版本号数量(默认500):mon max pgmap epochs
  • monitor保留的最大的log版本号数量(默认500):mon max log epochs
(6)时钟
        不同节点间时钟应该同步,否则一些超时和时间戳相关的机制将无法正确运行,运行又monitor的节点还需要安装NTP来同步时钟。然而NTP 级别的时钟同步还不够,即使NTP同步好,ceph也会报出时钟偏移警告,工作量,网络延迟,配置覆盖等也会对同步有影响。
  • 相对于系统时间的偏移:clock offset
  • monitor计时间隔秒数(默认5):mon tick interval
  • monitor间的clock drift(时钟嘀嗒数?,默认.05s):mon clock drift allowed
  • 时钟偏移补偿指数(默认5):mon clock drift warn backoff
  • leader时间检查间隔(默认300s):mon timecheck interval
(7)客户端
  • 客户端每隔Ns尝试一个Monitor直到建立连接(默认3):mon client hung interval
  • 客户端每个Ns会去ping一个monitor(默认10):mon client ping interval
  • 每一个客户端信息产生的log entires数(默认1000):mon client max log entries per message
  • 内存中的客户端信息数据大小(默认100ul << 20):mon client bytes
(8)杂项
  • 集群允许的最大OSD数量(默认10000):mon max osd
  • 集群为客户端和daemon预分配的全局ID数量(默认100):mon globalid prealloc
  • 写了这么多个对象后和底层文件系统同步一次(默认5):mon sync fs threshold
  • subscription 间隔秒数(默认500):mon subscribe interval
  • 使最近的N个PGmap统计数据呈现平滑趋势(默认2):mon stat smooth intervals
  • monitor在bootstrapping前寻找其他Monitor的时间(默认2s):mon probe timeout
  • 元数据和OSD信息可以在内存中驻留的信息大小(默认400ul << 20byte):mon daemon bytes
  • 每个事件最大的log entries数(默认4096):mon max log entries per event

9、Heartbeat Settings
        OSD靠定期检查heartbeat来确认相邻的OSD有没有down,以及在peer过程中检查错误和向monitor汇报自身情况,包括故障发生,PG状态改变,以及检查monitor有没有down。
(1)MONITOR SETTINGS
  • 向monitor报告down的最小OSD数(默认1):mon osd min down reporters
  • OSD向monitor报告OSD down的最小次数(默认3):mon osd min down reports
  • 宣布一个无响应的OSD down的超时(默认900):mon osd report timeout
  • 自动标记为out的最大的CRUSH单位类型(默认rack):mon osd downout subtree limit
        注:是不是说最大可以标记一个机架out了?
  • 标记一个OSD状态为down和out之前ceph等待的秒数(默认300):mon osd down out interval
  • 自动标记一个新加入的OSD状态为in(默认true):mon osd auto mark new in
  • 自动标记启动中的OSD状态为in(默认为false):mon osd auto mark in
  • 标记在启动过程中被自动标记为out的OSD状态为in(默认true):mon osd auto mark auto out in
  • The minimum ratio of up Ceph OSD Daemons before Ceph will mark Ceph OSD Daemons down(默认.3):mon osd min up ratio
  • The minimum ratio of in Ceph OSD Daemons before Ceph will mark Ceph OSD Daemons out(默认.3):mon osd min in ratio
  • The number of seconds laggy estimates will decay(默认60*60):mon osd laggy halflife
  • The weight for new samples in laggy estimation decay(默认0.3):mon osd laggy weight
  • If set to true, Ceph will scale based on laggy estimations(默认true):mon osd adjust heartbeat grace
  • The weight for new samples in laggy estimation decay(默认.3):mon osd laggy weight
(2)OSD SETTINGS
  • 心跳检查的OSD网络地址(默认主机IP):osd heartbeat address
  • OSDping它的peer的时间间隔(默认6s):osd heartbeat interval
  • OSD心跳停止间隔(默认20s):osd heartbeat grace
  • OSD ping一个monitor的时间间隔(默认30s):osd mon heartbeat interval
  • OSD报告monitor前等待的最大时间(默认120s):osd mon report interval max
  • OSD报告monitor前等待的最小时间(默认5s):osd mon report interval max
  • monitor恢复ACK的超时(默认30s):osd mon ack timeout

10、网络配置
(1)集群网络配置
        配置字段为[global]
  • 公共网络:public network
  • 私有网络:cluster network
        注:建议私有地址和internet还有公共网络部能互通,这个地址用来做OSD的心跳检查,对象的复制和恢复,单独配置私有地址而不是用公用网络做这些对性能有提升。
(2)monitor网络配置
        配置字段[mon.a]
  • 主机名(不要使用loaclhost):host
  • monitor 地址:mon addr
(3)OSD网络配置
        配置字段[osd.0]
  • 公共地址:public addr 
  • 私有地址:cluster addr
(4)绑定
  • OSD和MDS进程绑定的最小端口号(默认6800):ms bind port min
  • OSD和MDS进程绑定的最大端口号(默认:7100):ms bind port max
  • 允许进程使用IPV6的地址(默认false):ms bind ipv6
(5)TCP
  • 开启nodelay选项(默认true):tcp nodelay
        注:ceph默认关闭了TCP的buffering,使得请求不缓存立即下发,这样增加了网络流量,增加了延迟如果你要传输大量小文件,就把这个选项关了吧。
  • 收到网络连接终止时socket缓冲区大小(默认关闭):tcp rcvbuf
  • tcp读超时(默认900s):ms tcp read timeout
        注:一个客户端请求另一个ceph daemon时需要新建立一个连接,但是又不想关闭现在的连接,现在的连接就不用了,过了这么多秒后,这个连接被标记为空闲状态。

 

转载于:https://my.oschina.net/guyson/blog/387277

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值