首页 > 其他分享 >5.9、ceph集群ceph.conf配置文件

5.9、ceph集群ceph.conf配置文件

时间:2022-10-10 13:07:56浏览次数:73  
标签:配置文件 5.9 ceph pg max 默认值 osd mon

9.1 config文件推送

(1) 默认生成的ceph.conf文件如果需要改动的话需要加一些参数,如果配置文件变化也是通过ceph-deploy进行推送。请不要直接修改某个节

点的"/etc/ceph/ceph.conf"文件,而是在部署机下修改ceph.conf,采用推送的方式更加方便安全。


(2) 推送修改的ceph.conf文件到所有节点(覆盖旧的ceph.conf)

# ceph-deploy --overwrite-conf config push ceph-deploy ceph-node01 ceph-node02 ceph-node03


(3) 特定服务配置项下的配置参数只对对应的特定服务生效,修改特定服务的配置参数后需要重启对应的特定服务才能生效,配置参数带下划线或者不带下划线都可以。


(4) 开启、关闭、重启所有 ceph 服务

# systemctl { start | stop | restart} ceph.target


(5) 根据进程类型开启、关闭、重启 ceph 服务

1) mon 进程

# systemctl { start | stop | restart} ceph-mon.target

2) mgr 进程

# systemctl { start | stop | restart} ceph-mgr.target

3) osd 进程

# systemctl { start | stop | restart} ceph-osd.target

4) rgw 进程

# systemctl { start | stop | restart} ceph-radosgw.target

5) mds 进程

# systemctl { start | stop | restart} ceph-mds.target


(6) 根据进程实例开启、关闭、重启 ceph 服务

1) mon 实例

# systemctl { start | stop | restart} ceph-mon@{mon_instance}.service

2) mgr 实例

# systemctl { start | stop | restart} ceph-mgr@{mgr_instance}.service

3) osd 实例

# systemctl { start | stop | restart} ceph-osd@{osd_instance}.service

4) rgw 实例

# systemctl { start | stop | restart} ceph-radosgw@{rgw_instance}.service

5) mds 实例

# systemctl { start | stop | restart} ceph-mds@{mds_instance}.service
9.2 PG 和 PGP 的区别
参考: https://www.bookstack.cn/read/ceph-handbook/Advance_usage-pg_pgp.md


1 说明

PG(Placement Group),pg是一个虚拟的概念,用于存放object,PGP(Placement Group for Placement purpose),相当于是pg存放的

一种osd排列。举个例子,假设集群有3个osd,即osd1,osd2,osd3,副本数为2,如果pgp=1,那么pg存放的osd的排列就有一种,可能是

[osd1,osd2],那么所有的pg主从副本都会存放到osd1和osd2上,如果pgp=2,那么其osd排列可能就两种,可能是[osd1,osd2]和[osd1,osd3]

,pg的主从副本会落在[osd1,osd2]或者[osd1,osd3]中,和我们数学中的排列很像,所以pg是存放对象的归属组是一种虚拟概念,pgp就是pg对应

的osd排列。一般情况下,存储池的pg和pgp的数量设置相等。


2 查看 pg 的分布

osd: osd=9

pool: pg=6,pgp=6,size=2

使用 ceph pg dump pgs 查看 pg 的分布,pg 数为 6,因为存储池为双副本,我们可以看到每个 pg 会分布在两个 osd 上,整个集群有 9 个

osd,按照排列会有很多种,此时 pgp=6,就会选择这些排列中的 6 种排列来供 pg 存放,我们可以看到最右侧的 6 种排列顺序均不重复。第一列

为 pg,第 2 列为每个 pg 的对象数,第 3 列为 pg 所在的 osd。

# ceph pg dump pgs |grep active |awk '{print $1,$17,$18}'

dumped pgs

2.5 178 [1,2]

2.4 162 [6,0]

2.3 368 [5,2]

2.2 308 [5,6]

2.1 176 [7,8]

2.0 166 [0,6]


3 总结

(1) PG 是指定存储池存储对象的归属组有多少个,PGP 是存储池 PG 的 OSD 分布排列个数。

(2) PG 的增加会引起 PG 内的数据进行迁移,迁移到不同的 OSD 上新生成的 PG 中。

(3) PGP 的增加会引起部分 PG 的分布变化,但是不会引起 PG 内对象的变动。


4 排列组合

(1) 概念

1) 排列

一般地,从n个不同元素中取出m(m≤n)个元素,按照一定的顺序排成一列,叫做从n个元素中取出m个元素的一个排列(permutation)。

2) 组合

一般地,从n个不同的元素中,任取m(m≤n)个元素为一组,叫作从n个不同元素中取出m个元素的一个组合。

3) 排列与元素的顺序有关,组合与元素的顺序无关。

4) 元素的顺序对排列至关重要,比如 1、2、3 与 2、3、1 就是两种排列。

5) 与元素顺序无关的是组合,比如把 1、2、3 看作一个组合,那么 2、3、1 仍然是同一个组合。


(2) 在线计算器

​https://tool.520101.com/calculator/zuhepailie/​​​

(3) 计算公式

(1) 排列计算​5.9、ceph集群ceph.conf配置文件_缓存

(2) 组合计算​5.9、ceph集群ceph.conf配置文件_缓存_02

(4) 示例


ceph 集群中有 6 个 osd,存储池副本数为 3,那么存储池 PG 的 OSD 分布排列 PGP 个数计算如下。

P(6,3) = 120

9.4 生产环境 ceph.conf 配置

注: 我的 ceph 集群环境配置中允许管理员删除 pool,为了操作安全,建议不允许管理员删除pool,将如下配置参数取值 true 改为 false 即可。


[mon]

mon_allow_pool_delete = true


[root@ceph-deploy my-cluster]# cat > /root/my-cluster/ceph.conf << EOF

[global]                                   # 全局设置

# 集群标识ID

fsid = 14912382-3d84-4cf2-9fdb-eebab12107d8

# 初始monitor(由创建monitor命令而定)

mon_initial_members = ceph-node01, ceph-node02, ceph-node03

# monitor IP 地址

mon_host = 172.16.1.31,172.16.1.32,172.16.1.33

auth_cluster_required = cephx             # 集群认证

auth_service_required = cephx             # 服务认证

auth_client_required = cephx               # 客户端认证

osd_pool_default_size = 3                 # 最小副本数,默认是3

osd_pool_default_min_size = 1             # PG处于degraded(降级)状态不影响其IO能力,min_size是一个PG能接受IO的最小副本数,默认是2

# 最小副本数为1,也就是只能坏2个副本(osd)

public_network = 172.16.1.0/24             # 公共网络(monitorIP段),默认值 ""

# monitor与osd,client与monitor,client与osd通信的网络,最好配置为带宽较高的万兆网络。

cluster_network = 172.16.1.0/24           # 集群网络,默认值 ""

# OSD之间通信的网络,一般配置为带宽较高的万兆网络。

max_open_files = 131072                   # 默认0,如果设置了该选项,Ceph会设置系统的max open fds

#mon_pg_warn_max_per_osd = 3000           # 每个osd上pg数量警告值,这个可以根据具体规划来设定

mon_osd_full_ratio = .90                   # 存储使用率达到90%将不再提供数据存储

mon_osd_nearfull_ratio = .80               # 存储使用率达到80%集群将会warn状态

osd_deep_scrub_randomize_ratio = 0.01     # 随机深度清洗概率,值越大,随机深度清洗概率越高,太高会影响业务

rbd_default_features = 1                   # 解决rbd image挂载,OS kernel不支持块设备镜像一些特性的问题

##############################################################

[mon]

#mon_data = /var/lib/ceph/mon/ceph-\$id

mon_clock_drift_allowed = 2               # 默认值0.05s,monitor间的clock drift(时钟偏移)

mon_clock_drift_warn_backoff = 30         # 默认值5,时钟偏移警告的退避指数

mon_osd_min_down_reporters = 13           # 默认值1,向monitor报告OSD down的最小次数

mon_osd_down_out_interval = 600           # 默认值300,标记一个OSD状态为down和out之前ceph等待的秒数

#mon_allow_pool_delete = false             # false,不允许Ceph存储池被删除,默认值false

mon_allow_pool_delete = true               # true,允许Ceph存储池被删除

##############################################################

[osd]

#osd_data = /var/lib/ceph/osd/ceph-\$id

#osd_mkfs_type = xfs                       # 格式化文件系统类型,默认是xfs

osd_max_write_size = 512                   # 默认值90,OSD一次可写入的最大值(MB)

osd_client_message_size_cap = 2147483648   # 默认值100,客户端允许在内存中的最大数据(bytes)

osd_deep_scrub_stride = 131072             # 默认值524288,在Deep Scrub(数据清洗)时候允许读取的字节数(bytes)

osd_op_threads = 16                       # 默认值2,并发文件系统操作数

osd_disk_threads = 4                       # 默认值1,OSD密集型操作例如恢复和Scrubbing时的线程

osd_map_cache_size = 1024                 # 默认值500,保留OSD Map的缓存(MB)

osd_map_cache_bl_size = 128               # 默认值50,OSD进程在内存中的OSD Map缓存(MB)

#osd_mount_options_xfs = "rw,noexec,nodev,noatime,nodiratime,nobarrier"

# 默认值rw,noatime,inode64,Ceph OSD xfs Mount选项

osd_recovery_op_priority = 2               # 默认值10,恢复操作优先级,取值1-63,值越高占用资源越高,优先级也越高

osd_recovery_max_active = 10               # 默认值15,同一时间内活跃的恢复请求数,即每个OSD上同时进行的所有PG的恢复操作的最大数量

osd_max_backfills = 4                     # 默认值10,一个OSD上允许最多有多少个pg同时做backfills,太大会影响业务

osd_min_pg_log_entries = 30000             # 默认值3000,PGLog保留的最小PGLog数

osd_max_pg_log_entries = 100000           # 默认值10000,PGLog保留的最大PGLog数

osd_mon_heartbeat_interval = 40           # 默认值30s,OSD ping一个monitor的时间间隔

ms_dispatch_throttle_bytes = 1048576000   # 默认值104857600,等待派遣的最大消息数(bytes)

objecter_inflight_ops = 819200

# 默认值1024,客户端流控,允许的最大未发送io请求数,超过阀值会堵塞应用io,为0表示不受限

osd_op_log_threshold = 50                 # 默认值5,一次显示多少操作的log

osd_crush_chooseleaf_type = 0             # 默认值为1,CRUSH规则用到chooseleaf时的bucket的类型,0 表示让数据尽量散列

osd_recovery_max_single_start = 1

# OSD在某个时刻会为一个PG启动恢复操作数。

# 和osd_recovery_max_active一起使用,假设我们配置osd_recovery_max_single_start为1,osd_recovery_max_active为10,

# 那么,这意味着OSD在某个时刻会为一个PG启动一个恢复操作,而且最多可以有10个恢复操作同时处于活动状态。

osd_recovery_max_chunk = 1048576           # 默认为8388608, 设置恢复数据块的大小,以防网络阻塞

osd_recovery_threads = 10                 # 恢复数据所需的线程数

osd_recovery_sleep = 0

# 默认为0,recovery的时间间隔,会影响recovery时长,如果recovery导致业务不正常,可以调大该值,增加时间间隔

# 通过sleep的控制可以大大的降低迁移磁盘的占用,对于本身磁盘性能不太好的硬件环境下,可以用这个参数进行一下控制,能够缓解磁盘压力过大引起的osd崩溃的情况

# 参考值: sleep=0;sleep=0.1;sleep=0.2;sleep=0.5

osd_crush_update_on_start = true          # 默认true。false时,新加的osd会up/in,但并不会更新crushmap,prepare+active期间不会导致数据迁移

osd_op_thread_suicide_timeout = 600       # 防止osd线程操作超时导致自杀,默认150秒,这在集群比较卡的时候很有用

osd_op_thread_timeout = 300               # osd线程操作超时时间,默认15秒

osd_recovery_thread_timeout = 300         # osd恢复线程超时时间,默认30秒

osd_recovery_thread_suicide_timeout = 600 # 防止osd恢复线程超时导致自杀,默认300秒,在集群比较卡的时候也很有用

osd_memory_target = 2147483648             # osd最大使用内存量,单位为字节,配置为2GB(计算节点大内存机器才可以配置为4GB以上以提升性能)

osd_scrub_begin_hour = 0                   # 开始scrub的时间(含deep-scrub),为每天0点

osd_scrub_end_hour = 8                     # 结束scrub的时间(含deep-scrub),为每天8点,这样将deep-scrub操作尽量移到夜间相对client io低峰的时段,避免影响正常client io

osd_max_markdown_count = 10               # 当osd执行缓慢而和集群失去心跳响应时,可能会被集群标记为down(假down),默认为5次,超过此次数osd会自杀,必要时候可设置osd nodown来避免这种行为

##############################################################

[client]

rbd_cache_enabled = true                   # 默认值 true,RBD缓存

rbd_cache_size = 335544320                 # 默认值33554432,RBD能使用的最大缓存大小(bytes)

rbd_cache_max_dirty = 235544320

# 默认值25165824,缓存为write-back时允许的最大dirty(脏)字节数(bytes),不能超过 rbd_cache_size,如果为0,使用write-through

rbd_cache_target_dirty = 134217728         # 默认值16777216,开始执行回写过程的脏数据大小,不能超过rbd_cache_max_dirty

rbd_cache_max_dirty_age = 30

# 默认值1,在被刷新到存储盘前dirty数据存在缓存的时间(seconds),避免可能的脏数据因为迟迟未达到开始回写的要求而长时间存在

rbd_cache_writethrough_until_flush = false

# 默认值true,该选项是为了兼容linux-2.6.32之前的virtio驱动,避免因为不发送flush请求,数据不回写。

# 设置该参数后,librbd会以writethrough的方式执行io,直到收到第一个flush请求,才切换为writeback方式。

rbd_cache_max_dirty_object = 2

# 默认值0,最大的Object对象数,默认为0,表示通过rbd cache size计算得到,librbd默认以4MB为单位对磁盘Image进行逻辑切分。

# 每个chunk对象抽象为一个Object;librbd中以Object为单位来管理缓存,增大该值可以提升性能。

#rgw_dynamic_resharding = false

# 关闭rgw自动动态index分片,防止丢index的情况,但需要定期手动进行reshard操作,默认值true

rgw_cache_enabled = true                   # 开启RGW cache,默认为true

rgw_cache_expiry_interval = 900           # 缓存数据的过期时间(seconds),默认900

rgw_thread_pool_size = 2000               # rgw进程的线程数目,默认512

# 查看方法: ps -ef |grep radosgw cat /proc/<radosgw进程id>/status |grep Thread

rgw_cache_lru_size = 20000

# RGW 缓存entries的最大数量,当缓存满后会根据LRU算法做缓存entries替换,entries size默认为10000

#rgw_num_rados_handles = 128

# Ceph Nautilus 14.2.3 版本之后,此配置选项已经从 Ceph 配置中删除

# Ceph 社区不建议调大此值,认为会造成内存泄漏

EOF



标签:配置文件,5.9,ceph,pg,max,默认值,osd,mon
From: https://blog.51cto.com/u_11409186/5743187

相关文章