均衡PG-小集群ceph的优化办法

均衡PG-小集群ceph的优化办法,第1张

开箱即用分布式存储的情况简直不要太理想。比如ceph为大规模集群设计,一些参数的配置等也是考虑到大规模设备的使用,部署在小的集群性能效果就不甚理想。

使用小集群,对于ceph性能非常重要的一个环节是 均衡 。理由有二:

- 分布式系统在一些场景下存在短板效应(weakest-link-in-the-chain phenomena),系统的性能往往会受到短板的限制。

- 单一组件的任务过载也会造成性能短板,从而造成全局性能限制

ceph的均衡可以理解为PG的均衡(PG,OSD上实际的资源消耗者,其将逻辑池划分。写向池里的数据首先映射到的是按照2的幂次方划分的众多PG中的一个,然后PG会根据crush算法对应到OSD上)。平衡PG的规则可以划分为三种:

- 每个OSD上相同数目的PG

- 存储设备按照相同的利用率平衡,但面对异构的设备则并不理想

- 每个OSD上拥有相同数目的primary pg(ceph的复制方式采用主从复制,相对于primary的是secondary,读写的都是由primary为处理),但目前尚未实现

目前ceph处理平衡的手段有4种,大多数都是基于第一种平衡规则(每个OSD上相同数目的PG):

- Balancer 。N版本新增加的功能,可以优化全局PG分布的情况,达到OSD之上PG相差1左右的效果。使用“ceph mgr module enable balancer”开启组件,然后使用“ceph balancer on”开启功能,最后设置工作模式“ceph balancer <mode>”,crush-compat兼容老的客户端,unmap针对新的客户端。

除此之外balancer还可评估目前的分布状态,特定池的分布状态、创建一个分布计划、评估该计划、执行该计划。

- OSD Crush reweight。 该命令接口提供调整CRUSH规则默认的权重能力。可以对单独的OSD重新设置权重,也可以对所有OSD设置。但是不适合给大规模集群使用,将要被balancer代替。reweight也可以根据设备利用率来调整。

- PG autoscaler 。一个自动为每个池设定PG数的工具,可以根据池中数据情况进行改变。pg数目在之前版本不可以减少,N版本之后PG数目可以增加和减少。autoscaler提供自动扩展(on)和告警(warn)模式。

autoscaler按照默认pg和osd的比例调整,但是该比例也可以修改“ceph config set global mon_target_pg_per_osd 100”,当然PG的增多对于OSD和MON机器的处理能力(内存、网络、CPU)有更高的要求。

除此之外,用户可以设置池的限制,来引导或限制pg的调整。比如设置池的目标容量或占用存储比例、最小的pg数目来为autoscaler提供参考,这样可以避免pg调整造成数据迁移带来的开销。

autoscaler的开启方式:ceph mgr module enable pg_autoscaler。 在需要高性能的情况下要小心使用。

- 修改pool的PG的数量 。增加或者减少(在N版本中支持)PG的数量,同时修改pg和pgp的量。具体使用“ceph osd pool set xxx pg_num yyy”命令。提高PG数量可以分散的更加均衡。一些测试结果表明pg数目越大标准差约小,对于带宽有相应的提升。

PG的均衡往往伴随着数据的迁移和响应对性能的影响,需要谨慎评估再实施。

以下途径确认调整之后均衡的效果:1、使用ceph -s查看集群整体情况,以及pg的大致状态;2、ceph osd df可以查看目前平衡情况的标准差;3、自实现统计primary pg的脚本,简单的shell脚本即可(读写负载较重的场景,primary pg分散的不够开,造成某些节点负载过大。)。

总之,为了达到较好的效果一定要让集群平衡平衡再平衡。 另外,除了PG之外其他一些限制也会对性能产生影响,比如objecter组件由于限流的设计对ops和双向传输的数据量存在限制(文件存储、对象存储都已经体验过) 。性能限制还要根据IO路径具体分析。

主要参考:>

数据库层面优化

数据库本身来优化,优化SQL语句,建立适当的索引尽量让查询条件命中索引,避免全表扫描

精简查询语句,使用select 字段,避免使用select

数据库使用主备机或者集群模式,进行读写分离

对数据进行分库分表

系统应用层面优化

系统使用连接池连接数据库,避免频繁的建立连接,释放连接的IO开销

使用缓存,根据业务场景对数据进行划分,尽量将基本不会发生改变的数据缓存下来,查询时优先查询缓存,减少对数据库的访问

对服务进行降级功能设计,在并发大到数据库实在无法处理的情况,对造成数据拥堵的服务进行降级

支持数据的读写分离读请求和写请求分别访问不同的数据库

支持分库分表,或引入数据库中间件,如Mycat

硬件方面优化

尽量使用SSD磁盘类型的数据库服务器,相比传统机械硬盘类型的服务器,具有更高的IO吞吐能力

如果可能,尽量保证系统与数据库,数据库各个机器在同一区域内避免如系统服务在北京,数据库服务器在上海的情况,减少因为网络环境,网络带宽等因素带来的影响

您好,您的问题很有意思,PostgreSQL添加limit变慢的原因可能有很多,但是最常见的原因是因为您使用了不正确的索引。如果您的查询中使用了索引,但是查询的结果集仍然很大,那么PostgreSQL就会在查询完成后再执行limit *** 作,这样就会导致查询变慢。另外,如果您的查询中没有使用索引,那么PostgreSQL就会扫描整个表,然后再执行limit *** 作,这也会导致查询变慢。因此,为了解决PostgreSQL添加limit变慢的问题,您需要检查您的查询是否使用了正确的索引,如果没有,您可以尝试创建索引来提高查询性能。

一、 PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的,相比之下,PG数据库这方面要好一些。

二、任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而 MySQL 明显出现一个波峰后下滑(55版本之后,在企业级版本中有个插件可以改善很多,不过需要付费)。

三、PG 多年来在 GIS 领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型,相比之下mysql就差很多,instagram就是因为PG的空间数据库扩展POSTGIS远远强于MYSQL的my spatial而采用PGSQL的。

四、PG 的“无锁定”特性非常突出,甚至包括 vacuum 这样的整理数据空间的 *** 作,这个和PGSQL的MVCC实现有关系。

五、PG 的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。

六、PG有极其强悍的 SQL 编程能力(9x 图灵完备,支持递归!),有非常丰富的统计函数和统计语法支持,比如分析函数(ORACLE的叫法,PG里叫window函数),还可以用多种语言来写存储过程,对于R的支持也很好。这一点上MYSQL就差的很远,很多分析功能都不支持,腾讯内部数据存储主要是MYSQL,但是数据分析主要是HADOOP+PGSQL。

七、PG 的有多种集群架构可以选择,plproxy 可以支持语句级的镜像或分片,slony 可以进行字段级的同步设置,standby 可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便, *** 作非常简单。

八、一般关系型数据库的字符串有限定长度8k左右,无限长 TEXT 类型的功能受限,只能作为外部大数据访问。而 PG 的 TEXT 类型可以直接访问,SQL语法内置正则表达式,可以索引,还可以全文检索,或使用xml xpath。用PG的话,文档数据库都可以省了。

九,对于WEB应用来说,复制的特性很重要,mysql到现在也是异步复制,pgsql可以做到同步,异步,半同步复制。还有mysql的同步是基于binlog复制,类似oracle golden gate,是基于stream的复制,做到同步很困难,这种方式更加适合异地复制,pgsql的复制基于wal,可以做到同步复制。同时,pgsql还提供stream复制。

十,pgsql对于numa架构的支持比mysql强一些,比MYSQL对于读的性能更好一些,pgsql提交可以完全异步,而mysql的内存表不够实用(因为表锁的原因)

最后说一下我感觉 PG 不如 MySQL 的地方。

第一,MySQL有一些实用的运维支持,如 slow-querylog ,这个pg肯定可以定制出来,但是如果可以配置使用就更好了。

第二是mysql的innodb引擎,可以充分优化利用系统所有内存,超大内存下PG对内存使用的不那么充分,

第三点,MySQL的复制可以用多级从库,但是在92之前,PGSQL不能用从库带从库。

第四点,从测试结果上看,mysql 55的性能提升很大,单机性能强于pgsql,56应该会强更多

第五点,对于web应用来说,mysql 56 的内置MC API功能很好用,PGSQL差一些。

另外一些:

pgsql和mysql都是背后有商业公司,而且都不是一个公司。大部分开发者,都是拿工资的。

说mysql的执行速度比pgsql快很多是不对的,速度接近,而且很多时候取决于你的配置。

对于存储过程,函数,视图之类的功能,现在两个数据库都可以支持了。

另外多线程架构和多进程架构之间没有绝对的好坏,oracle在unix上是多进程架构,在windows上是多线程架构。

很多pg应用也是24/7的应用,比如skype 最近几个版本VACUUM基本不影响PGSQL 运行,80之后的PGSQL不需要cygwin就可以在windows上运行。

至于说对于事务的支持,mysql和pgsql都没有问题。

以上就是关于均衡PG-小集群ceph的优化办法全部的内容,包括:均衡PG-小集群ceph的优化办法、频繁查询数据库,怎么保证整个系统的性能、pgsql添加limit变慢等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10167913.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存