Ceph配置参数
2015-03-15 00:00
507 查看
摘要: http://blog.csdn.net/uj_mosquito/article/details/41827373
1、POOL, PG AND CRUSH CONFIG REFERENCE
http://docs.ceph.com/docs/master/rados/configuration/pool-pg-config-ref/
所属配置段:
【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
http://docs.ceph.com/docs/master/rados/configuration/journal-ref/
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
http://docs.ceph.com/docs/master/rados/configuration/ms-ref/
消息传递的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
http://docs.ceph.com/docs/master/rados/configuration/general-config-ref/
文件系统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
http://docs.ceph.com/docs/master/rados/configuration/filestore-config-ref/
开启同步时的调试检查(开销大):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
http://ceph.com/docs/master/rados/configuration/keyvaluestore-config-ref/
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
http://ceph.com/docs/master/rados/configuration/osd-config-ref/
(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
http://ceph.com/docs/master/rados/configuration/mon-config-ref/
客户端在读写数据前,都比去和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。
http://ceph.com/docs/master/rados/configuration/mon-osd-interaction/
(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、网络配置
http://docs.ceph.com/docs/master/rados/configuration/network-config-ref/
(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时需要新建立一个连接,但是又不想关闭现在的连接,现在的连接就不用了,过了这么多秒后,这个连接被标记为空闲状态。
1、POOL, PG AND CRUSH CONFIG REFERENCE
http://docs.ceph.com/docs/master/rados/configuration/pool-pg-config-ref/
所属配置段:
【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
http://docs.ceph.com/docs/master/rados/configuration/journal-ref/
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
http://docs.ceph.com/docs/master/rados/configuration/ms-ref/
消息传递的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
http://docs.ceph.com/docs/master/rados/configuration/general-config-ref/
文件系统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
http://docs.ceph.com/docs/master/rados/configuration/filestore-config-ref/
开启同步时的调试检查(开销大):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
http://ceph.com/docs/master/rados/configuration/keyvaluestore-config-ref/
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
http://ceph.com/docs/master/rados/configuration/osd-config-ref/
(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
http://ceph.com/docs/master/rados/configuration/mon-config-ref/
客户端在读写数据前,都比去和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。
http://ceph.com/docs/master/rados/configuration/mon-osd-interaction/
(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、网络配置
http://docs.ceph.com/docs/master/rados/configuration/network-config-ref/
(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时需要新建立一个连接,但是又不想关闭现在的连接,现在的连接就不用了,过了这么多秒后,这个连接被标记为空闲状态。
相关文章推荐
- Ceph配置参数(三)
- ceph存储 ceph集群配置参数二
- Ceph配置参数(一)
- ceph存储 ceph集群配置参数一
- Ceph配置参数分析
- Ceph Observer动态更新配置参数
- ceph存储 ceph集群配置参数三
- Ceph性能优化 之 配置参数调优
- ceph配置参数
- Ceph配置参数(二)
- Ceph配置参数(一)
- 几个有用的SAP安全配置的用户参数配置列表
- IBatis.Net系列-多参数的SQL语句的配置
- Tomcat 服务器server.xml的关键参数配置
- Spring中Bean配置参数说明
- 几个有用的SAP安全配置的用户参数配置列表
- Tomcat 服务器server.xml的关键参数配置
- 几个有用的SAP安全配置的用户参数配置列表
- spring中常见数据源的配置参数
- 回发或回调参数无效。在配置中使用...pages enableEventValidation="true"/>