文章目录
- 资源池管理模块
- bluestore相关:
- osd rocksdb相关
- osd相关:
- mon相关:
- paxos相关:
- 网络相关:
- Bluefs相关
- libaio相关参数
- nvme相关参数
- rbd相关
- pg相关
- rados相关
资源池管理模块
#控制是否可以复用osd创建资源池。0、不支持复用,1、支持复用
$osd_reuse = 0;
#系统剩余内存水线,单位:%
$system_free_memory_limit = 60;
#osd内存使用水线,单位:KB
$osd_memory_limit = 2097152;
#bluestore_cache_other使用水线,单位:byte
$blu_cache_other_limit = 419430400;
bluestore相关:
bluestore_block_size 设置块大小,以分区建立osd时需要修改
bluestore_cache_size 单个bluestore实例,配置cache大小
bluestore_block_wal_size = 10737418240 bluestore wal大小
bluestore_block_db_size = 10737418240 bluestore db大小
bluestore_cache_trim_interval bluestore trim周期
bluestore_cache_trim_max_skip_pinned 最大trim值
bluestore_prefer_deferred_size_hdd 控制io落wal分区io大小
osd rocksdb相关
rocksdb_cache_shard_bits 重庆现场修改为4后,导致磁盘读很大
osd相关:
osd_failsafe_full_ratio = 0.98 超过此限制op直接被抛弃
osd_recovery_max_chunk 设置恢复过程中最大的块设备
osd_op_history_slow_op_size = 100 slow op保存的历史记录数量
osd_op_history_slow_op_threshold = 1 当一个op超过多长时间,则记录上报
osd_peering_wq_threads=20 设置peer线程数量
osd_peering_wq_batch_size=10 设置peer队列长度
osd_crush_update_on_start = false 默认不创建host
osd_heartbeat_use_min_delay_socket = true
osd_heartbeat_interval = 5
osd_heartbeat_grace = 17
osd_client_message_size_cap OSD messenge大小
mon_osd_max_split_count 最大增加的pg数量,如果想一次扩增很多pg,可用该方法
osd性能
osd max write size OSD一次可写入的最大值(MB)
osd client message size cap 客户端允许在内存中的最大数据(bytes)
osd deep scrub stride 在Deep Scrub时候允许读取的字节数(bytes)
osd op threads OSD进程操作的线程数
osd disk threads OSD密集型操作例如恢复和Scrubbing时的线程
osd map cache size 保留OSD Map的缓存(MB)
osd map cache bl size OSD进程在内存中的OSD Map缓存(MB)
osd mount options xfs Ceph OSD xfs Mount选项
osd recovery
osd recovery op priority 恢复操作优先级,取值1-63,值越高占用资源越高
osd recovery max active 同一时间内活跃的恢复请求数
osd max backfills 一个OSD允许的最大backfills数
如下为生产环境限制回复速率配置:
osd_recovery_priority=3
osd_recovery_op_priority=2
osd_recovery_max_active=2 同一时间内活跃的恢复请求数
osd_recovery_max_single_start=1
osd_recovery_sleep=0.1 实际测试,该项最有效
mon相关:
mon_election_timeout 设置mon选举超时时间
mon_osd_max_split_count 每个osd最大pg数限制
mon_osd_backfillfull_ratio = 0.95 大于此数值时,拒绝pg通过Backfill的方式迁入或者继续迁出本OSD
mon_osd_full_ratio = 0.96 集群停止接受客户端的请求
mon_osd_nearfull_ratio = 0.94 产生告警
mon_osd_max_split_count 每个osd上最大的pg数量
mon_osd_full_ratio 集群上的任意一个OSD空间使用率大于等于此数值时,集群将被标记为full,此时集群将停止接受来自客户端的写入请求
mon_osd_nearfull_ratio 集群中的任一OSD空间使用率大于等于此数值时,集群将被标记为NearFull,此时集群将产生告警,并提示所有已经处于NearFull状态的OSD
osd_backfill_full_ratio OSD空间使用率大于等于此数值时,拒绝PG通过Backfill方式迁出或者继续迁入本OSD
osd_failsafe_full_ratio PG执行包含写操作的op时,防止所在的OSD磁盘空间被100%写满的最后一道屏障,超过此限制时,op将直接被丢弃
mon_data_avail_crit 系统卡使用量低于此值时,mon 挂掉
client_mount_timeout ceph命令hand住时间控制,默认300 S
paxos相关:
paxos_min paxos消息上一次trim和当前值最小差距
paxos_service_trim_max Paxos_service维护的15个消息类型每次trim的最数值
paxos_service_trim_min axos_service维护的15个消息类型每次trim的最小值,如果没有到达改值,则不发生trim
paxos_trim_max Paxos消息发送trim时,trim的最大值
paxos_trim_min 和paxos_min共同决定,本次应该不应该发送trim
通过阅读代码分析,源码里面触发compaction的地方一共有下面五处
1、当mon_compact_on_trim为false时,mon直接不触发compact,compact全权由rocksdb自身机制触发
2、first_committed >= get_version() - paxos_min时,翻译一下就是如果当前版本增长量没有超过paxos_min
3、first_committed >= get_first_committed() + paxos_trim_max);翻译一下就是第一次committed值加上paxos_trim_max仍然等于first_committed时,只有当paxos_trim_max为0才有可能
4、get_version() - get_first_committed() <= paxos_min + paxos_trim_min时,即当前版本差异小于paxos_min+paxos_trim_min之和时
5、to_remove < paxos_service_trim_min时
需要注意的是2、3、4限制的是消息头为paxos的数据,5限制的是消息头为auth 、health、 logm、mdsmap、mgr 、mgr_command_descs、 mgr_metadata、mgrstat、monitor、monitor_store monmap 、osdmap、osd_metadata、osd_pg_creating、pgmap的数据,任何一个数据达到上述限制值都会触发compact
当前设置下:
1、paxos数据版本差距为paxos_min+ paxos_trim_min = 5000+2500=7500时,paxos消息会触发compact
2、auth 、health、 logm、mdsmap、mgr 、mgr_command_descs、 mgr_metadata、mgrstat monitor、monitor_store monmap 、osdmap、osd_metadata、osd_pg_creating、pgmap任意一个消息版本超过paxos_service_trim_min = 7500时触发compact
网络相关:
public_network={public-network/netmask} 负责确保ceph服务端和客户端在同一网络或者子网
cluster_network={cluster-network/netmask} 定义一个集群的网络,osd会用这个网络进行心跳控制,对象复制和恢复通信,如果没有配置该网络,Ceph默认会使用public_network用做此网络的作用
max open files 如果设置了该选项, Ceph会设置系统的max open fds
Bluefs相关
bluefs_alloc_size 最小进度大小,默认为1M
bluefs_max_prefetch 预读时的最大字节数,默认为1MB,主要用在顺序读场景
//日志文件
bluefs_min_log_runway bluefs日志文件的可用空间小于此值时,新分配空间。默认为1MB
bluefs_max_log_runway bluefs日志文件的单次分配大小,默认为4MB
bluefs_log_compact_min_ratio 通过当前日志文件大小和预估的日志文件的大小的比率控制compact,默认为5
bluefs_log_compact_min_size 通过日志文件大小控制compact,小于此值不做compact。默认为16MB
bluefs_compact_log_sync 日志文件compact的方式,有sync和async两种,默认为false,即采用async方式
bluefs_min_flush_size 因为写文件内容是写到内存中的,当文件内容超过此值就刷新到磁盘。默认为512kb
bluefs_buffered_io bluefs调用BlockDevice的read/write时的参数,默认为false,即采用fd_direct
bluefs_sync_write 是否采用synchronous写。默认为false,即采用aio_write。这时候在flush block
device的时候,需要等待aio完成。参见函数_flush_bdev_safely
bluefs_allocator bluefs分配磁盘空间的分配器,默认为stupid,即基于extent的方式。
bluefs_preextend_wal_files 是否预先更新rocksdb wal文件的大小。默认为false
libaio相关参数
bdev_aio 默认为true。不能修改,现在只支持aio方式操作磁盘
bdev_aio_poll_ms libaio API io_getevents的超时时间,默认为250
bdev_aio_max_queue_depth libaio API io_setup的最大队列深度, 默认为1024
bdev_aio_reap_max libaio API io_getevents每次请求返回的最大条目数
bdev_block_size 磁盘块大小,默认4096字节
nvme相关参数
bdev_nvme_unbind_from_kernel
bdev_nvme_retry_count
rbd相关
[client.admin]
rbd_cache = true RBD缓存
rbd_cache_max_dirty 891289600 缓存为write-back时允许的最大dirty字节数(bytes),如果为0,使用write-through
rbd_cache_max_dirty_age 10 在被刷新到存储盘前dirty数据存在缓存的时间(seconds)
rbd_cache_size 1073741824 RBD缓存大小(bytes)
rbd_cache_target_dirty 754974720
pg相关
控制pg收敛速度
osd_peering_wq_threads = 2
osd_peering_wq_batch_size = 20
rados相关
rados层到osd 与mon的超时检测
rados_mon_op_timeout = 10
rados_osd_op_timeout = 10