您的位置:首页 > 其它

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时需要新建立一个连接,但是又不想关闭现在的连接,现在的连接就不用了,过了这么多秒后,这个连接被标记为空闲状态。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: