分布式存储系统的优化离不开以下几点:1.硬件规划SSD选择BIOS设置2.软件层面LinuxOSCephConfigurationsPG数调整CRUSHMap其他因素硬件层面1.CPUceph-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、网络10G网络现在基本上是运行Ceph所必需的。在网络规划上,尽量考虑将cilent和cluster网络分开。绑定可用于网络接口以提供高可用性或负载平衡。4.SSDSSD在cepha、ssd作为Journalb、ssd作为高速ssdpool(需要更改crushmap)c、ssd作为tierpool5、BIOSa、openVT和HT、VH是虚拟化云的几个架构中可以使用platformHT本质上就是开启超线程,单个处理器可以使用线程级的并行计算。b.关闭节能设置,可以在一定程度上提高性能。C。NUMA的思想是把内存和CPU分成多个区域,每个区域叫做NODE,然后把NODE高速连接起来。节点内的cpu和内存访问速度比访问其他节点的内存要快,NUMA在某些情况下可能会影响ceph-osd。一种方案是通过BIOS关闭NUMA,另一种是通过cgroup将ceph-osd进程绑定到某个CPUCore和同一NODE下的内存。但是第二种好像比较麻烦,一般部署时可以在系统层面关闭NUMA。CentOS系统下,通过修改/etc/grub.conf文件,添加numa=off来禁用NUMA。软件级别1.内核pidmaxecho4194303>/proc/sys/kernel/pid_max2.设置MTU。交换机端需要支持该功能,系统网卡设置才会生效。在配置文件中加入MTU=90003和read_ahead,将数据预读和记录传递给随机访问内存提高磁盘读操作echo"8192">/sys/block/sda/queue/read_ahead_kb4,swappiness,主要控制系统使用交换echo"vm.swappiness=0"/>etc/sysctl.conf;sysctl–p5,I/OScheduler,SSD应该使用noop,SATA/SAS应该使用deadlineecho"deadline">/sys/block/sd[x]/queue/schedulerecho"noop">/sys/block/sd[x]/queue/scheduler6,ceph.conf配置选项[global]#全局设置fsid=88caa60a-e6d1-4590-a2b5-bd4e703e46d9#ClusterIDmonhost=10.0.1.21,10.0.1.22,10.0.1.23ster#monitorluip地址authrequiredcred=Cephx#clusterauthenticationAuthServiceRequired=Cephx#ServicecertificationAuthClientRequired=Cephx#CustomerauthenticationOSDPoolDefaultSIZE=2#最小副本数osdpooldefaultminsize=1#pg不是atgrad。min_size是一个PG可以接受IO的最小副本数osdpooldefaultpgnum=128#poolpgnumberosdpooldefaultpgpnum=128#poolpgppublicnetwork的个数=10.0.1.0/24#publicnetwork(monitorIP段)clusternetwork=10.0.1.0/24#clusternetworkmaxopenfiles=131072#Default0#如果设置了这个选项,Ceph会设置maxofthesystemopenfdsmoninitialmembers=controller1,controller2,compute01#初始监视器(根据命令创建监视器)#################################################################[mon]mondata=/var/lib/ceph/mon/ceph-$idmonclockdriftallowed=1#defaultvalue0.05,监视器之间的时钟漂移monosdmindownreporters=13#defaultvalue1,向监视器报告的最小OSD数量monosddownoutinterval=600#defaultvalue300,markoneOSD状态down和out之前ceph等待的秒数################################################################[osd]osd数据=/var/lib/ceph/osd/ceph-$idosdjournalsize=20000#Default5120,osdjournalsizeosdjournal=/var/lib/ceph/osd/$cluster-$id/journal#osdjournallocationosdmkfstype=xfs#格式化系统typeosdmkfsoptionsxfs=-f-isize=2048#Forceformatfilestorexattruseomap=true#默认false,对XATTRS、EXT4文件系统使用objectmap,XFS或btrfs也可以使用filestoreminsyncinterval=10#default0.1,从日志到数据盘的最小同步间隔(秒)filestoremaxsyncinterval=15#default5,从日志到数据盘的最大同步间隔(秒)filestorequeuemaxops=25000#default500,数据盘filestorequeuemaxbytes=1048576000#Default100,数据盘操作的最大字节数(bytesfilestorequeuecommittingmaxops=50000#default500,操作数的个数datadiskcancommitfilestorequeuecommittingmaxbytes=10485760000#default100,数据盘可以commit的最大字节数(bytes)filestoresplitmultiple=8#defaultvalue2,#上一个子目录split的最大文件数intosubdirectoriesfilestoremergethreshold=40#defaultValue10,#上一个子类目录合并到父类filestore的最小文件数fdcachesize=1024#Defaultvalue128,#Objectfilehandlecachesizejournalmaxwritebytes=1073714824#默认值1048560,journalone-time最大写入字节数(bytes)journalmaxwriteentries=10000#默认值为100,journal一次最大写入记录数journalqueuemaxops=50000#默认值50,journal队列中的最大操作次数Numberjournalqueuemaxbytes=10485760000#默认值33554432,journal一次性队列中的最大字节数(bytes)osdmaxwritesize=512#默认值90,OSD一次可以写入的最大值(MB)osdclientmessagesizecap=2147483648#默认值100,客户端允许在内存中的最大数据(字节)osddeepscrubstride=131072#默认值524288,DeepScrub时允许读取的字节数(bytes)osdopthreads=16#默认值2,并发文件系统操作数osddiskthreads=4#默认值1,#Threads对于恢复和Scrubbing等OSD密集型操作osdmapcachesize=1024#默认值500,保留OSDMapcache(MB)osdmapcacheblsize=128#默认值50,OSDMap在OSD进程的内存中缓存(MB))osdmountoptionsxfs="rw,noexec,nodev,noatime,nodiratime,nobarrier"#默认值rw,noatime,inode64,CephOSDxfsMountoptionosdrecoveryoppriority=2#默认值10,恢复操作优先级Level,值1-63,值越大,资源占用越高osdrecoverymaxactive=10#默认值15,同时激活的回收请求数osdmaxbackfills=4#默认值10,允许的最大backfillsanOSDNumberosdminpglogentries=30000#默认值为3000,构造PGLog是保留的最大PGLog数。osdmaxpglogentries=100000#默认值为10000,构建PGLog是最大保留的PGLog数。30、OSDping一个监听间隔(默认30s)msdispatchthrottlebytes=1048576000#默认值104857600,等待调度的最大消息数objecterinflightops=819200#默认值1024,客户端流量控制,允许最大未发送io请求数超过阈值,应用io将被阻塞。如果是0,表示无限osdoplogthreshold=50#默认值5,#一次显示多少个操作logosdcrushchooseleaftype=0#默认值为1,CRUSH规则使用chooseleaf时的桶类型################################################################[client]rbdcache=true#defaultvaluetrue,RBDcacherbdcachesize=335544320#默认值33554432,RBD缓存大小(字节)rbdcachemaxdirty=134217728#默认值25165824,缓存回写时允许的最大脏字节数(字节),如果为0,则使用write-throughrbdcachemaxdirtyage=30#默认值1,脏数据在刷新到存储盘之前在缓存中存在的时间(秒)rbdcachewritethroughuntilflush=false#默认值true,这个选项是为了兼容virtiobeforelinux-2.6.32Driver,避免没有发送flushrequest导致数据没有回写.rbdcachemaxdirtyobject=2#默认值为0,Object对象的最大个数,默认为0,表示以rbd缓存大小计算,librbd默认以4MB为单位对磁盘Image进行逻辑分割。#每个chunk对象抽象成一个Object;librbd以Object为单位管理缓存,增加这个值可以提高性能。rbdcachetargetdirty=235544320#默认值为16777216,回写过程开始时脏数据的大小不能超过rbd_cache_max_dirty7。PGNumberPG和PGP的数量必须根据OSD的数量进行调整。计算公式如下,但最终结果必须接近或等于2的指数。TotalPGs=(Total_number_of_OSD*100)/max_replication_count例子:有100个osd,2个副本,5个poolTotalPGs=100*100/2=5000PG=5000/5=1000每个pool,那么在创建pool的时候指定pg如1024cephosdpoolcreatepool_name10248,修改crushmapcrushmap可以设置不同的osd对应不同的pool,也可以修改每个osd9的权重,其他因素cephosdperf可以通过osdperf提供磁盘延迟,如果延迟太长,osd应该被删除。推荐给大家:Ceph分布式存储日常运维管理手册作者:来自51CTO博客Jacken_yang来源:https://blog.51cto.com/linuxn...
