关于linux:Ceph-架构及性能优化

14次阅读

共计 5867 个字符,预计需要花费 15 分钟才能阅读完成。

对分布式存储系统的优化离不开以下几点:

  • 1. 硬件层面
  • 硬件布局
  • SSD 抉择
  • BIOS 设置
  • 2. 软件层面
  • Linux OS
  • Ceph Configurations
  • PG Number 调整
  • CRUSH Map
  • 其余因素

硬件层面

1、CPU
  • ceph-osd 过程在运行过程中会耗费 CPU 资源,所以个别会为每一个 ceph-osd 过程绑定一个 CPU 核上。
  • ceph-mon 过程并不非常耗费 CPU 资源,所以不用为 ceph-mon 过程预留过多的 CPU 资源。
  • ceph-msd 也是十分耗费 CPU 资源的,所以须要提供更多的 CPU 资源。
2、内存

ceph-mon 和 ceph-mds 须要 2G 内存,每个 ceph-osd 过程须要 1G 内存。

3、网络

万兆网络当初基本上是跑 Ceph 必备的,网络布局上,也尽量思考拆散 cilent 和 cluster 网络。网络接口上能够应用 bond 来提供高可用或负载平衡。

4、SSD

SSD 在 ceph 中的应用能够有几种架构

  • a、ssd 作为 Journal
  • b、ssd 作为高速 ssd pool(须要更改 crushmap)
  • c、ssd 做为 tier pool
5、BIOS
  • a、开启 VT 和 HT,VH 是虚拟化云平台必备的,HT 是开启超线程单个处理器都能应用线程级并行计算。
  • b、敞开节能设置,可有肯定的性能晋升。
  • c、NUMA 思路就是将内存和 CPU 宰割为多个区域,每个区域叫做 NODE, 而后将 NODE 高速互联。node 内 cpu 与内存访问速度快于拜访其余 node 的内存,NUMA 可能会在某些状况下影响 ceph-osd。解决的计划,一种是通过 BIOS 敞开 NUMA,另外一种就是通过 cgroup 将 ceph-osd 过程与某一个 CPU Core 以及同一 NODE 下的内存进行绑定。然而第二种看起来更麻烦,所以个别部署的时候能够在零碎层面敞开 NUMA。CentOS 零碎下,通过批改 /etc/grub.conf 文件,增加 numa=off 来敞开 NUMA。

软件层面

1、Kernel pid max

echo 4194303 > /proc/sys/kernel/pid_max

2、设置 MTU,交换机端须要反对该性能,零碎网卡设置才有成果

 配置文件追加 MTU=9000

3、read_ahead, 通过数据预读并且记录到随机拜访内存形式进步磁盘读操作

echo "8192" > /sys/block/sda/queue/read_ahead_kb

4、swappiness, 次要控制系统对 swap 的应用

echo "vm.swappiness = 0"/>etc/sysctl.conf ;  sysctl –p

5、I/O Scheduler,SSD 要用 noop,SATA/SAS 应用 deadline

echo "deadline" >/sys/block/sd[x]/queue/scheduler
echo "noop" >/sys/block/sd[x]/queue/scheduler

6、ceph.conf 配置选项

[global]# 全局设置
fsid = 88caa60a-e6d1-4590-a2b5-bd4e703e46d9    #集群标识 ID 
mon host = 10.0.1.21,10.0.1.22,10.0.1.23       #monitor IP 地址
auth cluster required = cephx                  #集群认证
auth service required = cephx                  #服务认证
auth client required = cephx                   #客户端认证
osd pool default size = 2                      #最小正本数
osd pool default min size = 1        #PG 处于 degraded 状态不影响其 IO 能力,min_size 是一个 PG 能承受 IO 的最小正本数
osd pool default pg num = 128        #pool 的 pg 数量
osd pool default pgp num = 128       #pool 的 pgp 数量
public network = 10.0.1.0/24         #公共网络 (monitorIP 段) 
cluster network = 10.0.1.0/24        #集群网络
max open files = 131072   #默认 0# 如果设置了该选项,Ceph 会设置零碎的 max open fds
mon initial members = controller1, controller2, compute01 
#初始 monitor (由创立 monitor 命令而定)
##############################################################
[mon]
mon data = /var/lib/ceph/mon/ceph-$id
mon clock drift allowed = 1       #默认值 0.05,monitor 间的 clock drift
mon osd min down reporters = 13   #默认值 1,向 monitor 报告 down 的最小 OSD 数
mon osd down out interval = 600   #默认值 300,标记一个 OSD 状态为 down 和 out 之前 ceph 期待的秒数
##############################################################
[osd]
osd data = /var/lib/ceph/osd/ceph-$id
osd journal size = 20000 #默认 5120,osd journal 大小
osd journal = /var/lib/ceph/osd/$cluster-$id/journal #osd journal 地位
osd mkfs type = xfs                     #格式化零碎类型
osd mkfs options xfs = -f -i size=2048  #强制格式化
filestore xattr use omap = true         #默认 false,为 XATTRS 应用 object map,EXT4 文件系统时应用,XFS 或者 btrfs 也能够应用
filestore min sync interval = 10   #默认 0.1,从日志到数据盘最小同步距离 (seconds)
filestore max sync interval = 15   #默认 5,从日志到数据盘最大同步距离 (seconds)
filestore queue max ops = 25000    #默认 500,数据盘最大承受的操作数
filestore queue max bytes = 1048576000      #默认 100,数据盘一次操作最大字节数 (bytes
filestore queue committing max ops = 50000  #默认 500,数据盘可能 commit 的操作数
filestore queue committing max bytes = 10485760000 #默认 100,数据盘可能 commit 的最大字节数 (bytes)
filestore split multiple = 8 #默认值 2,# 前一个子目录决裂成子目录中的文件的最大数量
filestore merge threshold = 40 #默认值 10,# 前一个子类目录中的文件合并到父类的最小数量
filestore fd cache size = 1024 #默认值 128,# 对象文件句柄缓存大小
journal max write bytes = 1073714824 #默认值 1048560,journal 一次性写入的最大字节数 (bytes)
journal max write entries = 10000  #默认值 100,journal 一次性写入的最大记录数
journal queue max ops = 50000      #默认值 50,journal 一次性最大在队列中的操作数
journal queue max bytes = 10485760000 #默认值 33554432,journal 一次性最大在队列中的字节数 (bytes)
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 max backfills = 4           #默认值 10,一个 OSD 容许的最大 backfills 数
osd min pg log entries = 30000  #默认值 3000,建筑 PGLog 是保留的最大 PGLog 数
osd max pg log entries = 100000  #默认值 10000,建筑 PGLog 是保留的最大 PGLog 数
osd mon heartbeat interval = 40  #默认值 30,OSD ping 一个 monitor 的工夫距离(默认 30s)ms dispatch throttle bytes = 1048576000 #默认值 104857600,期待差遣的最大音讯数
objecter inflight ops = 819200    #默认值 1024,客户端流控,容许的最大未发送 io 申请数,超过阀值会梗塞利用 io,为 0 示意不受限
osd op log threshold = 50       #默认值 5,# 一次显示多少操作的 log
osd crush chooseleaf type = 0   #默认值为 1,CRUSH 规定用到 chooseleaf 时的 bucket 的类型
##############################################################
[client]
rbd cache = true            #默认值 true,RBD 缓存
rbd cache size = 335544320  #默认值 33554432,RBD 缓存大小 (bytes)
rbd cache max dirty = 134217728 #默认值 25165824,缓存为 write-back 时容许的最大 dirty 字节数 (bytes),如果为 0,应用 write-through
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 为单位来治理缓存,增大该值能够晋升性能。rbd cache target dirty = 235544320 
#默认值 16777216,开始执行回写过程的脏数据大小,不能超过 rbd_cache_max_dirty

7、PG Number

PG 和 PGP 数量肯定要依据 OSD 的数量进行调整,计算公式如下,然而最初算出的后果肯定要靠近或者等于一个 2 的指数。

Total PGs = (Total_number_of_OSD * 100) / max_replication_count

例:有 100 个 osd,2 正本,5 个 pool

Total PGs =100*100/2=5000

每个 pool 的 PG=5000/5=1000,那么创立 pool 的时候就指定 pg 为 1024

ceph osd pool create pool_name 1024

8、批改 crush map

Crush map 能够设置不同的 osd 对应到不同的 pool,也能够批改每个 osd 的 weight

9、其余因素

ceph osd perf

通过 osd perf 能够提供磁盘 latency 的情况,如果延时过长,应该剔除 osd

举荐给大家:Ceph 分布式存储日常运维治理手册

作者:来自 51CTO 博客 Jacken_yang
出处:https://blog.51cto.com/linuxn…

正文完
 0